跳到主要内容

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 行或二进制数据;应优先使用 UartRadioTransportRadioTransportEventBridge 做统一入站解析。

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(...)modeUARTlabeluart

生命周期

  1. 取得串口访问权限并 open
  2. probeAtStatus,需要时完成认证。
  3. 用 Device Init SDK 设置默认无线参数。
  4. 注册统一入站事件并开放 Mesh/PTT/OTA 等业务。
  5. 切换设备或退出时先停止业务与 RF lease,再移除 listener 并 close

连接失败使用返回值或宿主异常处理;不要无限重试 TTY。SDK 不对外提供调试日志存储接口。