opc source code

This commit is contained in:
flower_linux
2026-06-09 17:27:24 +08:00
parent 70f675a48b
commit f0da5cb3c3
2002 changed files with 269812 additions and 7 deletions

View File

@@ -0,0 +1,130 @@
# 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` 下行同步对象模型