uart_conf.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. #include "uart_conf.h"
  2. #include "includes.h"
  3. #include "BSP.h"
  4. #include "AT24c128.h"
  5. #include "../globalDef.h"
  6. #include "../network_mgr/net_ctrl.h"
  7. #include "../storage/AT24C128Opt.h"
  8. //volatile int USER_DEBUG_OUTPUT_EN = 1;
  9. //uint8_t USART1_receive_buf[USART1_BUF_SIZE],USART1_ready_buf[USART1_BUF_SIZE];
  10. //static int32_t USART1_ReceiveTimeCounter = 0;
  11. //volatile uint16_t USART1_receive_index=0;
  12. //volatile uint8_t USART1_ready_buf_ok = 0;
  13. //volatile int USART1_ready_buf_len = 0;
  14. ////uint8_t USART2_receive_buf[USART2_BUF_SIZE],USART2_ready_buf[USART2_BUF_SIZE];
  15. //static int32_t USART2_ReceiveTimeCounter = 0;
  16. //volatile uint16_t USART2_receive_index=0;
  17. //volatile uint8_t USART2_ready_buf_ok = 0;
  18. //volatile int USART2_ready_buf_len = 0;
  19. ////uint8_t USART3_receive_buf[USART3_BUF_SIZE],USART3_ready_buf[USART3_BUF_SIZE];
  20. //static int32_t USART3_ReceiveTimeCounter = 0;
  21. //volatile uint16_t USART3_receive_index=0;
  22. //volatile uint8_t USART3_ready_buf_ok = 0;
  23. //volatile int USART3_ready_buf_len = 0;
  24. PtTest g_ptTest;
  25. char *answer[] = {
  26. "+PTMOD:ON,00000001\r\n",
  27. "+PTMOD:ON,00000001\r\n",
  28. "+PTMOD:OFF,00000001\r\n",
  29. "+INITDEVINFO:OK\r\n",
  30. "+EEPROMERASE:OK\r\n",
  31. "+RST:OK\r\n",
  32. "+EEPROMWR:OK\r\n",
  33. "+MQTTWR:OK\r\n", //7
  34. };
  35. void gw_net_send_02(char *data, char *send_buf, uint16_t len, uint16_t *llen)
  36. {
  37. int i;
  38. // char send_buf[32];
  39. char value = 0;
  40. int send_len=0;
  41. const uint16_t len1 = len;
  42. // memset(send_buf,0,sizeof(send_buf));
  43. for(i = 0;i < len1;i++) {
  44. value = data[i];
  45. send_len += snprintf((char *)send_buf + send_len, sizeof(send_buf), "%02x", value);
  46. }
  47. *llen = send_len;
  48. // return &(send_buf[0]);
  49. }
  50. void uart_cmd_task(uint8_t *data, uint8_t len)
  51. {
  52. int i=0,j=0,flag =0;
  53. int result = 0;
  54. int len1 = 0;
  55. // uint32_t id=0,n = 0;
  56. uint16_t addr,len11;
  57. char sendbuff[256] = {0};
  58. char *pstr = NULL,*lastPt = NULL;
  59. char tempbuff[128] = {0};
  60. char type[4] = {0};
  61. char ssn[11] = {0};
  62. char pcbVr[3] = {0};
  63. char bn[5] = {0};
  64. char mfrs[5] = {0};
  65. char pd[9] = {0};
  66. char port[6] = {0};
  67. char user01[8] = {0};
  68. char password[16] = {0};
  69. uint8_t temp1 = 0, temp2 = 0;
  70. if(len<3) return;
  71. if(strstr((char*)data,"AT+PTMOD=ON\r\n")){ // 产测开始指令
  72. pstr = strstr((char*)data,"AT+PTMOD=ON\r\n");
  73. g_ptTest.bTestStart = 1;
  74. uart_msg_send(UART1_ID, (char *)answer[0], strlen(answer[0]));
  75. memset(pstr,0xFF,13);
  76. timeout_setValue(&g_ptTest.ptTime,10*60*1000);
  77. timeout_start(&g_ptTest.ptTime);
  78. }
  79. else if(strstr((char*)data,"AT+PTMOD=OFF\r\n")){ //产测结束指令
  80. pstr = strstr((char*)data,"AT+PTMOD=OFF\r\n");
  81. g_ptTest.bTestStart = 0;
  82. timeout_stop(&g_ptTest.ptTime);
  83. uart_msg_send(UART1_ID, (char *)answer[0], strlen(answer[0]));
  84. memset(pstr,0xFF,13);
  85. }
  86. if(strstr((char*)data,"AT+INITDEVINFO=WBJW,")){ // 初始化信息 设备类型 sn 批次号 生产厂商 生产日期
  87. if( g_ptTest.bTestStart == 0) return;
  88. pstr = strstr((char*)data,"AT+INITDEVINFO=WBJW,");
  89. if(strstr(pstr,"\r\n")) {
  90. lastPt = pstr;
  91. pstr = pstr + strlen("AT+INITDEVINFO=WBJW,");//strstr((char*)data,"AT+INITDEVINFO=WBJW,");
  92. result = sscanf((char*)pstr,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%s",type,ssn,pcbVr,bn,mfrs,pd,tempbuff,port,sendbuff);
  93. //sscanf((char*)sendbuff,"%[^,],%s",user01, password);
  94. i = 0; flag = 0; j=0;
  95. do{
  96. if(sendbuff[i]!=',' ){
  97. if(flag==0){
  98. user01[i] = sendbuff[i];
  99. }
  100. else if(flag==1){
  101. password[j ] = sendbuff[i];
  102. j++;
  103. }
  104. }
  105. else {
  106. if(flag==0) flag = 1;
  107. }
  108. i++;
  109. }while(sendbuff[i]!='\0');
  110. sscanf(type,"%04X",&g_firmwareMsg.gatewayMsg.hardwareMsg.devicType); // 设备类型
  111. if(g_firmwareMsg.gatewayMsg.hardwareMsg.devicType!=GATEWAY_DEVICE_TYPE){
  112. memset(tempbuff,0,sizeof(tempbuff));
  113. strcpy(tempbuff,(char*)"+INITDEVINFO:ERR,Device_mismatch\r\n");
  114. uart_msg_send(UART1_ID, (char *)tempbuff, strlen(tempbuff));
  115. return;
  116. }
  117. fram_init_mqtt_msg();
  118. sscanf(ssn,"%010u",&g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn); //sn
  119. sscanf(pcbVr,"%02X",&g_firmwareMsg.gatewayMsg.hardwareMsg.pcbVersion); // PCB版本号
  120. sscanf(bn,"%04X",&g_firmwareMsg.gatewayMsg.hardwareMsg.factoryMsg); // 生产厂商
  121. sscanf(mfrs,"%04X",&g_firmwareMsg.gatewayMsg.hardwareMsg.seqNo); //批次号
  122. sscanf(pd,"%08X",&g_firmwareMsg.gatewayMsg.hardwareMsg.data); // 生产日期
  123. sscanf(tempbuff,"%s",g_firmwareMsg.mqttidport.ip); // mqtt 服务器地址
  124. sscanf(port,"%s",g_firmwareMsg.mqttidport.port); //mqtt 端口号
  125. sscanf(user01,"%s",g_firmwareMsg.mqttidport.admin);
  126. sscanf(password,"%s",g_firmwareMsg.mqttidport.password);
  127. g_firmwareMsg.gatewayMsg.hardwareMsg.bInit = 1;
  128. fram_write_gateway_hardware_msg(); // 写入EEPROOM
  129. g_firmwareMsg.mqttidport.flag = 1;
  130. fram_write_mqtt_msg();
  131. fram_write_eeprom_powerUpFlag();
  132. memset(lastPt,0xFF,20);
  133. uart_msg_send(UART1_ID, (char *)answer[3], strlen(answer[3]));
  134. }
  135. }
  136. else if(strstr((char*)data,"AT+DEVINFO\r\n")){ // 读取信息
  137. if( g_ptTest.bTestStart == 0) return;
  138. pstr = strstr((char*)data,"AT+DEVINFO\r\n");
  139. fram_read_gateway_hardware_msg();
  140. fram_read_mqtt_msg();
  141. memset(sendbuff,0,sizeof(sendbuff));
  142. strcpy(sendbuff,"+DEVINFO:"); // 文件头
  143. memset(tempbuff,0,sizeof(tempbuff));
  144. sprintf(tempbuff,"%04x,%010u,%02x,%04x,",g_firmwareMsg.gatewayMsg.hardwareMsg.devicType,\
  145. g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn,\
  146. g_firmwareMsg.gatewayMsg.hardwareMsg.pcbVersion,g_firmwareMsg.gatewayMsg.devicTypeID);
  147. strcat(sendbuff,tempbuff);
  148. memset(tempbuff,0,sizeof(tempbuff));
  149. gw_net_send_02((char*)g_firmwareMsg.gatewayMsg.Uuid,(char*)tempbuff,12,&len11);
  150. strcat(sendbuff,tempbuff);
  151. strcat(sendbuff,",");
  152. memset(tempbuff,0,sizeof(tempbuff));
  153. strncpy(tempbuff,(char*)g_firmwareMsg.gatewayMsg.Imei,15);
  154. strcat(sendbuff,tempbuff);
  155. memset(tempbuff,0,sizeof(tempbuff));
  156. sprintf(tempbuff,",%08x,%08x,%04x,%04x,%08x",g_firmwareMsg.gatewayMsg.verMsg.gate_bootloaderVr,\
  157. g_firmwareMsg.gatewayMsg.verMsg.gate_appVr,g_firmwareMsg.gatewayMsg.hardwareMsg.factoryMsg,\
  158. g_firmwareMsg.gatewayMsg.hardwareMsg.seqNo,g_firmwareMsg.gatewayMsg.hardwareMsg.data);
  159. strcat(sendbuff,tempbuff);
  160. memset(tempbuff,0,sizeof(tempbuff));
  161. sprintf(tempbuff,",%s,%s,%s,%s",g_firmwareMsg.mqttidport.ip,g_firmwareMsg.mqttidport.port, \
  162. g_firmwareMsg.mqttidport.admin,g_firmwareMsg.mqttidport.password);
  163. strcat(sendbuff,tempbuff);
  164. len1 = strlen(sendbuff);
  165. sendbuff[len1] = 0x0D;
  166. sendbuff[len1+1] = 0x0A;
  167. memset(pstr,0xFF,12);
  168. uart_msg_send(UART1_ID, sendbuff, strlen(sendbuff));
  169. }
  170. else if(strstr((char*)data,"AT+EEPROMERASE=")){ // 撤除EEPROM
  171. if( g_ptTest.bTestStart == 0) return;
  172. pstr = strstr((char*)data,"AT+EEPROMERASE=");
  173. if(strstr(pstr,"\r\n")){
  174. lastPt = pstr;
  175. pstr = pstr + strlen("AT+EEPROMERASE=");
  176. memset(type,0,sizeof(type));
  177. result = sscanf((char*)pstr,"%[^,]",type);
  178. sscanf(type,"%04X",&g_firmwareMsg.gatewayMsg.hardwareMsg.devicType); // 设备类型
  179. if(g_firmwareMsg.gatewayMsg.hardwareMsg.devicType!=GATEWAY_DEVICE_TYPE){
  180. memset(tempbuff,0,sizeof(tempbuff));
  181. strcpy(tempbuff,(char*)"+EEPROMERASE:ERR,Device_mismatch\r\n");
  182. uart_msg_send(UART1_ID, (char *)tempbuff, strlen(tempbuff));
  183. return;
  184. }
  185. fram_init();
  186. memset(lastPt,0xFF,15);
  187. uart_msg_send(UART1_ID, (char *)answer[4], strlen(answer[4]));
  188. uart_blocking_read(sendbuff,UART1_ID,1);
  189. }
  190. }
  191. else if(strstr((char*)data,"AT+EEPROMWR=")) { // EEPROM 写
  192. if( g_ptTest.bTestStart == 0) return;
  193. pstr = strstr((char*)data,"AT+EEPROMWR=");
  194. if(strstr(pstr,"\r\n")){
  195. lastPt = pstr;
  196. pstr = pstr + strlen("AT+EEPROMWR=");
  197. memset(type,0,sizeof(type));
  198. memset(mfrs,0,sizeof(mfrs));
  199. memset(bn,0,sizeof(bn));
  200. memset(tempbuff,0,sizeof(tempbuff));
  201. result = sscanf((char*)pstr,"%[^,],%[^,],%[^,],%s",bn,type,mfrs,tempbuff);
  202. sscanf(type,"%04x",&addr); //sn
  203. sscanf(mfrs,"%04x",&len11); // PCB版本号
  204. sscanf(bn,"%04X",&g_firmwareMsg.gatewayMsg.hardwareMsg.devicType); // 设备类型
  205. if(g_firmwareMsg.gatewayMsg.hardwareMsg.devicType!=GATEWAY_DEVICE_TYPE){
  206. memset(tempbuff,0,sizeof(tempbuff));
  207. strcpy(tempbuff,(char*)"+EEPROMWR:ERR,Device_mismatch\r\n");
  208. uart_msg_send(UART1_ID, (char *)tempbuff, strlen(tempbuff));
  209. return;
  210. }
  211. len1 = 0;
  212. for(i = 0; i < len11*2; i+=2)
  213. {
  214. temp1 = HexToChar(tempbuff[i]);
  215. temp2 = HexToChar(tempbuff[i+1]);
  216. sendbuff[len1] = (temp1<<4) | temp2;
  217. len1++;
  218. }
  219. AT24CXX_Write(addr,(uint8_t*)sendbuff,len11);
  220. uart_msg_send(UART1_ID, (char *)answer[6], strlen(answer[6]));
  221. memset(lastPt,0xFF,12);
  222. }
  223. }
  224. else if(strstr((char*)data,"AT+EEPROMRD")){ // EEPROM 读取
  225. if( g_ptTest.bTestStart == 0) return;
  226. pstr = strstr((char*)data,"AT+EEPROMRD");
  227. if(strstr(pstr,"\r\n")){
  228. lastPt = pstr;
  229. pstr = pstr + strlen("AT+EEPROMRD=");
  230. memset(type,0,sizeof(type));
  231. memset(mfrs,0,sizeof(type));
  232. memset(tempbuff,0,sizeof(tempbuff));
  233. result = sscanf((char*)pstr,"%[^,],%s",type,mfrs);
  234. sscanf(type,"%04x",&addr); //sn
  235. sscanf(mfrs,"%04x",&len11); // PCB???
  236. AT24CXX_Read(addr,(u8*)tempbuff,len11);
  237. memset(sendbuff,0,sizeof(sendbuff));
  238. sprintf(sendbuff,"+EEPROMRD:%04x,",len11);
  239. result = 15;
  240. for(i=0;i<len11;i++){
  241. len1 += snprintf((char *)sendbuff + result + len1, sizeof(sendbuff), "%02x", tempbuff[i]);
  242. }
  243. uart_msg_send(UART1_ID, sendbuff, len1+result);
  244. memset(lastPt,0xFF,11);
  245. }
  246. }
  247. else if(strstr((char*)data,"AT+MQTTWR=WBJW,")) { // MQTT信息写入
  248. if( g_ptTest.bTestStart == 0) return;
  249. pstr = strstr((char*)data,"AT+MQTTWR=WBJW,");
  250. if(strstr(pstr,"\r\n")){
  251. lastPt = pstr;
  252. pstr = pstr + strlen("AT+MQTTWR=WBJW,");
  253. memset(tempbuff,0,sizeof(tempbuff));
  254. memset(port,0,sizeof(port));
  255. memset(user01,0,sizeof(user01));
  256. memset(password,0,sizeof(password));
  257. result = sscanf((char*)pstr,"%[^,],%[^,],%[^,],%s",tempbuff,port,user01,password);
  258. fram_init_mqtt_msg();
  259. sscanf(tempbuff,"%s",g_firmwareMsg.mqttidport.ip); // mqtt 服务器地址
  260. sscanf(port,"%s",g_firmwareMsg.mqttidport.port); //mqtt 端口号
  261. sscanf(user01,"%s",g_firmwareMsg.mqttidport.admin);
  262. sscanf(password,"%s",g_firmwareMsg.mqttidport.password);
  263. g_firmwareMsg.mqttidport.flag = 1;
  264. fram_write_mqtt_msg();
  265. uart_msg_send(UART1_ID, (char *)answer[7], strlen(answer[7]));
  266. memset(lastPt,0xFF,15);
  267. }
  268. }
  269. else if(strstr((char*)data,"AT+MQTTRD\r\n")) { // mqtt 信息读取
  270. if( g_ptTest.bTestStart == 0) return;
  271. pstr = strstr((char*)data,"AT+MQTTRD\r\n");
  272. fram_read_mqtt_msg();
  273. memset(sendbuff,0,sizeof(sendbuff));
  274. strcpy(sendbuff,"+MQTTRD:"); // 文件头
  275. memset(tempbuff,0,sizeof(tempbuff));
  276. sprintf(tempbuff,"%s,%s,%s,%s",g_firmwareMsg.mqttidport.ip,g_firmwareMsg.mqttidport.port, \
  277. g_firmwareMsg.mqttidport.admin,g_firmwareMsg.mqttidport.password);
  278. strcat(sendbuff,tempbuff);
  279. len1 = strlen(sendbuff);
  280. sendbuff[len1] = 0x0D;
  281. sendbuff[len1+1] = 0x0A;
  282. uart_msg_send(UART1_ID, sendbuff, strlen(sendbuff));
  283. memset(pstr,0xFF,11);
  284. }
  285. else if(strstr((char*)data,"AT+RST\r\n")) { //复位
  286. if( g_ptTest.bTestStart == 0) return;
  287. uart_msg_send(UART1_ID, (char *)answer[5], strlen(answer[5]));
  288. delay_ms(100);//延时100ms
  289. NVIC_SystemReset();//复位
  290. }
  291. else if(strstr((char*)data,"AT+PTMOD\r\n")){ // 查询当前是否在产测模式下 产测版本
  292. pstr = strstr((char*)data,"AT+PTMOD\r\n");
  293. if(g_ptTest.bTestStart==1) uart_msg_send(UART1_ID, (char *)answer[1], strlen(answer[1]));
  294. else uart_msg_send(UART1_ID, (char *)answer[2], strlen(answer[2]));
  295. memset(pstr,0xFF,10);
  296. }
  297. // if(strstr((char*)data,"AT+HSN="))
  298. // {
  299. // result = sscanf((char*)data,"AT+HSN=%08X%n",&id,&n);
  300. // if(result==1)
  301. // {
  302. // g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn = id;
  303. // fram_read_gateway_hardware_msg();
  304. // printf("+HSN:OK\r\n");
  305. // NVIC_SystemReset();//复位
  306. // }
  307. // else
  308. // {
  309. // printf("ERR4:%s\r\n",(char*)data);//Parameter error
  310. // }
  311. // }
  312. // else if(strstr((char*)data,"AT+HSN\r\n"))
  313. // {
  314. // printf("+HSN:%08X\r\n",g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn);
  315. // }
  316. // else if(strstr((char*)data,"AT+DSN="))
  317. // {
  318. // result = sscanf((char*)data,"AT+DSN=%d\r\n%n",&id,&n);
  319. // if(result==1)
  320. // {
  321. // g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn = id;
  322. // fram_read_gateway_hardware_msg();
  323. // printf("+DSN:OK\r\n");
  324. // NVIC_SystemReset();//复位
  325. // }
  326. // else
  327. // {
  328. // printf("ERR4:%s\r\n",(char*)data);//Parameter error
  329. // }
  330. // }
  331. // else if(strstr((char*)data,"AT+DSN\r\n"))
  332. // {
  333. // printf("+DSN:%010d\r\n",g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn);
  334. // }
  335. // else if(strstr((char*)data,"AT+HELP\r\n"))
  336. // {
  337. // printf("\r\n提示符 \"<\" \">\" 不用输入\r\n");
  338. // printf("AT+DSN=<COINNOVATION>,<DSN> 设置SN(DSN十进制设备编号)\r\n");
  339. // printf("AT+DSN 查询SN(十进制)\r\n");
  340. // printf("AT+HSN 查询SN(十六进制)\r\n");
  341. // }
  342. }