修复常亮

This commit is contained in:
zzh 2025-12-05 18:35:10 +08:00
parent ae32d60119
commit 6eb5df592e
2 changed files with 55 additions and 3 deletions

55
main.c
View File

@ -37,6 +37,7 @@ pthread_t pt_removeduplicatetag;
pthread_t pt_keycheck;
pthread_t pt_mqtt_status;
pthread_t pt_station_heartbeat;
pthread_t pt_simulate_light;
uart_utils_t uartSend = {0};
uart_utils_t uartRecvData = {0};
uart_utils_t uartRecvBack = {0};
@ -72,6 +73,7 @@ int lightbars_size=0;
int lightbars_count=0;
uint8_t changecolor=0;
uint8_t changesound=0;
uint8_t changeflash=3; // 1=常亮, 3=闪烁
uint8_t groupno=0;
int fd;
int UPCASE=0;
@ -132,6 +134,7 @@ void hmacsha1_hex(char *key, char* data, char *signhex, int signhex_len);
void *thread_mqtt_status_check(void *arg);
void *thread_station_heartbeat(void *arg);
void *thread_heartbeat_check(void *arg);
void *thread_simulate_light(void *arg);
void update_lightbar_heartbeat(uint32_t tagCode);
void report_lightbar_login(uint32_t tagCode);
void report_lightbar_logout(uint32_t tagCode);
@ -286,6 +289,42 @@ void *thread_heartbeat_check(void *arg) {
return NULL;
}
/*================================================================================*/
// 模拟亮灯线程函数 - 每30秒发送一次亮灯任务
void *thread_simulate_light(void *arg){
LOG_I("thread_simulate_light started\n");
char sim_payload[1024] = {0};
while(1){
sleep(30); // 每30秒执行一次
// 从/root/payload文件读取内容
FILE *fp = fopen("/root/payload", "r");
if(fp == NULL){
LOG_I("simulate_light: cannot open /root/payload\n");
continue;
}
memset(sim_payload, 0, sizeof(sim_payload));
if(fgets(sim_payload, sizeof(sim_payload), fp) != NULL){
// 去掉换行符
int len = strlen(sim_payload);
if(len > 0 && sim_payload[len-1] == '\n'){
sim_payload[len-1] = '\0';
}
LOG_I("simulate_light: putting payload into queue\n");
LOG_I("payload: %s\n", sim_payload);
// 直接把payload放入消息队列由thread_mqtt_recv处理
PutDataIntoMQueue(sim_payload);
}
fclose(fp);
}
pthread_exit(NULL);
}
/*================================================================================*/
void doCommand_help(int argc, char *argv[])
{
@ -1357,7 +1396,7 @@ void *thread_uart_recv_ack(void *arg){
.s.color=changecolor,
.s.sound=changesound,
.s.single=0,
.s.flash=3,
.s.flash=changeflash,
};//0xC1 11000001 flash高位
jt_led_or_group_package_t group={
.group=groupno,
@ -1910,7 +1949,8 @@ void *thread_mqtt_recv(void *arg){
// 解析Flashing字段闪烁
int flashing_enable = 0;
get_int_from_json_string_by_key(msg_items,"Flashing",&flashing_enable);
LOG_I("Flashing = %d\n", flashing_enable);
changeflash = flashing_enable ? 3 : 1; // 3=闪烁, 1=常亮
LOG_I("Flashing = %d, changeflash = %d\n", flashing_enable, changeflash);
// 解析TagID字段灯条ID
LOG_I("Before parsing TagID, msg_items = %s\n", msg_items);
@ -2026,6 +2066,7 @@ void *thread_mqtt_recv(void *arg){
isBindTag = false;
// P点灯 B绑定 &群控(不支持) *根据id点亮
// timeout单位是5秒所以 Time(秒) / 5 = timeout
uart_data_send_head(&uartSend, 'P', 5, mqtt_parm.msg_duration/5, lightbars_size);
} else {
LOG_I("Processing OTA task (task_id: ota)\n");
@ -2343,6 +2384,16 @@ int main(int argc, char *argv[])
LOG_I("pthread_create heartbeat_check success\n");
pthread_detach(pt_heartbeat_check);
}
#if 1
ret = pthread_create(&pt_simulate_light,NULL,thread_simulate_light,NULL);
if(ret!=0){
LOG_I("pthread_create simulate_light fail\n");
}else{
LOG_I("pthread_create simulate_light success\n");
pthread_detach(pt_simulate_light);
}
#endif
#if 0
readresult=file_to_buffer("mqttRawPassword",&len);
if(readresult!=NULL){

View File

@ -43,7 +43,7 @@ char nativeInvokTopicName[1024] = "";
char nativeUpgradeTopicName[1024] = "";
// 多个订阅topic数组
char subscribeTopics[5][1024] = {""};
char subscribeTopics[10][1024] = {""};
int subscribeTopicCount = 0;
extern char softwareVersion[16];
typedef struct{
@ -357,6 +357,7 @@ int mqtt_utils_init(mqtt_utils_t *mqtt_config)
sprintf(subscribeTopics[subscribeTopicCount++], "/iot/estation%s/bind", mqtt_conf->username);
sprintf(subscribeTopics[subscribeTopicCount++], "/iot/estation%s/group", mqtt_conf->username);
sprintf(subscribeTopics[subscribeTopicCount++], "/iot%s/thing/ota/upgrade", mqtt_conf->username);
sprintf(subscribeTopics[subscribeTopicCount++], "/sys/WcSubLightStrip/AD1000014C11/thing/service/lightOperate/invoke");
LOG_I("设置了%d个订阅topic:\n", subscribeTopicCount);
for(int i = 0; i < subscribeTopicCount; i++) {