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

相关推荐
韩zj3 天前
android 蓝牙语音转换成pcm文件,进行播放暂停停止操作
android·蓝牙·pcm
Lenzetech5 天前
Find My汽车钥匙|苹果Find My技术与钥匙结合,智能防丢,全球定位
科技·物联网·蓝牙·find my
Lenzetech9 天前
蓝牙技术|蓝牙6.0技术或将实现厘米级精确查找定位功能
科技·物联网·蓝牙·find my
Android技术栈1 个月前
鸿蒙NEXT(API 12)【蓝牙设置】 网络开发
网络·php·蓝牙·harmonyos·鸿蒙·鸿蒙系统·openharmony
SuperHeroWu71 个月前
【HarmonyOS】鸿蒙应用蓝牙功能实现 (二)
华为·蓝牙·harmonyos·低功耗蓝牙·bluetooth
WUNEAL2 个月前
安卓蓝牙日志的获取方法
安卓·蓝牙
Lenzetech2 个月前
蓝牙资讯|AirPods Pro 2推送最新开发者版固件,支持点头摇头控制Siri
科技·物联网·蓝牙·find my
SuperHeroWu72 个月前
【HarmonyOS】鸿蒙应用蓝牙功能实现 (一)
华为·蓝牙·harmonyos
小白橘颂2 个月前
喵喵蓝牙热敏打印机(下)
c++·stm32·物联网·esp32·arduino·蓝牙
Lenzetech2 个月前
Find My防狼器|苹果Find My技术与防狼器结合,智能防丢,全球定位
科技·物联网·蓝牙·find my