Android UART 传输 SDK
SDK Version: 1.0.0
UART SDK 通过 Android 串口连接 xTalk 设备,提供串口打开/关闭、AT 命令、RF 二进制发送和统一 RadioTransport 适配。它不负责设备认证、无线参数初始化、Mesh 协议、PTT 或 UI。
接入与权限
引入客户交付的 UART SDK 1.0.0 与 Radio Transport SDK 1.0.0。宿主设备必须允许应用访问指定 TTY;普通消费级 Android 没有通用串口授权 API,路径和权限由设备厂商系统镜像决定。
val opened = XTalkUartClient.open(
applicationContext,
XTalkUartClient.Config(
baudRate = 115200,
devicePath = "/dev/ttyS1",
),
)
require(opened) { "UART open failed" }
getConfig()、getDeviceInfo() 和 isOpen() 返回当前连接状态。reopenWithBaud(context, baudRate) 用新波特率关闭并重开;close() 幂等释放 reader、输入流和输出流。
接收数据
val listener: (ByteArray) -> Unit = { bytes -> inboundRouter.accept(bytes) }
XTalkUartClient.addListener(listener)
// 页面/业务销毁时
XTalkUartClient.removeListener(listener)
监听器收到串口原始字节块,可能包含半行、多个 AT 行或二进制数据;应优先使用 UartRadioTransport 与 RadioTransportEventBridge 做统一入站解析。
AT 命令
val probe = XTalkUartClient.probeAtStatus(timeoutMs = 1_500)
when (probe?.status) {
XTalkUartClient.AtProbeStatus.OK -> continueStartup()
XTalkUartClient.AtProbeStatus.NEED_VERIFY -> authenticateDevice()
XTalkUartClient.AtProbeStatus.ERROR, null -> showConnectionError()
}
val lines = XTalkUartClient.runAtCommand(
command = "AT+VER?",
timeoutMs = 3_000,
log = false,
)
sendAtCommand(command) 只负责发送,不等待完整响应。runAtCommand(...) 串行化命令、收集响应并在 OK/ERROR 或自定义 stopWhen 条件结束。需要读取条件命中后的响应尾时使用统一 Radio Transport 的 runAtCommandDrainingResponseTail(...)。
RF 发送
val queued = XTalkUartClient.sendRfPayload(payload)
val completed = XTalkUartClient.sendRfPayloadAndWaitSendFinish(payload, 3_000)
val realtimeQueued = XTalkUartClient.sendRfPayloadNoWait(payload)
sendRfPayload使用设备二进制 escape 规则发送完整 RF payload。sendRfPayloadAndWaitSendFinish只有同时收到命令成功与发送完成才返回 true,适用于 Mesh/文件等可靠节拍。sendRfPayloadNoWait使用非阻塞锁;AT 会话或等待发送完成期间返回 false,适用于低时延实时媒体。- 空 payload、未打开串口或写入失败均返回 false。
统一 RadioTransport
val transport = UartRadioTransport(
eventBridge = eventBridge,
localDeviceLongIdProvider = { authenticatedDid },
)
if (transport.isReadyForSend()) {
when (transport.sendRfPayload(payload, timeoutMs = 3_000)) {
RadioSendResult.SEND_OK -> Unit
else -> retryOrReport()
}
}
UartRadioTransport 实现连接状态、设备 DID、AT 执行、三种 RF 发送、普通/实时 RF listener、CRC listener、频率与 RATE 配置、RATE/WORKMODE 查询,以及 restoreTextPttDefaults(...)。mode 为 UART,label 为 uart。
生命周期
- 取得串口访问权限并
open。 probeAtStatus,需要时完成认证。- 用 Device Init SDK 设置默认无线参数。
- 注册统一入站事件并开放 Mesh/PTT/OTA 等业务。
- 切换设备或退出时先停止业务与 RF lease,再移除 listener 并
close。
连接失败使用返回值或宿主异常处理;不要无限重试 TTY。SDK 不对外提供调试日志存储接口。