| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- /*
- * @Description:
- * @Version: 2.0
- * @Author: Seven
- * @Date: 2023-06-06 14:19:14
- * @LastEditors: Seven
- * @LastEditTime: 2023-06-08 09:22:45
- */
- #include "uart_pt.h"
- #include "includes.h"
- #if 1
- PtTest g_ptTest;
- char sendbuff[320] = {0};
- char pt_rtbuf[320] = {0};
- void pt_return_handle(uint32_t uartid, char *data)
- {
- memset(pt_rtbuf,0,sizeof(pt_rtbuf));
- strcpy(pt_rtbuf,data);
- usart_tx_dma_send(uartid,(uint8_t *)pt_rtbuf,strlen(pt_rtbuf));
- }
- void gw_net_send_02(char *data, char *send_buf, uint16_t len, uint16_t *llen)
- {
- int i;
- // char send_buf[32];
- char value = 0;
- int send_len=0;
- const uint16_t len1 = len;
- // memset(send_buf,0,sizeof(send_buf));
- for(i = 0;i < len1;i++) {
- value = data[i];
- send_len += snprintf((char *)send_buf + send_len, sizeof(send_buf), "%02x", value);
- }
- *llen = send_len;
- // return &(send_buf[0]);
- }
- void uart_cmd_task(uint32_t uartid, char *data, uint16_t len)
- {
- char * p_data = NULL;
- int i = 0, j = 0, flag = 0;
- int n = 0, len1 = 0;
- uint8_t temp1 = 0, temp2 = 0;
- uint16_t len2;
- uint32_t addr,len11;
- uint32_t device_sn; //设备sn
- uint32_t device_type; //设备类型
- uint32_t manufactures; //产品制造商
- uint32_t batch_number; //批次号
- uint32_t production_data; //出厂日期
- uint32_t pcb_ver; //PCB版本
-
- char tempbuff[128] = {0};
- char type[4] = {0};
- char ssn[11] = {0};
- char pcbVr[3] = {0};
- char bn[5] = {0};
- char mfrs[5] = {0};
- char pd[9] = {0};
- char port[6] = {0};
- char user01[8] = {0};
- char password[16] = {0};
- if(strstr(data,"AT+PTMOD=ON\r\n")){ // 产测开始指令
- g_ptTest.bTestStart = PT_ON;
- pt_return_handle(uartid,"+PTMOD:ON,00000001\r\n");
- timeout_setValue(&g_ptTest.tt_pt_time,PT_TIME,1);//打开产测定时
- }
- else if(strstr(data,"AT+PTMOD=OFF\r\n"))//关闭产测指令
- {
- g_ptTest.bTestStart = PT_OFF;
- pt_return_handle(uartid,"+PTMOD:OFF,00000001\r\n");
- timeout_stop(&g_ptTest.tt_pt_time);//关闭产测定时
- delay_ms(100);
- NVIC_SystemReset();
- }
- else if(strstr(data,"AT+PTMOD\r\n"))
- {// 查询当前是否在产测模式下 产测版本
- if(g_ptTest.bTestStart==PT_ON)
- {
- pt_return_handle(uartid,"+PTMOD:ON,00000001\r\n");
- }
- else
- {
- pt_return_handle(uartid,"+PTMOD:OFF,00000001\r\n");
- }
- }
- if(g_ptTest.bTestStart == PT_ON)//打开产测后
- {
- if(strstr(data,"AT+INITDEVINFO=WBJW,"))// 初始化信息 设备类型 sn 批次号 生产厂商 生产日期
- {
- p_data = strstr(data,"AT+INITDEVINFO=WBJW,");
- if(strstr(p_data,"\r\n"))
- {
- sscanf(p_data,"AT+INITDEVINFO=WBJW,%[^\r\n]\r\n",tempbuff);
- sscanf((char*)tempbuff,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%s",type,ssn,pcbVr,bn,mfrs,pd,tempbuff,port,sendbuff);
- }
- i = 0; flag = 0; j=0;
- do{
- if(sendbuff[i]!=',' ){
- if(flag==0){
- user01[i] = sendbuff[i];
- }
- else if(flag==1){
- password[j ] = sendbuff[i];
- j++;
- }
- }
- else {
- if(flag==0) flag = 1;
- }
- i++;
- }while(sendbuff[i]!='\0');
-
- sscanf(type,"%04X",&device_type); // 设备类型
- sscanf(ssn,"%010u",&device_sn); //sn
- sscanf(pcbVr,"%02X",&pcb_ver); //PCB版本
- sscanf(bn,"%04X",&batch_number); //批次号
- sscanf(mfrs,"%04X",&manufactures); //生产厂商
- sscanf(pd,"%08X",&production_data); // 生产日期
- if(device_type != DEV_TYPE)
- {
- pt_return_handle(uartid,"+INITDEVINFO:ERR,Device_mismatch\r\n");
- return;
- }
- g_firmwareMsg.gatewayMsg.hardwareMsg.firstPowerUp = 0x5A5A;
- g_firmwareMsg.gatewayMsg.hardwareMsg.eepromVer = 1;
- g_firmwareMsg.gatewayMsg.hardwareMsg.bInit = 1;
- g_firmwareMsg.gatewayMsg.hardwareMsg.devicType = device_type;
- g_firmwareMsg.gatewayMsg.hardwareMsg.device_sn = device_sn;
- g_firmwareMsg.gatewayMsg.hardwareMsg.factoryMsg = manufactures;
- g_firmwareMsg.gatewayMsg.hardwareMsg.seqNo = batch_number;
- g_firmwareMsg.gatewayMsg.hardwareMsg.data = production_data;
- g_firmwareMsg.gatewayMsg.hardwareMsg.pcbVersion = pcb_ver;
- // g_firmwareMsg.gatewayMsg.hardwareMsg.sqare = 0;
- fram_write_hardware_msg(); // 写入EEPROOM
-
- sscanf(tempbuff,"%s",g_firmwareMsg.mqttidport.ip); // mqtt 服务器地址
- sscanf(port,"%s",g_firmwareMsg.mqttidport.port); //mqtt 端口号
- sscanf(user01,"%s",g_firmwareMsg.mqttidport.admin);
- sscanf(password,"%s",g_firmwareMsg.mqttidport.password);
- g_firmwareMsg.mqttidport.flag = 1;
-
- fram_write_mqtt_msg();
-
- // fram_init_version();//写
-
- // g_firmwareMsg.gatewayMsg.verMsg.pt_version = SOFTWARE_VERSION_PT;
- // AT24CXX_Write(DEVICE_VERSION_INFO_ADDR+4,(uint8_t*)&g_firmwareMsg.gatewayMsg.verMsg.pt_version,sizeof(GateVersionMsg));//写产测版本
-
- pt_return_handle(uartid,"+INITDEVINFO:OK\r\n");
- }
- else if(strstr(data,"AT+DEVINFO\r\n")) // 读取信息
- {
-
- fram_read_hardware_msg();
- fram_read_mqtt_msg();
- // fram_read_version();
- memset(sendbuff,0,sizeof(sendbuff));
- strcpy(sendbuff,"+DEVINFO:"); // 文件头
-
- memset(tempbuff,0,sizeof(tempbuff));
- sprintf(tempbuff,"%04x,%010u,%02x,%04x,",g_firmwareMsg.gatewayMsg.hardwareMsg.devicType,\
- g_firmwareMsg.gatewayMsg.hardwareMsg.device_sn,\
- g_firmwareMsg.gatewayMsg.hardwareMsg.pcbVersion,g_firmwareMsg.gatewayMsg.devicTypeID);
- strcat(sendbuff,tempbuff);
-
- memset(tempbuff,0,sizeof(tempbuff));
- gw_net_send_02((char*)g_firmwareMsg.gatewayMsg.Uuid,(char*)tempbuff,12,&len2);
- strcat(sendbuff,tempbuff);
- strcat(sendbuff,",");
-
- // memset(tempbuff,0,sizeof(tempbuff));
- // strncpy(tempbuff,(char*)g_firmwareMsg.gatewayMsg.Imei,15);
- // strcat(sendbuff,tempbuff);
- memset(tempbuff,0,sizeof(tempbuff));
- sprintf(tempbuff,",%08x,%08x,%04x,%04x,%08x",g_firmwareMsg.gatewayMsg.verMsg.bootloaderVr,\
- g_firmwareMsg.gatewayMsg.verMsg.appVr,g_firmwareMsg.gatewayMsg.hardwareMsg.seqNo,\
- g_firmwareMsg.gatewayMsg.hardwareMsg.factoryMsg,g_firmwareMsg.gatewayMsg.hardwareMsg.data);
- strcat(sendbuff,tempbuff);
-
- memset(tempbuff,0,sizeof(tempbuff));
- sprintf(tempbuff,",%s,%s,%s,%s",g_firmwareMsg.mqttidport.ip,g_firmwareMsg.mqttidport.port, \
- g_firmwareMsg.mqttidport.admin,g_firmwareMsg.mqttidport.password);
- strcat(sendbuff,tempbuff);
- len1 = strlen(sendbuff);
-
- sendbuff[len1] = 0x0D;
- sendbuff[len1+1] = 0x0A;
-
- // usart_tx_dma_send(uartid,(uint8_t *)sendbuff,strlen(sendbuff));
- pt_return_handle(uartid,sendbuff);
- }
- else if(strstr(data,"AT+EEPROMERASE=")){ // 擦除EEPROM
- p_data = strstr(data,"AT+EEPROMERASE=");
- if(strstr(p_data,"\r\n")){
- memset(type,0,sizeof(type));
- sscanf(p_data,"AT+EEPROMERASE=%[^\r\n]\r\n",type);
- sscanf(type,"%04X",&device_type); // 设备类型
- if(device_type!=DEV_TYPE){
- pt_return_handle(uartid,"+EEPROMERASE:ERR,Device_mismatch\r\n");
- memset(data,0,len);
- return;
- }
- fram_init();
- pt_return_handle(uartid,"+EEPROMERASE:OK\r\n");
- }
- }
- else if(strstr((char*)data,"AT+EEPROMWR=")) { // EEPROM 写
- p_data = strstr((char*)data,"AT+EEPROMWR=");
- if(strstr(p_data,"\r\n")){
- memset(type,0,sizeof(type));
- memset(mfrs,0,sizeof(mfrs));
- memset(bn,0,sizeof(bn));
- memset(tempbuff,0,sizeof(tempbuff));
- sscanf(p_data,"AT+EEPROMWR=%[^\r\n]\r\n",tempbuff);
- sscanf(tempbuff,"%[^,],%[^,],%[^,],%[^,]",bn,type,mfrs,tempbuff);
- sscanf(type,"%04x",&addr); //地址
- sscanf(mfrs,"%04x",&len11); // 长度
- sscanf(bn,"%04X",&device_type); // 设备类型
- if(device_type!=DEV_TYPE){
- pt_return_handle(uartid,"+EEPROMWR:ERR,Device_mismatch\r\n");
- return;
- }
- len1 = 0;
- for(i = 0; i < len11*2; i+=2)
- {
- temp1 = HexToChar(tempbuff[i]);
- temp2 = HexToChar(tempbuff[i+1]);
- sendbuff[len1] = (temp1<<4) | temp2;
- len1++;
- }
- AT24CXX_Write(addr,(uint8_t*)sendbuff,len11);
- pt_return_handle(uartid,"+EEPROMWR:OK\r\n");
- }
- }
- else if(strstr((char*)data,"AT+EEPROMRD=")){ // EEPROM 读取
- p_data = strstr((char*)data,"AT+EEPROMRD=");
- if(strstr(p_data,"\r\n")){
- memset(type,0,sizeof(type));
- memset(mfrs,0,sizeof(type));
- memset(tempbuff,0,sizeof(tempbuff));
- sscanf(p_data,"AT+EEPROMRD=%[^\r\n]\r\n",tempbuff);
- sscanf(tempbuff,"%[^,],%[^,]",type,mfrs);
- sscanf(type,"%04x",&addr); //地址
- sscanf(mfrs,"%04x",&len11); //长度
- AT24CXX_Read(addr,(uint8_t *)tempbuff,len11);
- memset(sendbuff,0,sizeof(sendbuff));
- sprintf(sendbuff,"+EEPROMRD:%04x,",len11);
- n = 15;
- for(i=0;i<len11;i++){
- len1 += snprintf((char *)sendbuff + n + len1, sizeof(sendbuff), "%02x", tempbuff[i]);
- }
- pt_return_handle(uartid,sendbuff);
- }
- }
- else if(strstr((char*)data,"AT+MQTTWR=WBJW,")) { // MQTT信息写入
- p_data = strstr((char*)data,"AT+MQTTWR=WBJW,");
- if(strstr(p_data,"\r\n")){
- memset(tempbuff,0,sizeof(tempbuff));
- memset(port,0,sizeof(port));
- memset(user01,0,sizeof(user01));
- memset(password,0,sizeof(password));
- sscanf(p_data,"AT+MQTTWR=WBJW,%[^,],%[^,],%[^,],%s",tempbuff,port,user01,password);
- fram_init_mqtt_msg();
- sscanf(tempbuff,"%s",g_firmwareMsg.mqttidport.ip); // mqtt 服务器地址
- sscanf(port,"%s",g_firmwareMsg.mqttidport.port); //mqtt 端口号
- sscanf(user01,"%s",g_firmwareMsg.mqttidport.admin);
- sscanf(password,"%s",g_firmwareMsg.mqttidport.password);
- g_firmwareMsg.mqttidport.flag = 1;
- fram_write_mqtt_msg();
- pt_return_handle(uartid,"+MQTTWR:OK\r\n");
- }
- }
- else if(strstr((char*)data,"AT+MQTTRD\r\n")) { // mqtt 信息读取
- p_data = strstr((char*)data,"AT+MQTTRD\r\n");
- fram_read_mqtt_msg();
- memset(sendbuff,0,sizeof(sendbuff));
- strcpy(sendbuff,"+MQTTRD:"); // 文件头
- memset(tempbuff,0,sizeof(tempbuff));
- sprintf(tempbuff,"%s,%s,%s,%s",g_firmwareMsg.mqttidport.ip,g_firmwareMsg.mqttidport.port, \
- g_firmwareMsg.mqttidport.admin,g_firmwareMsg.mqttidport.password);
- strcat(sendbuff,tempbuff);
- len1 = strlen(sendbuff);
- sendbuff[len1] = 0x0D;
- sendbuff[len1+1] = 0x0A;
- pt_return_handle(uartid,sendbuff);
- }
- else if(strstr((char*)data,"AT+RST\r\n")) { //复位
- pt_return_handle(uartid,"+RST:OK\r\n");
- delay_ms(100);//延时100ms
- NVIC_SystemReset();//复位
- }
- }
- }
- uint8_t PT_RCVBuf[256];
- uint16_t PT_RCVLen;
- //产测处理
- void pt_cmd_task(void)
- {
- if(!Check_Seqeue_Empty(uart0_rx_sq))
- {
- PT_RCVLen=0;
- memset(PT_RCVBuf,0,sizeof(PT_RCVBuf));
- De_Queue(uart0_rx_sq,PT_RCVBuf,sizeof(PT_RCVBuf),&PT_RCVLen);
- // printf("rcv len:%u\n",PT_RCVLen);
- // data_dump("uart1 rcv",PT_RCVBuf,PT_RCVLen);
- // uart_cmd_task((char *)Rcv_Buf,lout);
- uart_cmd_task(USART0,(char *)PT_RCVBuf,PT_RCVLen);
- }
- else if(!Check_Seqeue_Empty(uart3_rx_sq))
- {
- PT_RCVLen=0;
- memset(PT_RCVBuf,0,sizeof(PT_RCVBuf));
- De_Queue(uart3_rx_sq,PT_RCVBuf,sizeof(PT_RCVBuf),&PT_RCVLen);
- // printf("rcv len:%u\n",PT_RCVLen);
- // data_dump("uart1 rcv",PT_RCVBuf,PT_RCVLen);
- uart_cmd_task(RS485_USARTx,(char *)PT_RCVBuf,PT_RCVLen);
- }
-
-
- if(timeout_isOut(&g_ptTest.tt_pt_time))
- {
- NVIC_SystemReset();
- }
- }
- #endif
|