Raspberry Pi Pico W的BTstack HID键盘约30秒后断开问题求助
Raspberry Pi Pico W BTstack HID蓝牙键盘连接后自动断开问题
基于Raspberry Pi Pico W制作BTstack HID蓝牙键盘,所有功能均可正常使用,但设备连接后约30秒会自动断开,重新连接后仍会出现相同的断开问题。
BT_custom_keypad.c
#include <stdio.h> #include "pico/stdlib.h" #include "pico/cyw43_arch.h" #include "hid_keyboard_demo.c" //line 363 commented void send_hid_text(uint8_t* text) { btstack_ring_buffer_write(&send_buffer, text, strlen(text)); send_next(NULL); busy_wait_ms(100); } void send_hid_char(uint8_t c) { btstack_ring_buffer_write(&send_buffer, (uint8_t*)&c, 1); send_next(NULL); busy_wait_ms(100); } void send_hid_spec_code(uint8_t m, uint8_t c) { send_modifier = m; send_keycode = c; hid_device_request_can_send_now_event(hid_cid); } int main() { stdio_init_all(); if (cyw43_arch_init()) { printf("cyw43 arch init error\n"); return 0; } btstack_main(0, NULL); gap_set_local_name("PicoW Keypad"); while(1) { busy_wait_ms(2000); send_hid_text("messages...\n"); tight_loop_contents(); } return 0; }
btStack_config.h
#ifndef _PICO_BTSTACK_BTSTACK_CONFIG_H #define _PICO_BTSTACK_BTSTACK_CONFIG_H // BTstack可启用的功能 #ifdef ENABLE_BLE #define ENABLE_LE_PERIPHERAL #define ENABLE_LE_CENTRAL #define ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE #endif #ifdef ENABLE_MESH // Mesh配置 #define ENABLE_MESH_ADV_BEARER #define ENABLE_MESH_GATT_BEARER #define ENABLE_MESH_PB_ADV #define ENABLE_MESH_PB_GATT #define ENABLE_MESH_PROXY_SERVER #define ENABLE_MESH_RELAY #define ENABLE_MESH_PROVISIONER #define MAX_NR_MESH_SUBNETS 2 #define MAX_NR_MESH_TRANSPORT_KEYS 16 #define MAX_NR_MESH_VIRTUAL_ADDRESSES 16 // 预留一个NetKey更新的名额 #define MAX_NR_MESH_NETWORK_KEYS (MAX_NR_MESH_SUBNETS+1) #endif #define ENABLE_LOG_INFO #define ENABLE_LOG_ERROR #define ENABLE_PRINTF_HEXDUMP #define ENABLE_SCO_OVER_HCI // BTstack配置:缓冲区、大小等 #define HCI_OUTGOING_PRE_BUFFER_SIZE 4 #define HCI_ACL_PAYLOAD_SIZE (1691 + 4) #define HCI_ACL_CHUNK_SIZE_ALIGNMENT 4 #define MAX_NR_AVDTP_CONNECTIONS 1 #define MAX_NR_AVDTP_STREAM_ENDPOINTS 1 #define MAX_NR_AVRCP_CONNECTIONS 2 #define MAX_NR_BNEP_CHANNELS 1 #define MAX_NR_BNEP_SERVICES 1 #define MAX_NR_BTSTACK_LINK_KEY_DB_MEMORY_ENTRIES 2 #define MAX_NR_GATT_CLIENTS 1 #define MAX_NR_HCI_CONNECTIONS 2 #define MAX_NR_HID_HOST_CONNECTIONS 1 #define MAX_NR_HIDS_CLIENTS 1 #define MAX_NR_HFP_CONNECTIONS 1 #define MAX_NR_L2CAP_CHANNELS 4 #define MAX_NR_L2CAP_SERVICES 3 #define MAX_NR_RFCOMM_CHANNELS 1 #define MAX_NR_RFCOMM_MULTIPLEXERS 1 #define MAX_NR_RFCOMM_SERVICES 1 #define MAX_NR_SERVICE_RECORD_ITEMS 4 #define MAX_NR_SM_LOOKUP_ENTRIES 3 #define MAX_NR_WHITELIST_ENTRIES 16 #define MAX_NR_LE_DEVICE_DB_ENTRIES 16 // 限制栈使用的ACL/SCO缓冲区数量,避免cyw43共享总线过载 #define MAX_NR_CONTROLLER_ACL_BUFFERS 3 #define MAX_NR_CONTROLLER_SCO_PACKETS 3 // 启用并配置HCI控制器到主机的流控制,避免cyw43共享总线过载 #define ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL #define HCI_HOST_ACL_PACKET_LEN 1024 #define HCI_HOST_ACL_PACKET_NUM 3 #define HCI_HOST_SCO_PACKET_LEN 120 #define HCI_HOST_SCO_PACKET_NUM 3 // 基于Flash扇区接口的TLV实现链路密钥数据库和LE设备数据库 #define NVM_NUM_DEVICE_DB_ENTRIES 16 #define NVM_NUM_LINK_KEYS 16 // 不为btstack分配malloc,因此使用固定大小的ATT数据库 #define MAX_ATT_DB_SIZE 512 // BTstack HAL配置 #define HAVE_EMBEDDED_TIME_MS // 将btstack_assert映射到Pico SDK的assert() #define HAVE_ASSERT // 部分USB适配器对HCI重置的响应时间更长(如BCM20702A) #define HCI_RESET_RESEND_TIMEOUT_MS 1000 #define ENABLE_SOFTWARE_AES128 #define ENABLE_MICRO_ECC_FOR_LE_SECURE_CONNECTIONS //#define HAVE_BTSTACK_STDIN // 为了在115200波特率的HCI dump下仍能运行音频演示,截断长ACL数据包 //#define HCI_DUMP_STDOUT_MAX_SIZE_ACL 100 #ifdef ENABLE_CLASSIC #define ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE #endif #define HAVE_MALLOC #endif // _PICO_BTSTACK_BTSTACK_CONFIG_H
内容的提问来源于stack exchange,提问作者BoomFlame
相关产品推荐
相关产品推荐

