Android BLE Connection SDK
当前代码位置
当前 XTalkBleClient 仍位于 apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/ble/XTalkBleClient.kt,尚未抽成独立 :ble-sdk 模块。本文按 SDK 边界说明它应该承接的职责,同时标注当前实现位置。
当前实现位置
- BLE 入口:
apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/ble/XTalkBleClient.kt - BLE 常量:
apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/ble/XTalkBleConstants.kt - BLE 名称过滤:
apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/ble/BleDeviceNames.kt - 当前 app:
apps/android-ui/app
SDK 边界
XTalkBleClient 应负责:
- 初始化底层 xTalk BLE 能力
- 扫描、连接、断开
- GATT 通道准备
- BLE AT 命令发送与应答收集
- 二进制帧收发
- 连接状态与 ready 状态查询
XTalkBleClient 不应负责:
AT+CHALLENGE认证编排- DID 业务语义
- 认证后的 BLE 默认参数初始化
- UART
- 页面状态与按钮文案
当前仓库里的相关 API
XTalkBleClient.ensureInitialized()XTalkBleClient.startScan(...)XTalkBleClient.connect(...)XTalkBleClient.disconnect(...)XTalkBleClient.runAtCommand(...)XTalkBleClient.sendBinaryFrame(...)XTalkBleClient.isWirelessReady()XTalkBleClient.isReadyForSend()XTalkBleClient.awaitConnected(...)XTalkBleClient.awaitDisconnected(...)
需要特别注意的现状
当前文件里仍有组合式历史入口:
XTalkBleClient.authenticateAndInitializeDefaults(...)
这个 API 同时做了:
AT+CHALLENGE- challenge 验签
- DID 等待
AT+ADDTL / AT+FREQ / AT+RATE / AT+BCNID / AT+WORKMODE
从 SDK 边界看,这一段应拆回:
- 认证逻辑归
Device Auth SDK - 默认参数写入归
Device Init SDK
当前代码里能确认的行为
AT+CHALLENGE、AT+EFUSESN?/AT+SN?相关处理仍在XTalkBleClient.kt- 默认参数写入也仍在
XTalkBleClient.kt - 这意味着当前仓库还处于“BLE transport + auth/init 混合实现”阶段
目标拆分后的推荐调用顺序
XTalkBleClient.ensureInitialized()
XTalkBleClient.connect(device, timeoutMs = 8_000L)
DeviceAuthenticator.authenticateBleAndReadDidExclusive(
timeoutMs = 30_000L,
)
DeviceInitializer.initializeBleWirelessDefaults(
DeviceInitializer.BleWirelessDefaults(freqHz = 483_600_000L),
)
XTalkBleClient.sendBinaryFrame(payload)
当前仓库里的实际调用语义
如果按当前代码现状理解:
- “已连接”不等于“可发业务数据”
isWirelessReady()/isReadyForSend()才更接近业务态- 认证和初始化尚未完全从
XTalkBleClient中剥离
目标模块位置
推荐拆分后放到:
- Gradle 模块:
apps/android-ui/ble-sdk - 包名:
com.xtalk.mesh.sdk.ble
但这两项目前还是目标位置,不是当前仓库事实。