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 是提高给外接的接口,比较重要。
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 用于发送和接收文件。
通过包含这几个头文件则可以调用软总线的功能。
为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
《鸿蒙开发学习手册》:
如何快速入门:https://qr21.cn/FV7h05
- 基本概念
- 构建第一个ArkTS应用
- ......
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ......
基于ArkTS 开发:https://qr21.cn/FV7h05
- Ability开发
- UI开发
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 设备管理
- 设备使用信息统计
- DFX
- 国际化开发
- 折叠屏系列
- ......
鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH
鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向