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

相关推荐
byte轻骑兵2 天前
【Bluedroid】蓝牙HID DEVICE断开连接流程源码分析
android·c++·蓝牙·hid·bluedroid
jiang_bluetooth2 天前
从ellisys空口分析蓝牙耳机回连手机失败案例
智能手机·蓝牙·lmp·tws蓝牙耳机
Ronin-Lotus2 天前
嵌入式硬件篇---无线通信模块
嵌入式硬件·wifi·lora·无线通信·蓝牙·2.4g射频
byte轻骑兵2 天前
【Bluedroid】蓝牙 HID 设备服务注册流程源码解析:从初始化到 SDP 记录构建
蓝牙·hid·bluedroid
DONSEE广东东信智能读卡器3 天前
蓝牙身份证阅读器使用Uniapp调用二次开发demo
javascript·uni-app·蓝牙·身份证阅读器
jiang_bluetooth8 天前
低功耗蓝牙BLE的通信可靠性分析
蓝牙·低功耗蓝牙·ble
万户猴14 天前
【Android蓝牙开发实战-11】蓝牙BLE多连接机制全解析1
android·蓝牙
万户猴15 天前
【 Android蓝牙-十】Android各版本蓝牙行为变化与兼容性指南
android·蓝牙
万户猴16 天前
【Android蓝牙开发实战-9】高效处理蓝牙断开连接
蓝牙
万户猴19 天前
【Android蓝牙-8】蓝牙安全机制全面解构:加密、认证与数据保护
蓝牙