#ifndef EVENT_H #define EVENT_H #include "freertos/FreeRTOS.h" // 必须第一个包含 #include "freertos/task.h" #include "freertos/event_groups.h" #include "freertos/queue.h" // 声明全局变量(extern 表示在其他文件中定义) extern EventGroupHandle_t system_event_group; extern QueueHandle_t system_event_queue; /* 事件队列:BLE 等回调通过队列投递,main_task 阻塞接收 */ extern TaskHandle_t main_task_handle; // 事件标志定义 #define BLE_CONNECTED_BIT (1 << 0) #define WIFI_CONNECTED_BIT (1 << 1) #define WIFI_DISCONNECTED_BIT (1 << 2) #define BLE_DISCONNECTED_BIT (1 << 14) #define WEBSOCKET_CONNECTED_BIT (1 << 3) #define WEBSOCKET_DISCONNECTED_BIT (1 << 4) #define WEBSOCKET_DATA_BIT (1 << 5) #define IMU_DATA_READY_BIT (1 << 6) #define USER_INPUT_BIT (1 << 7) #define SYSTEM_ERROR_BIT (1 << 8) #define OTA_UPDATE_STARTED_BIT (1 << 9) #define OTA_UPDATE_COMPLETED_BIT (1 << 10) #define DOWNLOAD_EMOJI_BIT (1 << 11) #define DOWNLOAD_SUCCESS_BIT (1 << 12) #define DOWNLOAD_FAILED_BIT (1 << 13) #define OTA_RECOVER_REQUIRED_BIT (1 << 15) /** OTA 任务因失败退出:先等 WiFi 重连结果再恢复 UI(由 main 处理) */ #define OTA_FAIL_RECOVER_PENDING_BIT (1 << 16) /** BLE 触发的 WiFi 配网:重试用尽/最终失败后,释放 WiFi 并恢复 LVGL/UI(仅此场景使用) */ #define WIFI_BLE_PROV_FAIL_RECOVER_UI_BIT (1 << 17) /** 表情包下载成功后的第一次切换:收尾升级;若切到下载包则强制停在该包 default.json */ #define EMOJI_UPGRADE_FINALIZE_BIT (1 << 18) /* main_task 监听的系统事件掩码(用于 xEventGroupWaitBits) */ #define MAIN_TASK_EVENT_MASK (BLE_CONNECTED_BIT | WIFI_CONNECTED_BIT | WIFI_DISCONNECTED_BIT | \ WEBSOCKET_CONNECTED_BIT | WEBSOCKET_DISCONNECTED_BIT | WEBSOCKET_DATA_BIT | \ IMU_DATA_READY_BIT | USER_INPUT_BIT | SYSTEM_ERROR_BIT | \ OTA_UPDATE_STARTED_BIT | OTA_UPDATE_COMPLETED_BIT | \ DOWNLOAD_EMOJI_BIT | DOWNLOAD_SUCCESS_BIT | DOWNLOAD_FAILED_BIT | \ BLE_DISCONNECTED_BIT | OTA_RECOVER_REQUIRED_BIT | OTA_FAIL_RECOVER_PENDING_BIT | \ WIFI_BLE_PROV_FAIL_RECOVER_UI_BIT | EMOJI_UPGRADE_FINALIZE_BIT) // 函数声明 void set_system_event(uint32_t bits); void clear_system_event(uint32_t bits); uint32_t wait_system_event(uint32_t bits, TickType_t timeout); // 新增:初始化和清理函数 bool init_event_system(void); void deinit_event_system(void); /* WiFi 配网守卫:收到配网指令后开启故障重启策略 */ void notify_wifi_provision_signal_received(void); #endif // EVENT_H