mu.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "myFile.h"
  2. #include "protocol.h"
  3. #include "datetime.h"
  4. #include "md5.h"
  5. TCHAR* cfgPath = (TCHAR*)__TEXT("./user/cfg.h");
  6. static void print_fw(const char* s, fw_hdr_t* hdr)
  7. {
  8. printf("\n");
  9. printf("__%s__hdr.fw.magic: 0x%08x\n", s, hdr->fw.magic);
  10. printf("__%s__hdr.fw.version: %s\n", s, hdr->fw.version);
  11. printf("__%s__hdr.fw.length: %d\n", s, hdr->fw.length);
  12. printf("__%s__hdr.fw.bldtime: %s\n", s, hdr->fw.bldtime);
  13. printf("__%s__hdr.upg.obj: %d\n", s, hdr->upg.obj);
  14. printf("__%s__hdr.upg.force: %d\n", s, hdr->upg.force);
  15. printf("__%s__hdr.upg.erase: %d\n", s, hdr->upg.erase);
  16. printf("__%s__hdr.upg.flag : %d\n", s, hdr->upg.flag);
  17. printf("__%s__hdr.upg.jumpAddr: 0x%08x\n", s, hdr->upg.jumpAddr);
  18. printf("\n");
  19. }
  20. static void print_md5(const char* s, md5_t* m)
  21. {
  22. U8 i;
  23. printf("__%s", s);
  24. for (i = 0; i < 32; i++) {
  25. printf("%c", m->digit[i]);
  26. }
  27. printf("\n");
  28. }
  29. int main(char argc, char *argv[])
  30. {
  31. int r;
  32. FILE* fp;
  33. data_t dat;
  34. md5_t md5;
  35. char newPath[1000];
  36. fw_hdr_t hdr;
  37. char* path = argv[1];
  38. //char* goal = argv[1];
  39. TCHAR* xPath;
  40. myFile mf;
  41. //TCHAR curPath[500];
  42. //GetCurrentDirectory(500, curPath);
  43. //_tprintf(_T("curPath: %s\n"), curPath);
  44. if(argc<2) {
  45. printf("usage: mu.exe app.bin\n");
  46. return -1;
  47. }
  48. xPath = mf.char_to_tchar(path);
  49. if (!xPath) {
  50. printf("char_to_tchar failed\n");
  51. return -1;
  52. }
  53. strcpy(newPath, path);
  54. char* dot = strrchr(newPath, '.');
  55. if (dot) *(dot + 1) = 0;
  56. strcat(newPath, "upg");
  57. fp = fopen(newPath, "wb");
  58. if (!fp) {
  59. printf("%s create failed\r\n", newPath);
  60. return -1;
  61. }
  62. r = mf.read_file(xPath, &dat);
  63. if (r) {
  64. return -1;
  65. }
  66. hdr.upg.obj = OBJ_APP;
  67. hdr.upg.force = 0;
  68. hdr.upg.erase = 0;
  69. hdr.upg.flag = 0;
  70. hdr.upg.jumpAddr = 0;
  71. hdr.fw.magic = FW_MAGIC;
  72. hdr.fw.length = dat.dlen;
  73. mf.get_version(cfgPath, hdr.fw.version, sizeof(hdr.fw.version));
  74. mf.get_time(xPath, (char*)hdr.fw.bldtime, sizeof(hdr.fw.bldtime));
  75. print_fw("$$$", &hdr);
  76. md5_calc(&hdr, sizeof(hdr), dat.data, dat.dlen, (char*)md5.digit);
  77. fwrite(&hdr, 1, sizeof(hdr), fp);
  78. fwrite(dat.data, 1, dat.dlen, fp);
  79. fwrite(&md5, 1, sizeof(md5), fp);
  80. print_md5("md5: ", &md5);
  81. fclose(fp);
  82. free(dat.data);
  83. delete xPath;
  84. return 0;
  85. }