OpenHarmony开发者论坛

标题: OpenHarmony 4.0 分布式软总线解析:设备发现与传输 [打印本页]

作者: 陈美汝    时间: 2024-3-26 15:57
标题: OpenHarmony 4.0 分布式软总线解析:设备发现与传输
[md]OpenHarmony的分布式软总线子系统为OpenHarmony系统提供的通信相关的能力,包括:WLAN服务能力、蓝牙服务能力、软总线、进程间通信RPC(Remote Procedure Call)等通信能力。

其中主要包括:

* WLAN服务:为用户提供WLAN基础功能、P2P(peer-to-peer)功能和WLAN消息通知的相应服务,让应用可以通过WLAN和其他设备互联互通。
* 蓝牙服务:为应用提供传统蓝牙以及低功耗蓝牙相关功能和服务。
* 软总线:为应用和系统提供近场设备间分布式通信的能力,提供不区分通信方式的设备发现,连接,组网和传输功能。
* 进程间通信:提供不区分设备内或设备间的进程间通信能力。

下面我们通过阅读OpenHarmony 4.0的源码,来解读一下OpenHarmony软总线当前的一个实现情况。

---

## **设备发现与传输模块**

### 代码框架分析

分布式软总线组件主要代码目录结构如下:`/foundation/communication/dsoftbus`

```
├── adapter                # 操作系统适配层代码
├── core                   # 核心代码
│   ├── common          # 通用代码
│   ├── authentication      # 设备认证机制和设备知识库管理代码
│   ├── bus_center         # 组网代码
│   ├── connection         # 连接代码
│   ├── discovery          # 基于coap协议的设备发现代码
│   ├── transmission        # 传输代码
│   └── frame              # 框架代码
├── sdk                     # 运行业务进程代码
│   ├── bus_center          # 组网代码
│   ├── discovery           # 发现代码
│   ├── transmission         # 传输代码
│   └── frame               # 框架代码
└── components               # 依赖组件代码
```

其中interfaces是提高给外接的接口,比较重要。

![image.png](https://forums-obs.openharmony.c ... 3mh2uny33zy1add.png "image.png")

**softbus_bus_center.h:** 声明软总线组网的函数和常量。函数可用于执行以下操作:在 LNN 中添加设备和从 LNN 中删除设备,监听在线设备、离线和信息更改事件。

重要函数说明:

* JoinLNN: 此函数将当前设备加入指定设备所在的 LNN。
* JoinMetaNode: 此函数将当前设备加入指定设备所在的 MetaNode。

* LeaveLNN: 此函数将当前设备从 LNN 中移除。
* LeaveMetaNode: 此函数将当前设备从 MetaNode 中移除。

* RegNodeDeviceStateCb: 此函数注册设备状态更改的回调。
* PubLNN: 此函数在 LNN 上发布服务。

* SubLNN: 此函数在 LNN 上订阅服务。

**softbus_common.h:** 它定义了一些用于通信和服务管理的常量和结构体,例如:网络ID长度等常量。

* ConnectionAddr 结构体定义了设备在 LNN(Logical Network)中的地址信息。它包括地址类型、连接地址和 peerUid 字段。地址类型指示了地址的类型,例如 WLAN、BR 或 BLE。连接地址包含设备的 MAC 地址、UDID 哈希值或 IP 地址。peerUid 字段是设备的 account hash code。
* DiscoverMode 枚举定义了服务发布的模式。它包括被动模式(PASSIVE)和主动模式(ACTIVE)。被动模式表示设备等待其他设备发现它。主动模式表示设备主动搜索其他设备。

* ExchangeMedium 枚举定义了服务发布的介质。它包括自动选择(AUTO)、BLE、WLAN、USB 和 HiLink。AUTO 表示所有可用的介质都会被调用。
* ExchangeFreq 枚举定义了服务发布的频率。它包括低频(LOW)、中频(MID)、高频(HIGH)和超高频(SUPER_HIGH)。

* DataBitMap 枚举定义了设备支持的功能。它包括 MeeTime、Profile Capability、HomevisionPic Capability、CastPlus、AA Capability、DVKIT Capability、DDMP Capability、Osd Capability 和 Share Capability。
* PublishInfo 结构体定义了服务发布的信息。它包括服务 ID、发布模式、发布介质、发布频率、发布能力、能力数据、最大能力数据长度和是否主动范围。

* SubscribeInfo 结构体定义了服务订阅的信息。它包括服务 ID、订阅模式、订阅介质、订阅频率、相同账户、唤醒远程设备、订阅能力、能力数据和最大能力数据长度。
* ModeCycle 枚举定义了单个心跳周期参数。它包括高频周期(HIGH_FREQ_CYCLE)、中频周期(MID_FREQ_CYCLE)和低频周期(LOW_FREQ_CYCLE)。

* ModeDuration 枚举定义了心跳保持活跃参数的持续时间。它包括默认持续时间(DEFAULT_DURATION)、正常持续时间(NORMAL_DURATION)和长持续时间(LONG_DURATION)。
* DeviceType 枚举定义了设备类型。它包括智能音箱(SMART_SPEAKER)、PC、笔记本电脑(LAPTOP)、智能手机(SMART_PHONE)、平板电脑(SMART_PAD)、智能手表(SMART_WATCH)、智能汽车(SMART_CAR)、儿童手表(CHILDREN_WATCH)和智能电视(SMART_TV)。

* DeviceInfo 结构体定义了设备信息。它包括设备 ID、帐户哈希码、设备类型、设备名称、在线状态、可用连接数、连接信息、能力位图数组、自定义数据和距离。
* InnerDeviceInfoAddtions 结构体定义了内部使用的设备附加信息。它包括发现设备的介质。

**discovery\_service.h:** 用于定义发现服务相关的函数和常量。发现服务用于发现和连接附近的设备。该头文件提供两种主要功能:发布服务和发现服务。

* PublishService 函数用于发布服务。发布服务使得其他设备可以发现该服务。
* UnPublishService 函数用于停止发布服务。停止发布服务使得其他设备无法发现该服务。

* StartDiscovery 函数用于开始发现服务。发现服务用于发现附近的设备和获取其信息。
* StopDiscovery 函数用于停止发现服务。停止发现服务使得设备不再发现其他设备。

**session.h:** 声明统一的数据传输接口。该文件提供数据传输能力,包括创建和删除会话服务器、打开和关闭会话、接收数据和查询基本会话信息。在发现多个附近的设备并联网后,这些接口可用于跨设备传输数据。

* CreateSessionServer 和 RemoveSessionServer 用于创建和删除会话服务器。会话服务器是负责管理会话的进程。
* OpenSession 用于与远程设备打开会话。会话 ID 用于标识会话。

* CloseSession 用于与远程设备关闭会话。
* SendBytes、SendMessage 和 SendStream 用于向会话发送数据。

* GetMySessionName、GetPeerSessionName 和 GetPeerDeviceId 用于获取会话相关信息。
* GetSessionSide 用于获取会话端。

* SetFileReceiveListener、SetFileSendListener 和 SendFile 用于发送和接收文件。

通过包含这几个头文件则可以调用软总线的功能。
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5