Lotlab / nrf52-keyboard

A ble keyboard firmware using nrf52810/52832
Other
411 stars 262 forks source link

蓝牙设备从WINDOWS中删除后,再次匹配蓝牙,无法发现该设备 #113

Closed jackie-weiwei closed 2 years ago

jackie-weiwei commented 2 years ago

您好,我是在IKBC POKER II的键盘上改装的,加装了E73 的NRF52832 蓝牙模块。 我从keyboard/template复制了一份,生成了一个IKBC的目录,config.h 如下: `

pragma once

include

/ USB和蓝牙的显示参数 / // USB的VID和PID,自行修改

define VENDOR_ID 0xEFCD / USB VID /

define PRODUCT_ID 0xCDEF / USB PID /

// 配置协议使用的VID和PID,自行修改。ID组合不得重复。

define CONF_VENDOR_ID 0xABCD / 配置协议使用的VendorID /

define CONF_PRODUCT_ID 0xDCBA0 / 配置协议使用的ProductID /

define DEVICE_VER 0x0000 / 硬件版本 /

define MANUFACTURER "Jackieron" / 硬件制造商,用于USB和蓝牙显示 /

define PRODUCT "IKBC Poker II" / 硬件名称,用于USB和蓝牙显示 /

//#define MACADDRSEPRATOR '' / 蓝牙名称后地址的分隔符。若不设置则不显示蓝牙名称后面的地址 /

/ USB HID report parameter /

define KEYBOARD_EPSIZE 8 / 键盘上传端点大小,请不要修改 /

define NKRO_EPSIZE 28 / 键盘NKRO端点大小,请不要修改 /

// 定义Bootmagic/Bootcheck按键 //#define BOOTMAGIC_KEY_BOOT KC_U / 开机 / //#define BOOTMAGIC_KEY_ERASE_BOND KC_E / 删除所有绑定 /

// 键盘省电参数

define SLEEP_SLOW_TIMEOUT 15 // 键盘闲置多久后转入慢速扫描模式 (s)

define SLEEP_OFF_TIMEOUT 600 // 键盘闲置多久后转入自动关机 (s)

define KEYBOARD_SCAN_INTERVAL 1 // 键盘最小时间单位TICK (ms)

define KEYBOARD_FAST_SCAN_INTERVAL 10 // 通常模式下,多久扫描一次键盘 (ms)

define KEYBOARD_SLOW_SCAN_INTERVAL 100 // 慢速模式下,多久扫描一次键盘 (ms)

define LED_AUTOOFF_TIME 5 / LED自动熄灭时长(s),设为0则不自动熄灭 /

// 键盘额外功能

define DYNAMIC_TX_POWER / 启用自动发射功率调整 /

//#define PASSKEY_REQUIRED / 需要输入配对码 /

define ENABLE_WATCHDOG / 启用看门狗 /

//#define HIGH_TX_POWER / 更改发射功率到+4dBm /

define MULTI_DEVICE_SWITCH /启用多设备切换 /

define KEYMAP_STORAGE / 启用keymap存储 /

// #define MACRO_BLOCKING_MODE / 在宏播放时禁用其他按键输入 /

define MACRO_STORAGE / 启用宏存储功能 /

define CONFIG_STORAGE / 启用配置存储功能 /

define BUTTONLESS_DFU / 启用免按钮DFU /

// #define DEBUG_SKIP_PWRON_CHECK / 直接开机而跳过开机条件检测,用于调试 /

/ TMK固件内置功能 / / disable action features / //#define NO_ACTION_LAYER //#define NO_ACTION_TAPPING //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION

/ Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap /

define LOCKING_SUPPORT_ENABLE

/ Locking resynchronize hack /

define LOCKING_RESYNC_ENABLE

/ key combination for command /

define IS_COMMAND() ( \

keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))

// LED 配置

define LED_NUM 22

define LED_CAPS 21

define LED_SCLK 23

define LED_POSITIVE // LED上拉驱动

// #define LED_NO_DEINIT // 不要deinit端口,可以避免部分IO灯光无法关闭的问题

// Bootloader 指示灯

define LED_DFU_INIT 22

define LED_DFU_START 23

define LED_DFU_FINISH 24

define LED_DFU_POSITIVE // LED上拉驱动

// 多用途 Bootloader 按钮

define NRF_BL_DFU_MULTI_ROLE_BTN 21

// USB UART 传输配置 //#define HAS_USB // 启用与CH554的通信支持

define UART_RXD 17 // UART_RX口IO

define UART_TXD 18 // UART_TX口IO

define UART_DET 19 // UART 检测引脚,若此脚被拉低,则说明USB正在工作。若不配置则使用RX口作为检测引脚

define UART_BAUDRATE NRF_UART_BAUDRATE_115200 // 通信波特率,请不要修改

// 电量检测配置

define BATTERY_ADC_PIN NRF_SAADC_INPUT_AIN0 // 电量检测引脚

// 充电检测配置

define PIN_CHARGING !UCC1 // CH554的充电检测。当UCC1拉低时表示正在充电。若不配置则禁用USB下发充电事件

define PIN_STANDBY !UCC2 // CH554的充电检测。当UCC2拉低时表示充电完成。若不配置则只使用PIN_CHARGING作为是否充电的检测标志

// 按键阵列配置

define MATRIX_ROWS 9 / 硬件阵列行数 /

define MATRIX_COLS 8 / 硬件阵列列数 /

static const uint8_t row_pin_array[MATRIX_ROWS] = {20, 19, 18, 17, 16, 15, 14, 13, 11}; static const uint8_t column_pin_array[MATRIX_COLS] = {3, 4, 5, 6, 7, 8, 9, 10};

define ROW_IN // 键盘阵列的二极管方向是从COL->ROW

/ define if matrix has ghost / // #define MATRIX_HAS_GHOST / 按键阵列是否出现Ghost Key,若没有加二极管则需要启用这个项目 /

define DEBOUNCE 5 / 硬件消抖次数,设置为0则不消抖 /

define MATRIX_SCAN_DELAY_CYCLE 36 / 按键扫描等待IO稳定的延时时长 /

// 板载调试器设置

define SWD_CLK_IO T2EX

define SWD_CLK_MASK bT2EX

define SWD_CLK_PORT P1

define SWD_DAT_IO T2

define SWD_DAT_MASK bT2

define SWD_DAT_PORT P1

` 编译、烧写成功后,可以匹配到该设备。当从蓝牙设备中删该设备,再次匹配则无法发现该设备,请问一下如何解决这个问题,谢谢!

