一、软总线介绍
设备间可以通过以太网、WiFi、蓝牙等方式通信。网络通信下,需要在两个设备端分别执行常用的socket通信流程;蓝牙通信也是需要分别执行蓝牙通信步骤,配对,通信等。而且在通信建立之前,对于通信安全、设备认证等操作都需要单独的系统来处理。
软总线的主要目标就是简化、统一上述过程。在软总线中管理设备认证、组网、通信。开发者不再需要处理设备信任问题,处理创建socket、考虑事件循环等网络编程底层逻辑,不同通信方式差异等,只需要简单调用软总线提供的接口即可。
二、软总线整体架构图
sdk:按软总线模块划分为discovery, bus_center, transmission, frame四个大的部分
- discovery 发布发现
- bus_center 组网
- transmission 传输
- frame 初始化管理客户端,以及ipc回调stub实现
core:软总线服务端,同样也划分了discovery, bus_center, transmission, authentication, frame, connection等部分
- frame 服务端初始化,以及ipc stub实现
- discovery 发布发现
- bus_center 组网、网络节点信息、通信链路信息、拓扑信息管理等
- transmission 传输
- authentication 认证
- connection 通用连接api实现
三、软总线代码通用套路
- 在每个ipc目录下面都包括mini、small、standard三个目录,分别对应轻量系统、小型系统和标准系统中ipc通信处理逻辑。L2系统对应查看standard下代码。
- sdk目录中通常包含service和manager,其中service为对外接口的实现,manager为具体的逻辑实现。
- 软总线代码中包含很多以virtual命名的源文件,virtual中函数大部分是空函数。实现virtual文件的目的就是用来做逻辑适配,在编译文件gn中根据当前配置设备能力选择编译virtual文件。这样做省掉了宏定义,简化代码。
四、软总线代码整体介绍
├─adapter 软总线调用其他系统能力的接口适配层
│ ├─common
│ │ ├─bus_center
│ │ │ ├─driver 与驱动交互适配
│ │ │ ├─include
│ │ │ ├─network 监听网络状态变化,eth0/wlan0通过netlink监听,蓝牙则监听蓝牙状态变化
│ │ │ ├─platform 获取设备信息
│ │ │ ├─screenstate 监听屏幕状态变化
│ │ │ └─wlan 监听WiFi状态变化
│ │ ├─dfx
│ │ ├─include
│ │ │ └─OS_adapter_define
│ │ │ └─linux
│ │ ├─kernel
│ │ │ └─liteos_a
│ │ ├─log 软总线日志处理
│ │ ├─mbedtls 加解密
│ │ ├─net
│ │ │ ├─bluetooth 蓝牙ble处理适配,广播,gatt client / server
│ │ │ │ ├─ble
│ │ │ │ ├─common
│ │ │ │ └─include
│ │ │ ├─hdi
│ │ │ │ ├─common
│ │ │ │ └─include
│ │ │ └─wifi WiFi处理适配
│ │ │ ├─common
│ │ │ └─include
│ │ ├─openssl 加解密
│ │ └─range
│ └─default_config 软总线配置信息处理
│ ├─fe