登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
轻量养虾,开箱即用!低 Token + 稳定算力,Gitee & 模力方舟联合出品的 PocketClaw 正式开售!点击了解详情~
代码拉取完成,页面将自动刷新
开源项目
>
工业软件
>
智能硬件
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
63
Star
230
Fork
122
珠海杰理科技
/
fw-AC63_BT_SDK
代码
Issues
104
Pull Requests
1
Wiki
统计
流水线
服务
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
开发画像分析
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
NOTE:SDK中蓝牙BLE 配对加密功能的配置使用
待办的
#I5AT1E
JL-MinXian
成员
创建于
2022-06-06 11:22
**ble配对加密功能的配置向导** **1、首先要确保 蓝牙协议栈 btstack 和 蓝牙控制器 btctrler 有没有使能配对加密功能。(主从角色一样的配置)** btstack 需要配置(lib_btstack_config.c) ```C const int config_le_sm_support_enable = 1; //是否支持配对加密模块加载 ``` btctrl 需要配置(lib_btctrler_config.c) ```C const uint64_t config_btctler_le_features = LE_ENCRYPTION; //是否支持配对加密模块加载 ``` 注意 AC63N已经通过宏配置关联好了,直接打开宏 CONFIG_BT_SM_SUPPORT_ENABLE 就可以 ```C #define CONFIG_BT_SM_SUPPORT_ENABLE 1 //配置是否支持配对加密模块加载 ``` **2、触发请求配对加密机制** (1)server(从机)触发加密的两个方法。注意:如果两种方法都使用了,有些手机会弹两次配对框的情况;建议只用第二种方法。 a、主动发请求命令(每次连接都会主动发 Security Request命令) ```C /*配置加密请求,触发调用接口 sm_set_request_security */ .slave_security_auto_req = 1, ``` b、profile 中在 characteristic read 和 write操作属性增加认证标记 AUTHENTICATION_REQUIRED , 主机连接ATT访问到有AUTHENTICATION_REQUIRED属性,就是发起配对加密流程;参考示例如下: ```C /*参考hogp的profile的read示例:PnP ID*/ PRIMARY_SERVICE, 180a CHARACTERISTIC, 2a50, READ | AUTHENTICATION_REQUIRED | DYNAMIC, ``` 或者直接修改profile的数据增加定义AUTHENTICATION_REQUIRED 的bit属性0x0400 ```C /* CHARACTERISTIC, ae02, NOTIFY, */ 0x0d, 0x00, 0x02, 0x00, 0x07, 0x00, 0x03, 0x28, 0x10, 0x08, 0x00, 0x02, 0xae, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x02, 0xae, /*在 CLIENT_CHARACTERISTIC_CONFIGURATION 增加加密认证属性要求*/ 0x0a, 0x00, 0x0a, 0x01|0x04, 0x09, 0x00, 0x02, 0x29, 0x00, 0x00, ``` (2)client(主机)触发的方法。 每次连接都会主动发起加密。 ```C /*配置加密请求,触发调用接口 sm_set_master_request_pair */ .master_security_auto_req = 1, /*关注配置,主机等待加密完成再执行profile搜索*/ .master_set_wait_security = 1, ``` (3)如果想在连上以后再手动请求加密(主从都可以),那就可以通过下面的接口sm_api_request_pairing调用实现。 注意:需要把上述从机(sm_set_request_security)或 主机(sm_set_master_request_pair)的方式先默认关掉。 ```C /*指定链接发加密请求命令 */ bool sm_api_request_pairing(hci_con_handle_t con_handle); ``` **3、配对加密的方式** sdk 默认是justworks,不需要输入密码; 但可以用通过修复IO能力方式改变加密方法,例如输入passkey。 注意 测试发现主机是不能带passkey的HID类设备。 ```C #if PASSKEY_ENABLE .io_capabilities = IO_CAPABILITY_DISPLAY_ONLY, #else .io_capabilities = IO_CAPABILITY_NO_INPUT_NO_OUTPUT, #endif ``` 当配置了输入passkey,处理sm回调函数时,有事件回调可修改passkey的值 ```C /*注册回调*/ reset_PK_cb_register_ext(__ble_comm_cbk_passkey_input); /*最终回调到应用层的消息处理*/ case GATT_COMM_EVENT_SM_PASSKEY_INPUT: { u32 *key = little_endian_read_32(packet, 2); *key = 888888; log_info("input_key:%6u\n", *key); } ``` **4、配对加密绑定管理表** SDK默认支持记录10个绑定设备,主从机公用同一个配对表记录。 关注头文件ble_api.h,里面有关于配对表使用的接口 ble_list_xxx(),涉及支持的功能等: 注意:传参的 conn_addr 地址高低位顺序要反一下。 (1)可修改配对表的个数和限制配对开放。 ```C void ble_list_config_reset(u8 pair_devices_count, u8 is_allow_cover); bool ble_list_pair_accept(u8 enable); ``` (2)配对绑定后可获取对方的id地址,用来识别对方是唯一设备。 ```C bool ble_list_get_last_id_addr(u8 *id_addr); bool ble_list_get_id_addr(u8 *conn_addr, u8 conn_addr_type, u8 *id_addr); ``` (3)可获取对方的设备类型,是否ios设备。 ```C bool ble_list_get_remote_type(u8 *conn_addr, u8 conn_addr_type, u8 *output_type); ``` (4)提供可删除可清除配对表操作。 ```C bool ble_list_clear_all(void); bool ble_list_delete_device(u8 *conn_addr, u8 conn_addr_type); ```
**ble配对加密功能的配置向导** **1、首先要确保 蓝牙协议栈 btstack 和 蓝牙控制器 btctrler 有没有使能配对加密功能。(主从角色一样的配置)** btstack 需要配置(lib_btstack_config.c) ```C const int config_le_sm_support_enable = 1; //是否支持配对加密模块加载 ``` btctrl 需要配置(lib_btctrler_config.c) ```C const uint64_t config_btctler_le_features = LE_ENCRYPTION; //是否支持配对加密模块加载 ``` 注意 AC63N已经通过宏配置关联好了,直接打开宏 CONFIG_BT_SM_SUPPORT_ENABLE 就可以 ```C #define CONFIG_BT_SM_SUPPORT_ENABLE 1 //配置是否支持配对加密模块加载 ``` **2、触发请求配对加密机制** (1)server(从机)触发加密的两个方法。注意:如果两种方法都使用了,有些手机会弹两次配对框的情况;建议只用第二种方法。 a、主动发请求命令(每次连接都会主动发 Security Request命令) ```C /*配置加密请求,触发调用接口 sm_set_request_security */ .slave_security_auto_req = 1, ``` b、profile 中在 characteristic read 和 write操作属性增加认证标记 AUTHENTICATION_REQUIRED , 主机连接ATT访问到有AUTHENTICATION_REQUIRED属性,就是发起配对加密流程;参考示例如下: ```C /*参考hogp的profile的read示例:PnP ID*/ PRIMARY_SERVICE, 180a CHARACTERISTIC, 2a50, READ | AUTHENTICATION_REQUIRED | DYNAMIC, ``` 或者直接修改profile的数据增加定义AUTHENTICATION_REQUIRED 的bit属性0x0400 ```C /* CHARACTERISTIC, ae02, NOTIFY, */ 0x0d, 0x00, 0x02, 0x00, 0x07, 0x00, 0x03, 0x28, 0x10, 0x08, 0x00, 0x02, 0xae, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x02, 0xae, /*在 CLIENT_CHARACTERISTIC_CONFIGURATION 增加加密认证属性要求*/ 0x0a, 0x00, 0x0a, 0x01|0x04, 0x09, 0x00, 0x02, 0x29, 0x00, 0x00, ``` (2)client(主机)触发的方法。 每次连接都会主动发起加密。 ```C /*配置加密请求,触发调用接口 sm_set_master_request_pair */ .master_security_auto_req = 1, /*关注配置,主机等待加密完成再执行profile搜索*/ .master_set_wait_security = 1, ``` (3)如果想在连上以后再手动请求加密(主从都可以),那就可以通过下面的接口sm_api_request_pairing调用实现。 注意:需要把上述从机(sm_set_request_security)或 主机(sm_set_master_request_pair)的方式先默认关掉。 ```C /*指定链接发加密请求命令 */ bool sm_api_request_pairing(hci_con_handle_t con_handle); ``` **3、配对加密的方式** sdk 默认是justworks,不需要输入密码; 但可以用通过修复IO能力方式改变加密方法,例如输入passkey。 注意 测试发现主机是不能带passkey的HID类设备。 ```C #if PASSKEY_ENABLE .io_capabilities = IO_CAPABILITY_DISPLAY_ONLY, #else .io_capabilities = IO_CAPABILITY_NO_INPUT_NO_OUTPUT, #endif ``` 当配置了输入passkey,处理sm回调函数时,有事件回调可修改passkey的值 ```C /*注册回调*/ reset_PK_cb_register_ext(__ble_comm_cbk_passkey_input); /*最终回调到应用层的消息处理*/ case GATT_COMM_EVENT_SM_PASSKEY_INPUT: { u32 *key = little_endian_read_32(packet, 2); *key = 888888; log_info("input_key:%6u\n", *key); } ``` **4、配对加密绑定管理表** SDK默认支持记录10个绑定设备,主从机公用同一个配对表记录。 关注头文件ble_api.h,里面有关于配对表使用的接口 ble_list_xxx(),涉及支持的功能等: 注意:传参的 conn_addr 地址高低位顺序要反一下。 (1)可修改配对表的个数和限制配对开放。 ```C void ble_list_config_reset(u8 pair_devices_count, u8 is_allow_cover); bool ble_list_pair_accept(u8 enable); ``` (2)配对绑定后可获取对方的id地址,用来识别对方是唯一设备。 ```C bool ble_list_get_last_id_addr(u8 *id_addr); bool ble_list_get_id_addr(u8 *conn_addr, u8 conn_addr_type, u8 *id_addr); ``` (3)可获取对方的设备类型,是否ios设备。 ```C bool ble_list_get_remote_type(u8 *conn_addr, u8 conn_addr_type, u8 *output_type); ``` (4)提供可删除可清除配对表操作。 ```C bool ble_list_clear_all(void); bool ble_list_delete_device(u8 *conn_addr, u8 conn_addr_type); ```
评论 (
3
)
登录
后才可以发表评论
状态
待办的
待办的
进行中
已完成
已关闭
负责人
未设置
标签
蓝牙BLE
feature
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (
-
)
标签 (
-
)
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(3)
C
1
https://gitee.com/Jieli-Tech/fw-AC63_BT_SDK.git
git@gitee.com:Jieli-Tech/fw-AC63_BT_SDK.git
Jieli-Tech
fw-AC63_BT_SDK
fw-AC63_BT_SDK
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册