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

相关推荐
记帖2 天前
STM32WB55RG开发(3)----生成 BLE 程序连接手机APP
蓝牙·stm32cubemx·ipcc·ble·无线·stm32wb55rg·hsem
记帖3 天前
STM32WB55RG开发(1)----开发板测试
蓝牙·stm32cubemx·ble·无线·stm32wb55rg·开发板测试
jiang_bluetooth7 天前
Simple fast pair design
蓝牙·gfps·fast pair·蓝牙快连·蓝牙架构设计
Lenzetech10 天前
科技资讯|谷歌Play应用商店有望支持 XR 头显,AR / VR设备有望得到发展
科技·物联网·ar·xr·蓝牙·find my
Lenzetech11 天前
蓝牙资讯|苹果AirPods Pro 2推出听力测试、助听器和听力保护等功能
科技·物联网·蓝牙·find my
Marko_Chai15 天前
Android BLE 杂谈
android·蓝牙
Lenzetech20 天前
Find My平板键盘|苹果Find My技术与键盘结合,智能防丢,全球定位
科技·物联网·蓝牙·find my
Lenzetech22 天前
蓝牙资讯|iOS 18.1 正式版下周推送,AirPods Pro 2耳机将带来助听器功能
科技·物联网·蓝牙·find my
jiang_bluetooth1 个月前
结合空口分析BLE AUDIO之PAC
嵌入式硬件·信息与通信·蓝牙·智能硬件·蓝牙5.2·ble audio
jiang_bluetooth1 个月前
分享蓝牙耳机A2DP音频卡顿原因及解决思路
嵌入式硬件·音视频·信息与通信·蓝牙·智能硬件·a2dp