config.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. #include "includes.h"
  2. SUT_CONFIG sutProductPara;
  3. void SaveProductParaToFlash(void);
  4. void ReadProductParaFromFlash(void)
  5. {
  6. unsigned char Rand,needSave;
  7. needSave=0;
  8. Rand=0;//GetRandBySTM32ID();
  9. ReadFlashData(APP_CONFIG_ADDR,(unsigned char *)&sutProductPara,sizeof(SUT_CONFIG));
  10. if(MCU_FLAG!=sutProductPara.McuFlag || 0!=strcmp(sutProductPara.ProductName,PRODUCT_NAME)){
  11. SlwTrace(INF,"Rst Para",1);
  12. memset((unsigned char *)&sutProductPara,0,sizeof(SUT_CONFIG));
  13. sutProductPara.McuFlag=MCU_FLAG; //MCU标识
  14. strcpy(sutProductPara.ProductName,PRODUCT_NAME);
  15. sutProductPara.ProductVersion=PRODUCT_VERSION;
  16. sutProductPara.PSN=0;
  17. sutProductPara.Addr=0;
  18. sutProductPara.Sdebug=0;
  19. needSave=1;
  20. }
  21. else if(PRODUCT_VERSION!=sutProductPara.ProductVersion){
  22. sutProductPara.ProductVersion=PRODUCT_VERSION;
  23. sutProductPara.Sdebug=0;
  24. needSave=1;
  25. }
  26. if(needSave)
  27. SaveProductParaToFlash();
  28. }
  29. void SaveProductParaToFlash(void)
  30. {
  31. PWR_EN_HIGH;
  32. WritePageData(APP_CONFIG_ADDR,(unsigned char *)&sutProductPara,sizeof(SUT_CONFIG));
  33. PWR_EN_LOW;
  34. }
  35. void PcMsgHandle(char *msg)
  36. {
  37. const char *CmdList[]={
  38. "TM", //调试Modem
  39. "SADDR",
  40. "RADDR",
  41. "SDEBUG",
  42. "SNODEBU",
  43. "SVER",
  44. ""//必须以空字串为结束
  45. };
  46. unsigned long PSN,AKEY;
  47. char buf[50];
  48. char bufIP[6];
  49. //char strAccount[20];
  50. //char strPassword[20];
  51. int i,j,temp,len;
  52. char flag;
  53. const char *pCmd;
  54. char *pMsg;
  55. int CmdListNum=0;
  56. pMsg = msg;
  57. while(*CmdList[CmdListNum++]);//计算命令列表个数
  58. CmdListNum--;
  59. //查找与命令列表相同的命令位置
  60. for(i=0;i<CmdListNum;i++){
  61. pCmd=CmdList[i];
  62. pMsg=&msg[3];
  63. flag=0;
  64. j=0;
  65. while(*pCmd){
  66. if(*pCmd!=*pMsg){
  67. flag=1;
  68. break;
  69. }
  70. pCmd++;
  71. pMsg++;
  72. j++;
  73. }
  74. if(!flag){
  75. break;
  76. }
  77. }
  78. if(i==CmdListNum)return;
  79. SlwTrace(INF,"UART START33333",1);
  80. //处理命令
  81. switch(i)
  82. {
  83. case 0://"RT+TM"
  84. SlwTrace(INF,"GT+TM:OK\r\n",0);
  85. ComSelect(COM_SEL_MODEM);
  86. break;
  87. case 1://"SADDR",
  88. len=GetParaFromStr(msg,"ADDR",buf);
  89. sutProductPara.Addr=atoi(buf);
  90. snprintf(buf,sizeof(buf),"ADDR===%d\r\n",sutProductPara.Addr);
  91. printf("%s",buf);
  92. SaveProductParaToFlash();
  93. break;
  94. case 2: //"RADDR",
  95. snprintf(buf, sizeof(buf),"RT+RADDR:ADDR=%d\r\n",sutProductPara.Addr);
  96. printf("%s",buf);
  97. break;
  98. case 3:
  99. snprintf(buf, sizeof(buf),"RT+SDEBUG");
  100. SlwTrace(INF,buf,1);
  101. sutProductPara.Sdebug=1;
  102. SaveProductParaToFlash();
  103. break;
  104. case 4:
  105. snprintf(buf, sizeof(buf),"RT+SNODEBUG");
  106. SlwTrace(INF,buf,1);
  107. sutProductPara.Sdebug=0;
  108. SaveProductParaToFlash();
  109. break;
  110. case 5:
  111. printf("RT501_V%d\r\n",sutProductPara.ProductVersion);
  112. break;
  113. }
  114. // //AB CD E5 02 54 4D 32 5C
  115. // if(msg[0]=='T' && msg[1]=='M'){//0x544D
  116. // printf("----TM----\r\n");
  117. // ComSelect(COM_SEL_MODEM);
  118. // }
  119. }
  120. /*******************************************************************
  121. *GetParaFromStr
  122. *从Str中找到Para=后面至';'或非字符的字串并放入Value
  123. 返回Value的长度
  124. 举例:Str="GT+SMP=IP=192.168.1.1;Port=12345"
  125. 如果Para="IP" 则Value将被赋值为"192.168.1.1",并返回11
  126. 如果Para="Port" 则Value将被赋值为"12345",并返回5
  127. 要求Para长度不大于20字节 ,Value长度不大于40字节
  128. ********************************************************************/
  129. int GetParaFromStr(char *Str,char *Para,char *Value)
  130. {
  131. int ValueLen=0,ParaLen=0;
  132. char ParaTemp[22];
  133. char *p;
  134. char d;
  135. int i=0;
  136. if(0==*Str || 0==*Para)return 0;
  137. while(0!=(d=*Para) && ParaLen<20)
  138. {
  139. ParaTemp[i++]=d;
  140. if(d=='=' || d==';')return 0;
  141. Para++;
  142. ParaLen++;
  143. }
  144. ParaTemp[ParaLen++]='=';
  145. ParaTemp[ParaLen]=0;
  146. p=strstr(Str,ParaTemp);
  147. p+=ParaLen;
  148. //--
  149. while(*p>0x20 && ';'!=*p && ValueLen<40)
  150. {
  151. *Value=*p;
  152. p++;
  153. Value++;
  154. ValueLen++;
  155. }
  156. *Value=0;
  157. return ValueLen;
  158. }