前言¶
BS2XV100通过API(Application Programming Interface)向开发者提供接入和使用星闪低功耗的相关接口,包括广播、连接以及SSAP服务注册、服务发现等,其他协议相关接口将在后续增量发布。
与本文档对应的产品版本如下。
本文档主要适用以下工程师:
技术支持工程
软件开发工程师
在本文中可能出现下列标志,它们所代表的含义如下。
|
||
更新“错误码”章节内容。 |
||
新增“SLE Passkey接口”章节内容。 |
||
|
||
更新“Connection Manager接口”的“开发流程”章节内容。 |
||
|
新增“Transmission Manager接口”章节内容。 |
||
更新“Connection Manager接口”章节内容。 |
||
更新“Device Discovery接口”的“注意事项”章节内容。 |
||
更新“Connection Manager接口”的“开发流程”章节内容。 |
||
概述¶
BS2XV100通过API(Application Programming Interface)面向开发者提供SLE功能的开发和应用接口,包括Device Discovery, Connection Manager, SSAP等。
各组件功能说明如下:
Device Discovery:星闪设备发现协议,包括设备管理、设备公开和设备发现接口。
Connection Manager:星闪连接管理协议,包括设备连接、配对相关接口。
SSAP:星闪服务交互协议(SparkLink Service Access Protocol),包含服务注册、服务发现、属性数据读写等功能相关接口。
Low Latency:低时延初始化和低时延数据收发接口。
说明: 该文档描述各个模块功能的基本流程和API接口描述。
错误码¶
SLE SDK使用错误码指示用户当前任务执行结果,如表1所示。
表 1 错误码
异常断连原因如表2所示。
表 2 断连原因
Device Discovery接口¶
概述¶
Device Discovery接口是星闪设备发现协议的软件实现,主要功能有SLE设备开关、设备管理、设备公开和设备发现。
开发流程¶
打开SLE设备开关是使用SLE功能的首要条件,SLE启动后可进行设备信息管理,包括获取与设置本地设备名称、获取与设置本地设备地址和设置本地设备外观。
当SLE设备需要进行设备公开时,可先设置设备公开参数、设备公开数据,然后使能设备公开。
当SLE设备需要进行设备发现时,可先设置设备发现参数,然后使能设备发现,并通过回调函数观察发现到的设备公开数据包。
Device Discovery提供的接口如表1所示。
表 1 Device Discovery接口描述
Device Discovery开发的典型流程如下,具体编程实例可参考application/samples/bt。
Terminal Node:
调用enable_sle,打开SLE开关。
调用sle_announce_seek_register_callbacks,注册设备公开和设备发现回调函数。
调用sle_set_local_addr,设置本地设备地址。
调用sle_set_local_name,设置本地设备名称。
调用sle_set_announce_param,设置设备公开参数
调用sle_set_announce_data,设置设备公开数据
调用sle_start_announce,启动设备公开。
Grant Node:
调用enable_sle,打开SLE开关。
调用sle_announce_seek_register_callbacks,注册设备公开和设备发现回调函数。
调用sle_set_local_addr,设置本地设备地址。
调用sle_set_local_name,设置本地设备名称。
调用sle_set_seek_param,设置设备发现参数。
调用sle_start_seek,启动设备发现,并在回调函数中获得正在进行设备公开的设备信息。
注意事项¶
BS2XV100产品只作为SLE设备工作时,最多只支持八路连接,同时作为BLE和SLE设备工作时,一共支持八路连接。
若扫描不到设备,请先检查设备是否已在配对设备列表中,或者设备是否已与其他设备配对(此情况下需要先清除设备端配对信息)。
Connection Manager接口¶
概述¶
Connection Manager接口是星闪连接管理协议的软件实现,主要功能有连接、配对和读远端设备RSSI值。
开发流程¶
当设备需要与对端设备建立连接时,可向对端设备发起连接请求。在连接过程中,设备可读取远端设备RSSI值,当设备需要更新连接参数时,可向对端设备发起连接参数更新请求,当设备需要与对端设备配对时,可向对端设备发起配对请求。在配对过程中,可获取当前本端设备与指定对端设备的配对状态。设备可获取当前配对设备数量以及当前配对设备信息链表,当前的链路角色。
Connection Manager提供的接口如表1所示。
表 1 Connection Manager接口描述
Connection Manager开发的典型流程如下,具体编程实例可参考application/samples/bt。
Terminal Node:
调用enable_sle,打开SLE开关。
调用sle_announce_seek_register_callbacks,注册设备公开和设备发现回调函数。
调用sle_connection_register_callbacks,注册连接管理回调函数。
调用sle_set_local_addr,设置本地设备地址。
调用sle_set_local_name,设置本地设备名称。
调用sle_set_announce_param,设置设备公开参数
调用sle_set_announce_data,设置设备公开数据
调用sle_start_announce,启动设备公开。
Grant Node:
调用enable_sle,打开SLE开关。
调用sle_announce_seek_register_callbacks,注册设备公开和设备发现回调函数。
调用sle_connection_register_callbacks,注册连接管理回调函数。
调用sle_set_local_addr,设置本地设备地址。
调用sle_set_local_name,设置本地设备名称。
调用sle_set_seek_param,设置设备发现参数。
调用sle_start_seek,启动设备发现,并在回调函数中获得正在进行设备公开的设备信息。
调用sle_connect_remote_device,向对端设备发起连接请求。
调用sle_pair_remote_device,向对端设备发起配对请求。
调用sle_get_paired_devices_num,获取当前配对设备数量。
调用sle_get_paired_devices,获取当前配对设备信息。
调用sle_get_pair_state,获取配对状态。
调用sle_get_connect_role,获取链路角色。
SSAP Server接口¶
概述¶
SSAP是SLE发送和接收数据的通用规范,支持在两个SLE设备间进行数据传输。
开发流程¶
SSAP Server主要接收对端的请求和命令,向对端发送响应、通知和指示。
SSAP Server提供的接口如表1所示。
表 1 SSAP Server接口描述
SSAP server开发的典型流程:注册SSAP server,注册本端属性数据库,接收对端的请求和命令,向对端发送通知和指示,具体编程实例可参考application/samples/bt。
调用enable_sle,打开SLE开关。
调用ssaps_register_callbacks,注册SSAP server回调。
调用sle_announce_seek_register_callbacks,注册设备公开和设备发现回调函数。
调用ssaps_register_server,创建一个server实体。
调用ssaps_add_service_sync、ssaps_add_property_sync、ssaps_add_descriptor_sync和ssaps_start_service注册本端属性数据库,每一个服务及其内容添加完成后调用ssaps_start_service启动服务。
调用sle_set_local_addr,设置本地设备地址。
调用sle_set_local_name,设置本地设备名称。
调用sle_set_announce_param,设置设备公开参数。
调用sle_set_announce_data,设置设备公开数据。
调用sle_start_announce,启动设备公开。
连接建立。
接收对端设备的读写请求,当对端设备读写需要授权的特征或描述符时,调用ssaps_send_response向对端发送响应并修改本端特征值。
当某个特征的客户端特征配置描述符为0x0001时,在特征值变化时调用ssaps_notify_indicate向对端设备发送通知,当某个特征的客户端特征配置描述符为0x0002时,在特征值变化时调用ssaps_notify_indicate向对端设备发送指示。
SSAP client接口¶
概述¶
SSAP是SLE发送和接收数据的通用规范,支持在两个SLE设备间进行数据传输。
开发流程¶
SSAP Client主要向对端发送请求和命令,接收对端的响应、通知和指示。
SSAP Client提供的接口如表1所示。
表 1 SSAP Client接口描述
SSAP Client开发的典型流程:注册SSAP Client,查找对端属性数据库,向对端发送请求和命令,接收对端的通知和指示,具体编程实例可参考application/samples/bt。
SSAP Server:
调用enable_sle,打开SLE开关。
调用ssaps_register_callbacks,注册SSAP server回调。
调用sle_announce_seek_register_callbacks,注册设备公开和设备发现回调函数。
调用ssaps_register_server,创建一个server实体。
调用ssaps_add_service_sync、ssaps_add_property_sync、ssaps_add_descriptor_sync和ssaps_start_service注册本端属性数据库,每一个服务及其内容添加完成后调用ssaps_start_service启动服务。
调用sle_set_local_addr,设置本地设备地址。
调用sle_set_local_name,设置本地设备名称。
调用sle_set_announce_param,设置设备公开参数。
调用sle_set_announce_data,设置设备公开数据。
调用sle_start_announce,启动设备公开。
连接建立。
接收对端设备的读写请求,当对端设备读写需要授权的特征或描述符时,调用ssaps_send_response向对端发送响应并修改本端特征值。
当某个特征的客户端特征配置描述符为0x0001时,在特征值变化时向对端设备发送通知,当某个特征的客户端特征配置描述符为0x0002时,在特征值变化时向对端设备发送指示。
SSAP Client:
调用enable_sle,打开SLE开关。
调用ssapc_register_callbacks,注册SSAP client回调。
调用sle_announce_seek_register_callbacks,注册设备公开和设备发现回调函数。
调用ssapc_register_client,创建一个client实体。
递归调用ssapc_find_structure查找对端属性数据库。
如果关注对端某个特征,可调用ssapc_write_req或ssapc_write_cmd将该特征的客户端特征配置描述符写为0x0001或0x0002,前者可使能对端特征通知,后者可使能对端特征指示。
调用读接口ssapc_read_req和写接口ssapc_write_req操作对端属性数据库。
Low Latency接口¶
概述¶
Low Latency模块使用星闪协议以极低时延在服务端和客户端之间进行数据传输。
开发流程¶
Low Latency模块的功能是开关服务端和客户端的低时延通道,在服务端发送传感器内数据,在客户端侧接收客户端数据。
Low Latency提供的接口如表1所示。
表 1 Low Latency接口描述
Low Latency开发的典型流程如下:
Dongle:
调用sle_low_latency_dongle_register_callbacks,注册dongle数据回调函数。
调用sle_low_latency_dongle_enable接口,打开dongle低时延通道。
调用sle_low_latency_set设置低时延速率。
接收鼠标数据。
鼠标:
调用sle_low_latency_mouse_register_callbacks,注册鼠标数据回调函数。
调用sle_low_latency_mouse_enable接口,打开鼠标低时延通道。
移动鼠标。
Transmission Manager接口¶
概述¶
Transmission Manager模块负责SLE的数据发送,保障了数据成功传输到底层。
开发流程¶
Transmission Manager模块实时监控了底层缓冲区数量,数据包因为底层发送繁忙没有发出去时,就会上报发送繁忙通知。
Transmission Manager提供的接口如表1所示。
表 1 Transmission Manager接口描述
Transmission Manager典型开发流程如下:
SERVER端:
调用sle_transmission_register_callbacks,注册SLE传输管理回调函数。
每次发包前,根据回调勾子反馈的系统忙闲状态,若是空闲状态,继续高速发包;若是流控状态,减小发包速率;若是繁忙状态,停止发包。
SLE Passkey接口¶
概述¶
星闪配对有多种鉴权方式可以选择,passkey鉴权是其中之一,passkey鉴权提供了防中间人攻击能力,安全性相对免输入鉴权有提升。
开发流程¶
发起星闪配对后,根据用户设置的IO(Input Output)能力决策的鉴权方式决策鉴权方式,当满足条件时,协议栈能够自动协商为passkey鉴权。
SLE提供的passkey相关接口如SLE Passkey接口描述如表1所示。
表 1 SLE Passkey接口描述
SLE提供的安全参数设置接口如SLE安全参数设置接口描述如表2所示。
表 2 SLE安全参数设置接口描述
SLE协议提供的IO能力和鉴权方式对应关系如SLE鉴权方式决策描述如表3所示。
表 3 SLE鉴权方式决策描述
IO能力定义参考枚举:sle_io_ability_t
SLE Passkey鉴权典型开发流程如下:
初始化SLE协议栈之后,互联的两个设备必须调用安全参数设置接口,配置双方设备的IO能力、防中间人攻击标识。
配对决策使用passkey鉴权时,需将防中间人攻击标识置为:SLE_PAIRING_DEFEND_MITM,双方设备的IO能力按照表SLE鉴权方式决策描述进行设置。
连接端发起连接,并确保连接完成。
连接完成后,调用配对发起接口:sle_pair_remote_device,该接口在G、T节点均可调用。
通过安全参数设置接口,配置为显示设备(IO能力为:只展示或展示并可以选择Yes或者No),则该设备只会收到passkey_notify_cb回调,此时该设备需要将数据显示,passkey在当前设备上由协议栈生成随机6位数字。
通过安全参数设置接口,配置为输入设备(IO能力为:只支持键盘或支持键盘和展示),则该设备只会收到passkey_req_cb回调,此时该设备需要用户输入对端设备显示的passkey。
输入设备调用passkey输入接口成功后,等待配对完成,典型时长2s~4s。
SLE配对,选择Passkey鉴权异常处理如SLE Passkey异常处理描述,如表4所示。
表 4 SLE Passkey异常处理描述
SLE配对,选择Passkey鉴权时,显示设备可选设置默认显示的passkey:
初始化SLE协议栈后,调用安全参数设置接口。
连接端发起连接,连接成功。
显示设备(IO能力:只展示或展示并可以选择Yes或者No)在连接成功后,调用sle_passkey_entry接口设置显示端默认passkey。
任意设备调用配对发起接口,发起配对。
输入设备(IO能力为:只支持键盘或支持键盘和展示)上收到请求后,输入默认passkey。
等待配对完成。
若需要配对密钥在nv中加密存储,需要打开宏CONFIG_NV_SUPPORT_ENCRYPT。在配置界面Middleware->Utils->勾选nv_support encrypt。并在使能协议之前设置配对密钥在nv的保存方式为加密保存,这个设置对蓝牙和星闪同时生效。接口请参考《BS2X100 蓝牙软件开发 指导书》中的gap_ble_set_nv_store_smp_keys_mode。
SLE Channel Map 接口¶
概述¶
星闪跳频支持用户自定义跳频信道。
开发流程¶
SLE Channel Map 接口典型使用场景是对wifi占用信道进行避让,如wifi为20M,使用信道6,推荐对2427-2447信道进行避让。
如下图,WiFi在2.4g频段被分为14个交叠的、错列的20MHz信道,信道编码从1到14,邻近的信道之间存在一定的重叠范围。

为了提高无线终端无线网络速率,可以增加射频的信道工作带宽。如果把两个20MHz信道捆绑在一起成为40MHz信道,其中一个是主信道,一个是从信道。如果主信道的中心频率高于从信道的中心频率,则为40MHz-,反之则为40MHz+。在2.4G中,两个绑定的信道间隔为4(如1,5;2,6)。
SLE Channel Map提供的接口如表1所示。
表 1 SLE Channel Map接口描述
对于2.4GHz频段,不同带宽信道对应的射频信道中心频率和射频信道号如表2规定。channel_map为一个长度为十的数组,其中每个bit表示当前信道能否使用,字节内信道按照从低到高的顺序,1代表可用,0代表不可用,如数组第二字节为0x03,代表2410,2411信道可用。如果感知周围特定信道收到干扰,可通过 SLE Channel Map 接口规避使用受干扰信道。
表 2 2400MHz频段不同带宽信道对应的射频信道中心频率和射频信道号
注1:射频信道号0,22和78对应1MHz信道为广播信道,物理信道号76,77和78对应1MHz信道为广播信道。
SLE Channel Map典型开发流程如下:
CLIENT端:
当上报连接成功时调用sle_channel_map,设置信道偏好。




