合并最新修改

This commit is contained in:
zzh 2025-12-26 13:56:51 +08:00
parent d495aef5d5
commit e8ecd07272
2 changed files with 42 additions and 170 deletions

202
main.c
View File

@ -123,7 +123,7 @@ int fd;
int UPCASE=0;
int count_value=0;
int getPayloadTime=100*1000;//usecond
char softwareVersion[16]="2.1.22";
char softwareVersion[16]="2.1.23";
//char stationsn[16]="d126ei4lj4cc00";//TJ250995217957
//char productid[8]="10045";
//char appSecret[64]="s3izIliw0CF48Pcsi16rjOmoFRf5WEt8";
@ -832,40 +832,23 @@ void removeLog(){
}
}
void enableWatchDog() {
// 使用 /dev/watchdog 设备,第一次喂狗自动开启看门狗
// 超时时间固定为5s不喂狗时默认关闭
LOG_I("watchdog will be enabled on first feed\n");
void enableWatchDog(){
system("echo 1 > /sys/class/gpio/export");//watchdog enable pin SGM820
system("echo 112 > /sys/class/gpio/export");//feed watchdog pin red
system("echo out > /sys/class/gpio/gpio1/direction");
system("echo out > /sys/class/gpio/gpio112/direction");
system("echo 1 > /sys/class/gpio/gpio1/value");
LOG_I("enable watchdog\n");
system("echo 1 > /sys/class/gpio/gpio112/value");
}
void feedWatchDog() {
// 使用 /dev/watchdog 设备喂狗
// 超时时间固定为5s喂狗命令: echo "" > /dev/watchdog
int fd;
int gpio_fd = open("/sys/class/gpio/gpio112/value", O_WRONLY);
int led_state = 0;
while(1) {
fd = open("/dev/watchdog", O_WRONLY);
if (fd < 0) {
LOG_I("can not open /dev/watchdog: %s\n", strerror(errno));
sleep(1);
continue;
}
write(fd, "", 1);
close(fd);
// 喂狗时翻转 gpio112 灯状态
if (gpio_fd >= 0) {
led_state = !led_state;
write(gpio_fd, led_state ? "1" : "0", 1);
}
sleep(1); // 每2秒喂一次狗超时时间为5s
}
if (gpio_fd >= 0) {
close(gpio_fd);
void feedWatchDog(){
while(1){
//LOG_I("feed watchdog\n");
system("echo 0 > /sys/class/gpio/gpio112/value");
usleep(100*1000);
system("echo 1 > /sys/class/gpio/gpio112/value");
sleep(1);
}
}
@ -2980,109 +2963,8 @@ int main(int argc, char *argv[])
char networktype[32]={0};
LOG_I("version:%s\n",softwareVersion);
//system("insmod /system/lib/modules/wk2xxx_spi.ko");
system("insmod /system/lib/modules/wk2xxx_spi.ko");
system("timedatectl set-timezone Asia/Shanghai");
// 导出 GPIO 63
{
int fd = open("/sys/class/gpio/export", O_WRONLY);
if (fd >= 0) {
write(fd, "63", 2);
close(fd);
}
}
// 设置 GPIO 63 方向为 in
{
int fd = open("/sys/class/gpio/gpio63/direction", O_WRONLY);
if (fd >= 0) {
write(fd, "in", 2);
close(fd);
}
}
// 导出 GPIO 113
{
int fd = open("/sys/class/gpio/export", O_WRONLY);
if (fd >= 0) {
write(fd, "112", 3);
write(fd, "113", 3);
write(fd, "114", 3);
write(fd, "115", 3);
write(fd, "117", 3);
close(fd);
}
}
{
int fd = open("/sys/class/gpio/gpio112/direction", O_WRONLY);
if (fd >= 0) {
write(fd, "out", 3);
close(fd);
}
}
// 设置 GPIO 113 方向为 out
{
int fd = open("/sys/class/gpio/gpio113/direction", O_WRONLY);
if (fd >= 0) {
write(fd, "out", 3);
close(fd);
}
}
#if 0
// 导出 GPIO 118
{
int fd = open("/sys/class/gpio/export", O_WRONLY);
if (fd >= 0) {
write(fd, "118", 3);
close(fd);
}
}
// 设置 GPIO 118 方向为 out
{
int fd = open("/sys/class/gpio/gpio118/direction", O_WRONLY);
if (fd >= 0) {
write(fd, "out", 3);
close(fd);
}
}
#endif
// 导出 GPIO 115
{
int fd = open("/sys/class/gpio/export", O_WRONLY);
if (fd >= 0) {
write(fd, "115", 3);
close(fd);
}
}
// 设置 GPIO 115 方向为 out
{
int fd = open("/sys/class/gpio/gpio115/direction", O_WRONLY);
if (fd >= 0) {
write(fd, "out", 3);
close(fd);
}
}
// 导出 GPIO 117
{
int fd = open("/sys/class/gpio/export", O_WRONLY);
if (fd >= 0) {
write(fd, "117", 3);
close(fd);
}
}
// 设置 GPIO 117 方向为 out
{
int fd = open("/sys/class/gpio/gpio117/direction", O_WRONLY);
if (fd >= 0) {
write(fd, "out", 3);
close(fd);
}
}
setGpio113High();
setGpio114High();
setGpio115High();
setGpio117High();
uart_open(&uartSend,"/dev/ttyS0");//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");
@ -3091,13 +2973,12 @@ int main(int argc, char *argv[])
uart_open(&uartRecvBack,"/dev/ttysWK0");
uart_init(&uartRecvBack,115200,8,1,'N',0);
//doCommand_help(0, NULL);
//system("echo 113 > /sys/class/gpio/export");//pin 113 yellow
//system("echo out > /sys/class/gpio/gpio113/direction");
//system("echo 63 > /sys/class/gpio/export");//pin 63 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");
system("echo 63 > /sys/class/gpio/export");//pin 63 key
system("echo in > /sys/class/gpio/gpio63/direction");
#if 1
enableWatchDog();
ret = pthread_create(&pt_watchdog,NULL,thread_feed_watchdog,NULL);
if(ret!=0){
LOG_I("pthread_create watchdog fail\n");
@ -3196,23 +3077,22 @@ int main(int argc, char *argv[])
pthread_detach(pt_station_heartbeat);
}
// 心跳检测线程移到MQTT连接成功后启动避免MQTT未连接时上报失败
// ret = pthread_create(&pt_heartbeat_check,NULL,thread_heartbeat_check,NULL);
// if(ret!=0){
// LOG_I("pthread_create heartbeat_check fail\n");
// }else{
// LOG_I("pthread_create heartbeat_check success\n");
// pthread_detach(pt_heartbeat_check);
// }
ret = pthread_create(&pt_heartbeat_check,NULL,thread_heartbeat_check,NULL);
if(ret!=0){
LOG_I("pthread_create heartbeat_check fail\n");
}else{
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);
//}
#if 0
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);
}
ret = pthread_create(&pt_all_light,NULL,thread_all_light,NULL);
if(ret!=0){
@ -3221,14 +3101,6 @@ int main(int argc, char *argv[])
LOG_I("pthread_create all_light success\n");
pthread_detach(pt_all_light);
}
//ret = pthread_create(&pt_simulate_mqtt_topic,NULL,thread_simulate_mqtt_topic,NULL);
//if(ret!=0){
// LOG_I("pthread_create simulate_mqtt_topic fail\n");
//}else{
// LOG_I("pthread_create simulate_mqtt_topic success\n");
// pthread_detach(pt_simulate_mqtt_topic);
//}
#endif
#if 0
readresult=file_to_buffer("mqttRawPassword",&len);
@ -3377,4 +3249,4 @@ int main(int argc, char *argv[])
}
}
return 0;
}
}

