uart_conf.c 14 KB

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