btstack协议栈实战篇--GAP Link Key Management

2024-06-08 20:04

本文主要是介绍btstack协议栈实战篇--GAP Link Key Management,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

btstack协议栈---总目录-CSDN博客

目录

     1.GAP 链接密钥逻辑

     2.蓝牙逻辑

     3.主应用程序设置

    4.log信息


        展示了如何遍历存储在 NVS 中的经典链接密钥,链接密钥是每个设备-设备绑定的。如果蓝牙控制器可以交换,例如在桌面系统上,则每个控制器都需要一个链接密钥数据库。我们需要等待直到蓝牙堆栈启动并根据控制器的 BD ADDR 选择正确的链接密钥数据库。

     1.GAP 链接密钥逻辑

        列出存储的链接密钥。

     2.蓝牙逻辑

        在列出存储的链接密钥之前等待蓝牙启动。

     3.主应用程序设置

        主应用程序代码注册 HCI 数据包处理器并启动蓝牙堆栈。

/* @section GAP Link Key Logic ** @text List stored link keys*/ 
static void list_link_keys(void){bd_addr_t  addr;link_key_t link_key;link_key_type_t type;btstack_link_key_iterator_t it;int ok = gap_link_key_iterator_init(&it);if (!ok) {printf("Link key iterator not implemented\n");return;}printf("Stored link keys: \n");while (gap_link_key_iterator_get_next(&it, addr, link_key, &type)){printf("%s - type %u, key: ", bd_addr_to_str(addr), (int) type);printf_hexdump(link_key, 16);}printf(".\n");gap_link_key_iterator_done(&it);
}/* @section Bluetooth Logic ** @text Wait for Bluetooth startup before listing the stored link keys*/ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){UNUSED(channel);UNUSED(size);if (packet_type != HCI_EVENT_PACKET) return;switch(hci_event_packet_get_type(packet)){case BTSTACK_EVENT_STATE:if (btstack_event_state_get_state(packet) == HCI_STATE_WORKING){list_link_keys();break;}break;default:break;}
}/* @section Main Application Setup** @text Listing MainConfiguration shows main application code.* It registers the HCI packet handler and starts the Bluetooth stack.*//* LISTING_START(MainConfiguration): Setup packet handler for GAP inquiry */
int btstack_main(int argc, const char * argv[]);
int btstack_main(int argc, const char * argv[]) {(void)argc;(void)argv;hci_event_callback_registration.callback = &packet_handler;hci_add_event_handler(&hci_event_callback_registration);// turn on!hci_power_control(HCI_POWER_ON);return 0;
}
/* LISTING_END */

       4.log信息

这篇关于btstack协议栈实战篇--GAP Link Key Management的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1043171

相关文章

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

SQL 外键Foreign Key全解析

《SQL外键ForeignKey全解析》外键是数据库表中的一列(或一组列),用于​​建立两个表之间的关联关系​​,外键的值必须匹配另一个表的主键(PrimaryKey)或唯一约束(UniqueCo... 目录1. 什么是外键?​​ ​​​​2. 外键的语法​​​​3. 外键的约束行为​​​​4. 多列外键​

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命