comparison loadtools/chainload.c @ 42:5da0cbee2b89

fc-xram tool written, compiles, now needs to be debugged
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Mon, 17 Jun 2013 07:18:04 +0000
parents
children 5ca0ad4003a0
comparison
equal deleted inserted replaced
41:1c50add5e202 42:5da0cbee2b89
1 /*
2 * This module implements the chain-loading of XRAM images via loadagent.
3 */
4
5 #include <sys/types.h>
6 #include <stdint.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <strings.h>
11 #include "srecreader.h"
12
13 struct srecreader xramimage;
14
15 static void
16 make_ml_arg(rec, buf)
17 u_char *rec;
18 char *buf;
19 {
20 register int i, len;
21 register char *s;
22
23 len = rec[0] + 1;
24 s = buf;
25 for (i = 0; i < len; i++) {
26 sprintf(s, "%02X", rec[i]);
27 s += 2;
28 }
29 *s = '\0';
30 }
31
32 perform_chain_load()
33 {
34 int resp;
35 unsigned long rec_count;
36 char *argv[3], srecarg[516];
37
38 if (open_srec_file(&xramimage) < 0)
39 exit(1);
40 argv[0] = "ML";
41 argv[1] = srecarg;
42 argv[2] = 0;
43 for (rec_count = 0; ; ) {
44 if (read_s_record(&xramimage) < 0)
45 exit(1);
46 switch (xramimage.record_type) {
47 case '0':
48 if (xramimage.lineno == 1)
49 continue;
50 fprintf(stderr,
51 "%s: S0 record found in line %d (expected in line 1 only)\n",
52 xramimage.filename, xramimage.lineno);
53 exit(1);
54 case '3':
55 case '7':
56 if (s3s7_get_addr_data(&xramimage) < 0)
57 exit(1);
58 break;
59 default:
60 fprintf(stderr,
61 "%s line %d: S%c record type not supported\n",
62 xramimage.filename, xramimage.lineno,
63 xramimage.record_type);
64 exit(1);
65 }
66 if (xramimage.record_type == '7')
67 break;
68 /* must be S3 */
69 if (xramimage.datalen < 1) {
70 fprintf(stderr,
71 "%s line %d: S3 record has zero data length\n",
72 xramimage.filename, xramimage.lineno);
73 exit(1);
74 }
75 make_ml_arg(xramimage.record, srecarg);
76 tpinterf_make_cmd(argv);
77 if (tpinterf_send_cmd())
78 exit(1);
79 if (tpinterf_pass_output(1))
80 exit(1);
81 putchar('.');
82 fflush(stdout);
83 rec_count++;
84 }
85 /* got S7 */
86 fclose(xramimage.openfile);
87 if (!rec_count) {
88 fprintf(stderr,
89 "%s line %d: S7 without any preceding S3 data records\n",
90 xramimage.filename, xramimage.lineno);
91 exit(1);
92 }
93 sprintf(srecarg, "%lX", (u_long) xramimage.addr);
94 argv[0] = "jump";
95 tpinterf_make_cmd(argv);
96 if (tpinterf_send_cmd())
97 exit(1);
98 printf("Sent \"%s %s\": XRAM image should now be running!\n",
99 argv[0], argv[1]);
100 return(0);
101 }