跳到主要内容

Android Device Init SDK

当前代码位置

当前仓库里还没有独立 DeviceInitializer.kt。BLE 默认参数写入主要仍在 XTalkBleClient.authenticateAndInitializeDefaults(...) 内,UART 默认参数与后置硬件配置则分散在 AppTransport.ktXTalkMeshUiApp.kt。本文按 SDK 边界描述初始化层应承接的内容。

当前实现位置

BLE 默认参数

  • apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/ble/XTalkBleClient.kt
    • AT+ADDTL
    • AT+FREQ
    • AT+RATE
    • AT+BCNID
    • AT+WORKMODE

UART 默认参数

  • apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/transport/AppTransport.kt
    • restoreTextPttDefaults(...)
    • setRateMode(...)
    • setFrequencyHz(...)

UART 认证后初始化

  • apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/XTalkMeshUiApp.kt
    • AT+ADDTL=1
    • AT+RFSW=1,6,1,1

Init SDK 应负责什么

  • BLE 认证后的默认参数写入
    • AT+ADDTL
    • AT+FREQ
    • AT+RATE
    • AT+BCNID
    • AT+WORKMODE
  • UART 认证后的默认参数初始化
  • UART 认证后的厂家硬件配置
  • 返回初始化结果,告诉业务层是否可继续

Init SDK 不应负责什么

  • BLE 扫描和连接
  • AT+CHALLENGE 认证
  • DID 读取
  • UART 打开
  • Mesh 协议业务
  • 页面级提示与按钮状态

当前代码现状

BLE

当前 BLE 默认初始化和认证还没有分层:

  • XTalkBleClient.authenticateAndInitializeDefaults(...)
    • 先做 challenge / DID
    • 再做默认参数写入

这意味着当前 BLE 初始化逻辑仍然混在 transport 实现里。

UART

当前 UART 默认参数与厂家配置也没有统一抽象:

  • AppTransport.restoreTextPttDefaults(...) 负责 WORKMODE / ADDTL / RATE
  • XTalkMeshUiApp.kt 在认证后直接执行 AT+RFSW=1,6,1,1

因此当前仓库仍处于“业务页直接编排初始化 AT”的阶段。

目标拆分后的推荐 API

object DeviceInitializer {
data class BleWirelessDefaults(
val freqHz: Long,
val rateMode: Int = 7,
val bcnId: Int = 0,
val addtl: Int = 1,
val workMode: Int = 21,
)

fun initializeBleWirelessDefaults(defaults: BleWirelessDefaults): Boolean

fun initializeUartDefaultsAfterAuth(
transport: AtCommandTransport,
deviceLongId: Long?,
defaults: UartDefaults,
): Result

fun initializeUartVendorConfigAfterAuth(
transport: AtCommandTransport,
deviceLongId: Long?,
tecnoUartPaEnabled: Boolean = false,
): Result
}

推荐的返回值语义:

data class Result(
val ok: Boolean,
val applied: Boolean,
val signature: String?,
val reason: String,
val commands: List<String> = emptyList(),
)

初始化层的推荐边界

  • Auth SDK 只负责“认证成功”
  • Init SDK 只负责“认证成功之后把设备切到预期工作参数”
  • 不要把频点、rate、BCN、厂家配置重新塞回认证 API

推荐调用顺序

BLE

  1. XTalkBleClient.connect(...)
  2. 认证 SDK
  3. DeviceInitializer.initializeBleWirelessDefaults(...)
  4. 业务收发

UART

  1. XTalkUartClient.open(...)
  2. 认证 SDK
  3. DeviceInitializer.initializeUartDefaultsAfterAuth(...)
  4. DeviceInitializer.initializeUartVendorConfigAfterAuth(...)
  5. 业务收发

目标模块位置

推荐拆分后放到:

  • Gradle 模块:apps/android-ui/device-init-sdk
  • 包名:com.xtalk.mesh.sdk.deviceinit

这两项当前尚未在仓库中落地。