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

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