X-Git-Url: http://git.linex4red.de/pub/USBaspLoader.git/blobdiff_plain/fa0b51823454caae26a476ec1e156a73377b4546..5b0272d9af73a164da192d796fc33ec736b93f0a:/updater/firmware_gen.c?ds=inline diff --git a/updater/firmware_gen.c b/updater/firmware_gen.c new file mode 100644 index 0000000..4707dd4 --- /dev/null +++ b/updater/firmware_gen.c @@ -0,0 +1,63 @@ + +#include +#include +#include + +#include + +#include +#include +#include + + +#define myfirmware_rawfilename "./usbasploader.raw" +#define myout stdout + +int main(int argc, char** argv) { + int fd; + uint16_t b; + uint64_t c; + struct stat fwstat; + + fprintf(myout, "\n"); + fprintf(myout, "#ifndef FIRMWARE_H_5f27a7e9840141b1aa57eef07c1d939f\n"); + fprintf(myout, "#define FIRMWARE_H_5f27a7e9840141b1aa57eef07c1d939f 1\n"); + fprintf(myout, "\n"); + fprintf(myout, "#include \n"); + fprintf(myout, "#include \n"); + fprintf(myout, "#include \"../firmware/spminterface.h\"\n"); + fprintf(myout, "\n"); + fprintf(myout, "//firmware generator generated\n"); + + fd=open(myfirmware_rawfilename, O_RDONLY); + if (fd > 2) { + fstat(fd, &fwstat); + fprintf(myout, "#define SIZEOF_new_firmware %llu\n",(long long unsigned int)fwstat.st_size); + fprintf(myout, "const uint16_t firmware[SIZEOF_new_firmware>>1] PROGMEM = {"); + fprintf(myout, "\n"); + + c=0; + while (read(fd, &b, 2) == 2) { + c+=2; + fprintf(myout,"0x%04x, ", (unsigned int)b); + if ((c % 20) == 0) fprintf(myout,"\n"); + } + if ((c % 20) != 0) fprintf(myout,"\n"); + fprintf(myout, "};\n"); + fprintf(myout, "const uint8_t *new_firmware = (void*)&firmware;\n"); + fprintf(myout, "\n"); + + close(fd); + } else { + fprintf(stderr, "error opening %s\n", myfirmware_rawfilename); + + fprintf(myout, "#define SIZEOF_new_firmware 0\n"); + fprintf(myout, "const uint16_t firmware[SIZEOF_new_firmware>>1] PROGMEM = {};\n"); + fprintf(myout, "const uint8_t *new_firmware = (void*)&firmware;\n"); + fprintf(myout, "\n"); + } + + fprintf(myout, "#endif\n"); + fprintf(myout, "\n"); + return 0; +}