uart_conf.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  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. };
  33. extern uint8_t rcv_buf_pt[256];
  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. // uart_msg_send(UART_DEBUG, (char *)data, len);
  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. // uart_msg_send(UART1_ID,data,len);
  76. memset(pstr,0xFF,13);
  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. uart_msg_send(UART1_ID, (char *)answer[0], strlen(answer[0]));
  82. memset(pstr,0xFF,13);
  83. }
  84. if(g_ptTest.bTestStart == 0) { // 没有进行产测
  85. memset(&rcv_buf_pt,0,sizeof(rcv_buf_pt));
  86. return;
  87. }
  88. if(strstr((char*)data,"AT+INITDEVINFO=WBJW,")){ // 初始化信息 设备类型 sn 批次号 生产厂商 生产日期
  89. // if( g_ptTest.bTestStart == 0) return;
  90. // uart_msg_send(UART1_ID,"--------1\r\n",10);
  91. // uart_msg_send(UART1_ID,data,len);
  92. pstr = strstr((char*)data,"AT+INITDEVINFO=WBJW,");
  93. if(strstr(pstr,"\r\n")) {
  94. // uart_msg_send(UART1_ID,"--------2\r\n",10);
  95. pstr = pstr + strlen("AT+INITDEVINFO=WBJW,");//strstr((char*)data,"AT+INITDEVINFO=WBJW,");
  96. result = sscanf((char*)pstr,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%s",type,ssn,pcbVr,bn,mfrs,pd,tempbuff,port,sendbuff);
  97. //sscanf((char*)sendbuff,"%[^,],%s",user01, password);
  98. i = 0; flag = 0; j=0;
  99. do{
  100. if(sendbuff[i]!=',' ){
  101. if(flag==0){
  102. user01[i] = sendbuff[i];
  103. }
  104. else if(flag==1){
  105. password[j ] = sendbuff[i];
  106. j++;
  107. }
  108. }
  109. else {
  110. if(flag==0) flag = 1;
  111. }
  112. i++;
  113. }while(sendbuff[i]!='\0');
  114. sscanf(type,"%04X",&g_firmwareMsg.gatewayMsg.hardwareMsg.devicType); // 设备类型
  115. if(g_firmwareMsg.gatewayMsg.hardwareMsg.devicType!=GATEWAY_DEVICE_TYPE){
  116. memset(tempbuff,0,sizeof(tempbuff));
  117. strcpy(tempbuff,(char*)"+INITDEVINFO:ERR,Device_mismatch\r\n");
  118. uart_msg_send(UART1_ID, (char *)tempbuff, strlen(tempbuff));
  119. memset(&rcv_buf_pt,0,sizeof(rcv_buf_pt));
  120. return;
  121. }
  122. fram_init_mqtt_msg();
  123. sscanf(ssn,"%010u",&g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn); //sn
  124. sscanf(pcbVr,"%02X",&g_firmwareMsg.gatewayMsg.hardwareMsg.pcbVersion); // PCB版本号
  125. sscanf(bn,"%04X",&g_firmwareMsg.gatewayMsg.hardwareMsg.factoryMsg); // 生产厂商
  126. sscanf(mfrs,"%04X",&g_firmwareMsg.gatewayMsg.hardwareMsg.seqNo); //批次号
  127. sscanf(pd,"%08X",&g_firmwareMsg.gatewayMsg.hardwareMsg.data); // 生产日期
  128. sscanf(tempbuff,"%s",g_firmwareMsg.mqttidport.ip); // mqtt 服务器地址
  129. sscanf(port,"%s",g_firmwareMsg.mqttidport.port); //mqtt 端口号
  130. sscanf(user01,"%s",g_firmwareMsg.mqttidport.admin);
  131. sscanf(password,"%s",g_firmwareMsg.mqttidport.password);
  132. g_firmwareMsg.gatewayMsg.hardwareMsg.bInit = 1;
  133. fram_write_gateway_hardware_msg(); // 写入EEPROOM
  134. g_firmwareMsg.mqttidport.flag = 1;
  135. fram_write_mqtt_msg();
  136. fram_write_eeprom_powerUpFlag();
  137. uart_msg_send(UART1_ID, (char *)answer[3], strlen(answer[3]));
  138. memset(&rcv_buf_pt,0,sizeof(rcv_buf_pt));
  139. // uart_msg_send(UART1_ID,"--------3\r\n",10);
  140. }
  141. }
  142. else if(strstr((char*)data,"AT+DEVINFO\r\n")){ // 读取信息
  143. if( g_ptTest.bTestStart == 0) return;
  144. fram_read_gateway_hardware_msg();
  145. fram_read_mqtt_msg();
  146. memset(sendbuff,0,sizeof(sendbuff));
  147. strcpy(sendbuff,"+DEVINFO:"); // 文件头
  148. memset(tempbuff,0,sizeof(tempbuff));
  149. sprintf(tempbuff,"%04x,%010u,%02x,%04x,",g_firmwareMsg.gatewayMsg.hardwareMsg.devicType,\
  150. g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn,\
  151. g_firmwareMsg.gatewayMsg.hardwareMsg.pcbVersion,g_firmwareMsg.gatewayMsg.devicTypeID);
  152. strcat(sendbuff,tempbuff);
  153. memset(tempbuff,0,sizeof(tempbuff));
  154. gw_net_send_02((char*)g_firmwareMsg.gatewayMsg.Uuid,(char*)tempbuff,12,&len11);
  155. strcat(sendbuff,tempbuff);
  156. strcat(sendbuff,",");
  157. memset(tempbuff,0,sizeof(tempbuff));
  158. strncpy(tempbuff,(char*)g_firmwareMsg.gatewayMsg.Imei,15);
  159. strcat(sendbuff,tempbuff);
  160. memset(tempbuff,0,sizeof(tempbuff));
  161. sprintf(tempbuff,",%08x,%08x,%04x,%04x,%08x",g_firmwareMsg.gatewayMsg.verMsg.gate_bootloaderVr,\
  162. g_firmwareMsg.gatewayMsg.verMsg.gate_appVr,g_firmwareMsg.gatewayMsg.hardwareMsg.factoryMsg,\
  163. g_firmwareMsg.gatewayMsg.hardwareMsg.seqNo,g_firmwareMsg.gatewayMsg.hardwareMsg.data);
  164. strcat(sendbuff,tempbuff);
  165. memset(tempbuff,0,sizeof(tempbuff));
  166. sprintf(tempbuff,",%s,%s,%s,%s",g_firmwareMsg.mqttidport.ip,g_firmwareMsg.mqttidport.port, \
  167. g_firmwareMsg.mqttidport.admin,g_firmwareMsg.mqttidport.password);
  168. strcat(sendbuff,tempbuff);
  169. len1 = strlen(sendbuff);
  170. sendbuff[len1] = 0x0D;
  171. sendbuff[len1+1] = 0x0A;
  172. uart_msg_send(UART1_ID, sendbuff, strlen(sendbuff));
  173. memset(&rcv_buf_pt,0,sizeof(rcv_buf_pt));
  174. }
  175. else if(strstr((char*)data,"AT+EEPROMERASE=")){ // 撤除EEPROM
  176. if( g_ptTest.bTestStart == 0) return;
  177. pstr = strstr((char*)data,"AT+EEPROMERASE=");
  178. if(strstr(pstr,"\r\n")){
  179. pstr = pstr + strlen("AT+EEPROMERASE=");
  180. memset(type,0,sizeof(type));
  181. result = sscanf((char*)pstr,"%[^,]",type);
  182. sscanf(type,"%04X",&g_firmwareMsg.gatewayMsg.hardwareMsg.devicType); // 设备类型
  183. if(g_firmwareMsg.gatewayMsg.hardwareMsg.devicType!=GATEWAY_DEVICE_TYPE){
  184. memset(tempbuff,0,sizeof(tempbuff));
  185. strcpy(tempbuff,(char*)"+EEPROMERASE:ERR,Device_mismatch\r\n");
  186. uart_msg_send(UART1_ID, (char *)tempbuff, strlen(tempbuff));
  187. memset(&rcv_buf_pt,0,sizeof(rcv_buf_pt));
  188. return;
  189. }
  190. fram_init();
  191. uart_msg_send(UART1_ID, (char *)answer[4], strlen(answer[4]));
  192. uart_blocking_read(sendbuff,UART1_ID,1);
  193. memset(&rcv_buf_pt,0,sizeof(rcv_buf_pt));
  194. }
  195. }
  196. else if(strstr((char*)data,"AT+EEPROMWR=")) { // EEPROM 写
  197. if( g_ptTest.bTestStart == 0) return;
  198. pstr = strstr((char*)data,"AT+EEPROMWR=");
  199. if(strstr(pstr,"\r\n")){
  200. pstr = pstr + strlen("AT+EEPROMWR=");
  201. memset(type,0,sizeof(type));
  202. memset(mfrs,0,sizeof(mfrs));
  203. memset(bn,0,sizeof(bn));
  204. memset(tempbuff,0,sizeof(tempbuff));
  205. result = sscanf((char*)pstr,"%[^,],%[^,],%[^,],%s",bn,type,mfrs,tempbuff);
  206. sscanf(type,"%04x",&addr); //sn
  207. sscanf(mfrs,"%04x",&len11); // PCB版本号
  208. sscanf(bn,"%04X",&g_firmwareMsg.gatewayMsg.hardwareMsg.devicType); // 设备类型
  209. if(g_firmwareMsg.gatewayMsg.hardwareMsg.devicType!=GATEWAY_DEVICE_TYPE){
  210. memset(tempbuff,0,sizeof(tempbuff));
  211. strcpy(tempbuff,(char*)"+EEPROMWR:ERR,Device_mismatch\r\n");
  212. uart_msg_send(UART1_ID, (char *)tempbuff, strlen(tempbuff));
  213. return;
  214. }
  215. len1 = 0;
  216. for(i = 0; i < len11*2; i+=2)
  217. {
  218. temp1 = HexToChar(tempbuff[i]);
  219. temp2 = HexToChar(tempbuff[i+1]);
  220. sendbuff[len1] = (temp1<<4) | temp2;
  221. len1++;
  222. }
  223. AT24CXX_Write(addr,(uint8_t*)sendbuff,len11);
  224. uart_msg_send(UART1_ID, (char *)answer[6], strlen(answer[6]));
  225. memset(&rcv_buf_pt,0,sizeof(rcv_buf_pt));
  226. }
  227. }
  228. else if(strstr((char*)data,"AT+EEPROMRD")){ // EEPROM 读取
  229. if( g_ptTest.bTestStart == 0) return;
  230. pstr = strstr((char*)data,"AT+EEPROMRD");
  231. if(strstr(pstr,"\r\n")){
  232. pstr = pstr + strlen("AT+EEPROMRD=");
  233. memset(type,0,sizeof(type));
  234. memset(mfrs,0,sizeof(type));
  235. memset(tempbuff,0,sizeof(tempbuff));
  236. result = sscanf((char*)pstr,"%[^,],%s",type,mfrs);
  237. sscanf(type,"%04x",&addr); //sn
  238. sscanf(mfrs,"%04x",&len11); // PCB???
  239. AT24CXX_Read(addr,tempbuff,len11);
  240. memset(sendbuff,0,sizeof(sendbuff));
  241. sprintf(sendbuff,"+EEPROMRD:%04x,",len11);
  242. result = 15;
  243. for(i=0;i<len11;i++){
  244. len1 += snprintf((char *)sendbuff + result + len1, sizeof(sendbuff), "%02x", tempbuff[i]);
  245. }
  246. uart_msg_send(UART1_ID, sendbuff, len1+result);
  247. memset(&rcv_buf_pt,0,sizeof(rcv_buf_pt));
  248. }
  249. }
  250. else if(strstr((char*)data,"AT+RST\r\n")) { //复位
  251. if( g_ptTest.bTestStart == 0) return;
  252. uart_msg_send(UART1_ID, (char *)answer[5], strlen(answer[5]));
  253. delay_ms(100);//延时100ms
  254. NVIC_SystemReset();//复位
  255. }
  256. else if(strstr((char*)data,"AT+PTMOD\r\n")){ // 查询当前是否在产测模式下 产测版本
  257. pstr = strstr((char*)data,"AT+PTMOD\r\n");
  258. if(g_ptTest.bTestStart==1) uart_msg_send(UART1_ID, (char *)answer[1], strlen(answer[1]));
  259. else uart_msg_send(UART1_ID, (char *)answer[2], strlen(answer[2]));
  260. memset(pstr,0xFF,10);
  261. }
  262. // if(strstr((char*)data,"AT+HSN="))
  263. // {
  264. // result = sscanf((char*)data,"AT+HSN=%08X%n",&id,&n);
  265. // if(result==1)
  266. // {
  267. // g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn = id;
  268. // fram_read_gateway_hardware_msg();
  269. // printf("+HSN:OK\r\n");
  270. // NVIC_SystemReset();//复位
  271. // }
  272. // else
  273. // {
  274. // printf("ERR4:%s\r\n",(char*)data);//Parameter error
  275. // }
  276. // }
  277. // else if(strstr((char*)data,"AT+HSN\r\n"))
  278. // {
  279. // printf("+HSN:%08X\r\n",g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn);
  280. // }
  281. // else if(strstr((char*)data,"AT+DSN="))
  282. // {
  283. // result = sscanf((char*)data,"AT+DSN=%d\r\n%n",&id,&n);
  284. // if(result==1)
  285. // {
  286. // g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn = id;
  287. // fram_read_gateway_hardware_msg();
  288. // printf("+DSN:OK\r\n");
  289. // NVIC_SystemReset();//复位
  290. // }
  291. // else
  292. // {
  293. // printf("ERR4:%s\r\n",(char*)data);//Parameter error
  294. // }
  295. // }
  296. // else if(strstr((char*)data,"AT+DSN\r\n"))
  297. // {
  298. // printf("+DSN:%010d\r\n",g_firmwareMsg.gatewayMsg.hardwareMsg.gateway_sn);
  299. // }
  300. // else if(strstr((char*)data,"AT+HELP\r\n"))
  301. // {
  302. // printf("\r\n提示符 \"<\" \">\" 不用输入\r\n");
  303. // printf("AT+DSN=<COINNOVATION>,<DSN> 设置SN(DSN十进制设备编号)\r\n");
  304. // printf("AT+DSN 查询SN(十进制)\r\n");
  305. // printf("AT+HSN 查询SN(十六进制)\r\n");
  306. // }
  307. }