尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

QMK 固件中的 Kitten Paw 键盘移植指南:2016 版 Bathroom Epiphanies 控制器的构建、刷写与自定义

QMK 固件中的 Kitten Paw 键盘移植指南:2016 版 Bathroom Epiphanies 控制器的构建、刷写与自定义 QMK 固件中的 Kitten Paw 键盘移植指南2016 版 Bathroom Epiphanies 控制器的构建、刷写与自定义【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware本指南聚焦 QMK Firmware 仓库中keyboards/bpiphany/kitten_paw目录所承载的 Kitten Paw 键盘支持。Kitten Paw 是 Bathroom Epiphaniesbpiphany于 2016 年推出的控制器 PCB用于替换成品键盘的主控而本目录下的 readme.md、keyboard.json、matrix.c、config.h 与 rules.mk 共同构成了该键盘在 QMK 中的完整移植。读完本文你将掌握Kitten Paw 的硬件与固件背景、仓库中配置的数据结构、其独特的 8×18 自定义矩阵扫描实现以及如何构建、刷写并自定义属于你自己的键位映射。Kitten Paw 键盘与固件背景Bathroom Epiphaniesbpiphany是一家位于瑞典的控制器板设计者其产品线以可替换成品键盘主控著称bpiphany 目录说明 指出其控制器板作为现成键盘的可替换组件销售。Kitten Paw 正是这一思路下的产物它是 2016 年修订版的替换控制器仓库中明确记录This is the firmware for the 2016 revision of the Kitten Paw controller by Bathroom Epiphanies. Most of the boilerplate code is the work of BathroomEpiphanies.换言之Kitten Paw 固件的大部分样板代码源自 BathroomEpiphanies 本人的工作QMK 社区在此基础上完成了移植与维护。从仓库数据可以确认该键盘的完整身份信息见 keyboard.json项目值键盘名称Kitten Paw厂商bpiphany维护者QMK CommunityVID0xFEEDPID0x6050设备版本1.0.4主控ATMega32U2引导加载程序atmel-dfu启用功能鼠标键、扩展键、控制台、命令行Command禁用功能Bootmagic社区布局fullsize_ansi值得注意的是readme 中特别注明NKRO 目前无法工作6KRO 已足够使用这意味着当前移植默认未启用 NKROn-key rollover而是依赖标准 HID 报文的 6 键无冲突能力。这是移植作者在 readme.md 中留下的明确取舍说明属于当前仓库的既定事实。全尺寸 ANSI 布局与 8×18 矩阵的数据结构布局定义LAYOUT 与 LAYOUT_fullsize_ansiKitten Paw 是一块全尺寸Fullsize键盘控制器键盘扫描矩阵为 8 行 × 18 列见 config.h 中MATRIX_ROWS 8与MATRIX_COLS 18。keyboard.json 中定义了两个布局LAYOUT默认布局名与LAYOUT_fullsize_ansi社区标准布局两者按键物理位置完全一致——区别仅在于空格行与 Shift 行个别键帽宽度不同例如LAYOUT中[2,13]为 1.25u 宽、LAYOUT_fullsize_ansi中为 2.25u后者用于与其他全尺寸 ANSI 键盘共享键位映射文件。每个按键条目用matrix坐标行、列与x/y物理坐标描述例如{matrix: [6, 9], x: 0, y: 0}, // Esc {matrix: [2, 1], x: 13, y: 1.5, w: 2}, // Backspace2u 宽 {matrix: [6, 10], x: 3.75, y: 5.5, w: 6.25} // 空格6.25u 宽w/h字段用于表达键帽宽度/高度这正是 QMK 数据驱动配置data_driven_config.md的标准写法keyboard.json 本身即数据驱动迁移的产物替代了旧的info.json加keymaps.c头文件组合。默认键位映射默认键位映射位于 keymaps/default/keymap.c定义了单层DEFAULT布局完整覆盖了 108 键全尺寸键盘的功能区、主键区、编辑键区与数字小键盘const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] { [DEFAULT] LAYOUT( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SCRL,KC_PAUS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NUM,KC_PSLS,KC_PAST,KC_PMNS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT) };键位布局采用标准 US ANSI 全尺寸排列第一行功能键与 Print Screen/Scroll Lock/Pause 键第二至四行为字母与数字主键区含 Backspace、Enter 双排键位第五行为 Shift 行注意KC_NUBS即\反斜杠键第六行为 Ctrl/Win/Alt 与空格键组成的修饰键行右侧依次为 RAlt、RGUI、App、RCtrl。编辑键区Insert/Home/PageUp、Delete/End/PageDown、方向键与数字小键盘含 NumLock、小键盘 Enter、加减乘除与小数点均有完整映射。由于该布局顶层仅声明了DEFAULT一个层键位映射非常简洁适合作为学习数据驱动布局文件与自定义矩阵键盘如何协同的范例。若需要加入层切换可在枚举中追加层名并使用MO(layer)、LT(layer, kc)等层键码QMK 的层功能说明见 feature_layers.md。自定义矩阵扫描硬件原理与源码解读Kitten Paw 的独特之处在于其矩阵扫描并非 QMK 通用 GPIO 扫描而是采用了定制实现。rules.mk 通过如下两行声明了这一点CUSTOM_MATRIX yes SRC matrix.cCUSTOM_MATRIX yes告知 QMK 构建系统使用键盘自带的矩阵实现而不是默认矩阵SRC matrix.c则把 matrix.c 编入固件。这样做的原因是Kitten Paw 的 18 列并非全部由 MCU 引脚直接驱动而是借助一枚74HC154 4 线转 16 线低电平有效译码器扩展列选通能力。matrix.c 顶部注释对此有清晰说明These rows uses one 74HC154 4 to 16 bit demultiplexer (low active), together with 2 rows driven directly from the micro controller, to control the 18 rows. The rows are driven from pins B6,5,4,3,2,1,0.引脚分配与初始化从 matrix.c 的注释与代码可以还原完整引脚方案行输入引脚8 行PC7, PD5, PD3, PD1, PC2, PD6, PD4, PD2作为输入并启用内部上拉PORTC | 0b10000100、PORTD | 0b01111110配合DDR清零read_rows()中低电平表示按键按下返回对应位 1。列输出引脚18 列PB0 ~ PB6共 7 位其中高 4 位B6..B3作为 74HC154 译码器的选择输入、部分低位组合用于直接驱动。select_col()为每个列号写入一段特定的 PORTB 位模式case 0 到 case 17例如case 0: PORTB (PORTB ~0b01111111) | 0b01100100;。matrix_init()首先配置 DDR 与上拉电阻随后将matrix与matrix_debouncing缓冲清零最后调用弱符号钩子matrix_init_kb()→matrix_init_user()允许键盘级或用户级代码在扫描开始前做额外初始化。扫描、去抖动与报告钩子matrix_scan()实现了完整的逐列扫描 去抖动流程对每一列调用select_col(col)选通该列_delay_us(3)等待信号稳定read_rows()一次性读回 8 行状态逐行与matrix_debouncing缓冲比对若某位发生变化则翻转缓冲位并把debouncing计数器重置为DEBOUNCE未定义时默认 5即 5 个扫描周期若debouncing计数器递减到 0才把去抖动缓冲整体提交到matrix状态从而过滤按键抖动最后调用弱符号matrix_scan_kb()→matrix_scan_user()供上层在每次扫描后挂接自定义逻辑。matrix_is_on(row, col)与matrix_get_row(row)分别提供按键状态查询与整行读取接口matrix_print()则以二进制形式打印全部 8 行状态用于调试矩阵接线。这套matrix_init_kb/matrix_scan_kb/matrix_init_user/matrix_scan_user的弱符号钩子机制是 QMK 键盘级与用户级自定义的标准扩展点官方说明见 custom_matrix.md 与 custom_quantum_functions.md。与之形成对比的是同目录下其他键盘如 ghost_squid、frosty_flake它们同样针对各自 PCB 布线提供matrix.c可见定制矩阵扫描是 bpiphany 系列控制器的共同特征。指示灯配置与功能开关keyboard.json 中定义了三个键盘指示灯引脚on_state: 0表示低电平点亮常见于共阳极 LED 设计indicators: { caps_lock: C6, num_lock: B7, scroll_lock: C5, on_state: 0 }同时qmk.locking段启用了 Caps Lock 等锁定键的软件重同步enabled: true, resync: true确保锁定状态在多次触发间保持一致features段则启用mousekey鼠标键、extrakey媒体/系统键、console控制台输出与commandQMK 命令行调试功能并显式关闭bootmagic。若想缩减固件体积config.h 中还保留了NO_DEBUG、NO_PRINT、NO_ACTION_LAYER、NO_ACTION_TAPPING、NO_ACTION_ONESHOT等注释掉的开关可供按需启用这与 QMK 官方 config_options.md 中关于功能裁剪的说明一致。构建与刷写构建环境构建 Kitten Paw 固件需要先在本地完成 QMK 构建环境搭建。官方推荐流程包括安装依赖与拉取 qmk_firmware 仓库具体步骤可参考 getting_started_introduction.md 与 newbs.md新手完整指南。QMK 提供跨平台环境配置文档getting_started_docker.md 覆盖 Docker 方式构建参数的一般性说明见 getting_started_make_guide.md。编译命令在完成环境搭建后使用如下命令编译默认键位映射这是 readme.md 给出的标准用法make bpiphany/kitten_paw:default命令格式为make keyboard:keymap其中bpiphany/kitten_paw是键盘路径对应keyboards/bpiphany/kitten_paw目录default是键位映射名对应 keymaps/default。若要编译并一次性刷写可在目标后追加:flash目标make bpiphany/kitten_paw:default:flash进入引导加载程序与刷写Kitten Paw 采用atmel-dfu引导加载程序见 keyboard.json 的bootloader字段。DFU 引导的常见进入方式包括按下 PCB 上的物理复位/引导按钮进入 DFU 模式在键位映射中放置QK_BOOT键码按下后复位进入 DFU。进入 DFU 模式后make ...:flash会调用 flashing.md 中描述的 DFU 刷写工具如dfu-programmer写入固件。刷写前请确认操作系统已正确安装对应驱动Windows 用户常需借助 Zadig 安装 WinUSB 驱动见 driver_installation_zadig.md。完整的刷写方法论与排错建议可参阅 newbs_flashing.md。自定义键位映射Kitten Paw 当前只内置了default一个键位映射。你可以参考 keymaps/default/keymap.c 的写法在keymaps/下新建目录例如keymaps/mine/放入自己的keymap.c然后以make bpiphany/kitten_paw:mine编译。键码的完整清单见 keycodes.md 与 keycodes_basic.md层、Tap-Hold、一键触发等进阶能力分别见 feature_layers.md、mod_tap.md、one_shot_keys.md。若你希望以 JSON 方式声明键位映射可参考 newbs_building_firmware_configurator.md 与 reference_info_json.md。仓库内的扩展阅读路径键盘全部源码与配置keyboards/bpiphany/kitten_paw含 keyboard.json、matrix.c、config.h、rules.mk同厂商其他控制器移植用于对照定制矩阵写法keyboards/bpiphany/ghost_squid、keyboards/bpiphany/frosty_flake、keyboards/bpiphany/hid_liber自定义矩阵实现指南custom_matrix.md数据驱动配置规范data_driven_config.md 与 reference_info_json.md构建与刷写全流程getting_started_make_guide.md、flashing.md、newbs_flashing.md小结Kitten Paw 移植展示了 QMK 中替换成品键盘主控类项目的典型结构一份 keyboard.json 承载键盘身份、USB 描述符、指示灯与布局数据一份 matrix.c 针对 PCB 上 74HC154 译码器实现 8×18 定制扫描一份 config.h 与 rules.mk 完成尺寸与构建定制。理解这些文件之间的关系你不仅能顺利编译刷写 Kitten Paw 固件也能将其模式迁移到自己的自定义矩阵键盘项目中。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表