[经验分享] OpenHarmony 4.0 分布式软总线解析:设备发现与传输 精华

陈美汝 显示全部楼层 发表于 2024-3-26 15:57:43

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

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 用于发送和接收文件。

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

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部