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

news2024/11/28 6:28:15

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信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1802673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue2入门(安装Vue、devtools,创建Vue)以及MVVM分层思想

文章目录 1.下载并安装Vue2.使用Vue2.1 创建Vue以及挂载Vue2.2 模板语句的数据来源:data2.3 template配置项详解2.4 Vue实例和容器的关系 3.安装devtools4.MVVM分层思想 1.下载并安装Vue (1)Vue是一个基于JavaScript(JS&#xff…

数仓开发:如何计算投放效果?

背景介绍 业务介绍:用户是通过低价引流进来,然后通过复购购买高价商品,可以多次购买。低价商品和高价商品均可以退款,高价商品由于各种复杂的场景,可能会有多次退款。低价商品如果退款是全退,不存在多次退…

手猫助手Agent技术探索总结

随着LLM的发展,ChatGPT能力不断增强,AI不断有新的概念提出,一种衍生类型的应用AI Agent也借着这股春风开启了一波话题热度,各种初创公司,包括Open AI内部也都在密切关注着AI Agent领域的变化。阿里集团内的AI团队也有很…

容器运行nslookup提示bash: nslookup: command not found【笔记】

在容器中提示bash: nslookup: command not found,表示容器中没有安装nslookup命令。 可以通过以下命令安装nslookup: 对于基于Debian/Ubuntu的容器,使用以下命令: apt-get update apt-get install -y dnsutils对于基于CentOS/R…

【Vue】如何提供访问vuex的数据

文章目录 一、提供数据二、访问Vuex中的数据通过$store访问的语法1)模板中使用2)组件逻辑中使用3)js文件中使用 三、通过辅助函数 - mapState获取 state中的数据 一、提供数据 State提供唯一的公共数据源,所有共享的数据都要统一…

6.7 输入输出流

输入:将数据放到程序(内存)中 输出:将数据从程序(内存)放到设备中 C的输入输出分为3种形式: 从键盘屏幕中输入输出,称为标准IO 对于磁盘进行标准输入输出,称为文件IO…

安装ps提示vcruntime140.dll丢失的解决方法,总结5种解决方法

在电脑使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到vcruntime140.dll”。这个问题可能会导致程序无法正常启动或运行,因此了解其原因和解决方法是非常必要的。小编将从多个方面对“找不到vcruntime140.dll”这一问题进行详细…

端午与高考的交汇点:家的温暖与梦想的起点

当端午节的粽香弥漫在街头巷尾,高考的脚步也悄然而至。这两个看似毫无关联的时刻,却在每年的六月,奇妙地交汇在一起,为我们带来了一段特别的记忆。这不仅是家的温暖与梦想的起点相遇的时刻,更是传统文化与现代追求共融…

用户输入表格数据设计(XPTable控件使用说明九)

XP Table控件可以编辑数据,程序也可以使用编辑后的数据,但是程序新建时又从初始化数据到模型到显示,这两步有点绕,做了一个实例来说明这块内容。 流程1:初始化数据--> model--> UI show 流程2:UI--…

【面试官】知道synchronized锁升级吗

一座绵延在水上的美术馆——白鹭湾巧克力美术馆。它漂浮于绿水之上,宛如一条丝带轻盈地伸向远方 文章目录 可重入锁synchronized实现原理 synchronized缺点保存线程状态锁升级锁升级优缺点 1. 可重入锁 面试官:知道可重入锁有哪些吗? 可重入意味着获取…

【Git】之 【Bug】clone 克隆失败 过早的文件结束符

问题 解决 参考:git clone报错 过早结束问题解决方法 git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 999999 git config --global http.postBuffer 10024288000 git config --list

wireshark 标记自己想要的数据包

1:点击视图 2:点击视图-着色规则 点击新增一行,双击名称-进行编辑 过滤器规则-编辑自己想要看到的 点击前景-选择凸出显示颜色 点击背景--选择凸出显示颜色 点击确定按钮

LDR6020一拖二快充线:高效充电的新选择

LDR6020一拖二快充线:高效充电的新选择 随着移动设备的普及和功能的日益增强,电池续航成为了用户关注的重点之一。为了满足用户对于快速充电的需求,各大厂商纷纷推出了各种快充技术和产品。在这个背景下,LDR6020一拖二快充线凭借…

PowerDesigner导入Excel模板生成数据表

PowerDesigner导入Excel模板生成数据表 1.准备好需要导入的Excel表结构数据,模板内容如下图所示 2.打开PowerDesigner,新建一个physical data model文件,填入文件名称,选择数据库类型 3.点击Tools|Execute Commands|Edit/Run Script菜单或按下快捷键Ctrl Shift X打开脚本窗口…

台湾合泰原装BS66F360 封装LQFP-44 电容触摸按键 AD+LED增强型触控

BS66F360是一款由Holtek Semiconductor Inc.生产的微控制器(microcontroller),具有触摸检测和LED驱动功能。其应用领域广泛,包括但不限于以下几个方面: 1. 触摸按键应用:BS66F360内置了触摸按键检测功能&am…

记一个ESP12-F芯片的坑

这两个都叫ESP-12F从外观上很难区分他们的差别,甚至背面的引脚都是一样的 这个单独的芯片就是从板子上拆下来的,使用这颗芯片按住FLASH按键LED灯会亮,很离谱,led灯的引脚是GPIO2 flash引脚是GPIO0,他们之间的内部封装…

matplotlib 动态显示训练过程中的数据和模型的决策边界

文章目录 Github官网文档简介动态显示训练过程中的数据和模型的决策边界安装源码 Github https://github.com/matplotlib/matplotlib 官网 https://matplotlib.org/stable/ 文档 https://matplotlib.org/stable/api/index.html 简介 matplotlib 是 Python 中最常用的绘图…

el-table合计行前置在首行,自定义合计行方法

背景 el-table原生合计行是在标签内增加show-summary属性,在表尾实现设计合计,且只对表格当前页面显示的列数据进行合计。element-UI效果如下图所示。 现要求在首行显示合计行,并自定义合计逻辑实现如下效果。 图示表格中,成本…

数据结构--线性表和串

个人介绍 hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的…

AGP4+ 打包运行闪退,AGP7+ 正常(has code but is marked native or abstract)

问题 安装应用,点击图标启动立马闪退! 诡异的闪退:AGP4 打包运行闪退,AGP7 正常 unity 导出的 Android 日志两个主要点: com.android.boot.App 是 Android 的 application 子类,程序入口 java.lang.Class…