AuthLicense_main.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include "driver.h"
  4. #include <string.h>
  5. #include "hal_interface_api.h"
  6. #include <fcntl.h>
  7. /*
  8. i2c-scan -b 0
  9. */
  10. void help()
  11. {
  12. printf("authlicense -w \n");
  13. printf(" -Write new license to flash. Input [128 bytes license]\n");
  14. printf("authlicense -r \n");
  15. printf(" -Read license form flash\n");
  16. printf("authlicense -guid \n");
  17. printf(" -Read device GUID.\n");
  18. }
  19. int main(int argc, char* argv[])
  20. {
  21. int i;
  22. char chr;
  23. uint8_t tmp;
  24. uint32_t tmp1;
  25. uint8_t GUID[12] = {0};
  26. uint32_t *pUID = (uint32_t*)0x1FFF7A10;
  27. uint8_t *pLicense = (uint8_t*)0x08060000;
  28. uint8_t HexLicense[128] = {0};
  29. uint8_t CharLicense[256+10] = {0};
  30. if(argc != 2)
  31. {
  32. help();
  33. return -1;
  34. }
  35. //读取License
  36. if(strcmp(argv[1], "-r") == 0)
  37. {
  38. printf("License: ");
  39. for(i=0;i<128;i++)
  40. {
  41. if(i%32 == 0)
  42. printf("\t\n");
  43. printf("%02x", *pLicense);
  44. pLicense++;
  45. }
  46. printf("\n");
  47. }
  48. //写入License
  49. else if(strcmp(argv[1], "-w") == 0)
  50. {
  51. while(1)
  52. {
  53. memset(CharLicense, 0, sizeof(CharLicense));
  54. printf("\nPlease input license(128 bytes): ");
  55. scanf("%s", CharLicense);
  56. //检查License长度
  57. if(strlen(CharLicense) != 256)
  58. {
  59. printf("License length is 128 bytes, but input is %d bytes! Please re input!\n", (strlen(CharLicense)+1)/2);
  60. continue;
  61. }
  62. for(i=0;i<128;i++)
  63. {
  64. //获取高4位
  65. chr = CharLicense[2*i+0];
  66. if((chr >= '0') && (chr <= '9'))
  67. {
  68. tmp = chr - '0';
  69. }
  70. else if((chr >= 'a') && (chr <= 'f'))
  71. {
  72. tmp = chr - 'a' + 10;
  73. }
  74. else if((chr >= 'A') && (chr <= 'F'))
  75. {
  76. tmp = chr - 'A' + 10;
  77. }
  78. else
  79. {
  80. printf("Invalid char %s\n", chr);
  81. return -1;
  82. }
  83. HexLicense[i] = tmp<<4;
  84. //获取低4位
  85. chr = CharLicense[2*i+1];
  86. if((chr >= '0') && (chr <= '9'))
  87. {
  88. tmp = chr - '0';
  89. }
  90. else if((chr >= 'a') && (chr <= 'f'))
  91. {
  92. tmp = chr - 'a' + 10;
  93. }
  94. else if((chr >= 'A') && (chr <= 'F'))
  95. {
  96. tmp = chr - 'A' + 10;
  97. }
  98. else
  99. {
  100. printf("Invalid char %s\n", chr);
  101. return -1;
  102. }
  103. HexLicense[i] |= tmp;
  104. }
  105. //获取GUID
  106. for(i=0;i<3;i++)
  107. {
  108. tmp1 = *pUID;
  109. GUID[4*i+0] = tmp1&0xff;
  110. GUID[4*i+1] = (tmp1>>8)&0xff;
  111. GUID[4*i+2] = (tmp1>>16)&0xff;
  112. GUID[4*i+3] = (tmp1>>24)&0xff;
  113. pUID++;
  114. }
  115. //检查Licnese是否有效
  116. if(CheckLicense(GUID, HexLicense) == 0)
  117. {
  118. //将license写入Flash
  119. //TODO:
  120. printf("Save license to falsh ok.\n");
  121. return 0;
  122. }
  123. else
  124. continue;
  125. }
  126. }
  127. //读取GUID
  128. else if(strcmp(argv[1], "-guid") == 0)
  129. {
  130. printf("GUID: ");
  131. for(i=0;i<3;i++)
  132. {
  133. tmp1 = *pUID;
  134. GUID[4*i+0] = tmp1&0xff;
  135. GUID[4*i+1] = (tmp1>>8)&0xff;
  136. GUID[4*i+2] = (tmp1>>16)&0xff;
  137. GUID[4*i+3] = (tmp1>>24)&0xff;
  138. pUID++;
  139. printf("%02x %02x %02x %02x ", GUID[4*i+0],GUID[4*i+1],GUID[4*i+2],GUID[4*i+3]);
  140. }
  141. printf("\n");
  142. }
  143. else
  144. {
  145. printf("Invalid param %s\n", argv[1]);
  146. help();
  147. return -1;
  148. }
  149. return 0;
  150. }