本文主要是介绍btstack协议栈实战篇--GAP Link Key Management,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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信息
这篇关于btstack协议栈实战篇--GAP Link Key Management的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!