Baji_Rtc_Toy/main/dzbj/ble_transfer.h
Rdzleo 0735d45e52 feat: 从按键版迁移APP传图、设备间图片分享/接收、组合键模式切换功能
## 功能迁移清单(从 Dzbj_ESP32_S3_Key → Baji_Rtc_Toy)

### 1. 设备间BLE图片传输(GATT Client + 协议)
- 新增 ble_transfer.c/h:发送方 GATT Client 扫描→连接→MTU协商→分包写入
- 接收方复用现有 GATT Server(IMAGE_WRITE 0x0B01),协议完全兼容
- 发送完成/失败自动跳转 Img 界面并关闭蓝牙

### 2. APP传图显示 Update 界面
- 新增 ui_ScreenUpdate.c/h:更新进度界面(Gengxin背景 + Update_GIF动画)
- dzbj_ble.c WRITE_EVT 中通过 ble_transfer_is_receiving() 区分 APP传图 vs 设备间传输
- APP传图 → ScreenUpdate,设备间传输 → ScreenReceiving

### 3. KEY2 按键功能入口(iot_button 单击/双击/长按)
- KEY2 单击:开蓝牙 → Peiwang 配对界面(APP传图)
- KEY2 双击:接收模式 → ScreenImageReception(等待配对)
- KEY2 长按:发送模式 → ScreenImageShar(等待配对)
- 按键参数与按键版对齐:long_press_time=1200ms, short_press_time=300ms

### 4. BOOT+KEY2 组合键模式切换(替代 BOOT 长按3秒)
- BOOT 2秒长按 + KEY2 同时按下 → 触发模式切换
- 消除单键长按的误触发问题
- AI模式和吧唧模式均注册组合键

### 5. 按键上下文状态机
- btn_context_t 枚举:HOME/IMG/SET/PEIWANG/IMAGE_SHAR/IMAGE_RECEPTION/SHARING/RECEIVING/UPDATE
- 所有界面切换点(手势/按键/BLE自动跳转)同步设置 context
- BOOT 单击按 context 分发:Home无操作、Img/Set返回Home、配对退出蓝牙、传输等待取消

### 6. 新增 UI 界面(6个Screen + 7张图片)
- ScreenPeiwang:蓝牙配对等待
- ScreenUpdate:APP传图更新中
- ScreenImageShar:发送方等待配对
- ScreenImageReception:接收方等待配对
- ScreenSharing:发送方传输中
- ScreenReceiving:接收方接收中

### 7. 其他适配
- BLE 广播改为按需启动(dzbj_ble_start/stop/is_active)
- sleep_mgr 移除 KEY2 唤醒(仅 BOOT 唤醒屏幕)
- device_mode 新增模式切换按键抑制(防止重启后立即触发)
- battery_ui 电池指示器组件
- sdkconfig 启用 BLE GATTC 支持

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 10:55:17 +08:00

56 lines
1.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 设备间蓝牙图片传输模块
// 发送方GATT Client 扫描→连接→分包写入图片
// 接收方:复用现有 GATT Server通过模式标识区分 APP/设备来源
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include <stdbool.h>
// 传输状态
typedef enum {
BLE_XFER_IDLE, // 空闲
BLE_XFER_SCANNING, // 发送方扫描中
BLE_XFER_CONNECTING, // 发送方连接中
BLE_XFER_SENDING, // 发送方传输中
BLE_XFER_RECEIVING, // 接收方接收中由GATT Server端检测
BLE_XFER_DONE, // 传输完成
BLE_XFER_FAILED, // 传输失败
} ble_xfer_state_t;
// 初始化传输模块注册GATT Client回调
void ble_transfer_init(void);
// 发送方:开始扫描并发送当前图片
void ble_transfer_start_send(void);
// 接收方:开始广播等待其他设备连接
void ble_transfer_start_receive(void);
// 取消当前传输
void ble_transfer_cancel(void);
// 获取当前传输状态
ble_xfer_state_t ble_transfer_get_state(void);
// 查询是否处于设备间传输的接收模式供GATT Server写入回调判断
bool ble_transfer_is_receiving(void);
// === 以下函数由 dzbj_ble.c 的 GAP/GATTS 回调转发调用 ===
// 处理扫描结果(由 esp_gap_cb 转发)
void ble_transfer_handle_scan_result(void *param);
// 处理扫描停止(由 esp_gap_cb 转发)
void ble_transfer_handle_scan_stop(void);
// 图片接收完成通知(由 GATTS 写入完成时调用)
void ble_transfer_on_receive_complete(void);
#ifdef __cplusplus
}
#endif