跳转至

连接控制接口

本文引用的文件 - components/rest_api/rest_api.c - include/rest_api.h - components/ble_gateway/ble_gateway.c - include/ble_gateway.h - main/main.c - include/config.h - components/network_manager/network_manager.c - include/network_manager.h - include/hci_transport.h - old_version/components/ble_scanner/ble_scanner.c - old_version/include/ble_scanner.h

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论
  10. 附录

简介

本文件面向BLE连接控制API,系统性阐述以下内容: - 查询连接状态:GET /api/ble/connection - 建立/断开连接:POST /api/ble/connection - 连接状态枚举与设备地址格式 - 连接参数配置(间隔、延迟、超时等) - 超时处理、安全断开机制与状态实时监控 - 完整的调用流程与故障排除建议

当前仓库中REST API未直接实现上述两个端点,但底层BLE网关模块已具备连接与断开的函数接口,且配置层提供了连接参数常量。本文将基于现有实现进行扩展设计与说明,并给出可落地的集成方案。

项目结构

本项目采用组件化分层架构,REST API位于独立组件中,BLE网关在另一组件内,二者通过HTTP服务器注册路由后协同工作。

graph TB
subgraph "应用入口"
MAIN["main.c<br/>应用启动与服务初始化"]
end
subgraph "网络与配置"
CFG["include/config.h<br/>全局配置与参数常量"]
NETMGR["components/network_manager/network_manager.c<br/>网络状态管理"]
end
subgraph "BLE子系统"
BLEGW["components/ble_gateway/ble_gateway.c<br/>BLE网关核心"]
HCIT["include/hci_transport.h<br/>HCI传输接口"]
end
subgraph "Web服务"
REST["components/rest_api/rest_api.c<br/>REST API实现"]
RESTH["include/rest_api.h<br/>REST API接口"]
end
MAIN --> NETMGR
MAIN --> BLEGW
MAIN --> REST
REST --> BLEGW
BLEGW --> HCIT
MAIN --> CFG

图表来源 - main/main.c - components/rest_api/rest_api.c - components/ble_gateway/ble_gateway.c - include/hci_transport.h - include/config.h

章节来源 - main/main.c - components/rest_api/rest_api.c - components/ble_gateway/ble_gateway.c - include/hci_transport.h - include/config.h

核心组件

  • REST API模块:负责HTTP路由注册与请求处理,当前未实现“/api/ble/connection”相关端点,需扩展。
  • BLE网关模块:提供连接/断开接口,封装底层HCI命令发送与状态管理。
  • 配置模块:定义BLE连接参数(如连接间隔、超时等)。
  • 网络管理模块:提供网络状态,保障API可用性。
  • 主程序:协调各模块初始化与运行。

章节来源 - components/rest_api/rest_api.c - components/ble_gateway/ble_gateway.c - include/config.h - components/network_manager/network_manager.c

架构总览

下图展示从HTTP请求到BLE连接控制的端到端流程,以及关键数据结构与回调关系。

sequenceDiagram
participant Client as "客户端"
participant HTTP as "HTTP服务器"
participant REST as "REST API处理器"
participant BLE as "BLE网关"
participant HCI as "HCI传输层"
Client->>HTTP : "POST /api/ble/connection"
HTTP->>REST : "路由分发"
REST->>REST : "解析请求体目标MAC/动作"
REST->>BLE : "ble_gateway_connect()/ble_gateway_disconnect()"
BLE->>HCI : "发送HCI命令LE Create Connection/Disconnect"
HCI-->>BLE : "返回事件/状态"
BLE-->>REST : "更新内部状态"
REST-->>Client : "返回结果成功/失败"
Note over Client,BLE : "GET /api/ble/connection用于查询当前连接状态"

图表来源 - components/rest_api/rest_api.c - components/ble_gateway/ble_gateway.c - include/hci_transport.h

详细组件分析

REST API扩展:/api/ble/connection

  • 当前已注册的API包括状态查询、设备列表、扫描启停、配置读取与更新等,但未包含连接控制端点。
  • 建议新增:
  • GET /api/ble/connection:返回当前连接状态与已连接设备列表
  • POST /api/ble/connection:建立或断开指定设备连接
  • 请求体字段建议:
  • mac:目标设备MAC地址(十六进制字符串,格式如 AA:BB:CC:DD:EE:FF)
  • action:操作类型(connect/disconnect)
  • 响应体字段建议:
  • status:操作结果(ok/error)
  • message:简要描述
  • connected:当前连接状态布尔值
  • devices:连接设备数组(含mac/name/rssi/connected)

章节来源 - components/rest_api/rest_api.c - include/ble_gateway.h

BLE网关:连接与断开

  • 接口概览:
  • 连接:ble_gateway_connect(mac)
  • 断开:ble_gateway_disconnect(mac)
  • 设备信息:ble_gateway_get_devices(...)、ble_gateway_get_device_count()
  • 数据结构:
  • 设备结构体包含MAC、名称、RSSI、是否已连接、连接句柄等字段
  • 实现现状:
  • 函数声明存在,但具体HCI命令发送逻辑标记为TODO,尚未实现
  • 参考旧版本实现(可迁移):
  • 连接流程:停止扫描 → 发送LE Create Connection命令 → 等待连接完成事件
  • 断开流程:发送Disconnect命令 → 监听断开完成事件
