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

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

目录

[1.GAP 链接密钥逻辑](#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信息

相关推荐
wotaifuzao1 天前
(九)一文吃透 BLE:从低功耗原理到协议栈与实战概念
物联网·硬件架构·蓝牙·低功耗·ble·设计原理
byte轻骑兵2 天前
【LE Audio】BAP协议精讲[1]: 开启低功耗音频新纪元
人工智能·音视频·蓝牙·le audio·bap
Darkershadow2 天前
蓝牙学习之Provision(7)bind (1)
学习·蓝牙·ble·mesh
Darkershadow3 天前
蓝牙学习之Provision(6)Provison Complete
学习·蓝牙·ble·mesh
Darkershadow6 天前
蓝牙学习之Provision(2)
学习·蓝牙·ble·mesh
summerkissyou19877 天前
Android13-Bluetooth-代码目录介绍
android·蓝牙
wotaifuzao8 天前
(八)BLE MTU 全栈解析:从 20 字节瓶颈到 160KB/s
物联网·蓝牙·ble·ota·mtu
小陈同学12310 天前
HID(Human Interface Device)——人机交互协议
蓝牙
RFCEO11 天前
蓝牙设备配对与连接失败问题全面分析及解决对策
蓝牙·bt·配对失败·连接失败·蓝牙连接配对时序·连接失败原因对策
Darkershadow20 天前
蓝牙学习之亮度调节
学习·蓝牙·ble