diff --git a/cp.sh b/cp.sh index 98eab8a..9049688 100755 --- a/cp.sh +++ b/cp.sh @@ -1,7 +1,10 @@ #sshpass -p "&Over#B0Ost!" scp ./start.sh root@10.10.10.101:/root/ -sshpass -p "&Over#B0Ost!" scp ./output/bin/tx_server root@10.10.10.235:/root/ +#sshpass -p "&Over#B0Ost!" scp ./output/bin/tx_server root@10.10.12.2:/root/ #sshpass -p "&Over#B0Ost!" scp ./output/bin/tx_server root@10.10.10.101:/home/linaro/ #sshpass -p "PddloTSecPwdOnly!" scp ./output/bin/tx_server root@192.168.0.148:/home/linaro/ -#sshpass -p "PddloTSecPwdOnly!" scp ./output/bin/tx_server root@10.10.10.132:/root/ -#sshpass -p "PddloTSecPwdOnly!" scp ./start.sh root@10.10.10.225:/root/ -#sshpass -p "PddloTSecPwdOnly!" scp ./start.sh root@10.10.10.132:/root/ +#sshpass -p "TxApPwd#2025!" scp ./output/bin/tx_server root@10.10.12.2:/root +#sshpass -p "TxApPwd#2025!" scp ./*.zip root@10.10.12.4:/root/ota +sshpass -p "TxApPwd#2025!" scp ./tx_server_v1.1.10 root@10.10.12.2:/root +#sshpass -p "TxApPwd#2025!" scp tx_ota/*.bin root@10.10.12.4:/root/ota +#sshpass -p "PddloTSecPwdOnly!" scp ./output/bin/tx_server root@10.10.12.4:/root/ +#sshpass -p "PddloTSecPwdOnly!" scp tx_ota/*.bin root@10.10.12.6:/root/ota diff --git a/main.c b/main.c index 529c3a2..68413b1 100644 --- a/main.c +++ b/main.c @@ -3,15 +3,28 @@ #define DBG_TAG "main" #define DBG_LVL DBG_INFO #include "debug_print.h" +#if 0 +#include +#include +#include +#define DMA_START_TX _IOW('U', 0x10, struct dma_config) +struct dma_config { + void *buf; + size_t len; +}; +#endif pthread_t pt_uart_send; pthread_t pt_uart_recv_ack; pthread_t pt_uart_recv_data; pthread_t pt_uart_recv_back; pthread_t pt_mqtt_recv; pthread_t pt_readqr; +pthread_t pt_ota; +pthread_t pt_doota; pthread_t pt_mqtt; pthread_t pt_removelog; +pthread_t pt_reboot; pthread_t pt_watchdog; pthread_t pt_tagsearch; pthread_t pt_removeduplicatetag; @@ -22,21 +35,30 @@ mqtt_parm_t mqtt_parm={0}; mqtt_utils_t mqtt_config; struct input_event buff; -bool newappDownloaded=false; +bool isTimeToReboot=false; bool isLightOn=false; bool isLightOnByRule=false; bool isLabelUp=false; -bool isSearchLabel=false; +//bool isSearchLabel=false; +bool isSearchReport=false; bool isSearchLabelOn=false; bool isLightEnable=true; bool isSendComEnd=true; -jt_only_tag_t onlyTags[200]={0}; +bool isOtaEnable=false; +bool isLEDOtaSuccess=false; +bool isAPOtaSuccess=false; +bool isAPBack=false; +jt_only_tag_t onlyTags[5000]={0}; +jt_only_tag_t onlyTagsNew[5000]={0}; int tagCount=0; +int tagCountNew=0; +int tagIndex=0; +int otaCount=0; int fd; int UPCASE=0; int count_value=0; int getPayloadTime=120*1000;//usecond -char softwareVersion[16]="1.1.9"; +char softwareVersion[16]="1.1.11"; char stationsn[16]="TJ251372224247";//TJ250995217957 char productid[8]="10045"; char appKey[32]="fdhQmhqhvbL1cf1K9mUqt"; @@ -45,7 +67,7 @@ char mqttRawPassword[64]=""; char input_value[1024]={0};//94b4e39caf1d45ee9a071d701cc037b4 char input_value_copy[1024]={0}; char *getDevRegisterStatusUrl="https://gaea-zt-express.com/device/modifyRegisterInfo"; -char *logUploadUrl="http://pda.pupumall.net:1180/open/api/device/log/upload"; +//char *logUploadUrl="http://pda.pupumall.net:1180/open/api/device/log/upload"; char *getDevRawPasswordUrl="https://gaea.zt-express.com/device/modifyRegisterInfo"; char *hostDomain="tx-mqtt.zt-express.com"; char lightsn1[9]={0}; @@ -89,12 +111,12 @@ void do_removelog(void) fgets(buffer,sizeof(buffer),fp); logcount=atoi(buffer); LOG_I("logcount:%d\n",logcount); - if(logcount>=15){ - sprintf(syscmd,"ls Log.*|head -%d|xargs rm -fr",logcount-7); + if(logcount>=3){ + sprintf(syscmd,"ls Log.*|head -%d|xargs rm -fr",logcount-2); LOG_I("%s\n",syscmd); system(syscmd); }else{ - LOG_I("logcount less than 15,not remove\n"); + LOG_I("logcount less than 3,not remove\n"); } } @@ -115,22 +137,159 @@ void removeLog(){ } saved=atol(savedtime); LOG_I("now=%ld,saved=%ld,nowtime=%s,savedtime=%s\n",now,saved,nowtime,savedtime); - if(now-saved>=(60*60*24*30)){ + if(now-saved>=(60*60*24*5)){ //if(now-saved>=10){ buffer_to_file("logTime",nowtime,strlen(nowtime),"wb"); do_removelog(); } - sleep(60*60*10); + sleep(60*60*1); + } +} + +void checkOtaKey(void){ + int len=0; + int keycount=0; + char *readresult=NULL; + while(1){ + if(isOtaEnable){ + system("echo 0 > /sys/class/gpio/gpio113/value"); + sleep(1); + system("echo 1 > /sys/class/gpio/gpio113/value"); + sleep(1); + }else{ + readresult=file_to_buffer("/sys/class/gpio/gpio63/value",&len); + //LOG_I("resetKey:%s\n",readresult); + if(readresult!=NULL){ + if(strcmp(readresult,"0\n")==0){ + keycount++; + if(keycount==3){ + keycount=0; + isOtaEnable=true; + isLEDOtaSuccess=false; + isAPOtaSuccess=false; + isSendComEnd=true; + LOG_I("OTA enable\n"); + } + } + } + usleep(100*1000); + } + } +} + +void otaLeds(){ +#if 0 + int len=0,ver=0; + char *readresult=NULL; + char filename[128]={}; + uint16_t data_crc=0; + ver=getLedOtaVersion(filename); + LOG_I("ota %s ver:%d\n",filename,ver); + readresult=file_to_buffer(filename,&len); + if(readresult!=NULL){ + isSendComEnd=false; + LOG_I("data len:%d\n",len); + data_crc=CRC16_XMODEM(readresult,len); + LOG_I("crc :%04x\n",data_crc); + uart_data_send_head_ledota(&uartSend,len,data_crc,ver);//0xFF降级 + usleep(72*1000); + int i=0; + for(i=0;i /sys/class/gpio/export");//watchdog enable pin SGM820 - system("echo 112 > /sys/class/gpio/export");//feed watchdog pin 113 yellow - system("echo 113 > /sys/class/gpio/export");//feed watchdog pin 113 yellow + system("echo 112 > /sys/class/gpio/export");//feed watchdog pin 112 system("echo out > /sys/class/gpio/gpio1/direction"); system("echo out > /sys/class/gpio/gpio112/direction"); - system("echo out > /sys/class/gpio/gpio113/direction"); system("echo 1 > /sys/class/gpio/gpio1/value"); LOG_I("enable watchdog\n"); system("echo 1 > /sys/class/gpio/gpio112/value"); @@ -147,15 +306,15 @@ void feedWatchDog(){ } void rebootSystem(void){ - while(!newappDownloaded){ - if(!newappDownloaded){ + while(!isTimeToReboot){ + if(!isTimeToReboot){ struct tm *result; time_t timep; time (&timep); result = localtime(&timep); //printf("%d:%d:%d\n",result->tm_hour, result->tm_min, result->tm_sec); if(result->tm_hour==0 && result->tm_min==0 && result->tm_sec==10){ - newappDownloaded=true; + isTimeToReboot=true; LOG_I("prepare to reboot\n"); } } @@ -631,7 +790,7 @@ int readQrcode() error: return 1; } - +#if 0 void writeWpa(char *filename,char *ssid,char *psw){ LOG_I("%s\n",__func__); buffer_to_file(filename,"# WPA-PSK/TKIP\n",strlen("# WPA-PSK/TKIP\n"),"wb"); @@ -669,18 +828,70 @@ void writeWlan(char *filename,char *netway,char *gate,char *ip){ buffer_to_file(filename,"\n",strlen("\n"),"a"); } } +#endif +void writeNetworkInterface(char *filename,char *dest){ + buffer_to_file(filename,"# interfaces(5) file used by ifup(8) and ifdown(8)", + strlen("# interfaces(5) file used by ifup(8) and ifdown(8)"),"wb"); + buffer_to_file(filename,"\n",strlen("\n"),"a"); + buffer_to_file(filename,"# Include files from /etc/network/interfaces.d:",strlen("# Include files from /etc/network/interfaces.d:"),"a"); + buffer_to_file(filename,"\n",strlen("\n"),"a"); + buffer_to_file(filename,"source-directory /etc/network/interfaces.d",strlen("source-directory /etc/network/interfaces.d"),"a"); + buffer_to_file(filename,"\n",strlen("\n"),"a"); + buffer_to_file(filename,"auto lo",strlen("auto lo"),"a"); + buffer_to_file(filename,"\n",strlen("\n"),"a"); + buffer_to_file(filename,"iface lo inet loopback",strlen("iface lo inet loopback"),"a"); + buffer_to_file(filename,"\n",strlen("\n"),"a"); + buffer_to_file(filename,"auto eth0",strlen("auto eth0"),"a"); + buffer_to_file(filename,"\n",strlen("\n"),"a"); + buffer_to_file(filename,"iface eth0 inet dhcp",strlen("iface eth0 inet dhcp"),"a"); + buffer_to_file(filename,"\n",strlen("\n"),"a"); + buffer_to_file(filename,"# address 192.168.1.100",strlen("# address 192.168.1.100"),"a"); + buffer_to_file(filename,"\n",strlen("\n"),"a"); + buffer_to_file(filename,"# netmask 255.255.255.0",strlen("# netmask 255.255.255.0"),"a"); + buffer_to_file(filename,"\n",strlen("\n"),"a"); + buffer_to_file(filename,"# gateway 192.168.1.1",strlen("# gateway 192.168.1.1"),"a"); + buffer_to_file(filename,"\n",strlen("\n"),"a"); + buffer_to_file(filename,"hwaddress ether ",strlen("hwaddress ether "),"a"); + buffer_to_file(filename,dest,strlen(dest),"a"); + system("sync"); +} -void removeFile(char *filename){ - char cmd[32]={0}; - sprintf(cmd,"rm %s",filename); - //LOG_I("%s\n",cmd); - system(cmd); +char* insert_colon(const char* src, int interval) { + if (!src || interval <= 0) return NULL; + + size_t len = strlen(src); + if (len == 0) { // 空字符串返回空 + char* res = malloc(1); + if (res) res[0] = '\0'; + return res; + } + + // 计算新字符串长度 + size_t sections = (len + interval - 1) / interval; // 总段数 + size_t new_len = len + (sections - 1); // 新长度 = 原长 + 冒号数 + char* new_str = malloc(new_len + 1); // 分配内存:ml-citation{ref="2" data="citationList"} + if (!new_str) return NULL; + + size_t src_idx = 0, dst_idx = 0; + while (src_idx < len) { + // 计算本次复制的字符数 + size_t copy_size = (len - src_idx < (size_t)interval) ? (len - src_idx) : (size_t)interval; + memcpy(new_str + dst_idx, src + src_idx, copy_size); // 块复制:ml-citation{ref="3" data="citationList"} + src_idx += copy_size; + dst_idx += copy_size; + + // 非末尾段时插入冒号 + if (src_idx < len) new_str[dst_idx++] = ':'; + } + new_str[dst_idx] = '\0'; // 终止符:ml-citation{ref="7" data="citationList"} + return new_str; } void *actHandleQrcode(void *parm){ char *str=(char *)parm; LOG_I("scan:%s\n",str); if(strstr(str,"{")!=NULL){ +#if 0 char deviceSecret[64]={0}; char deviceCode[64]={0}; char netWorkType[64]={0}; @@ -720,9 +931,27 @@ void *actHandleQrcode(void *parm){ sleep(1); system("reboot"); } +#endif }else{ - if(strstr(str,"TJ")!=NULL && strlen(str)==14){ - buffer_to_file("savedDevSn",str,strlen(str),"wb"); + if(strstr(str,"TJ")!=NULL && strlen(str)==27){ + LOG_I("ok\n"); + char *result=NULL; + char *p; + result=strtok_r(str,":",&p); + while(result!=NULL){ + if(strstr(result,"TJ")!=NULL){ + LOG_I("save sn:%s\n",result); + buffer_to_file("savedDevSn",result,strlen(result),"wb"); + }else{ + //LOG_I("save mac:%s\n",result); + //buffer_to_file("savedDevMac",result,strlen(result),"wb"); + char* destmac = insert_colon(result, 2); + LOG_I("save mac:%s\n",destmac); + writeNetworkInterface("/etc/network/interfaces",destmac); + writeNetworkInterface("/etc/network/interfaces.default",destmac); + } + result=strtok_r(NULL,",",&p); + } } } pthread_exit(NULL); @@ -914,6 +1143,10 @@ error: } /*================================================================================*/ +void *thread_ota(void *arg){ + checkOtaKey(); +} + void *thread_mqtt(void *arg){ mqtt_init(); } @@ -922,6 +1155,10 @@ void *thread_removelog(void *arg){ removeLog(); } +void *thread_reboot(void *arg){ + rebootSystem(); +} + void *thread_feed_watchdog(void *arg){ feedWatchDog(); } @@ -933,19 +1170,32 @@ void *thread_readqr(void *arg){ void *thread_tag_search_send(void *arg){ while(1){ if(isSearchLabelOn){ - isSearchLabel=true; - uart_data_send_head_search(&uartSend,5); + //uart_data_send_head_search(&uartSend,5); sleep(10); searchTimeNew=getCurrentTime(); - LOG_I("searchTimeNew:%d\n",searchTimeNew); - if((searchTimeNew-searchTimeOld)>=searchTimeOut){ - isSearchLabelOn=false; + //LOG_I("searchTimeNew:%d\n",searchTimeNew); + if((searchTimeNew-searchTimeOld)>=(searchTimeOut-20)){ + isSearchReport=true; search_tag_report(); + isSearchReport=false; + isSearchLabelOn=false; } } } } +void *thread_do_ota(void *arg){ + while(1){ + if(isOtaEnable && isSendComEnd && !isLEDOtaSuccess){ + sleep(1); + otaLeds(); + } + //if(isOtaEnable && isSendComEnd && !isAPOtaSuccess){ + // otaAp(); + //} + } +} + //char *tag_1="00A04CCE"; //char *tag_2="00A04C0E"; //char *tag_3="00A04C0F"; @@ -996,12 +1246,12 @@ void *thread_uart_recv_ack(void *arg){ uart_data_send_lighton(&uartSend,led_ctrl.ch,atoi(flash),atoi(light),tag1,tag2,tag3,tag4,tag5,lightsnNum); isLightOn=false; } - +#if 0 if(isSearchLabel){ uart_data_send_search(&uartSend,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); isSearchLabel=false; } - +#endif if(isLightOnByRule){ #if 0 uint16_t label2=strtol("FF01",NULL,16)&0xFFFF; @@ -1023,7 +1273,7 @@ void *thread_uart_recv_ack(void *arg){ uint16_t flash_i=strtol(mqtt_parm.msg_flashInterval,NULL,16)&0xFFFF; uint16_t light_d=strtol(mqtt_parm.msg_lightDuration,NULL,16)&0xFFFF; uint8_t changecolor=0; - //8灭 1红 2黄 3蓝 4绿 5青 6白 7紫 xitu + //8灭 1红 2黄 3蓝 4绿 5青 6白 7紫 tuxi //0灭 1蓝 2绿 3青 4红 5紫 6黄 7白 yitaile if(strcmp(mqtt_parm.msg_color,"1")==0){ changecolor=4; @@ -1080,10 +1330,29 @@ void *thread_uart_recv_ack(void *arg){ isLabelUp=false; } }else if(parm_ack==0x4646){ - isSendComEnd=true; + isSendComEnd=true; + }else if(parm_ack==0x4f4f){ + isSendComEnd=true; + if(isOtaEnable){ + otaCount++; + if(otaCount>=2){ + otaCount=0; + isLEDOtaSuccess=true; + isOtaEnable=false; + system("echo 1 > /sys/class/gpio/gpio113/value"); + } + } + }else if(parm_ack==0x5252){ + uart_data_receive_version(&uartSend); + isSendComEnd=true; + isAPOtaSuccess=true; + }else if(parm_ack==0x5454){ + isSendComEnd=true; + }else if(parm_ack==0x4848){ + isAPBack=true; } } - sleep(1); + usleep(100*1000); } } @@ -1127,14 +1396,19 @@ void *thread_uart_recv_back(void *arg){ &count,&batteryV,&version,&ledCtrl,&lable1,&lable2,&lable3); //LOG_I("recv_back:%04x,%08x,%02x,%02x,%02x,%02x,%04x,%04x,%02x,%02x,%04x,%08x\n",parmAck,tagCode,tagSignal,totalLen, //tagFeature,count,batteryV,version,ledCtrl,lable1,lable2,lable3); + //if(tagCode>0x90000000){ + // PutDataIntoQueue(tagCode,batteryV); + //} + PutDataIntoQueue(tagCode,batteryV); if(tagFeature==0x83){ - LOG_I("search tag:%08x,battery:%04x\n",tagCode,batteryV); - PutDataIntoQueue(tagCode,batteryV); + //LOG_I("search tag:%08x,battery:%04x\n",tagCode,batteryV); }else if(tagFeature==0x82){ - LOG_I("light down tag:%08x,battery:%04x\n",tagCode,batteryV); + //LOG_I("light down tag:%08x,battery:%04x\n",tagCode,batteryV); light_off_tag_report(tagCode,batteryV); }else if(tagFeature==0x81){ - LOG_I("key down tag:%08x,battery:%04x\n",tagCode,batteryV); + LOG_I("key down tag:%08x,battery:%04x,version:%4x\n",tagCode,batteryV,version); + }else if(tagFeature==0xff){ + //LOG_I("heart tag:%08x,battery:%04x,version:%4x\n",tagCode,batteryV,version); } } } @@ -1156,24 +1430,77 @@ void light_off_tag_report(uint32_t name,uint16_t batteryv){ } void search_tag_report(){ - json_object *lights = NULL; - lights=json_object_new_array(); - for(int i=0;i200){ + for(i=0;i /sys/class/gpio/export");//reset key + system("echo in > /sys/class/gpio/gpio63/direction"); + system("echo 113 > /sys/class/gpio/export");//pin 113 yellow + system("echo out > /sys/class/gpio/gpio113/direction"); + uart_open(&uartSend,"/dev/ttyS0");//GT U12 ttyS0,U14 ttyS4,U21 ttysWK0 U13 ttysWK1 U15 ttysWK2 U22 ttysWK3 U20 ttyS1 uart_init(&uartSend,115200,8,1,'N',0); - uart_open(&uartRecvData,"/dev/ttyS4"); + uart_open(&uartRecvData,"/dev/ttyS4");//DT uart_init(&uartRecvData,115200,8,1,'N',0); - - uart_open(&uartRecvBack,"/dev/ttysWK0"); + uart_open(&uartRecvBack,"/dev/ttysWK0");//HT uart_init(&uartRecvBack,115200,8,1,'N',0); +#if 0 + struct dma_config cfg = { + .buf = malloc(256), + .len = 256 + }; + // 填充测试数据 + memset(cfg.buf, 0x55, 256); + // 启动DMA传输 + ioctl(uartSend.uart_fd, DMA_START_TX, &cfg); +#endif //doCommand_help(0, NULL); - //sleep(5); #if 1 enableWatchDog(); ret = pthread_create(&pt_watchdog,NULL,thread_feed_watchdog,NULL); @@ -1535,6 +1923,15 @@ int main(int argc, char *argv[]) pthread_detach(pt_watchdog); } #endif + ret = pthread_create(&pt_reboot,NULL,thread_reboot,NULL); + if(ret!=0){ + LOG_I("pthread_create reboot fail\n"); + system("reboot"); + }else{ + LOG_I("pthread_create reboot success\n"); + pthread_detach(pt_reboot); + } + ret = pthread_create(&pt_uart_recv_ack,NULL,thread_uart_recv_ack,NULL); if(ret!=0){ LOG_I("pthread_create uart_recv_ack fail\n"); @@ -1574,6 +1971,7 @@ int main(int argc, char *argv[]) ret = pthread_create(&pt_tagsearch,NULL,thread_tag_search_send,NULL); if(ret!=0){ LOG_I("pthread_create tag search send fail\n"); + system("reboot"); }else{ LOG_I("pthread_create tag search success\n"); pthread_detach(pt_tagsearch); @@ -1582,6 +1980,7 @@ int main(int argc, char *argv[]) ret = pthread_create(&pt_removeduplicatetag,NULL,thread_remove_duplicate_tag,NULL); if(ret!=0){ LOG_I("pthread_create remove duplicate tag send fail\n"); + system("reboot"); }else{ LOG_I("pthread_create remove duplicate tag success\n"); pthread_detach(pt_removeduplicatetag); @@ -1596,25 +1995,42 @@ int main(int argc, char *argv[]) pthread_detach(pt_removelog); } + ret = pthread_create(&pt_ota,NULL,thread_ota,NULL); + if(ret!=0){ + LOG_I("pthread_create ota fail\n"); + system("reboot"); + }else{ + LOG_I("pthread_create ota success\n"); + pthread_detach(pt_ota); + } + + ret = pthread_create(&pt_doota,NULL,thread_do_ota,NULL); + if(ret!=0){ + LOG_I("pthread_create doota fail\n"); + system("reboot"); + }else{ + LOG_I("pthread_create doota success\n"); + pthread_detach(pt_doota); + } +#if 0 ret = pthread_create(&pt_readqr,NULL,thread_readqr,NULL); if(ret!=0){ LOG_I("pthread_create readqr fail\n"); - system("reboot"); }else{ LOG_I("pthread_create readqr success\n"); pthread_detach(pt_readqr); } - +#endif readresult=file_to_buffer("savedDevSn",&len); while(readresult==NULL){ readresult=file_to_buffer("savedDevSn",&len); sleep(5); - LOG_I("please scan sn\n"); + LOG_I("please scan sn use tx_test\n"); } strncpy(stationsn,readresult,len); readresult=NULL; LOG_I("saved stationsn:%s\n",stationsn); - +#if 1 readresult=file_to_buffer("mqttRawPassword",&len); if(readresult!=NULL){ strncpy(mqttRawPassword,readresult,len); @@ -1628,7 +2044,7 @@ int main(int argc, char *argv[]) sleep(3); } } - +#endif readresult=file_to_buffer("LightEnable",&len); if(readresult!=NULL){ if(strcmp(readresult,"enable")==0){ @@ -1638,7 +2054,7 @@ int main(int argc, char *argv[]) } readresult=NULL; } - +#if 1 while(1){ if((ping("8.8.8.8") == 0)||(ping("8.8.4.4") == 0)){ LOG_I("net ok\n"); @@ -1665,6 +2081,7 @@ int main(int argc, char *argv[]) sleep(3); } } +#endif #if 1 while(1) { diff --git a/main.h b/main.h index e356462..8941388 100644 --- a/main.h +++ b/main.h @@ -35,95 +35,13 @@ int wdt_val; #include "ping.h" #include "Hmacsha1.h" -#define SND_BATCHINBEGIN "S01" -#define SND_BATCHINEND "S02" -#define SND_BATCHOUTNORMALBEGIN "S03" -#define SND_BATCHOUTNORMALEND "S04" -#define SND_BATCHOUTREPAIRBEGIN "S05" -#define SND_BATCHOUTREPAIREND "S06" -#define SND_BORROWDEVBEGIN "S07" -#define SND_BORROWDEVEND "S08" -#define SND_RETURNDEVBEGIN "S09" -#define SND_RETURNDEVEND "S10" -#define SND_REPAIRDEVBEGIN "S11" -#define SND_REPAIRDEVEND "S12" -#define SND_REPAIRCELL "S13" -#define SND_DEVREADFAIL "S14" -#define SND_DEVSTILLIN "S15" -#define SND_DOORNOTCLOSED "S16" -#define SND_DOOROPENFAIL "S17" -#define SND_DOWNLOADFAIL "S18" -#define SND_DOWNLOADSUCCESS "S19" -#define SND_DOWNLOADING "S20" -#define SND_READDEVINFOBEGIN "S21" -#define SND_READDEVINFOEND "S22" -#define SND_NETDISCONNECTED "S23" -#define SND_NETWIFI "S24" -#define SND_NETWIFICONNECTBEGIN "S25" -#define SND_NETWIRED "S26" -#define SND_NETWIREDCONNECTBEGIN "S27" -#define SND_NETMOBILE "S28" -#define SND_NETMOBILECONNECTBEGIN "S29" -#define SND_MQTTCONNECTED "S30" -#define SND_MQTTDISCONNECTED "S31" -#define SND_WIFIPARMWRONG "S32" -#define SND_CABINETNOTCONFIGED "S33" -#define SND_SYSTEMBOOTEND "S34" -#define SND_DEVSNGETSUCCESS "S35" -#define SND_DEVSNGETFAIL "S36" -#define SND_DEVSNALREADYEXIST "S37" -#define SND_SCANSUCCESS "S38" -#define SND_DEVNOTBORROWED "S39" -#define SND_PARAMSETSUCCESS "S40" -#define SND_TIMEOUTBATCHIN "S41" -#define SND_TIMEOUTREPAIRDEVIN "S42" -#define SND_TIMEOUTRETURN "S43" - typedef struct { uint32_t name; uint16_t battery; + uint32_t time; }__attribute__((packed)) jt_only_tag_t; -void hgz_init_db_multy(mqtt_parm_t *mqtt_parm); -void hgz_init_db_single(mqtt_parm_t *mqtt_parm); -void hgz_reset_cells(mqtt_parm_t *mqtt_parm,char *operators); -void hgz_remove_db(char *cabinetName); -void hgz_remove_dev_by_cellname(char *cellname,int userid,char *username,char *batchid,char *optype,char *optime,char *opinfo); -void hgz_remove_dev_by_cellname_no_userid(char *cellname,char *batchid,char *optype,char *optime,char *opinfo); -void hgz_add_dev_by_cellname(char *cellname,int userid,char *username,char *devsn,long devpwr,char *optype,char *batchid, - char *optime,char *opinfo); -void hgz_repair_dev_by_cellname(char *cellname,int userid,char *username,char *devsn,long devpwr,char *batchid,char *optime,char *opinfo, - char *repairtype); -void hgz_repair_dev_by_cellname_misOperate(char *cellname,int userid,char *username,long devpwr,char *batchid,char *optime,char *opinfo, - char *repairtype); -void hgz_lose_dev_by_cellname(char *cellname,int userid,char *username,char *batchid,char *optime); -void hgz_repair_cell_by_cellname(char *cellname,int userid); -void hgz_reset_cell_by_cellname(char *cellname,int userid); -void hgz_get_cellstatus_by_cellname(char *cellname,char *cellstatus); -void hgz_get_devstatus_by_cellname(char *cellname,char *devstatus); -void hgz_get_idlecellnum_by_devtype(char *idlecellnum,char *devtype); -void hgz_get_cabinetnames(char *cabinetnames); -void hgz_get_devtypes(char *devtypes); -void hgz_get_repairdevcellnames_by_devtype(char *cellnames,char *devtype); -void hgz_get_indevcellnames_by_devtype(char *cellnames,char *devtype); -void hgz_get_repaircellcellnames_by_devtype(char *cellnames,char *devtype); -void hgz_get_activecellcellnames_by_devtype(char *cellnames,char *devtype); -void hgz_get_doublecheckcellcellnames_by_cabinetnames(char *cellnames,char *cabinetnames); -void hgz_get_activecellcellnames(char *cellnames); -void hgz_get_allcellnames(char *cellnames); -void hgz_get_idlecellcellnames_by_devtype(char *cellnames,char *devtype); -void hgz_select_cellnames_tosavedev_by_devtype(char *cellnames,char *devtype,int num); -void hgz_select_cellnames_tosavedev_by_operator(char *cellnames,int userid,char *operators); -void hgz_select_cellnames_totakenormaldev_by_devtype(char *cellnames,char *devtype,int num); -void hgz_select_cellnames_totakerepairdev_by_devtype(char *cellnames,char *devtype,int num); -void hgz_get_indevnum_by_devtype(char *indevnum,char *devtype); -void hgz_get_repairdevnum_by_devtype(char *repairdevnum,char *devtype); -void hgz_get_canborrowdevnum_by_devtype(char *canborrowdevnum,char *devtype); -void hgz_get_devsn_by_cellname(char *devsn,char *cellname); -void hgz_do_download(mqtt_parm_download_t *mqtt_parm); -int hgz_check_cabinet_status(void); - void myrand(char *randnum,int len); void removeValueFromMystr(char *oristr,char *val); void addValueToMystr(char *oristr,char *val); diff --git a/mqttRawPassword b/mqttRawPassword new file mode 100644 index 0000000..9ce2f76 --- /dev/null +++ b/mqttRawPassword @@ -0,0 +1 @@ +6bdb82a9953a4d1a8d6608b3a452baae \ No newline at end of file diff --git a/mqtt_utils/mqtt_utils.c b/mqtt_utils/mqtt_utils.c index 336d996..a0cfb24 100644 --- a/mqtt_utils/mqtt_utils.c +++ b/mqtt_utils/mqtt_utils.c @@ -67,6 +67,7 @@ void mqtt_server_light_status_report(char *sn,char *msg_id,char *scene,json_obje struct timeval tv; gettimeofday(&tv, NULL); snprintf(time_buffer,sizeof(time_buffer),"%ld",tv.tv_sec*1000+tv.tv_usec); + LOG_I("%s\n",__func__); root = json_object_new_object(); if(root == NULL){ @@ -98,9 +99,9 @@ void mqtt_server_light_status_report(char *sn,char *msg_id,char *scene,json_obje json_object_object_add(root, "msg", msg); snprintf(topic, sizeof(topic), "iot/%s/message/report",mqtt_conf->productcode); - LOG_I("publish topic:[%s]\n", topic); + //LOG_I("publish topic:[%s]\n", topic); payload = json_object_to_json_string(root); - LOG_I("payload[%d][%s]\n", strlen(payload), payload); + //LOG_I("payload[%d][%s]\n", strlen(payload), payload); mqtt_utils_publish(mqtt_conf, topic, 2, payload, strlen(payload)); json_error: json_object_put(root); @@ -118,8 +119,8 @@ void mqtt_server_station_status_report(char *msg_id,char *product_id,char *sn,ch struct timeval tv; gettimeofday(&tv, NULL); snprintf(time_buffer,sizeof(time_buffer),"%ld",tv.tv_sec*1000+tv.tv_usec); + LOG_I("%s\n",__func__); - //LOG_I("%s\n", __func__); root = json_object_new_object(); if(root == NULL){ LOG_I("json_object_new_object error\n"); @@ -151,9 +152,9 @@ void mqtt_server_station_status_report(char *msg_id,char *product_id,char *sn,ch json_object_object_add(msg, "msgType", json_object_new_string("9008")); json_object_object_add(root, "msg", msg); snprintf(topic, sizeof(topic), "iot/%s/message/report",mqtt_conf->productcode); - LOG_I("publish topic:[%s]\n", topic); + //LOG_I("publish topic:[%s]\n", topic); payload = json_object_to_json_string(root); - LOG_I("payload[%d][%s]\n", strlen(payload), payload); + //LOG_I("payload[%d][%s]\n", strlen(payload), payload); mqtt_utils_publish(mqtt_conf, topic, 2, payload, strlen(payload)); json_error: json_object_put(root); @@ -165,7 +166,7 @@ void mqtt_service_reply(char *sn,char *msg_id,char *msg,int success,char *produc const char *payload = NULL; json_object *root = NULL; - //LOG_I("%s\n", __func__); + LOG_I("%s\n", __func__); root = json_object_new_object(); if(root == NULL){ LOG_I("json_object_new_object error\n"); @@ -179,9 +180,9 @@ void mqtt_service_reply(char *sn,char *msg_id,char *msg,int success,char *produc json_object_object_add(root, "productId", json_object_new_string(mqtt_conf->productcode)); snprintf(topic, sizeof(topic), "iot/%s/adviceDevice/reply",mqtt_conf->productcode); - LOG_I("publish topic:[%s]\n", topic); + //LOG_I("publish topic:[%s]\n", topic); payload = json_object_to_json_string(root); - LOG_I("payload[%d][%s]\n", strlen(payload), payload); + //LOG_I("payload[%d][%s]\n", strlen(payload), payload); mqtt_utils_publish(mqtt_conf, topic, 2, payload, strlen(payload)); json_error: diff --git a/net_utils/http_utils.c b/net_utils/http_utils.c index c41286d..7d4fbf4 100644 --- a/net_utils/http_utils.c +++ b/net_utils/http_utils.c @@ -1056,7 +1056,7 @@ int http_download(char *url, char *msg_id,int task_id,char *filepath) if (written_len == http_response.content_length) { LOG_I("Download %s successed\n", file_name); sleep(2); - newappDownloaded=true; + //newappDownloaded=true; ret = 0; } else { LOG_I("Download %s failed\n", file_name); diff --git a/savedDevSn b/savedDevSn new file mode 100644 index 0000000..f7324c8 --- /dev/null +++ b/savedDevSn @@ -0,0 +1 @@ +TJ251679787196 \ No newline at end of file diff --git a/ssh.sh b/ssh.sh index 3e69811..48762d1 100755 --- a/ssh.sh +++ b/ssh.sh @@ -1,3 +1,3 @@ -sshpass -p "&Over#B0Ost!" ssh root@10.10.10.235 -#sshpass -p "PddloTSecPwdOnly!" ssh root@10.10.10.132 -#sshpass -p "PddloTSecPwdOnly!" ssh root@192.168.0.148 +#sshpass -p "&Over#B0Ost!" ssh root@10.10.12.3 +sshpass -p "TxApPwd#2025!" ssh root@10.10.12.2 +#sshpass -p "PddloTSecPwdOnly!" ssh root@10.10.12.4 diff --git a/start.sh b/start_v1.1.9.sh similarity index 100% rename from start.sh rename to start_v1.1.9.sh diff --git a/tx_ota/F8_20250519_V1.0.33_1422_W02CL0BSL_0x21.bin b/tx_ota/F8_20250519_V1.0.33_1422_W02CL0BSL_0x21.bin new file mode 100755 index 0000000..aacb25e Binary files /dev/null and b/tx_ota/F8_20250519_V1.0.33_1422_W02CL0BSL_0x21.bin differ diff --git a/tx_ota/start.sh b/tx_ota/start.sh new file mode 100755 index 0000000..c0e0544 --- /dev/null +++ b/tx_ota/start.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +cd /root +filename=/root/ota/tx_server +filesize=`ls -l $filename | awk '{ print $5 }'` +maxsize=$((440000)) +if [ $filesize -gt $maxsize ] +then + echo "$filesize > $maxsize copy" + cp $filename . + chmod 777 tx_server + ./tx_server +else + echo "$filesize < $maxsize not copy" + chmod 777 tx_server + ./tx_server +fi diff --git a/tx_ota/tx_server b/tx_ota/tx_server new file mode 100755 index 0000000..f4bc7ce Binary files /dev/null and b/tx_ota/tx_server differ diff --git a/tx_ota/tx_test b/tx_ota/tx_test new file mode 100755 index 0000000..89b0d0d Binary files /dev/null and b/tx_ota/tx_test differ diff --git a/tx_server_v1.1.10 b/tx_server_v1.1.10 new file mode 100755 index 0000000..550fc95 Binary files /dev/null and b/tx_server_v1.1.10 differ diff --git a/tx_server_v1.1.9 b/tx_server_v1.1.9 new file mode 100755 index 0000000..c36b1ed Binary files /dev/null and b/tx_server_v1.1.9 differ diff --git a/uart_can/uart_can.c b/uart_can/uart_can.c index 0457483..77c63bb 100644 --- a/uart_can/uart_can.c +++ b/uart_can/uart_can.c @@ -8,6 +8,29 @@ #define DBG_TAG "uart_can" #define DBG_LVL DBG_INFO #include "debug_print.h" +uint16_t CRC16_APOTA( unsigned char * pdat, unsigned int len) +{ + const uint16_t CRC_16_IBM_TableOTA[16] = + { + 0x0000, 0x8005, 0x800F, 0x000A, 0x801B, 0x001E, 0x0014, 0x8011, + 0x8033, 0x0036, 0x003C, 0x8039, 0x0028, 0x802D, 0x8027, 0x0022 + }; + uint16_t i, j; + uint16_t crc = 0xffff; + uint8_t val; + + for (i = 0; i < len; i++) + { + val = pdat[i]; + for(j = 0; j < 2; j++) + { + crc = (crc << 4) ^ CRC_16_IBM_TableOTA[(((crc >> 8) ^ val) >> 4) & 0x0F]; + val <<= 4; + } + } + + return (crc); +} uint16_t CRC16_XMODEM(uint8_t *puchMsg, uint32_t usDataLen) { @@ -29,6 +52,139 @@ uint16_t CRC16_XMODEM(uint8_t *puchMsg, uint32_t usDataLen) return (wCRCin); } +int uart_data_send_head_apota(uart_utils_t *uart,uint32_t datalen,uint16_t packagenum){ + int ret = 0; + jt_apota_package_t jt_apota_package ={ + .head=ntohl(0x404F5441),//@OTA + .len1=(datalen>>16)&0xFF, + .len2=(datalen>>8)&0xFF, + .len3=datalen&0xFF, + .packagenum=ntohs(packagenum), + .reserve=ntohs(0x0000), + }; + LOG_I("%s:HEAD:%08x,%02x,%02x,%02x,%04x,%04x\r\n",__func__,jt_apota_package.head, + jt_apota_package.len1,jt_apota_package.len2,jt_apota_package.len3,jt_apota_package.packagenum,jt_apota_package.reserve); + + if (uart == NULL){ + LOG_I("uart NULL pointer\n"); + ret = -1; + goto error; + } + if(sizeof(jt_apota_package) == write(uart->uart_fd, &jt_apota_package, sizeof(jt_apota_package))){ + ret = 0; + //LOG_I("%s success\n",__func__); + }else{ + //LOG_I("%s fail\n", __func__); + ret = -2; + goto error; + } +error: + return ret; + return 0; +} + + +int uart_data_send_head_ledota(uart_utils_t *uart,uint32_t datalen,uint16_t datacrc,uint16_t version){ + int ret = 0; + jt_ledota_package_t jt_ledota_package ={ + .head=ntohl(0x404F5457),//@OTW + .len1=(datalen>>16)&0xFF, + .len2=(datalen>>8)&0xFF, + .len3=datalen&0xFF, + .data_crc=ntohs(datacrc), + .hdinfo=0x21, + .sfinfo=ntohs(version), + .custom_code=ntohs(0x0003), + .mode=0xF8, +#if 1 + .startmac1=0x00, + .startmac2=0x00, + .startmac3=0x00, + .endmac1=0xff, + .endmac2=0xff, + .endmac3=0xff, +#else + .startmac1=0xfe, + .startmac2=0x64, + .startmac3=0xa8, + .endmac1=0xfe, + .endmac2=0x64, + .endmac3=0xa8, +#endif + }; + LOG_I("%s:HEAD:%08x,%02x,%02x,%02x,%04x,%02x,%04x,%04x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\r\n",__func__,jt_ledota_package.head, + jt_ledota_package.len1,jt_ledota_package.len2,jt_ledota_package.len3,jt_ledota_package.data_crc,jt_ledota_package.hdinfo, + jt_ledota_package.sfinfo,jt_ledota_package.custom_code,jt_ledota_package.mode,jt_ledota_package.startmac1, + jt_ledota_package.startmac2,jt_ledota_package.startmac3,jt_ledota_package.endmac1,jt_ledota_package.endmac2, + jt_ledota_package.endmac3); + + if (uart == NULL){ + LOG_I("uart NULL pointer\n"); + ret = -1; + goto error; + } + if(sizeof(jt_ledota_package) == write(uart->uart_fd, &jt_ledota_package, sizeof(jt_ledota_package))){ + ret = 0; + //LOG_I("%s success\n",__func__); + }else{ + //LOG_I("%s fail\n", __func__); + ret = -2; + goto error; + } + usleep(100*1000); +error: + return ret; + return 0; + +} + +int uart_data_send_ledota(uart_utils_t *uart,char *data,int size){ + int ret=0; + if(size==write(uart->uart_fd,data,size)){ + LOG_I("write size:%d success\n",size); + }else{ + LOG_I("write size:%d fail\n",size); + } + usleep(500*1000); + return ret; +} + +int uart_data_send_apota(uart_utils_t *uart,uint8_t dataori[],int datalen,uint16_t pindex,uint16_t datacrc){ + int ret = 0; + int sendlen = 0; + jt_apota_data_package_t jt_apota_data_package ={ + .start=0x24,//$ + .len1=(datalen>>16)&0xFF, + .len2=(datalen>>8)&0xFF, + .len3=datalen&0xFF, + .packageindex=ntohs(pindex), + //.data=dataori, + .data_crc=ntohs(datacrc), + }; + if(datalen>2048){ + sendlen=2048; + }else{ + sendlen=datalen; + } + memcpy(jt_apota_data_package.data,dataori,sendlen); + if (uart == NULL){ + LOG_I("uart NULL pointer\n"); + ret = -1; + goto error; + } + if(sizeof(jt_apota_data_package) == write(uart->uart_fd, &jt_apota_data_package, sizeof(jt_apota_data_package))){ + ret = 0; + LOG_I("%s success\n",__func__); + }else{ + LOG_I("%s fail\n", __func__); + ret = -2; + goto error; + } +error: + return ret; + return 0; +} + int uart_data_send_head_lighton(uart_utils_t *uart,uint8_t wakeup_time,uint16_t tag_num){ int ret = 0; uint8_t data_len=0; @@ -766,6 +922,20 @@ error: return 0; } +int uart_data_receive_version(uart_utils_t *uart){ + int ret = 0; + jt_receive_version_package_t jt_receive_version_package; + ret = uart_read_until_time(uart->uart_fd,(char *)&jt_receive_version_package,sizeof(jt_receive_version_package_t), 1000, 50); + if(ret == sizeof(jt_receive_version_package_t)){ + LOG_I("%s success:%04x,%04x\n", __func__,jt_receive_version_package.v1,jt_receive_version_package.v2); + }else{ + LOG_I("%s, failed, time out\n", __func__); + ret = -1; + } + + return ret; +} + int uart_data_receive_ack(uart_utils_t *uart,uint16_t *parm_ack){ int ret = 0; jt_receive_package_t jt_receive_package; diff --git a/uart_can/uart_can.h b/uart_can/uart_can.h index bef5c73..d114e8c 100644 --- a/uart_can/uart_can.h +++ b/uart_can/uart_can.h @@ -246,7 +246,54 @@ typedef struct uint16_t crc; }__attribute__((packed)) jt_search_package_t; -uint16_t CRC16_XMODEM(uint8_t *puchMsg, uint32_t usDataLen); +typedef struct +{ + uint32_t head; + uint8_t len1; + uint8_t len2; + uint8_t len3; + uint16_t data_crc; + uint8_t hdinfo; + uint16_t sfinfo; + uint16_t custom_code; + uint8_t mode; + uint8_t startmac1; + uint8_t startmac2; + uint8_t startmac3; + uint8_t endmac1; + uint8_t endmac2; + uint8_t endmac3; +}__attribute__((packed)) jt_ledota_package_t; + +typedef struct +{ + uint32_t head; + uint8_t len1; + uint8_t len2; + uint8_t len3; + uint16_t packagenum; + uint16_t reserve; +}__attribute__((packed)) jt_apota_package_t; + +typedef struct +{ + uint8_t start; + uint8_t len1; + uint8_t len2; + uint8_t len3; + uint16_t packageindex; + uint8_t data[2048]; + uint16_t data_crc; +}__attribute__((packed)) jt_apota_data_package_t; + +typedef struct +{ + uint16_t v1; + uint16_t v2; +}__attribute__((packed)) jt_receive_version_package_t; + +uint16_t CRC16_XMODEM(uint8_t *di, uint32_t len); +uint16_t CRC16_APOTA( unsigned char * pdat, unsigned int len); int uart_data_send_head_lighton(uart_utils_t *uart,uint8_t wakeup_time,uint16_t tag_num); int uart_data_send_head_lableup(uart_utils_t *uart,uint8_t wakeup_time,uint16_t tag_num); @@ -271,4 +318,8 @@ int uart_data_receive_data_back(uart_utils_t *uart,uint16_t *parmAck,uint32_t *t uint8_t *totalLen,uint8_t *tagFeature,uint8_t *count,uint16_t *batteryV,uint16_t *version,uint8_t *ledCtrl, uint8_t *lable1,uint16_t *lable2,uint32_t *lable3); int uart_data_receive_ack(uart_utils_t *uart,uint16_t *parm_ack); +int uart_data_send_head_ledota(uart_utils_t *uart,uint32_t datalen,uint16_t datacrc,uint16_t version); +int uart_data_send_ledota(uart_utils_t *uart,char *data,int size); +int uart_data_send_head_apota(uart_utils_t *uart,uint32_t datalen,uint16_t packagenum); +int uart_data_send_apota(uart_utils_t *uart,uint8_t dataori[],int datalen,uint16_t pnum,uint16_t datacrc); #endif