# UplinkWire 协议 v1 本文档定义 **边缘 `softbus_edge` → 核心 `softbus_daemon`** 的 TCP JSON 行协议。Phase 1 采用简化线格式,便于快速验证 OPC UA 绑定;与 soft_bus 主项目的二进制 `SBUP` 协议(EDGE_UPLINK_PROTOCOL_v1)相互独立。 ## 1. 传输 | 项 | 约定 | |----|------| | 传输层 | TCP | | 连接方向 | 边缘主动连接,守护进程监听 | | 默认地址 | `127.0.0.1:9000`(`daemon_profile.json` → `uplink`) | | 消息分隔 | 每条消息一行 JSON,以 `\n`(0x0A)结尾 | | 字符编码 | UTF-8 | | Phase 1 限制 | 无 HELLO/认证握手,连接即发送 | ## 2. 消息类型枚举 | 值 | `type` 字段 | 方向 | 说明 | |----|-------------|------|------| | 1 | `rawPacket` | 边缘→核心 | 原始总线数据上行 | | 2 | `executeCommand` | 核心→边缘 | 控制命令下行 | 解码时通过 JSON 根字段 `type` 区分(对应 `WireMessageType` 枚举)。 ## 3. rawPacket(边缘→核心) ### 3.1 JSON 字段 | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | `type` | string | 是 | 固定 `"rawPacket"` | | `traceId` | string | 是 | 追踪 ID,格式 `trace-xxxxxxxx` | | `timestampNs` | integer | 是 | 纳秒级时间戳 | | `runtimeDeviceId` | string | 是 | 运行时设备 ID,格式 `runtime-xxxxxxxx` | | `sourceId` | string | 是 | 对象路径,如 `DemoSite/.../Temperature` | | `protocolTag` | string | 是 | 协议标识,如 `"modbus"` | | `payloadBase64` | string | 是 | 原始 payload 的 Base64 编码 | ### 3.2 示例 ```json { "type": "rawPacket", "traceId": "trace-a1b2c3d4", "timestampNs": 1717920000000000000, "runtimeDeviceId": "runtime-e5f6g7h8", "sourceId": "DemoSite/DemoSystem/DemoAsset/SimModbusDevice/Temperature", "protocolTag": "modbus", "payloadBase64": "MDEwMzAyMDAwMDAwMDE=" } ``` ### 3.3 对应核心类型 解码后映射至 `softbus::core::RawPacket`: | JSON 字段 | RawPacket 字段 | |-----------|----------------| | `traceId` | `traceId` | | `timestampNs` | `timestampNs` | | `runtimeDeviceId` | `runtimeDeviceId` | | `sourceId` | `sourceId` | | `protocolTag` | `protocolTag` | | `payloadBase64` | `payload`(Base64 解码为 `vector`) | ## 4. executeCommand(核心→边缘) ### 4.1 JSON 字段 | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | `type` | string | 是 | 固定 `"executeCommand"` | | `traceId` | string | 是 | 追踪 ID | | `objectRef` | string | 是 | 目标对象路径(五层) | | `command` | string | 是 | 命令名,如 `"write"` | | `params` | object | 是 | 命令参数 JSON 对象 | ### 4.2 示例 ```json { "type": "executeCommand", "traceId": "trace-cmd-001", "objectRef": "DemoSite/DemoSystem/DemoAsset/SimModbusDevice/Temperature", "command": "write", "params": {"value": 42.5} } ``` ### 4.3 校验规则 `ExecuteCommand::validate()` 要求: - `traceId`、`objectRef`、`command` 非空 - `objectRef` 须为合法五层路径(`ObjectRef::isValid()`) - `params` 须为 JSON 对象 ### 4.4 对应核心类型 解码后映射至 `softbus::api::ExecuteCommand`。 ## 5. 编解码 API | 函数 | 说明 | |------|------| | `encodeWireMessage(RawPacket)` | 编码上行消息,追加 `\n` | | `encodeWireMessage(ExecuteCommand)` | 编码下行消息,追加 `\n` | | `decodeWireMessage(line)` | 解码单行,返回 `optional` | | `base64Encode(data, size)` | payload 编码 | | `base64Decode(encoded)` | payload 解码 | 实现位置:`src/softbus_transport/src/UplinkWire.cpp` ## 6. 与 SBUP 二进制协议对比 | 维度 | UplinkWire(本项目) | SBUP(soft_bus) | |------|---------------------|------------------| | 帧格式 | JSON 行 + `\n` | 定长头 + 变长 payload | | Magic | 无 | `SBUP`(4 字节) | | 字节序 | 不适用(文本) | 大端 | | 认证 | Phase 1 无 | HELLO + authToken | | 树同步 | 无 | TREE_FULL / TREE_PROPOSE | | 数据面 | `rawPacket` JSON | `DATA_RAWBUS` 二进制 | | 适用场景 | Phase 1 原型验证 | 生产级边缘接入 | ## 7. Phase 2 规划 - 可选迁移至 SBUP 二进制帧,与 soft_bus 对齐 - 增加 HELLO 握手与 `authToken` 认证 - 支持 `TREE_FULL` 下行同步对象模型