/* * @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