前言¶
概述
BS2XV100通过API(Application Programming Interface)向开发者提供接入和使用星闪低功耗的相关接口,包括广播、连接以及SSAP服务注册、服务发现等,其他协议相关接口将在后续增量发布。
产品版本
与本文档对应的产品版本如下。
产品名称 |
产品版本 |
|---|---|
BS2X |
V100 |
读者对象
本文档主要适用以下工程师:
技术支持工程
软件开发工程师
符号约定
在本文中可能出现下列标志,它们所代表的含义如下。
符号 |
说明 |
|---|---|
|
表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。 |
|
表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。 |
|
表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。 |
|
用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。 |
|
对正文中重点信息的补充说明。 “说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。 |
修改记录
文档版本 |
发布日期 |
修改说明 |
|---|---|---|
06 |
2025-11-07 |
|
05 |
2025-05-30 |
更新“错误码”章节内容。 |
04 |
2025-01-24 |
新增“SLE Passkey接口”章节内容。 |
03 |
2024-09-13 |
|
02 |
2024-08-02 |
更新“Connection Manager接口”的“开发流程”章节内容。 |
01 |
2024-05-15 |
第一次正式版本发布。 新增“Transmission Manager接口”章节内容。 |
00B04 |
2024-04-25 |
更新“Connection Manager接口”章节内容。 |
00B03 |
2024-01-08 |
更新“Device Discovery接口”的“注意事项”章节内容。 |
00B02 |
2023-12-08 |
更新“Connection Manager接口”的“开发流程”章节内容。 |
00B01 |
2023-09-27 |
第一次临时版本发布。 |
概述¶
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 错误码
序号 |
定义 |
实际数值 |
描述 |
|---|---|---|---|
1 |
ERRCODE_SLE_SUCCESS |
0 |
执行成功错误码。 |
2 |
ERRCODE_SLE_CONTINUE |
0x80006000 |
继续执行错误码。 |
3 |
ERRCODE_SLE_DIRECT_RETURN |
0x80006001 |
直接返回错误码。 |
4 |
ERRCODE_SLE_NO_ATTATION |
0x80006002 |
- |
5 |
ERRCODE_SLE_PARAM_ERR |
0x80006003 |
参数错误错误码。 |
6 |
ERRCODE_SLE_FAIL |
0x80006004 |
执行失败错误码。 |
7 |
ERRCODE_SLE_TIMEOUT |
0x80006005 |
执行超时错误码。 |
8 |
ERRCODE_SLE_UNSUPPORTED |
0x80006006 |
参数不支持错误码。 |
9 |
ERRCODE_SLE_GETRECORD_FAIL |
0x80006007 |
获取当前记录失败错误码。 |
10 |
ERRCODE_SLE_POINTER_NULL |
0x80006008 |
指针为空错误码。 |
11 |
ERRCODE_SLE_NO_RECORD |
0x80006009 |
无记录返回错误码。 |
12 |
ERRCODE_SLE_STATUS_ERR |
0x8000600a |
状态错误错误码。 |
13 |
ERRCODE_SLE_NOMEM |
0x8000600b |
内存不足错误码。 |
14 |
ERRCODE_SLE_AUTH_FAIL |
0x8000600c |
认证失败错误码。 |
15 |
ERRCODE_SLE_AUTH_PKEY_MISS |
0x8000600d |
PIN码或密钥丢失致认证失败错误码。 |
16 |
ERRCODE_SLE_RMT_DEV_DOWN |
0x8000600e |
对端设备关闭错误码。 |
17 |
ERRCODE_SLE_PAIRING_REJECT |
0x8000600f |
配对拒绝错误码。 |
18 |
ERRCODE_SLE_BUSY |
0x80006010 |
系统繁忙错误码。 |
19 |
ERRCODE_SLE_NOT_READY |
0x80006011 |
系统未准备好错误码。 |
20 |
ERRCODE_SLE_CONN_FAIL |
0x80006012 |
连接失败错误码。 |
21 |
ERRCODE_SLE_OUT_OF_RANGE |
0x80006013 |
越界错误码。 |
22 |
ERRCODE_SLE_MEMCPY_FAIL |
0x80006014 |
拷贝失败错误码。 |
23 |
ERRCODE_SLE_MALLOC_FAIL |
0x80006015 |
内存申请失败错误码。 |
断连原因
异常断连原因如表2所示。
表 2 断连原因
序号 |
定义 |
实际数值 |
描述 |
|---|---|---|---|
1 |
SLE_DISCONNECT_UNKNOWN |
0x00 |
未知原因断连。 |
2 |
SLE_DISCONNECT_BY_PIN_OR_KEY_MISSING |
0x05 |
pin或key丢失导致断连。 |
3 |
SLE_DISCONNECT_BY_CONNECT_TIMEOUT |
0x07 |
连接超时断连。 |
5 |
SLE_D ISCONNECT_BY_REMOTE_USER |
0x10 |
远端用户断连。 |
6 |
SLE_DISCONNECT_BY_LOCAL_HOST |
0x11 |
本端host断连。 |
7 |
SLE_DISCONNECT_BY_MIC_ERROR |
0x1B |
MIC error断连。 |
8 |
SLE_ESTABLISH_CONNECT_FAIL |
0x1C |
建连异常。 |
Device Discovery接口¶
概述¶
Device Discovery接口是星闪设备发现协议的软件实现,主要功能有SLE设备开关、设备管理、设备公开和设备发现。
开发流程¶
使用场景
打开SLE设备开关是使用SLE功能的首要条件,SLE启动后可进行设备信息管理,包括获取与设置本地设备名称、获取与设置本地设备地址和设置本地设备外观。
当SLE设备需要进行设备公开时,可先设置设备公开参数、设备公开数据,然后使能设备公开。
当SLE设备需要进行设备发现时,可先设置设备发现参数,然后使能设备发现,并通过回调函数观察发现到的设备公开数据包。
功能
Device Discovery提供的接口如表1所示。
表 1 Device Discovery接口描述
接口名称 |
描述 |
参数说明 |
返回信息说明 |
|---|---|---|---|
enable_sle |
使能SLE。 |
- |
接口返回值:错误码。 |
disable_sle |
去使能SLE。 |
- |
接口返回值:错误码。 |
sle_set_local_addr |
设置本地设备地址。 |
addr:本地设备地址。 |
接口返回值:错误码。 |
sle_get_local_addr |
获取本地设备地址。 |
addr:[out]本地设备地址。 |
接口返回值:错误码。 |
sle_set_local_name |
设置本地设备名称。 |
name:本地设备名称; len:本地设备名称长度。 |
接口返回值:错误码。 |
sle_get_local_name |
获取本地设备名称。 |
name:[out]本地设备名称; len:[inout]入参时为用户预留内存大小,出参时为本地设备名称长度。 |
接口返回值:错误码。 |
sle_set_announce_data |
设置设备公开数据。 |
announce_id:设备公开ID; data:设备公开数据。 |
接口返回值:错误码。 |
sle_set_announce_param |
设置设备公开参数。 |
announce_id:设备公开ID; data:设备公开参数。 |
接口返回值:错误码。 |
sle_start_announce |
开始设备公开。 |
announce_id:设备公开ID。 |
接口返回值:错误码。 |
sle_stop_announce |
停止设备公开。 |
announce_id:设备公开ID。 |
接口返回值:错误码。 |
sle_set_seek_param |
设置设备发现参数。 |
param:设备发现参数。 |
接口返回值:错误码。 |
sle_start_seek |
开始设备发现。 |
- |
接口返回值:错误码。 |
sle_stop_seek |
停止设备发现。 |
- |
接口返回值:错误码。 |
sle_announce_seek_register_callbacks |
注册设备公开和设备发现回调函数。 |
func:用户回调函数。 |
接口返回值:错误码。 |
开发流程
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接口描述
接口名称 |
描述 |
参数说明 |
返回信息说明 |
|---|---|---|---|
sle_connect_remote_device |
向对端设备发起连接请求。 |
addr:对端设备地址。 |
接口返回值:错误码。 |
sle_disconnect_remote_device |
向对端设备发起断连请求。 |
addr:对端设备地址。 |
接口返回值:错误码。 |
sle_update_connect_param |
连接参数更新。 |
params:连接参数 |
接口返回值:错误码。 |
sle_pair_remote_device |
向对端设备发起配对请求。 (目前星闪鉴权流程仅支持免输入模式) |
addr:对端设备地址。 |
接口返回值:错误码。 |
sle_remove_paired_remote_device |
与对端设备取消配对。 |
addr:对端设备地址。 |
接口返回值:错误码。 |
sle_remove_all_pairs |
取消与所有对端设备的配对。 |
- |
接口返回值:错误码。 |
sle_get_paired_devices_num |
获取配对设备数量。 |
number:[out]配对设备数量。 |
接口返回值:错误码。 |
sle_get_paired_devices |
获取配对设备信息。 |
addr:[out]设备地址链表; number:[inout]入参时为用户预留内存大小,出参时为设备数量。 |
接口返回值:错误码。 |
sle_get_pair_state |
获取配对状态。 |
addr:设备地址; state:[out]配对状态。 |
接口返回值:错误码。 |
sle_get_connect_role |
获取链路角色。 |
conn_id: 连接id; role: [out]链路角色。 |
接口返回值:错误码。 |
sle_read_remote_device_rssi |
读对端设备RSSI值。 |
conn_id:连接id。 |
接口返回值:错误码。 |
sle_set_phy_param |
更新星闪phy参数。 |
conn_id:连接id; param:phy更新的配置参数。 |
接口返回值:错误码。 |
sle_connection_register_callbacks |
注册连接管理回调函数。 |
func:用户回调函数。 |
接口返回值:错误码。 |
开发流程
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接口描述
接口名称 |
描述 |
参数说明 |
返回信息说明 |
|---|---|---|---|
ssaps_register_server |
注册SSAP server。 注:目前只支持注册一个SSAP server。 |
app_uuid:应用UUID指针; server_id:[out] server id指针。 |
接口返回值:错误码。 |
ssaps_unregister_server |
注销SSAP server。 |
server_id:server id。 |
接口返回值:错误码。 |
ssaps_add_service |
添加服务。 |
server_id:server id; service_uuid:服务UUID; is_primary:是否是首要服务。 |
接口返回值:错误码。 |
ssaps_add_property |
添加特征。 |
server_id:server id; service_handle:服务句柄; property:特征信息。 |
接口返回值:错误码。 |
ssaps_add_descriptor |
添加特征描述符。 |
server_id:server id; service_handle:服务句柄; property_handle:特征句柄; descriptor:描述符信息。 |
接口返回值:错误码。 |
ssaps_add_service_sync |
添加服务同步接口,服务句柄同步返回。 |
server_id:server id; service_uuid:服务UUID; is_primary:是否是首要服务; handle:[out]服务句柄指针。 |
接口返回值:错误码。 |
ssaps_add_property_sync |
添加特征同步接口,特征句柄同步返回。 |
server_id:server id; service_handle:服务句柄; property:特征; handle:[out]特征句柄指针。 |
接口返回值:错误码。 |
ssaps_add_descriptor_sync |
添加特征描述符同步接口,特征描述符句柄同步返回。 |
server_id:server id; service_handle:服务句柄; property_handle:特征句柄; descriptor:特征描述符; |
接口返回值:错误码。 |
ssaps_start_service |
启动服务。 |
server_id:server id; service_handle:服务句柄。 |
接口返回值:错误码。 |
ssaps_delete_all_services |
删除所有服务。 |
server_id:server id。 |
接口返回值:错误码。 |
ssaps_send_response |
发送响应。 |
server_id:server id; conn_id:连接ID; param:响应参数。 |
接口返回值:错误码。 |
ssaps_notify_indicate |
给对端发送通知或指示。 |
server_id:server id; conn_id:连接ID; param:通知或指示参数。 |
接口返回值:错误码。 |
ssaps_notify_indicate_by_uuid |
按照uuid给对端发送通知或指示。 |
server_id:server id; conn_id:连接ID; param:通知或指示参数。 |
接口返回值:错误码。 |
ssaps_set_info |
在连接之前设置 server信息。 |
server_id:server id; info: server信息。 |
接口返回值:错误码。 |
ssaps_register_callbacks |
注册SSAP server回调函数。 |
func:用户回调函数。 |
接口返回值:错误码。 |
开发流程
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接口描述
接口名称 |
描述 |
参数说明 |
返回信息说明 |
|---|---|---|---|
ssapc_register_client |
注册SSAP client。 注:目前只支持注册一个SSAP client。 |
app_uuid:应用UUID指针; client_id:[out] client id指针。 |
接口返回值:错误码。 |
ssapc_unregister_client |
注销SSAP client。 |
client_id:client id。 |
接口返回值:错误码。 |
ssapc_find_structure |
查找对端服务、特征和描述符。 |
client_id:client id; conn_id:连接ID; param:查找参数。 |
接口返回值:错误码。 |
ssapc_read_req_by_uuid |
向对端发送按照uuid读取请求。 |
client_id:client id; conn_id:连接ID; param:读取参数。 |
接口返回值:错误码。 |
ssapc_read_req |
向对端发送读取请求。 |
client_id:client id; conn_id:连接ID; handle:句柄; type:类型。 |
接口返回值:错误码。 |
ssapc_write_req |
向对端发送写请求。 |
client_id:client id; conn_id:连接ID; param:写参数。 |
接口返回值:错误码。 |
ssapc_write_cmd |
向对端发送写命令。 |
client_id:client id; conn_id:连接ID; param:写参数。 |
接口返回值:错误码。 |
ssapc_exchange_info_req |
向对端发送交换信息请求。 |
client_id:client id; conn_id:连接ID; param:交换信息参数。 |
接口返回值:错误码。 |
ssapc_register_callbacks |
注册SSAP client回调函数。 |
func:用户回调函数。 |
接口返回值:错误码。 |
开发流程
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接口描述
接口名称 |
描述 |
参数说明 |
返回信息说明 |
|---|---|---|---|
sle_low_latency_mouse_enable |
打开低时延鼠标。 |
- |
接口返回值:错误码。 |
sle_low_latency_dongle_enable |
打开低时延dongle。 |
- |
接口返回值:错误码。 |
sle_low_latency_mouse_register_callbacks |
注册低时延鼠标回调函数。 |
mouse_cbk:鼠标数据回调函数。 |
接口返回值:错误码。 |
sle_low_latency_set |
设置低时延速率,打开或关闭低时延。 |
conn_id:连接ID; enable:是否打开低时延; rate:速率。 |
接口返回值:错误码。 |
sle_low_latency_dongle_register_callbacks |
注册低时延dongle回调函数。 |
dongle_cbk:dongle数据回调函数。 |
接口返回值:错误码。 |
开发流程
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接口描述
接口描述 |
描述 |
参数说明 |
返回信息说明 |
|---|---|---|---|
send_data_cb |
SLE发送数据繁忙回调勾子。 |
- |
- |
sle_transmission_register_callbacks |
注册SLE传输管理回调函数。 |
func:用户回调函数。 |
接口返回值:错误码。 |
开发流程
Transmission Manager典型开发流程如下:
SERVER端:
调用sle_transmission_register_callbacks,注册SLE传输管理回调函数。
每次发包前,根据回调勾子反馈的系统忙闲状态,若是空闲状态,继续高速发包;若是流控状态,减小发包速率;若是繁忙状态,停止发包。
SLE Passkey接口¶
概述¶
星闪配对有多种鉴权方式可以选择,passkey鉴权是其中之一,passkey鉴权提供了防中间人攻击能力,安全性相对免输入鉴权有提升。
开发流程¶
使用场景
发起星闪配对后,根据用户设置的IO(Input Output)能力决策的鉴权方式决策鉴权方式,当满足条件时,协议栈能够自动协商为passkey鉴权。
功能
SLE提供的passkey相关接口如SLE Passkey接口描述如表1所示。
表 1 SLE Passkey接口描述
接口描述 |
描述 |
参数说明 |
返回信息说明 |
|---|---|---|---|
passkey_req_cb |
SLE配对发起后,passkey请求回调勾子。 |
conn_id:SLE连接ID。 |
- |
passkey_notify_cb |
SLE配对发起后,passkey确认回调勾子。 |
conn_id:SLE连接ID; passkey:通行码数据指针; len:通行码数据长度。 |
- |
sle_passkey_entry |
通行码输入。 |
conn_id:SLE连接ID; passkey:转为数字的通信码数据。 |
成功:ERRCODE_SLE_SUCCESS; 失败:对应错误码。 |
SLE提供的安全参数设置接口如SLE安全参数设置接口描述如表2所示。
表 2 SLE安全参数设置接口描述
接口描述 |
描述 |
参数说明 |
返回信息说明 |
|---|---|---|---|
sle_set_sec_param |
SLE设置安全参数。 |
sec_params:SLE安全参数,包含IO能力、配对绑定地址、配对防中间人攻击、地址隐私使能。 |
成功:ERRCODE_SLE_SUCCESS; 失败:对应错误码。 |
SLE协议提供的IO能力和鉴权方式对应关系如SLE鉴权方式决策描述如表3所示。
表 3 SLE鉴权方式决策描述
- |
G节点IO能力 |
|||||
- |
只展示 |
展示,并且可以选择Yes或者No |
只支持键盘 |
没有输入输出 |
支持键盘和展示 |
|
T节点IO能力 |
只展示 |
免输入 |
免输入 |
Passkey通行码鉴权 |
免输入 |
Passkey通行码鉴权 |
展示,并且可以选择Yes或者No |
免输入 |
- |
Passkey通行码鉴权 |
免输入 |
- |
|
只支持键盘 |
Passkey通行码鉴权 |
Passkey通行码鉴权 |
- |
免输入 |
- |
|
没有输入输出 |
免输入 |
免输入 |
免输入 |
免输入 |
免输入 |
|
支持键盘和展示 |
Passkey通行码鉴权 |
- |
- |
免输入 |
- |
|
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异常处理描述
异常情形 |
异常处理 |
异常影响或措施 |
|---|---|---|
passkey输入超时 |
当输入设备端,超过30s没有调用passkey输入接口时,协议栈断开连接。 |
断开后可以重新发起配对 |
passkey输入错误 |
当输入设备端,输入的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接口描述
接口描述 |
描述 |
参数说明 |
返回信息说明 |
|---|---|---|---|
sle_channel_map |
设置Host信道偏好。 广播信道不受此接口影响。 |
channel_map: 信道偏好,长度为10的数组,其中每个bit表示当前信道能否使用。 |
接口返回值:错误码。 |
对于2.4GHz频段,不同带宽信道对应的射频信道中心频率和射频信道号如表2规定。channel_map为一个长度为十的数组,其中每个bit表示当前信道能否使用,字节内信道按照从低到高的顺序,1代表可用,0代表不可用,如数组第二字节为0x03,代表2410,2411信道可用。如果感知周围特定信道收到干扰,可通过 SLE Channel Map 接口规避使用受干扰信道。
表 2 2400MHz频段不同带宽信道对应的射频信道中心频率和射频信道号
射频信道号 |
物理信道号 |
射频信道中心频率(MHz) |
信道带宽 |
射频信道号 |
物理信道号 |
射频信道中心频率(MHz) |
信道带宽 |
||||
1MHz |
2MHz |
4MHz |
1MHz |
2MHz |
4MHz |
||||||
0 |
76 |
2402 |
Y1 |
- |
- |
40 |
38 |
2442 |
Y |
Y |
- |
1 |
0 |
2403 |
Y |
- |
- |
41 |
39 |
2443 |
Y |
- |
- |
2 |
1 |
2404 |
Y |
Y |
- |
42 |
40 |
2444 |
Y |
Y |
|
3 |
2 |
2405 |
Y |
- |
Y |
43 |
41 |
2445 |
Y |
Y |
|
4 |
3 |
2406 |
Y |
Y |
- |
44 |
42 |
2446 |
Y |
Y |
- |
5 |
4 |
2407 |
Y |
- |
- |
45 |
43 |
2447 |
Y |
- |
- |
6 |
5 |
2408 |
Y |
Y |
46 |
44 |
2448 |
Y |
Y |
- |
|
7 |
6 |
2409 |
Y |
Y |
47 |
45 |
2449 |
Y |
- |
Y |
|
8 |
7 |
2410 |
Y |
Y |
- |
48 |
46 |
2450 |
Y |
Y |
- |
9 |
8 |
2411 |
Y |
- |
- |
49 |
47 |
2451 |
Y |
- |
- |
10 |
9 |
2412 |
Y |
Y |
- |
50 |
48 |
2452 |
Y |
Y |
- |
11 |
10 |
2413 |
Y |
- |
Y |
51 |
49 |
2453 |
Y |
- |
Y |
12 |
11 |
2414 |
Y |
Y |
- |
52 |
50 |
2454 |
Y |
Y |
- |
13 |
12 |
2415 |
Y |
- |
- |
53 |
51 |
2455 |
Y |
- |
- |
14 |
13 |
2416 |
Y |
Y |
- |
54 |
52 |
2456 |
Y |
Y |
- |
15 |
14 |
2417 |
Y |
- |
Y |
55 |
53 |
2457 |
Y |
- |
Y |
16 |
15 |
2418 |
Y |
Y |
- |
56 |
54 |
2458 |
Y |
Y |
- |
17 |
16 |
2419 |
Y |
- |
- |
57 |
55 |
2459 |
Y |
- |
- |
18 |
17 |
2420 |
Y |
Y |
- |
58 |
56 |
2460 |
Y |
Y |
- |
19 |
18 |
2421 |
Y |
- |
Y |
59 |
57 |
2461 |
Y |
- |
Y |
20 |
19 |
2422 |
Y |
Y |
- |
60 |
58 |
2462 |
Y |
Y |
- |
21 |
20 |
2423 |
Y |
- |
- |
61 |
59 |
2463 |
Y |
- |
- |
22 |
77 |
2424 |
Y1 |
- |
- |
62 |
60 |
2464 |
Y |
Y |
- |
23 |
21 |
2425 |
Y |
- |
- |
63 |
61 |
2465 |
Y |
- |
Y |
24 |
22 |
2426 |
Y |
Y |
- |
64 |
62 |
2466 |
Y |
Y |
- |
25 |
23 |
2427 |
Y |
- |
- |
65 |
63 |
2467 |
Y |
- |
- |
26 |
24 |
2428 |
Y |
Y |
- |
66 |
64 |
2468 |
Y |
Y |
- |
27 |
25 |
2429 |
Y |
- |
Y |
67 |
65 |
2469 |
Y |
- |
Y |
28 |
26 |
2430 |
Y |
Y |
- |
68 |
66 |
2470 |
Y |
Y |
- |
29 |
27 |
2431 |
Y |
- |
- |
69 |
67 |
2471 |
Y |
- |
- |
30 |
28 |
2432 |
Y |
Y |
- |
70 |
68 |
2472 |
Y |
Y |
- |
31 |
29 |
2433 |
Y |
- |
Y |
71 |
69 |
2473 |
Y |
- |
Y |
32 |
30 |
2434 |
Y |
Y |
- |
72 |
70 |
2474 |
Y |
Y |
- |
33 |
31 |
2435 |
Y |
- |
- |
73 |
71 |
2475 |
Y |
- |
- |
34 |
32 |
2436 |
Y |
Y |
- |
74 |
72 |
2476 |
Y |
Y |
- |
35 |
33 |
2437 |
Y |
- |
Y |
75 |
73 |
2477 |
Y |
- |
Y |
36 |
34 |
2438 |
Y |
Y |
- |
76 |
74 |
2478 |
Y |
Y |
- |
37 |
35 |
2439 |
Y |
- |
- |
77 |
75 |
2479 |
Y |
- |
- |
38 |
36 |
2440 |
Y |
Y |
- |
78 |
78 |
2480 |
Y1 |
- |
- |
39 |
37 |
2441 |
Y |
- |
Y |
- |
- |
- |
- |
- |
- |
注1:射频信道号0,22和78对应1MHz信道为广播信道,物理信道号76,77和78对应1MHz信道为广播信道。
开发流程
SLE Channel Map典型开发流程如下:
CLIENT端:
当上报连接成功时调用sle_channel_map,设置信道偏好。




