Files
softbus_OPC/docs/softbus_core.md
flower_linux 710a8c2bd3 phase 1
2026-06-11 18:06:39 +08:00

127 lines
4.5 KiB
Markdown
Raw 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.
# softbus_core
**路径:** `src/softbus_core`
**构建目标:** `softbus_core`STATIC 库)
**层级:** L0 内核层
## 1. 概述
`softbus_core` 是全项目共享内核,提供数据模型、身份标识、配置加载、插件 ABI、日志、平台信号与时间对齐。所有上层模块均依赖本库且模型设计保持**传输中立**——不含 D-Bus、HTTP、OPC UA 特定字段。
## 2. CONSTRAINTS
- `softbus_core` 拥有进程无关的共享模型、元数据定义、插件接口与配置解析。
- 模型结构体必须保持传输中立,不得在字段中编码 D-Bus、HTTP、Qt 或 OPC UA 特定语义。
- 插件接口须保持 ABI 稳定:优先新增字段与能力方法,避免改变已有方法语义。
- `ObjectRef` 五层路径是唯一对象寻址约定,格式为 `Site/System/Asset/Device/Point`
- 空配置与首次运行状态合法,`ProfileLoader` 失败须由调用方处理。
- `traceId``DeviceIdentity` 统一生成,格式 `trace-xxxxxxxx`
## 3. 子模块
### 3.1 models — 数据模型
| 类型 | 文件 | 说明 |
|------|------|------|
| `RawPacket` | `models/RawPacket.h` | 边缘上行原始包 |
| `RawBusMessage` | `models/RawBusMessage.h` | `RawPacket` 类型别名 |
| `DOMMessage` | `models/DOMMessage.h` | 统一语义消息 |
| `ObjectModelTree` | `models/ObjectModel.h` | 五层对象树定义 |
| `ObjectRef` | `models/ObjectModel.h` | 对象引用与路径转换 |
| `MetadataDef` | `models/MetadataDef.h` | 测点元数据dataType, unit, scale |
**RawPacket 字段:**
| 字段 | 类型 | 说明 |
|------|------|------|
| `traceId` | string | 追踪标识 |
| `timestampNs` | uint64_t | 纳秒时间戳 |
| `runtimeDeviceId` | string | 运行时设备 ID |
| `sourceId` | string | 源对象路径 |
| `protocolTag` | string | 协议标签 |
| `payload` | vector<uint8_t> | 原始字节 |
**DOMMessage 字段:**
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | string | 消息标识(通常等于 objectRef |
| `sourceId` | string | 源对象路径 |
| `domain` | string | 数据域,如 `Process` |
| `quality` | string | 数据质量,如 `Good` |
| `value` | json | 语义值对象 |
| `traceId` | string | 追踪标识 |
| `timestampNs` | uint64_t | 时间戳 |
### 3.2 identity — 设备身份
| 类/函数 | 说明 |
|---------|------|
| `DeviceIdentity::generateTraceId()` | 生成 `trace-xxxxxxxx` |
| `DeviceIdentity::generateRuntimeDeviceId()` | 生成 `runtime-xxxxxxxx` |
| `DeviceIdentity::buildObjectRef(tree, device, point)` | 从模型构建 ObjectRef |
### 3.3 config — 配置加载
| 类 | 说明 |
|----|------|
| `ProfileLoader` | 解析 `daemon_profile.json``DaemonProfile` |
| `DaemonProfile` | 含 `opcua``uplink``plugins``security` 子结构 |
| `ObjectModelTree::loadFromFile()` | 解析 `softbus_model.json` |
### 3.4 plugin — 插件基础设施
| 接口 | 说明 |
|------|------|
| `IFramer` | 分帧:`extract(data, size) → FrameResult` |
| `IParser` | 解析:`parseFrame(data, size, sourceId) → ParseResult` |
| `PluginLoader` | dlopen/LoadLibrary 动态加载插件 |
| `SOFTBUS_PLUGIN_API` | C ABI 导出宏 |
**插件 C ABI 导出函数:**
```c
SOFTBUS_PLUGIN_API IFramer* create_framer();
SOFTBUS_PLUGIN_API void destroy_framer(IFramer* framer);
SOFTBUS_PLUGIN_API IParser* create_parser();
SOFTBUS_PLUGIN_API void destroy_parser(IParser* parser);
```
### 3.5 其他子模块
| 子模块 | 文件 | 说明 | Phase 1 状态 |
|--------|------|------|-------------|
| logging | `Logger.h/.cpp` | 单例日志,`SB_LOG_*` 宏自动附带 `[文件::函数]` 调用位置 | 已用 |
| time | `HwClock.h/.cpp` | 纳秒级时间戳 | 已用 |
| alignment | `TimeAligner.h/.cpp` | 多通道时间对齐 | 未接入 |
| platform | `PlatformSignal.h/.cpp` | SIGINT 优雅退出 | 已用 |
| queue | `LockFreeQueue.h` | 无锁队列 | 预留 |
## 4. 依赖
- **对外PUBLIC** nlohmann_json
- **被依赖:** 所有其他模块
## 5. 统一入口
```cpp
#include <softbus_core/softbus_core.h>
```
聚合所有 public 头文件,供上层模块一次性引入。
## 6. 配置关联
| 配置文件 | 加载方 | 对应类型 |
|----------|--------|----------|
| `config/daemon_profile.json` | `ProfileLoader` | `DaemonProfile` |
| `config/softbus_model.json` | `ObjectModelTree` | `ObjectModelTree` |
## 7. 构建
```cmake
# src/softbus_core/CMakeLists.txt
add_library(softbus_core STATIC ...)
target_link_libraries(softbus_core PUBLIC nlohmann_json::nlohmann_json Threads::Threads)
```