Android Device Init SDK
当前代码位置
当前仓库里还没有独立 DeviceInitializer.kt。BLE 默认参数写入主要仍在 XTalkBleClient.authenticateAndInitializeDefaults(...) 内,UART 默认参数与后置硬件配置则分散在 AppTransport.kt 与 XTalkMeshUiApp.kt。本文按 SDK 边界描述初始化层应承接的内容。
当前实现位置
BLE 默认参数
apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/ble/XTalkBleClient.ktAT+ADDTLAT+FREQAT+RATEAT+BCNIDAT+WORKMODE
UART 默认参数
apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/transport/AppTransport.ktrestoreTextPttDefaults(...)setRateMode(...)setFrequencyHz(...)
UART 认证后初始化
apps/android-ui/app/src/main/java/com/xtalk/mesh/uimock/XTalkMeshUiApp.ktAT+ADDTL=1AT+RFSW=1,6,1,1
Init SDK 应负责什么
- BLE 认证后的默认参数写入
AT+ADDTLAT+FREQAT+RATEAT+BCNIDAT+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 / RATEXTalkMeshUiApp.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
XTalkBleClient.connect(...)- 认证 SDK
DeviceInitializer.initializeBleWirelessDefaults(...)- 业务收发
UART
XTalkUartClient.open(...)- 认证 SDK
DeviceInitializer.initializeUartDefaultsAfterAuth(...)DeviceInitializer.initializeUartVendorConfigAfterAuth(...)- 业务收发
目标模块位置
推荐拆分后放到:
- Gradle 模块:
apps/android-ui/device-init-sdk - 包名:
com.xtalk.mesh.sdk.deviceinit
这两项当前尚未在仓库中落地。