mirror of
http://180.163.74.83:13000/zhangzhenghao/AP05.git
synced 2025-12-13 07:14:30 +00:00
add save mac and ota upto v1.1.11
This commit is contained in:
parent
8a6818d639
commit
5540da555c
11
cp.sh
11
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
|
||||
|
||||
581
main.c
581
main.c
@ -3,15 +3,28 @@
|
||||
#define DBG_TAG "main"
|
||||
#define DBG_LVL DBG_INFO
|
||||
#include "debug_print.h"
|
||||
#if 0
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
#include <linux/serial.h>
|
||||
|
||||
#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<len/4096;i++){
|
||||
uart_data_send_ledota(&uartSend,readresult+i*4096,4096);
|
||||
usleep(72*1000);
|
||||
}
|
||||
uart_data_send_ledota(&uartSend,readresult+i*4096,len%4096);
|
||||
}
|
||||
#else
|
||||
int len=0,ver=0;
|
||||
char *readresult=NULL;
|
||||
char filename[128]={};
|
||||
uint8_t senddata[4096]={};
|
||||
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降级
|
||||
int i=0;
|
||||
for(i=0;i<len/4096;i++){
|
||||
memset(senddata,0,4096);
|
||||
memcpy(senddata,readresult+i*4096,4096);
|
||||
uart_data_send_ledota(&uartSend,senddata,4096);
|
||||
}
|
||||
memset(senddata,0,4096);
|
||||
memcpy(senddata,readresult+i*4096,len%4096);
|
||||
uart_data_send_ledota(&uartSend,senddata,len%4096);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void otaAp(){
|
||||
int len=0,ver=0;
|
||||
char *readresult=NULL;
|
||||
char filename[128]={};
|
||||
char modename[32]={};
|
||||
uint8_t dataori[2048]={0};
|
||||
uint16_t data_crc=0;
|
||||
uint16_t p_num=0;
|
||||
ver=getApOtaVersion(filename,modename);
|
||||
LOG_I("ota %s mode:%s ver:%d\n",filename,modename,ver);
|
||||
readresult=file_to_buffer(filename,&len);
|
||||
if(len%2048!=0){
|
||||
p_num=len/2048 + 1;
|
||||
}else{
|
||||
p_num=len/2048;
|
||||
}
|
||||
if(readresult!=NULL){
|
||||
isSendComEnd=false;
|
||||
LOG_I("data len:%d\n",len);
|
||||
if(strcmp(modename,"GTMODE")==0){
|
||||
uart_data_send_head_apota(&uartSend,len,p_num);
|
||||
usleep(60*1000);
|
||||
memset(dataori,0,2048);
|
||||
memcpy(dataori,readresult,2048);
|
||||
data_crc=CRC16_APOTA(dataori,2048);
|
||||
LOG_I("crc :%04x\n",data_crc);
|
||||
uart_data_send_apota(&uartSend,dataori,len,p_num,data_crc);
|
||||
while(!isAPBack){
|
||||
usleep(60*1000);
|
||||
}
|
||||
int i=0;
|
||||
for(i=1;i<len/2048;i++){
|
||||
isAPBack=false;
|
||||
memset(dataori,0,2048);
|
||||
memcpy(dataori,readresult+i*2048,2048);
|
||||
data_crc=CRC16_APOTA(dataori,2048);
|
||||
LOG_I("crc :%04x\n",data_crc);
|
||||
uart_data_send_apota(&uartSend,dataori,2048,i,data_crc);
|
||||
while(!isAPBack){
|
||||
usleep(60*1000);
|
||||
}
|
||||
}
|
||||
if(len%2048!=0){
|
||||
memset(dataori,0,2048);
|
||||
memcpy(dataori,readresult+i*2048,len%2048);
|
||||
data_crc=CRC16_APOTA(dataori,2048);
|
||||
LOG_I("crc :%04x\n",data_crc);
|
||||
uart_data_send_apota(&uartSend,dataori,2048,i,data_crc);
|
||||
}
|
||||
}else if(strcmp(modename,"DTMODE")==0){
|
||||
|
||||
}if(strcmp(modename,"HTMODE")==0){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void enableWatchDog(){
|
||||
system("echo 1 > /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;i<tagCount;i++){
|
||||
LOG_I("onlyTags:%08X,%04x\n",onlyTags[i].name,onlyTags[i].battery);
|
||||
char tagName[9]={0};
|
||||
char battery[5]={0};
|
||||
sprintf(tagName,"%08X",onlyTags[i].name);
|
||||
sprintf(battery,"%d",onlyTags[i].battery);
|
||||
json_object *light = json_object_new_object();
|
||||
json_object_object_add(light, "sn", json_object_new_string(tagName));
|
||||
json_object_object_add(light, "battery", json_object_new_string(battery));
|
||||
json_object_array_add(lights,light);
|
||||
int report_num=0;
|
||||
int i=0,j=0,m=0,n=0;
|
||||
copyOnlyTag();
|
||||
LOG_I("%s tagCount:%d\n",__func__,tagCount);
|
||||
LOG_I("%s tagCountNew:%d\n",__func__,tagCountNew);
|
||||
if(tagCountNew>200){
|
||||
for(i=0;i<tagCountNew/200;i++){
|
||||
json_object *lights =json_object_new_array();
|
||||
for(j=i*200;j<i*200+200;j++){
|
||||
LOG_I("onlyTags:%08X,%04x\n",onlyTagsNew[j].name,onlyTagsNew[j].battery);
|
||||
char tagName[9]={0};
|
||||
char battery[5]={0};
|
||||
sprintf(tagName,"%08X",onlyTagsNew[j].name);
|
||||
sprintf(battery,"%d",onlyTagsNew[j].battery);
|
||||
json_object *light = json_object_new_object();
|
||||
json_object_object_add(light, "sn", json_object_new_string(tagName));
|
||||
json_object_object_add(light, "battery", json_object_new_string(battery));
|
||||
json_object_array_add(lights,light);
|
||||
}
|
||||
report_num+=200;
|
||||
LOG_I("report_num:%d\n",report_num);
|
||||
mqtt_server_light_status_report(stationsn,mqtt_parm.msg_messageId,"1",lights);
|
||||
}
|
||||
json_object *lights =json_object_new_array();
|
||||
for(m=i*200;m<i*200+(tagCountNew%200);m++){
|
||||
LOG_I("onlyTags:%08X,%04x\n",onlyTagsNew[m].name,onlyTagsNew[m].battery);
|
||||
char tagName[9]={0};
|
||||
char battery[5]={0};
|
||||
sprintf(tagName,"%08X",onlyTagsNew[m].name);
|
||||
sprintf(battery,"%d",onlyTagsNew[m].battery);
|
||||
json_object *light = json_object_new_object();
|
||||
json_object_object_add(light, "sn", json_object_new_string(tagName));
|
||||
json_object_object_add(light, "battery", json_object_new_string(battery));
|
||||
json_object_array_add(lights,light);
|
||||
}
|
||||
report_num+=m-i*200;
|
||||
//report_num+=tagCountNew%200;
|
||||
LOG_I("report_num:%d\n",report_num);
|
||||
mqtt_server_light_status_report(stationsn,mqtt_parm.msg_messageId,"1",lights);
|
||||
}else{
|
||||
json_object *lights =json_object_new_array();
|
||||
for(n=0;n<tagCountNew;n++){
|
||||
LOG_I("onlyTags:%08X,%04x\n",onlyTagsNew[n].name,onlyTagsNew[n].battery);
|
||||
char tagName[9]={0};
|
||||
char battery[5]={0};
|
||||
sprintf(tagName,"%08X",onlyTagsNew[n].name);
|
||||
sprintf(battery,"%d",onlyTagsNew[n].battery);
|
||||
json_object *light = json_object_new_object();
|
||||
json_object_object_add(light, "sn", json_object_new_string(tagName));
|
||||
json_object_object_add(light, "battery", json_object_new_string(battery));
|
||||
json_object_array_add(lights,light);
|
||||
}
|
||||
report_num=tagCountNew;
|
||||
LOG_I("report_num:%d\n",report_num);
|
||||
mqtt_server_light_status_report(stationsn,mqtt_parm.msg_messageId,"1",lights);
|
||||
}
|
||||
LOG_I("tagCount:%d\n",tagCount);
|
||||
mqtt_server_light_status_report(stationsn,mqtt_parm.msg_messageId,"1",lights);
|
||||
mqtt_service_reply(stationsn,mqtt_parm.msg_messageId,"ok",1,productid);
|
||||
tagCount=0;
|
||||
memset(onlyTags,0,sizeof(onlyTags));
|
||||
tagCountNew=0;
|
||||
memset(onlyTagsNew,0,5000);
|
||||
}
|
||||
|
||||
void copyOnlyTag(void){
|
||||
int i=0;
|
||||
tagCountNew=0;
|
||||
for(i=0;i<tagCount;i++){
|
||||
if(getCurrentTime()-onlyTags[i].time<=60*50){
|
||||
onlyTagsNew[tagCountNew]=onlyTags[i];
|
||||
tagCountNew++;
|
||||
}
|
||||
}
|
||||
LOG_I("tagCountNew:%d\n",tagCountNew);
|
||||
}
|
||||
|
||||
void addOnlyTag(uint32_t tagname,uint16_t battery){
|
||||
@ -1182,12 +1509,14 @@ void addOnlyTag(uint32_t tagname,uint16_t battery){
|
||||
jt_only_tag_t jt_only_tag = {
|
||||
.name=tagname,
|
||||
.battery=battery,
|
||||
.time=getCurrentTime(),
|
||||
};
|
||||
onlyTags[tagCount]=jt_only_tag;
|
||||
tagCount++;
|
||||
}else{
|
||||
for(i=0;i<tagCount;i++){
|
||||
if(tagname==onlyTags[i].name){
|
||||
onlyTags[i].time=getCurrentTime();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1195,6 +1524,7 @@ void addOnlyTag(uint32_t tagname,uint16_t battery){
|
||||
jt_only_tag_t jt_only_tag = {
|
||||
.name=tagname,
|
||||
.battery=battery,
|
||||
.time=getCurrentTime(),
|
||||
};
|
||||
onlyTags[tagCount]=jt_only_tag;
|
||||
tagCount++;
|
||||
@ -1206,9 +1536,11 @@ void *thread_remove_duplicate_tag(void *arg){
|
||||
uint32_t tagname=0;
|
||||
uint16_t battery=0;
|
||||
while(1){
|
||||
if(GetDataFromQueue(&tagname,&battery)==0){
|
||||
//LOG_I("%08x,%04x\n",tagname,battery);
|
||||
addOnlyTag(tagname,battery);
|
||||
if(!isSearchReport){
|
||||
if(GetDataFromQueue(&tagname,&battery)==0){
|
||||
//LOG_I("%08x,%04x\n",tagname,battery);
|
||||
addOnlyTag(tagname,battery);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1227,13 +1559,13 @@ void *thread_mqtt_recv(void *arg){
|
||||
if(isSendComEnd){
|
||||
if(GetDataFromMQueue(payload)==0){
|
||||
//getPayloadTime=120*1000;
|
||||
LOG_I("payload:%s\n",payload);
|
||||
//LOG_I("payload:%s\n",payload);
|
||||
get_string_from_json_string_by_key_unescape(payload,"messageId",mqtt_parm.msg_messageId,sizeof(mqtt_parm.msg_messageId));
|
||||
LOG_I("messageId:%s\n",mqtt_parm.msg_messageId);
|
||||
//LOG_I("messageId:%s\n",mqtt_parm.msg_messageId);
|
||||
if(isSearchLabelOn){
|
||||
mqtt_service_reply(stationsn,mqtt_parm.msg_messageId,"search busy",0,productid);
|
||||
}else{
|
||||
get_string_from_json_string_by_key_unescape(payload,"deviceId",mqtt_parm.msg_deviceId,sizeof(mqtt_parm.msg_deviceId));
|
||||
mqtt_service_reply(stationsn,mqtt_parm.msg_messageId,"search busy",0,productid);
|
||||
}else{
|
||||
get_string_from_json_string_by_key_unescape(payload,"deviceId",mqtt_parm.msg_deviceId,sizeof(mqtt_parm.msg_deviceId));
|
||||
LOG_I("deviceId:%s\n",mqtt_parm.msg_deviceId);
|
||||
get_int_from_json_string_by_key(payload,"timestamp",&mqtt_parm.msg_timestamp);
|
||||
LOG_I("timestamp:%d\n",mqtt_parm.msg_timestamp);
|
||||
@ -1261,6 +1593,8 @@ void *thread_mqtt_recv(void *arg){
|
||||
system("reboot");
|
||||
}else if(strcmp(mqtt_parm.msg_type,"1014")==0){
|
||||
LOG_I("1014 update fw\n");
|
||||
system("rm -fr ota");
|
||||
system("mkdir ota");
|
||||
get_int_from_json_string_by_key(msg_data, "needWifi", &mqtt_parm.msg_needWifi);
|
||||
LOG_I("needWifi:%d\n",mqtt_parm.msg_needWifi);
|
||||
get_string_from_json_string_by_key_unescape(msg_data, "zipPath", mqtt_parm.msg_zipPath, sizeof(mqtt_parm.msg_zipPath));
|
||||
@ -1275,21 +1609,27 @@ void *thread_mqtt_recv(void *arg){
|
||||
LOG_I("version:%s\n",mqtt_parm.msg_version);
|
||||
mqtt_service_reply(stationsn,mqtt_parm.msg_messageId,"ok",1,productid);
|
||||
char otaCmd[256]={0};
|
||||
sprintf(otaCmd,"curl -o /home/linaro/tx_server %s",mqtt_parm.msg_zipPath);
|
||||
sprintf(otaCmd,"curl -o /root/ota/tx_ota.zip %s",mqtt_parm.msg_zipPath);
|
||||
//sprintf(otaCmd,"curl -o /root/tx_server https://fscdn.zto.com/cloudm/iot-device-package/7d609af2165b4d14ae318f17659b2fbf.bin");
|
||||
system(otaCmd);
|
||||
sleep(8);
|
||||
sleep(15);
|
||||
system("unzip ota/tx_ota.zip");
|
||||
system("mv tx_ota/* ota");
|
||||
system("rm -fr tx_ota");
|
||||
system("mv ota/start.sh /root");
|
||||
system("sync");
|
||||
sleep(1);
|
||||
system("reboot");
|
||||
}else if(strcmp(mqtt_parm.msg_type,"5003")==0){
|
||||
LOG_I("5003 need report station info\n");
|
||||
updateStationInfo(mqtt_parm.msg_messageId);
|
||||
}else if(strcmp(mqtt_parm.msg_type,"5005")==0){
|
||||
LOG_I("5005 cloud search light\n");
|
||||
isSendComEnd=false;
|
||||
//isSendComEnd=false;
|
||||
isLightOn=false;
|
||||
isLightOnByRule=false;
|
||||
isLabelUp=false;
|
||||
isSearchLabel=true;
|
||||
//isSearchLabel=true;
|
||||
get_string_from_json_string_by_key_unescape(msg_data, "scene", mqtt_parm.msg_scene, sizeof(mqtt_parm.msg_scene));
|
||||
LOG_I("scene:%s\n",mqtt_parm.msg_scene);
|
||||
get_string_from_json_string_by_key_unescape(msg_data, "timeout", mqtt_parm.msg_timeout, sizeof(mqtt_parm.msg_timeout));
|
||||
@ -1352,7 +1692,7 @@ void *thread_mqtt_recv(void *arg){
|
||||
isLightOn=true;
|
||||
isLightOnByRule=false;
|
||||
isLabelUp=false;
|
||||
isSearchLabel=false;
|
||||
//isSearchLabel=false;
|
||||
uart_data_send_head_lighton(&uartSend,5,lightsnNum);
|
||||
}else{
|
||||
mqtt_service_reply(stationsn,mqtt_parm.msg_messageId,"light disabled or sn is null",0,productid);
|
||||
@ -1373,7 +1713,7 @@ void *thread_mqtt_recv(void *arg){
|
||||
isLightOn=false;
|
||||
isLightOnByRule=false;
|
||||
isLabelUp=true;
|
||||
isSearchLabel=false;
|
||||
//isSearchLabel=false;
|
||||
uart_data_send_head_lableup(&uartSend,5,1);
|
||||
}else{
|
||||
mqtt_service_reply(stationsn,mqtt_parm.msg_messageId,"sn is empty",0,productid);
|
||||
@ -1417,7 +1757,7 @@ void *thread_mqtt_recv(void *arg){
|
||||
isLightOn=false;
|
||||
isLightOnByRule=true;
|
||||
isLabelUp=false;
|
||||
isSearchLabel=false;
|
||||
//isSearchLabel=false;
|
||||
uart_data_send_head_lightonrule(&uartSend,5);
|
||||
}else{
|
||||
mqtt_service_reply(stationsn,mqtt_parm.msg_messageId,"labelconfig is empty",0,productid);
|
||||
@ -1452,10 +1792,46 @@ void getLocalIp(char *local_ip){
|
||||
//get_ip_by_domain(hostname, local_ip, 32);
|
||||
fp=popen("ifconfig eth0 | grep 'inet' | awk '{print $2}' | cut -d':' -f2","r");
|
||||
fgets(buffer,sizeof(buffer),fp);
|
||||
LOG_I("buffer:%s\n",buffer);
|
||||
//LOG_I("buffer:%s\n",buffer);
|
||||
memcpy(local_ip,buffer,strlen(buffer)-1);
|
||||
}
|
||||
|
||||
int getLedOtaVersion(char *filename){
|
||||
FILE *fp;
|
||||
char buffer[128]={0};
|
||||
int ver=0;
|
||||
fp=popen("ls ota/F8*.bin","r");//tx is F8 begin
|
||||
fgets(buffer,sizeof(buffer),fp);
|
||||
//LOG_I("buffer:%s\n",buffer);
|
||||
memcpy(filename,buffer,strlen(buffer)-1);
|
||||
fp=popen("ls ota/F8*.bin|cut -d'_' -f3|cut -d'.' -f3","r");
|
||||
fgets(buffer,sizeof(buffer),fp);
|
||||
//LOG_I("buffer:%s\n",buffer);
|
||||
ver=atoi(buffer);
|
||||
LOG_I("ver:%d\n",ver);
|
||||
return ver;
|
||||
}
|
||||
|
||||
int getApOtaVersion(char *filename,char *modename){
|
||||
FILE *fp;
|
||||
char buffer[128]={0};
|
||||
int ver=0;
|
||||
fp=popen("ls ota/AP*.bin","r");//AP begin
|
||||
fgets(buffer,sizeof(buffer),fp);
|
||||
//LOG_I("buffer:%s\n",buffer);
|
||||
memcpy(filename,buffer,strlen(buffer)-1);
|
||||
fp=popen("ls ota/AP*.bin|cut -d'_' -f6|cut -d'.' -f3","r");
|
||||
fgets(buffer,sizeof(buffer),fp);
|
||||
//LOG_I("buffer:%s\n",buffer);
|
||||
ver=atoi(buffer);
|
||||
LOG_I("ver:%d\n",ver);
|
||||
fp=popen("ls ota/AP*.bin|cut -d'_' -f3","r");
|
||||
fgets(buffer,sizeof(buffer),fp);
|
||||
//LOG_I("buffer:%s\n",buffer);
|
||||
memcpy(modename,buffer,strlen(buffer)-1);
|
||||
return ver;
|
||||
}
|
||||
|
||||
void saveStartUpTime(){
|
||||
system("rm ./startUpTime");
|
||||
struct timeval tv;
|
||||
@ -1506,7 +1882,7 @@ int main(int argc, char *argv[])
|
||||
uint32_t can_id;
|
||||
char recv_data[8]={0};
|
||||
char command_buffer[256] = "";
|
||||
int len=0;
|
||||
uint32_t len=0;
|
||||
int getTimeCount=0;
|
||||
char *readresult=NULL;
|
||||
char networktype[32]={0};
|
||||
@ -1515,15 +1891,27 @@ int main(int argc, char *argv[])
|
||||
system("insmod /system/lib/modules/wk2xxx_spi.ko");
|
||||
//system("busybox udhcpc -i eth0");
|
||||
system("timedatectl set-timezone Asia/Shanghai");
|
||||
uart_open(&uartSend,"/dev/ttyS0");//U12 ttyS0,U14 ttyS4,U21 ttysWK0 U13 ttysWK1 U15 ttysWK2 U22 ttysWK3 U20 ttyS1
|
||||
system("echo 63 > /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)
|
||||
{
|
||||
|
||||
84
main.h
84
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);
|
||||
|
||||
1
mqttRawPassword
Normal file
1
mqttRawPassword
Normal file
@ -0,0 +1 @@
|
||||
6bdb82a9953a4d1a8d6608b3a452baae
|
||||
@ -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:
|
||||
|
||||
@ -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);
|
||||
|
||||
1
savedDevSn
Normal file
1
savedDevSn
Normal file
@ -0,0 +1 @@
|
||||
TJ251679787196
|
||||
6
ssh.sh
6
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
|
||||
|
||||
BIN
tx_ota/F8_20250519_V1.0.33_1422_W02CL0BSL_0x21.bin
Executable file
BIN
tx_ota/F8_20250519_V1.0.33_1422_W02CL0BSL_0x21.bin
Executable file
Binary file not shown.
17
tx_ota/start.sh
Executable file
17
tx_ota/start.sh
Executable file
@ -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
|
||||
BIN
tx_ota/tx_server
Executable file
BIN
tx_ota/tx_server
Executable file
Binary file not shown.
BIN
tx_ota/tx_test
Executable file
BIN
tx_ota/tx_test
Executable file
Binary file not shown.
BIN
tx_server_v1.1.10
Executable file
BIN
tx_server_v1.1.10
Executable file
Binary file not shown.
BIN
tx_server_v1.1.9
Executable file
BIN
tx_server_v1.1.9
Executable file
Binary file not shown.
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user