增加信号超时检测
This commit is contained in:
parent
0c8b097636
commit
d1a6d12878
56
main.c
56
main.c
@ -82,6 +82,12 @@ int searchTimeNew=0;
|
|||||||
int lightsnNum=0;
|
int lightsnNum=0;
|
||||||
int mqtt_port=1883;
|
int mqtt_port=1883;
|
||||||
|
|
||||||
|
static time_t last_2323_time = 0; // 记录上次收到0x2323的时间
|
||||||
|
static bool waiting_for_4646 = false; // 是否在等待0x4646
|
||||||
|
|
||||||
|
// 函数声明
|
||||||
|
void *thread_timeout_check(void *arg);
|
||||||
|
|
||||||
int getLedOtaVersion(char *filename);
|
int getLedOtaVersion(char *filename);
|
||||||
int getApOtaVersion(char *filename,char *modename);
|
int getApOtaVersion(char *filename,char *modename);
|
||||||
void hmacsha1(char *key,char* data,char *signbase64,int signbase64_len);
|
void hmacsha1(char *key,char* data,char *signbase64,int signbase64_len);
|
||||||
@ -1280,11 +1286,15 @@ void *thread_uart_recv_ack(void *arg){
|
|||||||
prctl(PR_SET_NAME, "uart_ack");
|
prctl(PR_SET_NAME, "uart_ack");
|
||||||
uint16_t parm_ack;
|
uint16_t parm_ack;
|
||||||
int ret=0;
|
int ret=0;
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
ret=uart_data_receive_ack(&uartSend,&parm_ack);
|
ret=uart_data_receive_ack(&uartSend,&parm_ack);
|
||||||
if(ret>0){
|
if(ret>0){
|
||||||
LOG_I("ack:%x\n",parm_ack);
|
LOG_I("ack:%x\n",parm_ack);
|
||||||
if(parm_ack==0x2323){
|
if(parm_ack==0x2323){
|
||||||
|
// 记录收到0x2323的时间,并设置等待0x4646标志
|
||||||
|
time(&last_2323_time);
|
||||||
|
waiting_for_4646 = true;
|
||||||
if(isLightOn){
|
if(isLightOn){
|
||||||
char *flash=mqtt_parm.msg_flash;
|
char *flash=mqtt_parm.msg_flash;
|
||||||
char *light=mqtt_parm.msg_lightDuration;
|
char *light=mqtt_parm.msg_lightDuration;
|
||||||
@ -1406,8 +1416,12 @@ void *thread_uart_recv_ack(void *arg){
|
|||||||
isLabelUp=false;
|
isLabelUp=false;
|
||||||
}
|
}
|
||||||
}else if(parm_ack==0x4646){
|
}else if(parm_ack==0x4646){
|
||||||
|
last_2323_time = 0; // 重置时间
|
||||||
|
waiting_for_4646 = false; // 重置等待状态
|
||||||
isSendComEnd=true;
|
isSendComEnd=true;
|
||||||
}else if(parm_ack==0x4f4f){
|
}else if(parm_ack==0x4f4f){
|
||||||
|
last_2323_time = 0; // 重置时间
|
||||||
|
waiting_for_4646 = false; // 重置等待状态
|
||||||
isSendComEnd=true;
|
isSendComEnd=true;
|
||||||
if(isOtaEnable){
|
if(isOtaEnable){
|
||||||
otaCount++;
|
otaCount++;
|
||||||
@ -1419,12 +1433,18 @@ void *thread_uart_recv_ack(void *arg){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else if(parm_ack==0x5252){
|
}else if(parm_ack==0x5252){
|
||||||
|
last_2323_time = 0; // 重置时间
|
||||||
|
waiting_for_4646 = false; // 重置等待状态
|
||||||
uart_data_receive_version(&uartSend);
|
uart_data_receive_version(&uartSend);
|
||||||
isSendComEnd=true;
|
isSendComEnd=true;
|
||||||
isAPOtaSuccess=true;
|
isAPOtaSuccess=true;
|
||||||
}else if(parm_ack==0x5454){
|
}else if(parm_ack==0x5454){
|
||||||
|
last_2323_time = 0; // 重置时间
|
||||||
|
waiting_for_4646 = false; // 重置等待状态
|
||||||
isSendComEnd=true;
|
isSendComEnd=true;
|
||||||
}else if(parm_ack==0x4848){
|
}else if(parm_ack==0x4848){
|
||||||
|
last_2323_time = 0; // 重置时间
|
||||||
|
waiting_for_4646 = false; // 重置等待状态
|
||||||
isAPBack=true;
|
isAPBack=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2070,6 +2090,7 @@ int main(int argc, char *argv[])
|
|||||||
int getTimeCount=0;
|
int getTimeCount=0;
|
||||||
char *readresult=NULL;
|
char *readresult=NULL;
|
||||||
char networktype[32]={0};
|
char networktype[32]={0};
|
||||||
|
pthread_t timeout_thread; // 添加超时检测线程变量
|
||||||
|
|
||||||
LOG_I("version:%s\n",softwareVersion);
|
LOG_I("version:%s\n",softwareVersion);
|
||||||
system("insmod /system/lib/modules/wk2xxx_spi.ko");
|
system("insmod /system/lib/modules/wk2xxx_spi.ko");
|
||||||
@ -2179,6 +2200,16 @@ int main(int argc, char *argv[])
|
|||||||
pthread_detach(pt_removelog);
|
pthread_detach(pt_removelog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 创建超时检测线程
|
||||||
|
ret = pthread_create(&timeout_thread, NULL, thread_timeout_check, NULL);
|
||||||
|
if(ret!=0){
|
||||||
|
LOG_I("pthread_create timeout_check fail\n");
|
||||||
|
system("reboot");
|
||||||
|
}else{
|
||||||
|
LOG_I("pthread_create timeout_check success\n");
|
||||||
|
pthread_detach(timeout_thread);
|
||||||
|
}
|
||||||
|
|
||||||
ret = pthread_create(&pt_ota,NULL,thread_ota,NULL);
|
ret = pthread_create(&pt_ota,NULL,thread_ota,NULL);
|
||||||
if(ret!=0){
|
if(ret!=0){
|
||||||
LOG_I("pthread_create ota fail\n");
|
LOG_I("pthread_create ota fail\n");
|
||||||
@ -2276,6 +2307,31 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 超时检测线程
|
||||||
|
void *thread_timeout_check(void *arg) {
|
||||||
|
prctl(PR_SET_NAME, "timeout_check");
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
if(last_2323_time != 0 && waiting_for_4646) { // 只有在等待0x4646时才检查超时
|
||||||
|
time_t current_time;
|
||||||
|
time(¤t_time);
|
||||||
|
if(difftime(current_time, last_2323_time) >= 10.0) { // 超过10秒
|
||||||
|
LOG_I("thread_timeout_check: Timeout after receiving 0x2323, no 0x4646 received, setting isSendComEnd to 1\n");
|
||||||
|
isSendComEnd = 1;
|
||||||
|
last_2323_time = 0; // 重置时间
|
||||||
|
waiting_for_4646 = false; // 重置等待状态
|
||||||
|
isLightEnable = 1; // 重置点亮使能标志
|
||||||
|
isLightOn = false; // 重置点亮状态
|
||||||
|
isLightOnByRule = false; // 重置规则点亮状态
|
||||||
|
isLabelUp = false; // 重置标签更新状态
|
||||||
|
}
|
||||||
|
}
|
||||||
|
usleep(100*1000); // 每100ms检查一次
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user