| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- #include "uart_conf.h"
- #include "includes.h"
- #include "BSP.h"
- #include "AT24c128.h"
- #include "net_proc.h"
- #include "lora.h"
- #include "ota.h"
- PtTest g_ptTest;
- char *answer[] = {
- "+PTMOD:ON,00000001\r\n",//0
- "+PTMOD:ON,00000001\r\n",//1
- "+PTMOD:OFF,00000001\r\n",//2
- "+INITDEVINFO:OK\r\n",//3
- "+INITDEVINFO:ERR,DEVICE_TYPE_MISMATCH\r\n",//4
- "+EEPROMERASE:OK\r\n",//5
- "+EEPROMERASE:ERR,DEVICE_TYPE_MISMATCH\r\n",//6
- "+RST:OK\r\n",//7
- "+EEPROMWR:OK\r\n",//8
- "+EEPROMWR:ERR\r\n",//9
- "+INITLORAPARAINDEX:OK\r\n",//10
- "+INITLORAPARAINDEX:ERR\r\n",//11
- "+OFFLINE:OK\r\n",//12
- "+OFFLINE:ERR\r\n",//13
- };
- char Send_Buf_Char[320];
- char *gw_net_send_02(char *data, uint16_t len, uint16_t *llen)
- {
- int i;
- //char send_buf[320];
- char value = 0;
- int send_len=0;
- const uint16_t len1 = len;
- memset(Send_Buf_Char,0,sizeof(Send_Buf_Char));
- for(i = 0;i < len1;i++) {
- value = data[i];
- send_len += snprintf((char *)Send_Buf_Char + send_len, sizeof(Send_Buf_Char), "%02x", value);
- }
- *llen = send_len;
- return &(Send_Buf_Char[0]);
- }
- extern uint8_t rcv_buf_pt[256];
- char sendbuff[320] = {0};
- uint8_t eeprom_buf[64] = {0};
- uint32_t eeprom_addr=0;
- #define EEPROM_PAGE 256
- #define EEPROM_BUF_LEN 64
- void uart_cmd_task(uint8_t *data, uint8_t len)
- {
- OS_ERR err;
- uint16_t eeprom_first = 0;
- int i = 0;
- int result = 0;
- int len1 = 0;
- uint16_t len11;
- unsigned int lora_index;
- uint32_t device_id; //设备sn
- uint32_t device_type; //设备类型
- uint32_t manufactures; //产品制造商
- uint32_t batch_number; //批次号
- uint32_t production_data; //出厂日期
- uint32_t pcb_ver; //PCB版本
-
- char tempbuff[130] = {0};
- char type[5] = {0};
- char ssn[11] = {0};
- char pcb[3] = {0};
- char bn[5] = {0};
- char mfrs[5] = {0};
- char pd[9] = {0};
- char port[6] = {0};
- char usr[40] = {0};
- char pwd[40] = {0};
-
- //eeprom
- char eepaddr[5] = {0};
- char eeplen[5] = {0};
- uint32_t eep_addr = 0;
- uint32_t eep_len = 0;
- uint16_t eep_len_temp = 0;
- char * p_data = NULL;
- //测试离线升级
- char master_snb[15] = {0};
- char slave_snb[15] = {0};
- char des_snb[15] = {0};
- unsigned int master_sn = 0;
- unsigned int slave_sn = 0;
- unsigned int des_sn = 0;
- if(0 == strncmp((char*)data,"AT+PTMOD=ON\r\n",len)){ // 产测开始指令
- g_ptTest.bTestStart = PT_ON;
- uart_msg_send(UART1_ID, (char *)answer[0], strlen(answer[0]));
-
- device_fixed_info.Work_State = DEV_WORK_STATE_PT;
- //关闭所有灯
- close_all_led();
-
- // if(hd_id == PCB_V1)//关闭编码器中断
- {
- encoder_irq_set(DISABLE);
- }
- }
- else if(strstr((char*)data,"AT+PTMOD\r\n")){ // 查询当前是否在产测模式下 产测版本
- if(g_ptTest.bTestStart==PT_ON) uart_msg_send(UART1_ID, (char *)answer[1], strlen(answer[1]));
- else uart_msg_send(UART1_ID, (char *)answer[2], strlen(answer[2]));
- }
- if(g_ptTest.bTestStart == PT_ON)
- {
- if(0 == strncmp((char*)data,"AT+PTMOD=OFF\r\n",len)){ //产测结束指令
- g_ptTest.bTestStart = PT_OFF;
- uart_msg_send(UART1_ID, (char *)answer[2], strlen(answer[2]));
-
- if(device_info.alrd == DEVICE_ALRD)//已初始化
- {
- device_fixed_info.Work_State = DEV_WORK_STATE_NORMAL;
- }
- else
- {
- device_fixed_info.Work_State = DEV_WORK_STATE_UNINIT;
- //未初始化时,将设备sn置为0xffffffff;设备类型是默认的
- device_info.device_id = 0xffffffff;
- device_info.device_type = (SOFTWARE_VERSION_APP&0xffff0000)>>16;
- }
-
- // if(hd_id == PCB_V1)//打开编码器中断
- {
- encoder_irq_set(ENABLE);
- }
- }
-
- else if(strstr((char*)data,"AT+INITDEVINFO=WBJW,")){ // 初始化信息 设备类型 sn 批次号 生产厂商 生产日期
- p_data=strstr((char*)data,"AT+INITDEVINFO=WBJW,");
- if(strstr(p_data,"\r\n"))
- {
- result = sscanf((char*)p_data,"AT+INITDEVINFO=WBJW,%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,]\r\n",type,ssn,pcb,bn,mfrs,pd,tempbuff,port,usr,pwd);
- sscanf(type,"%04X",&device_type); // 设备类型
- sscanf(ssn,"%010u",&device_id); //sn
- sscanf(pcb,"%02X",&pcb_ver); //PCB版本
- sscanf(bn,"%04X",&batch_number); //批次号
- sscanf(mfrs,"%04X",&manufactures); //生产厂商
- sscanf(pd,"%08X",&production_data); // 生产日期
- if(device_type_cmp(SOFTWARE_VERSION_APP,(u16)device_type) == 0)
- {
- uart_msg_send(UART1_ID, (char *)answer[4], strlen(answer[4]));
- memset(&rcv_buf_pt,0,sizeof(rcv_buf_pt));
- return;
- }
-
- device_info.alrd = DEVICE_ALRD;
- device_info.device_type = device_type;
- device_info.device_id = device_id;
- device_info.batch_number = batch_number;
- device_info.manufactures = manufactures;
- device_info.production_data = production_data;
- device_info.pcb_ver = pcb_ver;
-
- device_info_update();//写eeprom
-
- eeprom_first = EEPROM_FIRST_INIT_FLAG;
- AT24CXX_Write(EECFG_FIRST_INIT0, (uint8_t *)&eeprom_first, 2);
- uart_msg_send(UART1_ID, (char *)answer[3], strlen(answer[3]));
- }
- }
- else if(0 == strncmp((char*)data,"AT+DEVINFO\r\n",len)){ // 读取信息
- device_info_get();//读取eeprom中的设备信息
- memset(sendbuff,0,sizeof(sendbuff));
- strcpy(sendbuff,"+DEVINFO:"); // 文件头
- memset(tempbuff,0,sizeof(tempbuff));
- sprintf(tempbuff,"%04x,%010u,%02x,%04x,",device_info.device_type,\
- device_info.device_id,\
- device_info.pcb_ver,device_fixed_info.MCU_Type_ID);
- strcat(sendbuff,tempbuff);
- gw_net_send_02((char*)device_fixed_info.MCU_UUID,12,&len11);
- memset(tempbuff,0,sizeof(tempbuff));
- memcpy(tempbuff,Send_Buf_Char,len11);
- strcat(sendbuff,tempbuff);
- strcat(sendbuff,",");
- memset(tempbuff,0,sizeof(tempbuff));
- sprintf(tempbuff,"%s,%08x,%08x,%04x,%04x,%08x,,,,","", device_fixed_info.Soft_ver_boot,\
- device_fixed_info.Soft_ver_app,device_info.batch_number,\
- device_info.manufactures,device_info.production_data);
- strcat(sendbuff,tempbuff);
- len1 = strlen(sendbuff);
- sendbuff[len1] = 0x0D;
- sendbuff[len1+1] = 0x0A;
- uart_msg_send(UART1_ID, sendbuff, strlen(sendbuff));
- }
- else if(strstr((char*)data,"AT+EEPROMERASE="))//擦除整片eeprom
- {
- p_data = strstr((char*)data,"AT+EEPROMERASE=");
- if(strstr(p_data,"\r\n"))
- {
- result = sscanf((char*)p_data,"AT+EEPROMERASE=%[^,]\r\n",type);
- sscanf(type,"%04X",&device_type); // 设备类型
- if(device_type_cmp(SOFTWARE_VERSION_APP,(u16)device_type) == 0)
- {
- uart_msg_send(UART1_ID, (char *)answer[6], strlen(answer[6]));
- memset(&rcv_buf_pt,0,sizeof(rcv_buf_pt));
- return;
- }
-
- eeprom_addr = 0;
- memset(eeprom_buf,0,EEPROM_BUF_LEN);
- for(i = 0; i < EEPROM_PAGE; i++)
- {
- AT24CXX_Write(eeprom_addr, eeprom_buf, EEPROM_BUF_LEN);
- eeprom_addr += EEPROM_BUF_LEN;
- }
-
- uart_msg_send(UART1_ID, (char *)answer[5], strlen(answer[5]));
-
- //清除接收数据FIFO
- uart_blocking_read((char *)tempbuff, UART_DEBUG, 1);
- }
- }
- else if(strstr((char*)data,"AT+RST\r\n"))//复位
- {
- uart_msg_send(UART1_ID, (char *)answer[7], strlen(answer[7]));
- OSTimeDlyHMSM(0, 0, 0, 100, OS_OPT_TIME_DLY, &err);
- NVIC_SystemReset();
- }
- else if(strstr((char*)data,"AT+EEPROMWR="))//测外部eeprom写
- {
- p_data=strstr((char*)data,"AT+EEPROMWR=");
- if(strstr(p_data,"\r\n"))
- {
- memset(tempbuff,0,sizeof(tempbuff));
- result = sscanf((char*)p_data,"AT+EEPROMWR=%[^,],%[^,],%[^,]\r\n",eepaddr,eeplen,tempbuff);
- sscanf(eepaddr,"%04X",&eep_addr); //地址
- sscanf(eeplen,"%04X",&eep_len); //长度
- eep_len_temp = asciitohex(tempbuff,eeprom_buf,strlen(tempbuff)-2);
-
- if(eep_len == eep_len_temp) //OK
- {
- AT24CXX_Write(eep_addr,(uint8_t *)eeprom_buf,eep_len);
- uart_msg_send(UART1_ID, (char *)answer[8], strlen(answer[8]));
- }
- else//ERR
- {
- uart_msg_send(UART1_ID, (char *)answer[9], strlen(answer[9]));
- }
- }
-
- }
- else if(strstr((char*)data,"AT+EEPROMRD="))//测外部eeprom读
- {
- p_data=strstr((char*)data,"AT+EEPROMRD=");
- if(strstr(p_data,"\r\n"))
- {
- result = sscanf((char*)p_data,"AT+EEPROMRD=%[^,],%[^,]\r\n",eepaddr,eeplen);
- sscanf(eepaddr,"%04X",&eep_addr); //地址
- sscanf(eeplen,"%04X",&eep_len); //长度
-
- AT24CXX_Read(eep_addr,eeprom_buf,eep_len);
-
- memset(Send_Buf_Char,0,sizeof(Send_Buf_Char));
- gw_net_send_02((char*)eeprom_buf,eep_len,&len11);
-
- memset(sendbuff,0,sizeof(sendbuff));
- strcpy(sendbuff,"+EEPROMRD:"); // 文件头
-
- memset(tempbuff,0,sizeof(tempbuff));
- len11 = sprintf(tempbuff,"%04x,%04x,",eep_addr,eep_len);
- strcat(sendbuff,tempbuff);
-
- strcat(sendbuff,Send_Buf_Char);
-
- len1 = strlen(sendbuff);
- sendbuff[len1] = 0x0D;
- sendbuff[len1+1] = 0x0A;
- uart_msg_send(UART1_ID, sendbuff, strlen(sendbuff));
- }
- }
- else if(strstr((char*)data,"AT+INITLORAPARAINDEX=WBJW,")) //写LoRa参数当前组索引号
- {
- p_data=strstr((char*)data,"AT+INITLORAPARAINDEX=WBJW,");
- if(strstr(p_data,"\r\n"))
- {
- result = sscanf((char*)p_data,"AT+INITLORAPARAINDEX=WBJW,%[^,]\r\n",type);
- sscanf(type,"%u",&lora_index); // 设备类型
- if(lora_index < LORA_GROUP_MAX)//正确
- {
- eepaddr[0] = lora_index;
- eepaddr[1] = ~eepaddr[0];
- AT24CXX_Write(LORA_ADDR,(uint8_t *)eepaddr,2);
- uart_msg_send(UART1_ID, (char *)answer[10], strlen(answer[10]));
- }
- else
- {
- uart_msg_send(UART1_ID, (char *)answer[11], strlen(answer[11]));
- }
- }
- }
- else if(strstr((char*)data,"AT+LORAPARAINDEX\r\n")) //读LoRa参数当前组索引号
- {
- memset(sendbuff,0,sizeof(sendbuff));
- strcpy(sendbuff,"+LORAPARAINDEX:"); // 文件头
-
- AT24CXX_Read(LORA_ADDR,(uint8_t *)eepaddr,2);
-
- memset(tempbuff,0,sizeof(tempbuff));
- sprintf(tempbuff,"%u",eepaddr[0]);
- strcat(sendbuff,tempbuff);
-
- len1 = strlen(sendbuff);
- sendbuff[len1] = 0x0D;
- sendbuff[len1+1] = 0x0A;
- uart_msg_send(UART1_ID, sendbuff, strlen(sendbuff));
- }
- else if(strstr((char*)data,"AT+ENCRYPT\r\n")) //读连接器加密状态
- {
- memset(sendbuff,0,sizeof(sendbuff));
- strcpy(sendbuff,"+ENCRYPT:"); // 文件头
-
- memset(tempbuff,0,sizeof(tempbuff));
- sprintf(tempbuff,"%u",device_fixed_info.Encrypt);
- strcat(sendbuff,tempbuff);
-
- len1 = strlen(sendbuff);
- sendbuff[len1] = 0x0D;
- sendbuff[len1+1] = 0x0A;
- uart_msg_send(UART1_ID, sendbuff, strlen(sendbuff));
- }
- else if(strstr((char*)data,"AT+OFFLINE=")) //测试。下发离线升级指令
- {
- p_data=strstr((char*)data,"AT+OFFLINE=");
- if(strstr(p_data,"\r\n"))
- {
- result = sscanf((char*)p_data,"AT+OFFLINE=%[^,],%[^,],%[^,]\r\n",master_snb,slave_snb,des_snb);
- sscanf(master_snb,"%u",&master_sn);
- sscanf(slave_snb,"%u",&slave_sn);
- sscanf(des_snb,"%u",&des_sn);
- if(slave_sn != des_sn)//失败
- {
- uart_msg_send(UART1_ID, (char *)answer[13], strlen(answer[13]));
- printf("slave sn:%010u, des sn:%010u\n",slave_sn,des_sn);
- }
- else //成功
- {
- uart_msg_send(UART1_ID, (char *)answer[12], strlen(answer[12]));
- //退出产测
- g_ptTest.bTestStart = PT_OFF;
- uart_msg_send(UART1_ID, (char *)answer[2], strlen(answer[2]));
-
- if(device_info.alrd == DEVICE_ALRD)//已初始化
- {
- device_fixed_info.Work_State = DEV_WORK_STATE_NORMAL;
- }
- else
- {
- device_fixed_info.Work_State = DEV_WORK_STATE_UNINIT;
- //未初始化时,将设备sn置为0xffffffff;设备类型是默认的
- device_info.device_id = 0xffffffff;
- device_info.device_type = (SOFTWARE_VERSION_APP&0xffff0000)>>16;
- }
- //Lora发送命令
- lora_offline_update(master_sn,slave_sn,des_sn);
- }
-
- }
- }
- }
-
- memset(&rcv_buf_pt,0,sizeof(rcv_buf_pt));
- }
|