优化usb外设插入时重复触发的问题

This commit is contained in:
tang1219
2026-06-16 14:07:40 +08:00
parent 98390053fd
commit 34157e19da
+9 -1
View File
@@ -16,6 +16,7 @@
#define DEFAULT_POLL_INTERVAL 5 // 默认轮询间隔为5秒
#define MAX_RETRY_ATTEMPTS 3 // 最大重试次数
#define RETRY_DELAY 1 // 重试延迟(秒)
#define COOLDOWN_SECONDS 30 // 触摸屏检测冷却时间(秒)
FILE *log_file = NULL; // 日志文件指针
// 函数提前声明
@@ -213,6 +214,7 @@ void monitor_usb_devices(const char *control_file_path, int poll_interval) {
printf("按Ctrl+C退出\n\n");
// 主循环,监控设备事件
time_t last_trigger_time = 0; // 上次触发控制文件的时间
while (keep_running) {
fd_set fds;
struct timeval tv;
@@ -292,9 +294,14 @@ void monitor_usb_devices(const char *control_file_path, int poll_interval) {
}
}
// 一轮检测完成后,如果需要更新控制文件状态
// 一轮检测完成后,如果需要更新控制文件状态(带冷却时间防重复触发)
if (use_control_file && touchscreen_detected) {
time_t now = time(NULL);
if (difftime(now, last_trigger_time) < COOLDOWN_SECONDS) {
log_message("冷却中,跳过本次触发(距上次 %.0f 秒)\n", difftime(now, last_trigger_time));
} else {
if (write_file_content_with_retry(control_file_path, 1) == 0) {
last_trigger_time = time(NULL);
log_message("已更新控制文件状态为1\n");
// 等待文件状态恢复为0
@@ -317,6 +324,7 @@ void monitor_usb_devices(const char *control_file_path, int poll_interval) {
}
}
}
}
// 清理资源
udev_monitor_unref(mon);