Android 设备初始化 SDK
SDK Version: 1.0.0
Package:com.xtalk.mesh.sdk.deviceinit
Init SDK 在认证成功后写入设备默认参数。它不负责扫描、连接、Challenge 认证或 DID 读取。
BLE 默认参数
val initialized = withContext(Dispatchers.IO) {
DeviceInitializer.initializeBleWirelessDefaults(
radioTransport = radioTransport,
defaults = DeviceInitializer.BleWirelessDefaults(
freqHz = meshFrequencyHz,
rateMode = 7,
bcnId = 0,
addtl = 1,
workMode = 21,
),
)
}
默认值为:
| 字段 | 默认值 | 含义 |
|---|---|---|
freqHz | 470250000 | 四路默认频率,单位 Hz |
rateMode | 7 | 无线速率模式 |
bcnId | 0 | Beacon ID |
addtl | 1 | 地址附加设置 |
workMode | 21 | 工作模式 |
客户应使用项目获准的频率配置,不要直接把示例频率作为所有地区的生产配置。返回 true 表示全部默认命令收到 OK,并且 BLE 已进入可发送状态。
UART 默认参数
val initTransport = object : DeviceInitializer.AtCommandTransport {
override val label: String = "uart"
override fun runAtCommand(
command: String,
timeoutMs: Long,
log: Boolean,
): List<String> = myUart.runAtCommand(command, timeoutMs, log)
}
val defaults = DeviceInitializer.initializeUartDefaultsAfterAuth(
transport = initTransport,
deviceLongId = auth.deviceLongId,
defaults = DeviceInitializer.UartDefaults(addtl = 1),
)
deviceLongId 必须来自成功的认证结果。缺少 DID 时 SDK 返回 missing_did,不会下发命令。
UART 厂家配置
val vendor = DeviceInitializer.initializeUartVendorConfigAfterAuth(
transport = initTransport,
deviceLongId = auth.deviceLongId,
hostProfile = DeviceInitializer.AndroidHostProfile.current(),
tecnoUartPaEnabled = false,
timeoutMs = 3_000L,
)
SDK 1.0.0 内置 Ulefone 与 TECNO 主机匹配。无匹配配置时返回 ok = true、applied = false、reason = "no_vendor_config",表示无需处理,不是错误。
失败处理
- 初始化失败后不要开始业务发送。
- 确认连接仍有效,再决定重试一次或断开重连。
- 不要同时运行 Auth、Init、OTA 和自定义 AT 操作。
- 设备重启或重新连接后必须重新执行 Auth → Init。
完整模型与接口契约
| 类型/API | 默认或参数 | 行为与结果 |
|---|---|---|
AndroidHostProfile | manufacturer, brand, model | current() 读当前主机;matches(keyword) 忽略大小写匹配 manufacturer/brand |
BleWirelessDefaults | freqHz=470250000, rateMode=7, bcnId=0, addtl=1, workMode=21 | BLE 五项默认;频率须替换为获准值 |
UartDefaults | addtl=1 | UART 通用默认 |
VendorAtConfig | vendor, signature, commands | 厂家选择结果,commands 按顺序执行 |
Result | ok, applied, signature, reason, commands=[] | UART 可观察结果;ok=true/applied=false 可表示无需配置 |
initializeBleWirelessDefaults(radioTransport, defaults) | Auth 成功;后台线程 | 依次 ADDTL/FREQ/RATE/BCNID/WORKMODE;全部 OK 才返回 true 并设置 ready |
selectUartVendorConfig(hostProfile, tecnoUartPaEnabled=false) | 纯函数 | Ulefone/TECNO 配置或 null;不发命令 |
initializeUartVendorConfigAfterAuth(...) | UART Auth、DID 非空;默认 timeoutMs=3000 | 应用厂家命令并返回 Result |
initializeUartDefaultsAfterAuth(...) | UART Auth、DID 非空;默认 timeoutMs=2000 | 应用 ADDTL 并返回 Result |
RadioAtCommandTransport(radioTransport) | 已有统一 transport | 委托给 RadioTransport.runAtCommand |
UART reason:ok 成功应用;no_vendor_config 无需应用;missing_did 不发送命令;command_no_ok 有响应但无成功终止;command_failed 为异常/超时。只有 ok == true 才继续,applied 记录是否实际下发。
BLE 任一命令失败都会清 ready。确认仍 CONNECTED 后最多完整重试一次,再失败则重连并重做 Auth → Init。missing_did 必须回到 Auth。Init 没有独立 cancel;取消流程时等待当前命令期限结束并跳过后续命令。