#ifndef _BLE_H_ #define _BLE_H_ #include "esp_err.h" #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" #ifdef __cplusplus extern "C" { #endif /* NimBLE 在 ble_hs.c 中实现,公开 host/ble_hs.h 未导出 */ void ble_hs_lock(void); void ble_hs_unlock(void); extern const char *BLE_TAG; extern bool notify_enabled; extern volatile bool sentinel_mode_is_active; extern char s_emoji_delete_target_pack; extern TaskHandle_t notification_task_handle; extern TaskHandle_t sentinel_task_handle; // 设备名称 #define DEVICE_NAME "咔宝" #define MAX_NOTIFY_LEN 256 // BLE 特征值 #define BLE_SERVICE_UUID 0xFFFF #define BLE_CHAR_UUID_TX 0xFF01 // ESP32发送,APP接收 #define BLE_CHAR_UUID_RX 0xFF02 // APP发送,ESP32接收 #define BLE_CHAR_UUID_NOTIFY 0xFF03 // 通知特征 #define SENTINEL_TASK_PRIORITY 5 #define SENTINEL_TURN_ON 0x01 #define SENTINEL_TURN_OFF 0x02 #define SENTINEL_LISTEN_START_PULSE 0x04 #define SENTINEL_LISTEN_STOP_PULSE 0x08 #define SENTINEL_PULSE_TIMEOUT_MS 3000 #define SENTINEL_TOTAL_DURATION_MS (20 * 60 * 1000) #define BLE_SEND_PROGRESS (1<<0) #define BLE_SEND_VERSION (1<<1) #define BLE_SEND_DL_EMOJI_FAILED (1<<2) #define BLE_SEND_DL_EMOJI_SUCCESS (1<<3) #define BLE_SEND_DOWNLOADED_PACKS (1<<4) #define BLE_SEND_WIFI_STATE (1<<5) #define BLE_SEND_EMOJI_USING (1<<6) #define BLE_SEND_EMOJI_EXCHANGE_RESULT (1<<7) #define BLE_SEND_OTA_RESULT (1<<8) #define BLE_SEND_EMOJI_DELETE_RESULT (1<<9) #define BLE_SEND_EMOJI_CLEAR_RESULT (1<<10) /** 仅发送 Feedback 2.2A brightness 单帧(如设置页亮度滑条松手),由 notification_task 发送 */ #define BLE_SEND_BRIGHTNESS (1<<11) /** 表情包下载成功后,等待首次切换指令做“收尾”(不重启,停留在目标包) */ extern volatile bool g_emoji_upgrade_pending_finalize; /** 本次下载成功的 pack('A'/'B'/'C'/'D',或 '0') */ extern volatile char g_emoji_upgrade_downloaded_pack; /** 最近一次收到的“切换表情包”目标 pack(供收尾逻辑判断) */ extern volatile char g_emoji_upgrade_last_switch_target; /** 请求通过 BLE 发送 OTA 升级进度 1.11_B(0~100),由 notification_task 实际发送 */ void ble_send_ota_progress(uint8_t progress); /** 请求通过 BLE 发送 OTA 升级结果 1.11_A(0=失败,1=成功),由 notification_task 实际发送 */ void ble_send_ota_result_request(uint8_t success); /** 设置本次「切换表情包」指令的目标 Pack_id,供 notification_task 发送切换结果前执行保存 */ void set_emoji_exchange_target_pack(char pack_id); /** 开始 BLE 广播(GAP 回调等 NimBLE 上下文可直接调用) */ void ble_app_advertise(void); /** 整机初始化完成后首次起广播:从 app_main 等任务调用,内部持 ble_hs_lock */ void ble_app_advertise_after_system_init(void); /** 设置本次「删除表情包」指令的目标 Pack_id,供 notification_task 发送删除结果前执行删除 */ void ble_set_emoji_delete_target(char pack_id); void ble_main(void); void send_notification_to_app(const char *message); /** 请求通过 BLE 发送 WiFi 状态反馈(连接成功 0x01 / 断开 0x00),由 notification_task 实际发送 */ void ble_send_wifi_state_request(uint8_t connected); void send_protocol_frame(const uint8_t *data, size_t len); bool ble_is_connected(void); #ifdef __cplusplus } #endif #endif /* _BLE_H_ */