免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

QMK Firmware 2022 年 2 月 26 日破坏性变更解读:1kHz 轮询、分体指点设备与键盘目录重构实战指南

QMK Firmware 2022 年 2 月 26 日破坏性变更解读:1kHz 轮询、分体指点设备与键盘目录重构实战指南 QMK Firmware 2022 年 2 月 26 日破坏性变更解读1kHz 轮询、分体指点设备与键盘目录重构实战指南【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmwareQMK Firmware 作为面向 Atmel AVR 与 Arm USB 系列的开源键盘固件在每个开发周期都会通过 Breaking Changes破坏性变更机制整合大量核心改动。本文以官方docs/ChangeLog/20220226.md变更日志为主体逐项解析 2022 年 2 月 26 日这一批变更中最值得关注的特性——默认 1kHz USB 轮询率、分体键盘指点设备支持、旧宏系统移除、bootloader 强制指定以及覆盖上百款键盘的目录迁移表并结合当前仓库源码给出可验证的实现细节帮助开发者平滑升级自己的键位与键盘工程。变更周期背景为什么需要关注 Breaking ChangesQMK 采用固定节奏的合并窗口开发分支develop上的破坏性改动会被集中到特定时间点统一合入master避免用户每次拉取更新都被零散的 API 变动打断。本变更日志对应 2022 年 2 月 26 日的合并窗口其中凡是标注需要用户操作Changes Requiring User Action的内容都意味着键盘厂商或普通用户在升级后可能遇到编译失败或行为变化需要主动修改配置。显著新特性默认 USB 轮询率统一为 1kHz本周期最重要的行为变化之一跨所有支持平台的默认 USB 轮询率被统一对齐为 1ms/1kHz。此前不同平台LUFA、V-USB、ChibiOS 等对轮询间隔的默认取值并不一致现在统一收敛到 1ms。从源码角度验证当前仓库中轮询间隔由USB_POLLING_INTERVAL_MS宏控制tmk_core/protocol/usb_descriptor.c 中定义#ifndef USB_POLLING_INTERVAL_MS #define USB_POLLING_INTERVAL_MS 1并随后在多处 HID 接口描述符如PollingIntervalMS字段中引用该值见 usb_descriptor.ctmk_core/protocol/vusb/vusb.c 采用同样的#ifndef ... #define USB_POLLING_INTERVAL_MS 1保护并写入端点描述符的bInterval字段vusb.c。两个实现都使用#ifndef包裹意味着用户仍可在键盘或键位的配置文件里覆盖该默认值。1kHz 轮询对游戏玩家意味着更低的按键到主机的传输延迟对一般输入体验也有感知层面的提升——这也是变更日志中Lets go gamers!调侃的由来。显著新特性分体键盘的指点设备支持第二个头号特性是指点设备Pointing Device如轨迹球、触摸板、光学传感器现在可以跨分体键盘共享既支持整个分体键盘只接一个指点设备也支持左右两侧各接一个。配置入口在键位或键盘的rules.mk中启用指点设备与分体共享POINTING_DEVICE_ENABLE yes POINTING_DEVICE_DRIVER pmw3360 SPLIT_POINTING_ENABLE yes当前仓库 builddefs/common_features.mk 维护了合法的指点设备驱动类型白名单包括adns5050、adns9800、analog_joystick、azoteq_iqs5xx、cirque_pinnacle_i2c、cirque_pinnacle_spi、paw3204、paw3222、pmw3320、pmw3325、pmw3360、pmw3389、pimoroni_trackball与custom若填写的驱动不在白名单内构建系统会抛出POINTING_DEVICE_DRIVER... is not a valid pointing device type的错误。左右侧归属与任务节流分体键盘上指点设备可配置为属于左侧或右侧分别通过POINTING_DEVICE_LEFT与POINTING_DEVICE_RIGHT宏声明。其底层同步逻辑位于 quantum/split_common/transactions.c主控master侧通过GET_POINTING_CHECKSUM/GET_POINTING_DATA事务读取从机slave侧共享内存中的report_mouse_t报告从机侧则调用驱动get_report()采集数据后写入共享内存并附带 CRC8 校验供主控侧做校验和比对CPI每英寸计数同样支持跨侧同步。为保证低优先级传输不阻塞主循环本周期还引入了POINTING_DEVICE_TASK_THROTTLE_MS默认任务节流见 transactions.c分体传输按节流间隔调度。相关的分体事务 ID 在 quantum/split_common/transaction_id_define.h 中按POINTING_DEVICE_ENABLE SPLIT_POINTING_ENABLE条件编译。完整的配置选项请参阅 docs/features/pointing_device.md。需要用户操作的变化Changes Requiring User Action这一节是升级时必须逐条核对的部分任何一项遗漏都可能导致编译失败或行为不符合预期。旧宏系统与 action_function 被彻底移除长期处于废弃状态的MACRO()宏与action_get_macro回调体系在本周期被彻底移除对应 PR #16025 特性。升级建议若旧键位中还有action_get_macro函数或MACRO(...)键码请改用新版宏功能如M(0)配合process_record_user中的case M_0:分支涉及action_function()的键盘例如本周期顺带清理了 LFKeyboards 系列键盘见下方变更清单同样需要移除。未指定 bootloader 将直接产生构建错误此前若键盘未声明 bootloader构建系统会猜测或静默处理现在不再做任何假设键盘必须在以下两处之一显式声明在rules.mk中设置BOOTLOADER在info.json中设置bootloader字段。如果两者都缺失make将报错终止。仓库侧也有配套约束本周期还加入了custom作为info.json中合法的 bootloader 类型见变更清单 PR #16228并集中为一批遗漏声明的键盘补上了BOOTLOADERPR #16225、#16256。命令行工具侧qmk flash同样依赖键盘的 bootloader 配置若未指定默认使用该键盘构建系统里配置的 bootloader见 lib/python/qmk/cli/flash.py可通过qmk flash -b/--bootloader覆盖或用qmk flash -bl/--bootloaders列出可用的 bootloader 清单flash.py。键位信息查询命令qmk info也会显示键盘的 Bootloader 字段lib/python/qmk/cli/info.py。AdafruitBLE更名为BluefruitLE为给未来的蓝牙工作铺路AdafruitBLE集成被更名为BluefruitLE以便容纳 Adafruit 其他 BLE 产品。仍在键位中引用旧名称AdafruitBLE的用户需同步更新为BluefruitLE。键盘代码目录迁移重要完整对照表本周期进行了大规模键盘代码归位大量键盘从键盘根目录迁移到了厂商vendor/作者目录下。升级后若发现自己的键盘make找不到目标请优先在此表中查找新路径旧键盘名称新键盘名称6ballmaple_computing/6ball7skbsalicylic_acid3/7skb7splussalicylic_acid3/7splusacr60mechkeys/acr60adalyntominabox1/adalynajisai74salicylic_acid3/ajisai74aleth4225keys/aleth42alicia_cookibnuda/alicia_cookallison_numpadprototypist/allison_numpadallisonprototypist/allisonalu84mechkeys/alu84angel17kakunpc/angel17angel64/alphakakunpc/angel64/alphaangel64/rev1kakunpc/angel64/rev1arch_36obosob/arch_36bakeneko60kkatano/bakeneko60bakeneko65/rev2kkatano/bakeneko65/rev2bakeneko65/rev3kkatano/bakeneko65/rev3bakeneko80kkatano/bakeneko80barleycornyiancardesigns/barleycornbat43/rev1dailycraft/bat43/rev1bat43/rev2dailycraft/bat43/rev2bigseries/1keywoodkeys/bigseries/1keybigseries/2keywoodkeys/bigseries/2keybigseries/3keywoodkeys/bigseries/3keybigseries/4keywoodkeys/bigseries/4keybkfdrhigsby/bkfbusiness_card/alphakakunpc/business_card/alphabusiness_card/betakakunpc/business_card/betabutterstickgboards/butterstickc39maple_computing/c39cassette4225keys/cassette42chidorikagizaraya/chidorichiliydkb/chilichimera_ergoglenpickle/chimera_ergochimera_lsglenpickle/chimera_lschimera_orthoglenpickle/chimera_orthochimera_ortho_plusglenpickle/chimera_ortho_pluschoco60recompile_keys/choco60choc_tarokakunpc/choc_tarochristmas_treemaple_computing/christmas_treeclaw44/rev1dailycraft/claw44/rev1cocoa40recompile_keys/cocoa40comet46satt/comet46cu24capsunlocked/cu24cu75capsunlocked/cu75cu80capsunlocked/cu80/v1delilahrainkeebs/delilahdiverge3unikeyboard/diverge3divergetm2unikeyboard/divergetm2dozen0yynmt/dozen0dubba175drhigsby/dubba175eggmanqpockets/eggmanergo42biacco42/ergo42ergoarrowssalicylic_acid3/ergoarrowsergodash/miniomkbd/ergodash/miniergodash/rev1omkbd/ergodash/rev1ergodox_infinityinput_club/ergodox_infinityergotacogboards/ergotacoespectromechkeys/espectrofelixunikeyboard/felixfour_bangerbpiphany/four_bangerfreyrhnahkb/freyrgeminate60weirdo/geminate60georgigboards/georgigergogboards/gergogetta25salicylic_acid3/getta25ginghamyiancardesigns/ginghamgurindamibnuda/gurindamhalberdkagizaraya/halberdhecomi/alphatakashiski/hecomi/alphahid_liberbpiphany/hid_liberid67/default_rgbidobao/id67/default_rgbid67/rgbidobao/id67/rgbid80idobao/id80/v1id87idobao/id87/v1idoboidobao/id75/v1infinity60input_club/infinity60ivy/rev1maple_computing/ivy/rev1jisplit89salicylic_acid3/jisplit89jnaomaple_computing/jnaojust60ydkb/just60kagamidgetyynmt/kagamidgetkelowna/rgb64weirdo/kelowna/rgb64kprepublic/bm65hsrgb_isokprepublic/bm65hsrgb_iso/rev1kprepublic/bm68hsrgbkprepublic/bm68hsrgb/rev1k_typeinput_club/k_typelatin17rgblatincompass/latin17rgblatin47blelatincompass/latin47blelatin60rgblatincompass/latin60rgblatin64blelatincompass/latin64blelatin6rgblatincompass/latin6rgblatinpadblelatincompass/latinpadblelatinpadlatincompass/latinpadlaunchpad/rev1maple_computing/launchpad/rev1lck75lyso1/lck75le_chiffretominabox1/le_chiffrelefishelyso1/lefishelets_split_eh/ehmaple_computing/lets_split_eh/ehls_60weirdo/ls_60m3n3vanmatthewdias/m3n3vanmechmini/v1mechkeys/mechmini/v1mechmini/v2mechkeys/mechmini/v2meirawoodkeys/meirameishi2biacco42/meishi2meishibiacco42/meishiminidox/rev1maple_computing/minidox/rev1minimmatthewdias/minimmiorecompile_keys/miomodel_vmatthewdias/model_vmontexidobao/montex/v1nafudasalicylic_acid3/nafudanaiping/np64weirdo/naiping/np64naiping/nphhkbweirdo/naiping/nphhkbnaiping/npminilaweirdo/naiping/npminilanaked48salicylic_acid3/naked48naked60salicylic_acid3/naked60naked64salicylic_acid3/naked64namecard2x4takashiski/namecard2x4nebula12spaceholdings/nebula12nebula68bspaceholdings/nebula68bnebula68spaceholdings/nebula68niu_minikbdfans/niu_minink1novelkeys/nk1nk65novelkeys/nk65nk87novelkeys/nk87nknl7ensalicylic_acid3/nknl7ennknl7jpsalicylic_acid3/nknl7jpnomu30recompile_keys/nomu30novelpadnovelkeys/novelpadogurecdrhigsby/ogurecotaku_split/rev0takashiski/otaku_split/rev0otaku_split/rev1takashiski/otaku_split/rev1owl8dailycraft/owl8packratdrhigsby/packratpistachio_mprate/pistachio_mppistachio_prorate/pistachio_propistachiorate/pistachioplexus75checkerboards/plexus75pursuit40checkerboards/pursuit40qaztominabox1/qazquarkcheckerboards/quarkrabbit_capture_plankakunpc/rabbit_capture_planrainkeebrainkeebs/rainkeebreviung33reviung/reviung33reviung34reviung/reviung34reviung39reviung/reviung39reviung41reviung/reviung41reviung53reviung/reviung53reviung5reviung/reviung5reviung61reviung/reviung61runner3680/3x6omkbd/runner3680/3x6runner3680/3x7omkbd/runner3680/3x7runner3680/3x8omkbd/runner3680/3x8runner3680/4x6omkbd/runner3680/4x6runner3680/4x7omkbd/runner3680/4x7runner3680/4x8omkbd/runner3680/4x8runner3680/5x6_5x8omkbd/runner3680/5x6_5x8runner3680/5x6omkbd/runner3680/5x6runner3680/5x7omkbd/runner3680/5x7runner3680/5x8omkbd/runner3680/5x8scarletbandanawoodkeys/scarletbandanascythekagizaraya/scytheseigaihayiancardesigns/seigaihasetta21salicylic_acid3/setta21space_space/rev1qpockets/space_space/rev1space_space/rev2qpockets/space_space/rev2spiderisland/winry25tcwinry/winry25tcsplitreus62nacly/splitreus62squiggle/rev1ibnuda/squiggle/rev1standasideedi/standasidesteal_this_keyboardobosob/steal_this_keyboardstellahnahkb/stellasuihankey/alphakakunpc/suihankey/alphasuihankey/rev1kakunpc/suihankey/rev1suihankey/splitkakunpc/suihankey/splitthedogkeyboardkakunpc/thedogkeyboardthe_rulermaple_computing/the_rulertiger910weirdo/tiger910treadstone32marksard/treadstone32treadstone48/rev1marksard/treadstone48/rev1treadstone48/rev2marksard/treadstone48/rev2txuumatthewdias/txuuua62nacly/ua62underscore33/rev1tominabox1/underscore33/rev1underscore33/rev2tominabox1/underscore33/rev2vn66hnahkb/vn66wallabykkatano/wallabywantenqpockets/wantenwhitefoxinput_club/whitefoxwings42/rev1dailycraft/wings42/rev1wings42/rev1_extkeysdailycraft/wings42/rev1_extkeyswings42/rev2dailycraft/wings42/rev2yasuirainkeebs/yasuiyd60mqymdk/yd60mqyd68ydkb/yd68ymd75ymdk/ymd75ymd96ymdk/ymd96ymdk_np21ymdk/np21yureikkatano/yureizinc25keys/zinczinc/rev125keys/zinc/rev1zinc/reva25keys/zinc/reva这批迁移背后对应着大量的move ... into vendor folder系列 PR如 PR #15758 的 capsunlocked、#15760 的 mechkeys、#15783 的 novelkeys、#15788 的 input_club、#16040 的 gboards 等其动机是让键盘树按厂商/作者组织方便长期维护。目录迁移的同时本周期还清理了键盘代码中的父目录相对路径PR #16282从根上避免这类路径在重组时失效。核心改动新 MCU 支持与新增驱动新 MCUSTM32L432 与 STM32L442延续此前的支持节奏QMK 本轮新增了两款 STM32L4 系列 MCU 支持PR #16016。STM32L432 与 STM32L442 属于低功耗 Arm Cortex-M4 系列可运行在 80MHz 并具备丰富的 USB 外设适合对功耗有要求的便携键盘方案。新增 LED 驱动芯片核心新增了以下 LED 矩阵/ RGB 矩阵驱动芯片支持PR #14989IS31FL3742AIS31FL3743AIS31FL3745IS31FL3746A此外还为核心 LED Matrix 补上了IS31FL3733驱动PR #15088 目录下可用于高性能 RGB 键盘的量产与客制化方案。新增 GPIO 扩展/解复用驱动SN74x138三线转八线译码器demultiplexer驱动用于用更少的 MCU 引脚驱动更多矩阵列PR #16217mcp23018I2C GPIO 扩展芯片驱动被移入核心PR #15944并同步对齐了 pca9555 驱动的 API 风格PR #16277便于分体键盘扩展 IO。完整变更清单分类导读除上述重点外本周期还包含大量核心、CLI、键盘与修复类改动可按类别快速检索完整列表见 docs/ChangeLog/20220226.md核心Core数据驱动的新键盘子命令初版PR #12795、无变化的键盘报告不再发送给主机PR #14065、分体键盘 Custom Matrix Lite 支持PR #14674、新增sym_defer_pr去抖类型PR #14948、Combo 新配置项PR #15083、开漏 GPIO 支持PR #15282、cancel_key_lock函数PR #15321、MAGIC_TOGGLE_CONTROL_CAPSLOCKPR #15368、外部 SPI Flash 驱动PR #15419、PMW3360/PMW3389 光学传感器驱动增强PR #15431、#15740 等、高级 deferred_exec 框架PR #15579、RGB Matrix 从 EEPROM 重载PR #15923、Pixel Flow RGB 特效PR #15829等CLIdevelop分支的变更日志生成器改用 PR 标题、跳过列表中的代码格式化PR #15537、#16215键盘Keyboards大量目录迁移如 Reviung 归入 reviung/、winry25tc 移入 winry/、ymd 系列归入 ymdk/、IDOBAO 系列归入 idobao/ 等、Durgod 提高扫描率、GMMK Pro 新增键位、ergoinu/not_so_minidox/ai03/orbit 等转换为SPLIT_KEYBOARD、部分键盘改用 Matrix Lite、新增 Sol 3 键盘PR #15687等键盘修复Keyboard fixesUT47、grs_70ec、Tractyl Manuform 4x6、Clueboard 66 hotswap、helix 等一系列编译失败修复以及反复修正的DEFAULT_FOLDERPR #15904、#16135与 bootloader 补漏PR #16225、#16256其他与 Bug 修复Others / Bugs兼容 MCU 列表补充示例PR #15935、version.h每次构建重新生成并加入 gitignorePR #16188、#16222、动态宏在结束时的layer_state恢复修复PR #16230、PMW3360 SPI 写时序修复PR #15519、分体右侧 ws2812 LED 双索引修复PR #15985、ChibiOS UART 驱动编译修复PR #16348等。升级清单速查汇总本节升级到本批次代码时建议按以下顺序自查声明 bootloader检查键盘rules.mk或info.json中是否已配置BOOTLOADER/bootloader缺失则补上否则构建直接失败移除旧宏系统搜索键位代码中的MACRO(、action_get_macro、action_function(并迁移到新版宏机制蓝牙改名将AdafruitBLE配置/引用改为BluefruitLE核对键盘路径若make目标找不到键盘对照上文迁移表使用新路径重新审视轮询率与指点设备配置确认 1kHz 默认值是否符合预期分体键盘启用指点设备时按需开启SPLIT_POINTING_ENABLE。通过逐项对照本文与 docs/ChangeLog/20220226.md开发者可以在升级 QMK 时快速定位破坏点、修复配置并第一时间用上新 MCU、新驱动与分体指点设备等能力。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表