nrf52-keyboard
Lotlab 开源固件,支持双模。
具体安装过程可参考 .travis.yml
环境
SDCC
用于编译 CH554
GCC
用于编译 NRF52832
nrfutil
用于生成DFU包
1 | # 安装git make和sdcc编译工具。 |
SDK
信驰达的文档中使用nRF5_SDK_15.3.0_59ac345
1
2wget http://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip
unzip -q nRF5_SDK_15.3.0_59ac345.zip
代码
1 | git clone https://github.com/Lotlab/nrf52-keyboard.git |
安装
1 | # 构建配置文件 |
配置
config
新建 keyboard 子文件夹,配置 config.h
1 | // USB VID |
- 配置参考 keyboard/lkb-core/config.h
VID
作者ID不要和别的作者重复PID
作者名下产品ID不要重复- 可根据实际使用情况调整键盘省电参数
- 自动发射功率调整并不好用,高发射功率更稳定,尤其是在复杂无线设备环境里。
- 不启用宏存储功能是为了在配置中写宏,如果启用宏存储
在keymap_plain.c
中定义的宏函数action_get_macro
会导致编译报错
也许有更好的宏配置方式。。。 - USB串口
RX
接UART_TXD
,TX
接UART_RXD
keymap
keymap_common.h
keymap_plain.c
基础键位映射可以通过qmkbuilder
生成源代码
https://kbfirmware.com/
https://github.com/ruiqimao/qmkbuilder
https://git.code.tencent.com/lotkb/lotkb-builder
键值可以参考https://github.com/tmk/tmk_core/blob/master/doc/keycode.txt
https://github.com/BurningBright/nrf52-keyboard/tree/ergo88/keyboard/ergo88-left
https://github.com/BurningBright/nrf52-keyboard/tree/ergo88/keyboard/ergo88-right
layers
通过定义多层、默认层、开关层、瞬开层和透明按键,可以高度自定义键盘。
层从大到小遍历,在所有开启的层中,高优先级的层中的按键会覆盖掉低优先级层的按键。
layer: 0-31
on: { ON_PRESS | ON_RELEASE | ON_BOTH }
操作 | 描述 | 函数 |
---|---|---|
开启层 | 指定层设置为开启 | ACTION_LAYER_ON(layer, on) |
关闭层 | 指定层设置为关闭 | ACTION_LAYER_OFF(layer, on) |
反转层状态 | 指定层的状态反转 | ACTION_LAYER_TOGGLE(layer) |
仅开启层 | 指定层设置为开启,并将其他所有层设置为关闭 | ACTION_LAYER_SET_CLEAR(layer) |
瞬开或按键 | 按住将指定层开启,松开后关闭; 快速按下松开则触发指定按键 |
ACTION_LAYER_TAP_KEY(layer, key) |
瞬时开启 | 按住将指定层开启,松开后关闭 | ACTION_LAYER_MOMENTARY(layer) |
瞬时仅开启/清空层 | 按住仅开启指定层,松开后关闭所有层 | ACTION_LAYER_SET_CLEAR(layer) |
层状态
和默认层状态
共同决定了一个层的开启状态。
层状态 | 默认层状态 | 层的实际状态 |
---|---|---|
关闭 | 关闭 | 关闭 |
关闭 | 开启 | 开启 |
开启 | 关闭 | 开启 |
开启 | 开启 | 开启 |
键盘在启动时,会将第1层的默认层状态设置为开启。
所有的层(包括第1层)的层状态设置为关闭。
此时只有第一层保持开启,其他层都为关闭。
https://keyboard.lotlab.org/help
Keymap framework - how to define your keymap
macro
宏用于自定义一连串键盘操作
函数 | 描述 |
---|---|
I() | 设置每个按键之间的间隔时间 |
D() | 按下某个键 |
U() | 松开某个键 |
T() | 按下并松开某个键 |
W() | 等待指定时间(ms) |
SM() | 将当前修饰键状态暂存 |
RM() | 将之前暂存的修饰键状态恢复 |
CM() | 将所有修饰键状态设置为未按下 |
在 keymap_plain.c
中自定义宏执行函数
1 | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) |
构建
1 | cd keyboard/lkb-core |
烧录
1 | # 恢复 |
手机APP nRF Connect
空中升级固件(设备名DfuTarg)nrf52_kbd_4384d09c.zip
LotKB固件编译移植指南
https://github.com/Lotlab/nrf52-keyboard
nRF52832 DFU空中升级
NRF52832 DFU功能
Nordic nRF51/nRF52开发环境搭建
Nordic nRF51/nRF52开发流程说明
BlueMicro_BLE
固件意外的好用,支持主从一体,在Mac、Linux上兼容性好。
虽然不是TMK,但也支持层、层操作、宏,自定义程度不比TMK差。
bootloader
由于PCB设计的时候占用21脚,如果烧录 Adafruit Feather nRF52
默认bootloader会导致左手第一行失效。
为了不飞线解决这个问题,需要自行修改bootloader源码,把reset针脚改掉。
NordicSemiconductor/nrfx
https://github.com/adafruit/Adafruit_nRF52_Bootloader
1 | pip install intelhex |
修改 nrfx/mdk/system_nrf52.c
1 | // line:193 |
编译1
make BOARD=feather_nrf52832
得到合并 softdevice 和 bootloader 后的基础固件feather_nrf52832_bootloader-0.3.2-170-g7b86264-dirty_s132_6.1.1.hex
安装
编译需要用到 Arduino
下载安装 Arduino IDE 1.8.xx
安装 BSP:
- 在
Preferences
中附加开发板管理器网址
输入:https://www.adafruit.com/package_adafruit_index.json
- 重启 IDE
- 在
工具
->开发板
->开发板管理
中选择安装Adafruit nRF52 by Adafruit
BSP 安装完成后,在 开发板
中选择 Adafruit Feather nRF52
安装过程中,如果出现 ARM GCC 安装失败
可以到ARM官网下载 gcc-arm-none-eabi-9-2019-q4-major-xxx 手动安装
MacOS解压目录: ~/Library/Arduino15/packages/adafruit/tools/arm-none-eabi-gcc/9-2019q4
bluefruit-nrf52-feather-learning-guide
配置
bsp设置
- macOS : ~/Library/Arduino15/packages/adafruit/hardware/nrf52
- Linux : ~/.arduino15/packages/adafruit/hardware/nrf52
- Windows: %APPDATA%\Local\Arduino15\packages\adafruit\hardware\nrf52
修改 variants/feather_nrf52832/variant.h
1 | // line:90 |
默认PIN_SERIAL_RX
占用8针脚,会导致左第三行、右第六行失效。
https://github.com/adafruit/Adafruit_nRF52_Arduino
config
参考 firmware/keyboards
中的其他键盘目录结构,复制一份
由于 ERGO88
,左右板针脚并不对称,需要把定义在 hardware_config.h
中的MATRIX_ROW_PINS
、 MATRIX_COL_PINS
、 VBAT_PIN
迁移至 keyboard_config.h
中
1 |
|
keymaps
HID键值可参考 firmware/hid_keycodes.h
高级键值可参考 firmware/advance_keycodes.h
在 firmware/keyboards/Ergo88/keymaps/3layer/keymap.h
中
定义层序号、键值别名、组合键值定义、宏值定义、函数名定义等
在 firmware/keyboards/Ergo88/keymaps/3layer/keymap.c
中定义具体映射
第一层 WINDOWS
基础按键 + 复制、粘贴、查找、选中一行
第二层 MACOS
WINDOWS的蒙板层,通过透明按键实现
交换GUI
ALT
位置,重新定义复制、粘贴、查找、选中一行,兼容MacOS
第三层 功能层
亮度、音量、鼠标、小键盘、常用命令宏、层切换开关
https://github.com/BurningBright/BlueMicro_BLE/tree/ergo88/firmware/keyboards/Ergo88
构建
参数按以下层级排列,也可以用命令行交互输入
keyboard : keymap : part : model : version
1 | cd BlueMicro_BLE/build/macos/ |
烧录
1 | # 恢复 |