Files
P4-USB-transfer/main/EVENT/event.h
T

59 lines
3.0 KiB
C
Raw Normal View History

2026-10-13 21:54:50 +08:00
#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