分布式软总线能做什么?
1.1 通过共享一个局域网(wifi或蓝牙),可以发现设备。
通过设备名等关键字可以查找到在共享的网络中所有设备,并进行通信。关键是不需要预告知晓对方设备的IP地址与端口。
1.2 支持消息、字节、流、文件的数据传输能力。
实际应用中,可以将文字、图片、文件或音视频流进行传输。
1.3 支持富设备、小型设备、轻量设备。
实际应用中,可以做到跨设备间使用。笔者在L0与L2、L2与L2等两类设备间测试通过。
现实中多设备间通信方式多种多样(wifi、NFC、蓝牙等),不同的通信方式使用差异大,导致通信问题多;同时还面临设备间通信链路的整合共享和冲突无法处理等挑战。分布式软总线实现近场设备间统一的分布式通信管理能力,提供不区分链路的设备间发现连接、组网和传输能力,主要功能如下:
typedef enum {
/* Passive 主动*/
DISCOVER_MODE_PASSIVE = 0x55,
//lite device support the passive mode only.
/* Proactive 被动*/
DISCOVER_MODE_ACTIVE = 0xAA
} DiscoverMode;
//媒介
typedef enum {
/* Automatic medium selection */
AUTO = 0,
/* Bluetooth*/
BLE = 1,
/* wifi*/
COAP = 2,
/* USB*/
USB = 3,
/* HiLink*/
COAP1 = 4,
MEDIUM_BUTT
} ExchangeMedium;
数据传输:提供数据传输通道,支持消息、字节数据传输等能力
业务方通过使用分布式软总线提供API实现设备间的高速通信,不用关心通信细节,进而实现业务平台的高效部署与运行能力。
//设备类型 DeviceType
typedef enum {
/* Smart speaker */
SMART_SPEAKER = 0x00,
/* PC */
DESKTOP_PC,
/* LAPTOP */
LAPTOP,
/* Mobile phone */
SMART_PHONE,
/* Table */
SMART_PAD,
/* Smart watch */
SMART_WATCH,
/* Smart car */
SMART_CAR,
/* Kids' watch */
CHILDREN_WATCH,
/* Smart TV */
SMART_TV,
} DeviceType;
typedef enum {
CONNECT_ADDR_WLAN = 0, /**< WLAN wifi(无线局域网)*/
CONNECT_ADDR_BR= 0, /**< BR 基础速率*/
CONNECT_ADDR_BLE = 0, /**< BLE 低功耗蓝牙*/
CONNECT_ADDR_ETH = 0, /**< Ethernet 以太网*/
CONNECT_ADDR_MAX = 0, /**< Invalid type*/
} ConnectionAddrType;
软总线提出了自动发现的概念,实现用户零等待的自发现体验,附件同账号的设备自动发现无需等待。
多设备互联后的组技术:软总线组网-异构网络组网,比如:蓝牙-wifi。
设备上线后会向网络层注册,同时网络层会与设备建立通道连接,实时检测设备的变换。
网络层负责管理设备的上线下线变换,设备间可以监听自己感兴趣的设备,设备上线后可以立即与其建立连接,实现零等待。
软总线可以自动构建一个逻辑全连接网络,用户或者业务开发者无需关心组网方式与物理协议。对于软件开发者来说软总线异构组网可以大大降低开发成本。
//foundation/communication/dsoftbus/README_zh.md
对照代码说明
L2与L1设备通过检查softbus_trans_permission.json文件判断应用的传输权限,L0不用设置权限
# C头文件
//foundation/communication/dsoftbus/interfaces/kits/discovery/discovery_service.h
#C++头文件
//foundation/communication/dsoftbus/sdk/discovery/ipc/include/disc_server_proxy.h
# C依赖包
deps = [
"//foundation/communication/dsoftbus/adapter:softbus_adapter",
"//foundation/communication/dsoftbus/core/common:softbus_utils",
]
# C++依赖包
deps = [
"//foundation/communication/dsoftbus/sdk:softbus_client",
"//foundation/communication/dsoftbus/core/common:softbus_server",
]
分布式软总线接口分为三类
//foundation/communication/dsoftbus/interfaces/kits/discovery/discovery_service.h
// 发布回调
typedef struct {
void (*OnPublishSuccess)(int publishId); //发布成功时回调
void (*OnPublishFail)(int publishId, PublishFailReason reason);//发布失败时回调
} IPublishCallback;
// 发布服务
int PublishService(const char *pkgName, const PublishInfo *info, const IPublishCallback *cb);
// 注销服务
int UnPublishService(const char *pkgName, int publishId);
// 发现回调
typedef struct {
void (*OnDeviceFound)(const DeviceInfo *device); //发现设备回调
void (*OnDiscoverFailed)(int subscribeId, DiscoveryFailReason failReason); //启动发现失败回调
void (*O