Files
softbus_OPC/docs/UPLINK_WIRE_PROTOCOL.md
2026-06-09 17:27:24 +08:00

131 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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<uint8_t>` |
## 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<WireMessage>` |
| `base64Encode(data, size)` | payload 编码 |
| `base64Decode(encoded)` | payload 解码 |
实现位置:`src/softbus_transport/src/UplinkWire.cpp`
## 6. 与 SBUP 二进制协议对比
| 维度 | UplinkWire本项目 | SBUPsoft_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` 下行同步对象模型