introduce first updater-functionalities using the do_spm
[pub/USBaspLoader.git] / updater / firmware_gen.c
1
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5
6 #include <stdint.h>
7
8 #include <sys/types.h>
9 #include <sys/stat.h>
10 #include <fcntl.h>
11
12
13 #define myfirmware_rawfilename "./usbasploader.raw"
14 #define myout stdout
15
16 int main(int argc, char** argv) {
17 int fd;
18 uint16_t b;
19 uint64_t c;
20 struct stat fwstat;
21
22 fprintf(myout, "\n");
23 fprintf(myout, "#ifndef FIRMWARE_H_5f27a7e9840141b1aa57eef07c1d939f\n");
24 fprintf(myout, "#define FIRMWARE_H_5f27a7e9840141b1aa57eef07c1d939f 1\n");
25 fprintf(myout, "\n");
26 fprintf(myout, "#include <stdint.h>\n");
27 fprintf(myout, "#include <avr/io.h>\n");
28 fprintf(myout, "#include \"../firmware/spminterface.h\"\n");
29 fprintf(myout, "\n");
30 fprintf(myout, "//firmware generator generated\n");
31
32 fd=open(myfirmware_rawfilename, O_RDONLY);
33 if (fd > 2) {
34 fstat(fd, &fwstat);
35 fprintf(myout, "#define SIZEOF_new_firmware %llu\n",(long long unsigned int)fwstat.st_size);
36 fprintf(myout, "const uint16_t firmware[SIZEOF_new_firmware>>1] PROGMEM = {");
37 fprintf(myout, "\n");
38
39 c=0;
40 while (read(fd, &b, 2) == 2) {
41 c+=2;
42 fprintf(myout,"0x%04x, ", (unsigned int)b);
43 if ((c % 20) == 0) fprintf(myout,"\n");
44 }
45 if ((c % 20) != 0) fprintf(myout,"\n");
46 fprintf(myout, "};\n");
47 fprintf(myout, "const uint8_t *new_firmware = (void*)&firmware;\n");
48 fprintf(myout, "\n");
49
50 close(fd);
51 } else {
52 fprintf(stderr, "error opening %s\n", myfirmware_rawfilename);
53
54 fprintf(myout, "#define SIZEOF_new_firmware 0\n");
55 fprintf(myout, "const uint16_t firmware[SIZEOF_new_firmware>>1] PROGMEM = {};\n");
56 fprintf(myout, "const uint8_t *new_firmware = (void*)&firmware;\n");
57 fprintf(myout, "\n");
58 }
59
60 fprintf(myout, "#endif\n");
61 fprintf(myout, "\n");
62 return 0;
63 }