flowchart TD
Start(["进入连接流程"]) --> StopScan["停止BLE扫描"]
StopScan --> BuildCmd["构造LE Create Connection命令"]
BuildCmd --> SendCmd["发送HCI命令"]
SendCmd --> WaitEvt{"等待事件"}
WaitEvt --> |连接成功| SetConn["设置连接状态为已连接"]
WaitEvt --> |连接失败| SetDisc["设置连接状态为断开"]
SetConn --> End(["结束"])
SetDisc --> End

图表来源 - components/ble_gateway/ble_gateway.c - old_version/components/ble_scanner/ble_scanner.c

章节来源 - components/ble_gateway/ble_gateway.c - include/ble_gateway.h - old_version/components/ble_scanner/ble_scanner.c

连接状态与设备地址

  • 连接状态枚举(参考旧版本):
  • disconnected、connecting、connected
  • 设备地址格式:
  • MAC地址为6字节,建议以冒号分隔的大写十六进制字符串表示(AA:BB:CC:DD:EE:FF)
  • 地址类型:public或random(由设备广播决定)
  • 设备信息结构体字段:
  • mac、addr_type、name、rssi、adv_data、adv_len、last_seen、connected、conn_handle

章节来源 - include/ble_gateway.h - old_version/include/ble_scanner.h

连接参数配置

  • 参数来源(配置头文件):
  • 最大连接数、扫描间隔/窗口、连接间隔范围、连接超时、延迟等
  • 关键参数含义:
  • 连接间隔最小/最大:影响功耗与延迟
  • 连接超时:链路空闲检测与断开阈值
  • 连接延迟:允许的空闲周期数,降低能耗
  • 使用建议:
  • 在POST请求中支持动态调整(如通过配置管理模块持久化),或在初始化阶段统一设置

章节来源 - include/config.h

超时处理与安全断开

  • 超时策略:
  • 建立连接时等待Command Status/Complete事件,超时则判定失败并清理状态
  • 连接建立后,若长时间无活动,依据超时参数触发断开
  • 安全断开机制:
  • 显式发送Disconnect命令,避免强制复位
  • 监听Disconnection Complete事件,确保资源释放
  • 状态一致性:
  • 通过互斥量保护设备列表与连接状态,避免竞态

章节来源 - old_version/components/ble_scanner/ble_scanner.c - old_version/components/ble_scanner/ble_scanner.c

实时监控

  • 设备列表与连接状态:
  • 提供GET /api/devices返回设备列表,其中包含connected字段
  • 可结合WebSocket或轮询方式推送状态变更
  • 网络状态:
  • GET /api/status返回网络连通性,便于判断API可用性

章节来源 - components/rest_api/rest_api.c - components/rest_api/rest_api.c

依赖关系分析

  • REST API依赖BLE网关与网络管理模块,用于执行业务逻辑与返回系统状态
  • BLE网关依赖HCI传输层,用于与nRF52833通信
  • 主程序负责初始化顺序与任务调度
graph LR
REST["REST API"] --> BLE["BLE网关"]
REST --> NET["网络管理"]
BLE --> HCI["HCI传输"]
MAIN["主程序"] --> REST
MAIN --> BLE
MAIN --> NET
MAIN --> CFG["配置"]

图表来源 - main/main.c - components/rest_api/rest_api.c - components/ble_gateway/ble_gateway.c - include/hci_transport.h

章节来源 - main/main.c - components/rest_api/rest_api.c - components/ble_gateway/ble_gateway.c - include/hci_transport.h

性能考虑

  • 扫描与连接冲突:连接前应停止扫描,避免资源竞争
  • 事件驱动:使用事件回调处理连接/断开完成,减少轮询开销
  • 内存与并发:设备列表访问使用互斥量保护;合理设置任务栈大小与优先级
  • 参数优化:根据应用场景调整连接间隔与超时,平衡功耗与实时性

故障排除指南

  • API不可用:
  • 检查网络状态(GET /api/status),确认ETH/WiFi已连接
  • 确认REST API已注册路由
  • 连接失败:
  • 确认目标MAC格式正确(AA:BB:CC:DD:EE:FF)
  • 检查设备是否处于可连接状态(RSSI、广播类型)
  • 查看连接超时与参数配置是否合理
  • 断不开:
  • 确认已发送Disconnect命令并监听Disconnection Complete事件
  • 检查连接句柄有效性
  • 资源泄露:
  • 确保事件回调中释放资源,互斥量使用成对出现

章节来源 - components/network_manager/network_manager.c - components/rest_api/rest_api.c - old_version/components/ble_scanner/ble_scanner.c

结论

  • 当前REST API未实现“/api/ble/connection”,需按本文建议扩展
  • BLE网关已提供连接/断开接口,可作为实现基础
  • 通过合理的超时与断开机制、参数配置与实时监控,可构建稳定可靠的BLE连接控制能力

附录

API定义与示例(路径引用)