View File

@ -141,7 +141,7 @@ void *thread_yellow_led_flash(void *arg) {
int delay_us = 100000 + (rand() % 400000); // 100000-500000 微秒
// 点亮黄灯
system("echo 1 > /sys/class/gpio/gpio114/value");
system("echo 1 > /sys/class/gpio/gpio113/value");
// 随机延时保持亮
usleep(delay_us);
@ -150,14 +150,14 @@ void *thread_yellow_led_flash(void *arg) {
if (!yellow_led_flash_running) break;
// 熄灭黄灯
system("echo 0 > /sys/class/gpio/gpio114/value");
system("echo 0 > /sys/class/gpio/gpio113/value");
// 随机延时保持灭
usleep(delay_us);
}
// 确保退出时灯是灭的
system("echo 0 > /sys/class/gpio/gpio114/value");
system("echo 0 > /sys/class/gpio/gpio113/value");
LOG_I("Yellow LED flash thread exited\n");
return NULL;
}
@ -172,7 +172,7 @@ void mqtt_net_failure(int *failure_times){
}
pthread_mutex_unlock(&yellow_led_mutex);
system("echo 0 > /sys/class/gpio/gpio114/value");
system("echo 0 > /sys/class/gpio/gpio113/value");
if(failure_times != NULL){
(*failure_times)++;
LOG_I("mqtt net failure_times = %d\n", *failure_times);
@ -389,7 +389,7 @@ void mqtt_utils_connected(void *context, char *cause){
if (ret != 0) {
LOG_I("Failed to create yellow LED flash thread, using constant on\n");
yellow_led_flash_running = false;
system("echo 1 > /sys/class/gpio/gpio114/value");//yellow ok
system("echo 1 > /sys/class/gpio/gpio113/value");//yellow ok
} else {
pthread_detach(pt_yellow_led_flash);
LOG_I("Yellow LED flash thread started\n");