| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- #include "includes.h"
- SUT_CONFIG sutProductPara;
- void SaveProductParaToFlash(void);
-
- void ReadProductParaFromFlash(void)
- {
- unsigned char Rand,needSave;
- needSave=0;
- Rand=0;//GetRandBySTM32ID();
- ReadFlashData(APP_CONFIG_ADDR,(unsigned char *)&sutProductPara,sizeof(SUT_CONFIG));
-
- if(MCU_FLAG!=sutProductPara.McuFlag || 0!=strcmp(sutProductPara.ProductName,PRODUCT_NAME)){
- SlwTrace(INF,"Rst Para",1);
- memset((unsigned char *)&sutProductPara,0,sizeof(SUT_CONFIG));
- sutProductPara.McuFlag=MCU_FLAG; //MCU标识
- strcpy(sutProductPara.ProductName,PRODUCT_NAME);
- sutProductPara.ProductVersion=PRODUCT_VERSION;
- sutProductPara.PSN=0;
- sutProductPara.Addr=0;
- sutProductPara.Sdebug=0;
- needSave=1;
- }
- else if(PRODUCT_VERSION!=sutProductPara.ProductVersion){
- sutProductPara.ProductVersion=PRODUCT_VERSION;
- sutProductPara.Sdebug=0;
- needSave=1;
- }
- if(needSave)
- SaveProductParaToFlash();
- }
- void SaveProductParaToFlash(void)
- {
- PWR_EN_HIGH;
- WritePageData(APP_CONFIG_ADDR,(unsigned char *)&sutProductPara,sizeof(SUT_CONFIG));
- PWR_EN_LOW;
- }
- void PcMsgHandle(char *msg)
- {
- const char *CmdList[]={
- "TM", //调试Modem
- "SADDR",
- "RADDR",
- "SDEBUG",
- "SNODEBU",
- "SVER",
- ""//必须以空字串为结束
- };
- unsigned long PSN,AKEY;
- char buf[50];
- char bufIP[6];
- //char strAccount[20];
- //char strPassword[20];
- int i,j,temp,len;
- char flag;
- const char *pCmd;
- char *pMsg;
- int CmdListNum=0;
- pMsg = msg;
- while(*CmdList[CmdListNum++]);//计算命令列表个数
- CmdListNum--;
- //查找与命令列表相同的命令位置
- for(i=0;i<CmdListNum;i++){
- pCmd=CmdList[i];
- pMsg=&msg[3];
- flag=0;
- j=0;
- while(*pCmd){
- if(*pCmd!=*pMsg){
- flag=1;
- break;
- }
- pCmd++;
- pMsg++;
- j++;
- }
- if(!flag){
- break;
- }
- }
- if(i==CmdListNum)return;
- SlwTrace(INF,"UART START33333",1);
- //处理命令
- switch(i)
- {
- case 0://"RT+TM"
- SlwTrace(INF,"GT+TM:OK\r\n",0);
- ComSelect(COM_SEL_MODEM);
- break;
- case 1://"SADDR",
- len=GetParaFromStr(msg,"ADDR",buf);
- sutProductPara.Addr=atoi(buf);
- snprintf(buf,sizeof(buf),"ADDR===%d\r\n",sutProductPara.Addr);
- printf("%s",buf);
- SaveProductParaToFlash();
- break;
- case 2: //"RADDR",
- snprintf(buf, sizeof(buf),"RT+RADDR:ADDR=%d\r\n",sutProductPara.Addr);
- printf("%s",buf);
- break;
- case 3:
- snprintf(buf, sizeof(buf),"RT+SDEBUG");
- SlwTrace(INF,buf,1);
- sutProductPara.Sdebug=1;
- SaveProductParaToFlash();
- break;
- case 4:
- snprintf(buf, sizeof(buf),"RT+SNODEBUG");
- SlwTrace(INF,buf,1);
- sutProductPara.Sdebug=0;
- SaveProductParaToFlash();
- break;
- case 5:
- printf("RT501_V%d\r\n",sutProductPara.ProductVersion);
- break;
- }
- // //AB CD E5 02 54 4D 32 5C
- // if(msg[0]=='T' && msg[1]=='M'){//0x544D
- // printf("----TM----\r\n");
- // ComSelect(COM_SEL_MODEM);
- // }
- }
- /*******************************************************************
- *GetParaFromStr
- *从Str中找到Para=后面至';'或非字符的字串并放入Value
- 返回Value的长度
- 举例:Str="GT+SMP=IP=192.168.1.1;Port=12345"
- 如果Para="IP" 则Value将被赋值为"192.168.1.1",并返回11
- 如果Para="Port" 则Value将被赋值为"12345",并返回5
- 要求Para长度不大于20字节 ,Value长度不大于40字节
- ********************************************************************/
- int GetParaFromStr(char *Str,char *Para,char *Value)
- {
- int ValueLen=0,ParaLen=0;
- char ParaTemp[22];
- char *p;
- char d;
- int i=0;
- if(0==*Str || 0==*Para)return 0;
- while(0!=(d=*Para) && ParaLen<20)
- {
- ParaTemp[i++]=d;
- if(d=='=' || d==';')return 0;
- Para++;
- ParaLen++;
- }
- ParaTemp[ParaLen++]='=';
- ParaTemp[ParaLen]=0;
- p=strstr(Str,ParaTemp);
- p+=ParaLen;
- //--
- while(*p>0x20 && ';'!=*p && ValueLen<40)
- {
- *Value=*p;
- p++;
- Value++;
- ValueLen++;
- }
- *Value=0;
- return ValueLen;
- }
-
|