jackie-weiwei commented 2 years ago

const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { { {KC_LCTRL, KC_FN0, KC_LALT, KC_8, KC_9, KC_0, KC_MINS, KC_BSPACE}, {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7}, {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U}, {KC_NO, KC_NO, KC_EQL, KC_I, KC_O, KC_P, KC_LBRC, KC_BSLS}, {KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J}, {KC_NO, KC_NO, KC_RBRC, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT}, {KC_LSHIFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M}, {KC_NO, KC_NO, KC_SPACE,KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_NO}, {KC_NO, KC_NO, KC_NO, KC_RALT, KC_LEFT, KC_DOWN, KC_NO, KC_RIGHT} }, { {KC_LCTRL, KC_FN0, KC_LALT, KC_F8, KC_F9, KC_F10, KC_F11, KC_BSPACE}, {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7}, {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U}, {KC_NO, KC_NO, KC_F12, KC_I, KC_O, KC_P, KC_LBRC, KC_BSLS}, {KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J}, {KC_NO, KC_NO, KC_RBRC, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT}, {KC_LSHIFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M}, {KC_NO, KC_NO, KC_SPACE,KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_NO}, {KC_NO, KC_NO, KC_NO, KC_RALT, KC_LEFT, KC_DOWN, KC_NO, KC_RIGHT} }, }; 另外,还有一个问题,最后两列按键不生效,我用这个固件:https://github.com/Jasonbroker/BLEKeyboard 测试 都是正常的,不知道是不是咱们这个固件里使用了13和11引脚?

jim-kirisame commented 2 years ago
  1. 关于删除后无法重新配对的问题:请清空键盘内部绑定信息,方法是开机时按住Space+E;
  2. 11和13脚请自行检查硬件是否占用,并且确认芯片型号是否正确,NFC功能是否禁用等。
jackie-weiwei commented 2 years ago
  1. 关于删除后无法重新配对的问题:请清空键盘内部绑定信息,方法是开机时按住Space+E;
  2. 11和13脚请自行检查硬件是否占用,并且确认芯片型号是否正确,NFC功能是否禁用等。

您好,请问一下,禁用NFC后,是不是要编译协议栈? 我是通过 在config.h文件中 加入#define CONFIG_NFCT_PINS_AS_GPIOS来禁用的,测试好象不生效。 我开启 BOOTMAGIC_ENABLE = yes # 启用Bootmagic 以后,搜不到蓝牙信号。

jim-kirisame commented 2 years ago

需要,请擦除全片后重新烧录。

我们建议使用新的Bootcheck代替老的Bootmagic。

jackie-weiwei commented 2 years ago

需要,请擦除全片后重新烧录。

我们建议使用新的Bootcheck代替老的Bootmagic。

协议栈不知道怎么编译 好尴尬 @jim-kirisame Bootcheck代替Bootmagic 是指(BOOTMAGIC_ENABLE = no # 启用Bootmagic BOOTCHECK_ENABLE = yes # 启用Bootchek )这样设置吗?

jim-kirisame commented 2 years ago

make flash_softdevice

jackie-weiwei commented 2 years ago

make flash_softdevice

@jim-kirisame 搞定了,可以用了。不过还存在一个小问题:从WINDOWS中删除设备后,不能直接清空键盘内部绑定信息,必须断电再通电,然后SPACE + U + E 一起按住,才能清空绑定信息。清空绑定信息后,再次匹配设备,连接成功后,设备在15秒左右会自动断开,此时再断电,通电后,即可正常使用了。小瑕疵,凑合用吧。 非常感谢大佬的指点,感谢,感谢!!!