跳到主要内容

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+CHALLENGEAT+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

但这两项目前还是目标位置,不是当前仓库事实。