2021 May 29 Breaking Changes Update (#13034)
* Add Per Key functionality for AutoShift (#11536) * LED Matrix: Reactive effect buffers & advanced indicators (#12588) * [Keyboard] kint36: switch to sym_eager_pk debouncing (#12626) * [Keyboard] kint2pp: reduce input latency by ≈10ms (#12625) * LED Matrix: Split (#12633) * [CI] Format code according to conventions (#12650) * feat: infinite timeout for leader key (#6580) * feat: implement leader_no_timeout logic * docs(leader_key): infinite leader timeout docs * Format code according to conventions (#12680) * Update ADC driver for STM32F1xx, STM32F3xx, STM32F4xx (#12403) * Fix default ADC_RESOLUTION for ADCv3 (and ADCv4) Recent ChibiOS update removed ADC_CFGR1_RES_10BIT from the ADCv3 headers (that macro should not have been there, because ADCv3 has CFGR instead of CFGR1). Fix the default value for ADC_RESOLUTION to use ADC_CFGR_RES_10BITS if it is defined (that name is used for ADCv3 and ADCv4). * Update ADC docs to match the actually used resolution ADC driver for ChibiOS actually uses the 10-bit resolution by default (probably to match AVR); fix the documentation accordingly. Also add both ADC_CFGR_RES_10BITS and ADC_CFGR1_RES_10BIT constants (these names differ according to the ADC implementation in the particular MCU). * Fix pinToMux() for B12 and B13 on STM32F3xx Testing on STM32F303CCT6 revealed that the ADC mux values for B12 and B13 pins were wrong. * Add support for all possible analog pins on STM32F1xx Added ADC mux values for pins A0...A7, B0, B1, C0...C5 on STM32F1xx (they are the same at least for STM32F103x8 and larger F103 devices, and also F102, F105, F107 families). Actually tested on STM32F103C8T6 (therefore pins C0...C5 were not tested). Pins F6...F10, which are present on STM32F103x[C-G] in 144-pin packages, cannot be supported at the moment, because those pins are connected only to ADC3, but the ChibiOS ADC driver for STM32F1xx supports only ADC1. * Add support for all possible analog pins on STM32F4xx Added ADC mux values for pins A0...A7, B0, B1, C0...C5 and optionally F3...F10 (if STM32_ADC_USE_ADC3 is enabled). These mux values are apparently the same for all F4xx devices, except some smaller devices may not have ADC3. Actually tested on STM32F401CCU6, STM32F401CEU6, STM32F411CEU6 (using various WeAct “Blackpill” boards); only pins A0...A7, B0, B1 were tested. Pins F3...F10 are inside `#if STM32_ADC_USE_ADC3` because some devices which don't have ADC3 also don't have the GPIOF port, therefore the code which refers to Fx pins does not compile. * Fix STM32F3xx ADC mux table in documentation The ADC driver documentation had some errors in the mux table for STM32F3xx. Fix this table to match the datasheet and the actual code (mux settings for B12 and B13 were also tested on a real STM32F303CCT6 chip). * Add STM32F1xx ADC pins to the documentation * Add STM32F4xx ADC pins to the documentation * Add initial support for tinyuf2 bootloader (when hosted on F411 blackpill) (#12600) * Add support for jumping to tinyuf2 bootloader. Adds blackpill UF2 example. * Update flashing.md * Update chconf.h * Update config.h * Update halconf.h * Update mcuconf.h * eeprom driver: Refactor where eeprom driver initialisation (and EEPROM emulation initialisation) occurs to make it non-target-specific. (#12671) * Add support for MCU = STM32F446 (#12619) * Add support for MCU = STM32F446 * Update platforms/chibios/GENERIC_STM32_F446XE/configs/config.h * Restore mcuconf.h to the one used by RT-STM32F446RE-NUCLEO64 * stm32f446: update mcuconf.h and board.h for 16MHz operation, with USB enabled, and other peripherals disabled. * Format code according to conventions (#12682) * Format code according to conventions (#12687) * Add STM32L433 and L443 support (#12063) * initial L433 commit * change to XC * fix L433 * disable all peripherals * update system and peripheral clocks * 433 change * use its own board files * revert its own board files * l433 specific change * fix stm32l432xx define * remove duplicate #define * fix bootloader jump * move to L443xx and add i2c2, spi2, usart3 to mcuconf.h * move to L443 * move to L443 * fix sdmmc in mcuconf.h * include STM32L443 * add L443 * Include L443 in compatible microcontrollers * Include L443 in compatible microcontrollers * Update config bootloader jump description * Update ChibiOS define reasoning * Update quantum/mcu_selection.mk * fix git conflict * Updated Function96 with V2 files and removed chconf.h and halconf.h (#12613) * Fix bad PR merge for #6580. (#12721) * Change RGB/LED Matrix to use a simple define for USB suspend (#12697) * [CI] Format code according to conventions (#12731) * Fixing transport's led/rgb matrix suspend state logic (#12770) * [CI] Format code according to conventions (#12772) * Fix comment parsing (#12750) * Added OLED fade out support (#12086) * fix some references to bin/qmk that slipped in (#12832) * Resolve a number of warnings in `qmk generate-api` (#12833) * New command: qmk console (#12828) * stash poc * stash * tidy up implementation * Tidy up slightly for review * Tidy up slightly for review * Bodge environment to make tests pass * Refactor away from asyncio due to windows issues * Filter devices * align vid/pid printing * Add hidapi to the installers * start preparing for multiple hid_listeners * udev rules for hid_listen * refactor to move closer to end state * very basic implementation of the threaded model * refactor how vid/pid/index are supplied and parsed * windows improvements * read the report directly when usage page isn't available * add per-device colors, the choice to show names or numbers, and refactor * add timestamps * Add support for showing bootloaders * tweak the color for bootloaders * Align bootloader disconnect with connect color * add support for showing all bootloaders * fix the pyusb check * tweaks * fix exception * hide a stack trace behind -v * add --no-bootloaders option * add documentation for qmk console * Apply suggestions from code review * pyformat * clean up and flesh out KNOWN_BOOTLOADERS * Remove pointless SERIAL_LINK_ENABLE rules (#12846) * Make Swap Hands use PROGMEM (#12284) This converts the array that the Swap Hands feature uses to use PROGMEM, and to read from that array, as such. Since this array never changes at runtime, there is no reason to keep it in memory. Especially for AVR boards, as memory is a precious resource. * Fix another bin/qmk reference (#12856) * [Keymap] Turn OLED off on suspend in soundmonster keymap (#10419) * Fixup build errors on `develop` branch. (#12723) * LED Matrix: Effects! (#12651) * Fix syntax error when compiling for ARM (#12866) * Remove KEYMAP and LAYOUT_kc (#12160) * alias KEYMAP to LAYOUT * remove KEYMAP and LAYOUT_kc * Add setup, clone, and env to the list of commands we allow even with broken modules (#12868) * Rename `point_t` -> `led_point_t` (#12864) * [Keyboard] updated a vendor name / fixed minor keymap issues (#12881) * Add missing LED Matrix suspend code to suspend.c (#12878) * LED Matrix: Documentation (#12685) * Deprecate `send_unicode_hex_string()` (#12602) * Fix spelling mistake regarding LED Matrix in split_common. (#12888) * [Keymap] Fix QWERTY/DVORAK status output for kzar keymap (#12895) * Use milc.subcommand.config instead of qmk.cli.config (#12915) * Use milc.subcommand.config instead * pyformat * remove the config test * Add function to allow repeated blinking of one layer (#12237) * Implement function rgblight_blink_layer_repeat to allow repeated blinking of one layer at a time * Update doc * Rework rgblight blinking according to requested change * optimize storage * Fixup housekeeping from being invoked twice per loop. (#12933) * matrix: wait for row signal to go HIGH for every row (#12945) I noticed this discrepancy (last row of the matrix treated differently than the others) when optimizing the input latency of my keyboard controller, see also https://michael.stapelberg.ch/posts/2021-05-08-keyboard-input-latency-qmk-kinesis/ Before this commit, when tuning the delays I noticed ghost key presses when pressing the F2 key, which is on the last row of the keyboard matrix: the dead_grave key, which is on the first row of the keyboard matrix, would be incorrectly detected as pressed. After this commit, all keyboard matrix rows are interpreted correctly. I suspect that my setup is more susceptible to this nuance than others because I use GPIO_INPUT_PIN_DELAY=0 and hence don’t have another delay that might mask the problem. * ensure we do not conflict with existing keymap aliases (#12976) * Add support for up to 4 IS31FL3733 drivers (#12342) * Convert Encoder callbacks to be boolean functions (#12805) * [Keyboard] Fix Terrazzo build failure (#12977) * Do not hard set config in CPTC files (#11864) * [Keyboard] Corne - Remove legacy revision support (#12226) * [Keymap] Update to Drashna keymap and user code (based on develop) (#12936) * Add Full-duplex serial driver for ARM boards (#9842) * Document LED_MATRIX_FRAMEBUFFER_EFFECTS (#12987) * Backlight: add defines for default level and breathing state (#12560) * Add dire message about LUFA mass storage bootloader (#13014) * [Keyboard] Remove redundant legacy and common headers for crkbd (#13023) Was causing compiler errors on some systems. * Fix keyboards/keymaps for boolean encoder callback changes (#12985) * `backlight.c`: include `eeprom.h` (#13024) * Add changelog for 2021-05-29 Breaking Changes merge (#12939) * Add ChangeLog for 2021-05-29 Breaking Changes Merge: initial version * Add recent develop changes * Sort recent develop changes * Remove sections for ChibiOS changes per tzarc No ChibiOS changes this round. * Add and sort recent develop changes * add notes about keyboard moves/deletions * import changelog for PR 12172 Documents the change to BOOTMAGIC_ENABLE. * update section headings * re-sort changelog * add additional note regarding Bootmagic changes * remove changelog timestamp * update dates in main Breaking Changes docs * fix broken section anchors in previous changelogs * add link to backlight/eeprom patch to changelog * highlight some more changes * link PRs from section headers * Restore standard readme * run: qmk cformat --core-onlypython_optimizations 0.12.52
parent
f55e39e8a2
commit
1646c0f26c
@ -0,0 +1,192 @@ |
||||
# QMK Breaking Changes - 2021 May 29 Changelog |
||||
|
||||
## Notable Changes :id=notable-changes |
||||
|
||||
### RGB Matrix support for split common ([#11055](https://github.com/qmk/qmk_firmware/pull/11055)) :id=rgb-matrix-split-common |
||||
|
||||
Split boards can now use RGB Matrix without defining a custom matrix. |
||||
|
||||
### Teensy 3.6 support ([#12258](https://github.com/qmk/qmk_firmware/pull/12258)) :id=teensy-3-6-support |
||||
|
||||
Added support for MK66F18 (Teensy 3.6) microcontroller. |
||||
|
||||
### New command: qmk console ([#12828](https://github.com/qmk/qmk_firmware/pull/12828)) :id=new-command-qmk-console |
||||
|
||||
A new `qmk console` command has been added for attaching to your keyboard's console. It operates similiarly to QMK Toolbox by allowing you to connect to one or more keyboard consoles to display debugging messages. |
||||
|
||||
### Improved command: qmk config :id=improve-command-qmk-config |
||||
|
||||
We've updated the `qmk config` command to show only the configuration items you have actually set. You can now display (almost) all of the available configuration options, along with their default values, using `qmk config -a`. |
||||
|
||||
### LED Matrix Improvements ([#12509](https://github.com/qmk/qmk_firmware/pull/12509), [#12580](https://github.com/qmk/qmk_firmware/pull/12580), [#12588](https://github.com/qmk/qmk_firmware/pull/12588), [#12633](https://github.com/qmk/qmk_firmware/pull/12633), [#12651](https://github.com/qmk/qmk_firmware/pull/12651), [#12685](https://github.com/qmk/qmk_firmware/pull/12685)) :id=led-matrix-improvements |
||||
|
||||
LED Matrix has been improved with effects, CIE1931 curves, and a task system. |
||||
|
||||
## Changes Requiring User Action :id=changes-requiring-user-action |
||||
|
||||
### Updated Keyboard Codebases :id=updated-keyboard-codebases |
||||
|
||||
* Durgod keyboard refactor in preparation for adding additional durgod keyboards ([#11978](https://github.com/qmk/qmk_firmware/pull/11978)) |
||||
* Updated Function96 with V2 files and removed chconf.h and halconf.h ([#12613](https://github.com/qmk/qmk_firmware/pull/12613)) |
||||
* [Keyboard] updated a vendor name / fixed minor keymap issues ([#12881](https://github.com/qmk/qmk_firmware/pull/12881)) |
||||
* [Keyboard] Corne - Remove legacy revision support ([#12226](https://github.com/qmk/qmk_firmware/pull/12226)) |
||||
|
||||
The following keyboards have had their source moved within QMK: |
||||
|
||||
Old Keyboard Name | New Keyboard Name |
||||
:---------------- | :---------------- |
||||
crkbd/rev1/common | crkbd/rev1 |
||||
function96 | function96/v1 |
||||
nckiibs/flatbread60 | delikeeb/flatbread60 |
||||
nckiibs/vaguettelite | delikeeb/vaguettelite |
||||
nckiibs/vanana/rev1 | delikeeb/vanana/rev1 |
||||
nckiibs/vanana/rev2 | delikeeb/vanana/rev2 |
||||
nckiibs/vaneela | delikeeb/vaneela |
||||
nckiibs/vaneelaex | delikeeb/vaneelaex |
||||
nckiibs/waaffle/rev3/elite_c | delikeeb/waaffle/rev3/elite_c |
||||
nckiibs/waaffle/rev3/pro_micro | delikeeb/waaffle/rev3/pro_micro |
||||
|
||||
The [Function96 V2](https://github.com/qmk/qmk_firmware/tree/0.13.0/keyboards/function96/v2) has also been added as part of these changes. |
||||
|
||||
The codebase for the [Durgod K320](https://github.com/qmk/qmk_firmware/tree/0.13.0/keyboards/durgod/k320) has been reworked in anticipation of additional Durgod keyboards gaining QMK support. |
||||
|
||||
Additionally, the `crkbd/rev1/legacy` keyboard has been removed. |
||||
|
||||
### Bootmagic Deprecation and Refactor ([#12172](https://github.com/qmk/qmk_firmware/pull/12172)) :id=bootmagic-deprecation-and-refactor |
||||
|
||||
QMK has decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option. |
||||
|
||||
This pull request changes the behavior of `BOOTMAGIC_ENABLE` such that specifying `BOOTMAGIC_ENABLE = yes` enables Bootmagic Lite instead of full Bootmagic. |
||||
|
||||
If attempts to use Bootmagic functionality result in unexpected behavior, check your `rules.mk` file and change the `BOOTMAGIC_ENABLE` setting to specify either `lite` or `full`. |
||||
|
||||
#### Tentative Deprecation Schedule |
||||
|
||||
This is the current planned roadmap for the behavior of `BOOTMAGIC_ENABLE`: |
||||
|
||||
- From 2021 May 29, setting `BOOTMAGIC_ENABLE = yes` will enable Bootmagic Lite instead of full Bootmagic. |
||||
- From 2021 Aug 28, `BOOTMAGIC_ENABLE` must be either `yes`, `lite`, or `no` – setting `BOOTMAGIC_ENABLE = full` will cause compilation to fail. |
||||
- From 2021 Nov 27, `BOOTMAGIC_ENABLE` must be either `yes` or `no` – setting `BOOTMAGIC_ENABLE = lite` will cause compilation to fail. |
||||
|
||||
### Removal of LAYOUT_kc ([#12160](https://github.com/qmk/qmk_firmware/pull/12160)) :id=removal-of-layout-kc |
||||
|
||||
We've removed support for `LAYOUT_kc` macros, if your keymap uses one you will need to update it use a regular `LAYOUT` macro. |
||||
|
||||
### Encoder callbacks are now boolean ([#12805](https://github.com/qmk/qmk_firmware/pull/12805), [#12985](https://github.com/qmk/qmk_firmware/pull/12985)) :id=encoder-callback-boolean |
||||
|
||||
To allow for keyboards to override (or not) keymap level code the `encoder_update_kb` function has been changed from `void` to `bool`. You will need to update your function definition to reflect this and ensure that you return a `true` or `false` value. |
||||
|
||||
Example code before change: |
||||
|
||||
```c |
||||
void encoder_update_kb(uint8_t index, bool clockwise) { |
||||
encoder_update_user(index, clockwise); |
||||
} |
||||
``` |
||||
|
||||
Example code after change: |
||||
|
||||
```c |
||||
bool encoder_update_kb(uint8_t index, bool clockwise) { |
||||
return encoder_update_user(index, clockwise); |
||||
} |
||||
``` |
||||
|
||||
## Core Changes :id=core-changes |
||||
|
||||
### Fixes :id=core-fixes |
||||
|
||||
* Fix connection issue in split keyboards when slave and OLED display are connected via I2C (fixes #9335) ([#11487](https://github.com/qmk/qmk_firmware/pull/11487)) |
||||
* Terrazzo: Fix wrong LED Matrix function names ([#12561](https://github.com/qmk/qmk_firmware/pull/12561)) |
||||
* Apply the "NO_LIMITED_CONTROLLER_CONNECT" fix to atmega16u2 ([#12482](https://github.com/qmk/qmk_firmware/pull/12482)) |
||||
* Fix comment parsing ([#12750](https://github.com/qmk/qmk_firmware/pull/12750)) |
||||
* Turn OLED off on suspend in soundmonster Corne keymap ([#10419](https://github.com/qmk/qmk_firmware/pull/10419)) |
||||
* Fixup build errors on `develop` branch. ([#12723](https://github.com/qmk/qmk_firmware/pull/12723)) |
||||
* Fix syntax error when compiling for ARM ([#12866](https://github.com/qmk/qmk_firmware/pull/12866)) |
||||
* Add missing LED Matrix suspend code to suspend.c ([#12878](https://github.com/qmk/qmk_firmware/pull/12878)) |
||||
* Fix spelling mistake regarding LED Matrix in split_common. ([#12888](https://github.com/qmk/qmk_firmware/pull/12888)) |
||||
* [Keymap] Fix QWERTY/DVORAK status output for kzar keymap ([#12895](https://github.com/qmk/qmk_firmware/pull/12895)) |
||||
* Fixup housekeeping from being invoked twice per loop. ([#12933](https://github.com/qmk/qmk_firmware/pull/12933)) |
||||
* wait for matrix row signal to go HIGH for every row ([#12945](https://github.com/qmk/qmk_firmware/pull/12945)) |
||||
* ensure we do not conflict with existing keymap aliases ([#12976](https://github.com/qmk/qmk_firmware/pull/12976)) |
||||
* [Keyboard] Fix Terrazzo build failure ([#12977](https://github.com/qmk/qmk_firmware/pull/12977)) |
||||
* Do not hard set config in CPTC files ([#11864](https://github.com/qmk/qmk_firmware/pull/11864)) |
||||
|
||||
### Additions and Enhancements :id=core-additions |
||||
|
||||
* ARM - Refactor SLEEP_LED to support more platforms ([#8403](https://github.com/qmk/qmk_firmware/pull/8403)) |
||||
* Add ability to toggle One Shot functionality ([#4198](https://github.com/qmk/qmk_firmware/pull/4198)) |
||||
* Add RGB Matrix support to Split Common ([#11055](https://github.com/qmk/qmk_firmware/pull/11055)) |
||||
* Add support for complementary outputs to the ChibiOS WS2812 PWM driver ([#11988](https://github.com/qmk/qmk_firmware/pull/11988)) |
||||
* Enable RGB Matrix for Corne ([#12091](https://github.com/qmk/qmk_firmware/pull/12091)) |
||||
* Set default OLED Update Interval for Split Keyboards to improve matrix scan performance ([#12107](https://github.com/qmk/qmk_firmware/pull/12107)) |
||||
* Add support for MK66F18 (Teensy 3.6) micro controller ([#12258](https://github.com/qmk/qmk_firmware/pull/12258)) |
||||
* Split RGB Matrix support for RGBKB Zygomorph ([#11083](https://github.com/qmk/qmk_firmware/pull/11083)) |
||||
* Add baudrate and circular buffer to ARM WS2812 SPI config ([#12216](https://github.com/qmk/qmk_firmware/pull/12216)) |
||||
* Add keyboard level weak function for slave matrix scan ([#12317](https://github.com/qmk/qmk_firmware/pull/12317)) |
||||
* Add link to schematic on EasyEDA for XD60 ([#12018](https://github.com/qmk/qmk_firmware/pull/12018)) |
||||
* Add Config functions for LED Matrix ([#12361](https://github.com/qmk/qmk_firmware/pull/12361)) |
||||
* Add pin definitions for MK66F18 ([#12419](https://github.com/qmk/qmk_firmware/pull/12419)) |
||||
* add kinesis/kint36 keyboard ([#10171](https://github.com/qmk/qmk_firmware/pull/10171)) |
||||
* Add support for producing UF2-format binaries. ([#12435](https://github.com/qmk/qmk_firmware/pull/12435)) |
||||
* Implement CIE1931 curve for LED Matrix ([#12417](https://github.com/qmk/qmk_firmware/pull/12417)) |
||||
* Change `BOOTMAGIC_ENABLE=yes` to use Bootmagic Lite ([#12172](https://github.com/qmk/qmk_firmware/pull/12172)) |
||||
* Add kzar keymap for Kinesis Advantage ([#12444](https://github.com/qmk/qmk_firmware/pull/12444)) |
||||
* LED Matrix: suspend code ([#12509](https://github.com/qmk/qmk_firmware/pull/12509)) |
||||
* LED Matrix: Task system ([#12580](https://github.com/qmk/qmk_firmware/pull/12580)) |
||||
* Add missing RGB_MODE_TWINKLE / RGB_M_TW keycodes ([#11935](https://github.com/qmk/qmk_firmware/pull/11935)) |
||||
* Enhancement of WPM feature ([#11727](https://github.com/qmk/qmk_firmware/pull/11727)) |
||||
* Add Per Key functionality for AutoShift ([#11536](https://github.com/qmk/qmk_firmware/pull/11536)) |
||||
* LED Matrix: Reactive effect buffers & advanced indicators ([#12588](https://github.com/qmk/qmk_firmware/pull/12588)) |
||||
* LED Matrix: support for Split keyboards ([#12633](https://github.com/qmk/qmk_firmware/pull/12633)) |
||||
* add setting to enable infinite timeout for leader key ([#6580](https://github.com/qmk/qmk_firmware/pull/6580), [#12721](https://github.com/qmk/qmk_firmware/pull/12721 "Fix bad PR merge for #6580")) |
||||
* Update ADC driver for STM32F1xx, STM32F3xx, STM32F4xx ([#12403](https://github.com/qmk/qmk_firmware/pull/12403)) |
||||
* Add initial support for tinyuf2 bootloader (when hosted on F411 blackpill) ([#12600](https://github.com/qmk/qmk_firmware/pull/12600)) |
||||
* Add support for STM32F446 MCU ([#12619](https://github.com/qmk/qmk_firmware/pull/12619)) |
||||
* Add STM32L433 and L443 support ([#12063](https://github.com/qmk/qmk_firmware/pull/12063)) |
||||
* Added OLED fade out support ([#12086](https://github.com/qmk/qmk_firmware/pull/12086)) |
||||
* New command: `qmk console` ([#12828](https://github.com/qmk/qmk_firmware/pull/12828)) |
||||
* LED Matrix: Effects! ([#12651](https://github.com/qmk/qmk_firmware/pull/12651)) |
||||
* Add setup, clone, and env to the list of commands we allow even with broken modules ([#12868](https://github.com/qmk/qmk_firmware/pull/12868)) |
||||
* LED Matrix: Documentation ([#12685](https://github.com/qmk/qmk_firmware/pull/12685)) |
||||
* Add function to allow repeated blinking of one layer ([#12237](https://github.com/qmk/qmk_firmware/pull/12237)) |
||||
* Add support for up to 4 IS31FL3733 drivers ([#12342](https://github.com/qmk/qmk_firmware/pull/12342)) |
||||
* Convert Encoder callbacks to be boolean functions ([#12805](https://github.com/qmk/qmk_firmware/pull/12805), [#12985](https://github.com/qmk/qmk_firmware/pull/12985)) |
||||
* [Keymap] Update to Drashna keymap and user code (based on develop) ([#12936](https://github.com/qmk/qmk_firmware/pull/12936)) |
||||
* Add Full-duplex serial driver for ARM boards ([#9842](https://github.com/qmk/qmk_firmware/pull/9842)) |
||||
* Document LED_MATRIX_FRAMEBUFFER_EFFECTS ([#12987](https://github.com/qmk/qmk_firmware/pull/12987)) |
||||
* Backlight: add defines for default level and breathing state ([#12560](https://github.com/qmk/qmk_firmware/pull/12560), [#13024](https://github.com/qmk/qmk_firmware/pull/13024)) |
||||
* Add dire message about LUFA mass storage bootloader ([#13014](https://github.com/qmk/qmk_firmware/pull/13014)) |
||||
|
||||
### Clean-ups and Optimizations :id=core-optimizations |
||||
|
||||
* Overhaul bootmagic logic to have single entrypoint ([#8532](https://github.com/qmk/qmk_firmware/pull/8532)) |
||||
* Refactor of USB code within split_common ([#11890](https://github.com/qmk/qmk_firmware/pull/11890)) |
||||
* Begin the process of deprecating `bin/qmk` in favor of the global CLI ([#12109](https://github.com/qmk/qmk_firmware/pull/12109)) |
||||
* LED Matrix: decouple from Backlight ([#12054](https://github.com/qmk/qmk_firmware/pull/12054)) |
||||
* Remove `FUNC()` ([#12161](https://github.com/qmk/qmk_firmware/pull/12161)) |
||||
* Move gpio wait logic to wait.h ([#12067](https://github.com/qmk/qmk_firmware/pull/12067)) |
||||
* LED Matrix: Clean up includes ([#12197](https://github.com/qmk/qmk_firmware/pull/12197)) |
||||
* Consistently use bin/qmk when that script is called ([#12286](https://github.com/qmk/qmk_firmware/pull/12286)) |
||||
* LED Matrix: Additional common_features.mk tweaks ([#12187](https://github.com/qmk/qmk_firmware/pull/12187)) |
||||
* LED Matrix: Fix up eeconfig code ([#12327](https://github.com/qmk/qmk_firmware/pull/12327)) |
||||
* Big quantum_keycodes cleanup ([#12249](https://github.com/qmk/qmk_firmware/pull/12249)) |
||||
* Fix up builds that are now too big for `develop` branch. ([#12495](https://github.com/qmk/qmk_firmware/pull/12495)) |
||||
* [Keyboard] kint36: switch to sym_eager_pk debouncing ([#12626](https://github.com/qmk/qmk_firmware/pull/12626)) |
||||
* [Keyboard] kint2pp: reduce input latency by ≈10ms ([#12625](https://github.com/qmk/qmk_firmware/pull/12625)) |
||||
* eeprom driver: Refactor where eeprom driver initialisation (and EEPROM emulation initialisation) occurs to make it non-target-specific. ([#12671](https://github.com/qmk/qmk_firmware/pull/12671)) |
||||
* Change RGB/LED Matrix to use a simple define for USB suspend ([#12697](https://github.com/qmk/qmk_firmware/pull/12697), [#12770](https://github.com/qmk/qmk_firmware/pull/12770 "Fixing transport's led/rgb matrix suspend state logic")) |
||||
* Remove pointless SERIAL_LINK_ENABLE rules ([#12846](https://github.com/qmk/qmk_firmware/pull/12846)) |
||||
* Make Swap Hands use PROGMEM ([#12284](https://github.com/qmk/qmk_firmware/pull/12284)) |
||||
* Remove KEYMAP and LAYOUT_kc ([#12160](https://github.com/qmk/qmk_firmware/pull/12160)) |
||||
* Rename `point_t` -> `led_point_t` ([#12864](https://github.com/qmk/qmk_firmware/pull/12864)) |
||||
* Deprecate `send_unicode_hex_string()` ([#12602](https://github.com/qmk/qmk_firmware/pull/12602)) |
||||
* [Keyboard] Remove redundant legacy and common headers for crkbd ([#13023](https://github.com/qmk/qmk_firmware/pull/13023)) |
||||
|
||||
### QMK Infrastructure and Internals :id=qmk-internals |
||||
|
||||
* trivial change to trigger api update ([`b15288fb87`](https://github.com/qmk/qmk_firmware/commit/b15288fb87)) |
||||
* fix some references to bin/qmk that slipped in ([#12832](https://github.com/qmk/qmk_firmware/pull/12832)) |
||||
* Resolve a number of warnings in `qmk generate-api` ([#12833](https://github.com/qmk/qmk_firmware/pull/12833)) |
||||
* Fix another bin/qmk reference ([#12856](https://github.com/qmk/qmk_firmware/pull/12856)) |
||||
* Use milc.subcommand.config instead of qmk.cli.config ([#12915](https://github.com/qmk/qmk_firmware/pull/12915)) |
@ -1,25 +1,62 @@ |
||||
# Word Per Minute (WPM) Calculcation |
||||
|
||||
The WPM feature uses time between keystrokes to compute a rolling average words |
||||
per minute rate and makes this available for various uses. |
||||
The WPM feature uses time between keystrokes to compute a rolling average words per minute rate and makes this available for various uses. |
||||
|
||||
Enable the WPM system by adding this to your `rules.mk`: |
||||
|
||||
WPM_ENABLE = yes |
||||
|
||||
For split keyboards using soft serial, the computed WPM |
||||
score will be available on the master AND slave half. |
||||
For split keyboards using soft serial, the computed WPM score will be available on the master AND slave half. |
||||
|
||||
## Public Functions |
||||
|
||||
`uint8_t get_current_wpm(void);` |
||||
This function returns the current WPM as an unsigned integer. |
||||
## Configuration |
||||
|
||||
|Define |Default | Description | |
||||
|-----------------------------|--------------|------------------------------------------------------------------------------------------| |
||||
|`WPM_SMOOTHING` |`0.0487` | Sets the smoothing to about 40 keystrokes | |
||||
|`WPM_ESTIMATED_WORD_SIZE` |`5` | This is the value used when estimating average word size (for regression and normal use) | |
||||
|`WPM_ALLOW_COUNT_REGRESSOIN` |_Not defined_ | If defined allows the WPM to be decreased when hitting Delete or Backspace | |
||||
## Public Functions |
||||
|
||||
## Customized keys for WPM calc |
||||
|
||||
By default, the WPM score only includes letters, numbers, space and some |
||||
punctuation. If you want to change the set of characters considered as part of |
||||
the WPM calculation, you can implement `wpm_keycode_user(uint16_t keycode)` |
||||
and return true for any characters you would like included in the calculation, |
||||
or false to not count that particular keycode. |
||||
|Function |Description | |
||||
|--------------------------|--------------------------------------------------| |
||||
|`get_current_wpm(void)` | Returns the current WPM as a value between 0-255 | |
||||
|`set_current_wpm(x)` | Sets the current WPM to `x` (between 0-255) | |
||||
|
||||
## Callbacks |
||||
|
||||
By default, the WPM score only includes letters, numbers, space and some punctuation. If you want to change the set of characters considered as part of the WPM calculation, you can implement your own `bool wpm_keycode_user(uint16_t keycode)` and return true for any characters you would like included in the calculation, or false to not count that particular keycode. |
||||
|
||||
For instance, the default is: |
||||
|
||||
```c |
||||
bool wpm_keycode_user(uint16_t keycode) { |
||||
if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX) || (keycode >= QK_MODS && keycode <= QK_MODS_MAX)) { |
||||
keycode = keycode & 0xFF; |
||||
} else if (keycode > 0xFF) { |
||||
keycode = 0; |
||||
} |
||||
if ((keycode >= KC_A && keycode <= KC_0) || (keycode >= KC_TAB && keycode <= KC_SLASH)) { |
||||
return true; |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
``` |
||||
|
||||
Additionally, if `WPM_ALLOW_COUNT_REGRESSION` is defined, there is the `uint8_t wpm_regress_count(uint16_t keycode)` function that allows you to decrease the WPM. This is useful if you want to be able to penalize certain keycodes (or even combinations). |
||||
|
||||
__attribute__((weak)) uint8_t wpm_regress_count(uint16_t keycode) { |
||||
bool weak_modded = (keycode >= QK_LCTL && keycode < QK_LSFT) || (keycode >= QK_RCTL && keycode < QK_RSFT); |
||||
|
||||
if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX) || (keycode >= QK_MODS && keycode <= QK_MODS_MAX)) { |
||||
keycode = keycode & 0xFF; |
||||
} else if (keycode > 0xFF) { |
||||
keycode = 0; |
||||
} |
||||
if (((get_mods() | get_oneshot_mods()) & MOD_MASK_CTRL} || weak_modded) && (keycode == KC_DEL || keycode == KC_BSPC)) { |
||||
return WPM_ESTIMATED_WORD_SIZE; |
||||
} |
||||
if (keycode == KC_DEL || keycode == KC_BSPC) { |
||||
return 1; |
||||
} |
||||
} |
||||
|
@ -0,0 +1,90 @@ |
||||
/* Copyright 2021 QMK
|
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include "quantum.h" |
||||
#include "serial.h" |
||||
#include "printf.h" |
||||
|
||||
#include <ch.h> |
||||
#include <hal.h> |
||||
|
||||
#ifndef USART_CR1_M0 |
||||
# define USART_CR1_M0 USART_CR1_M // some platforms (f1xx) dont have this so
|
||||
#endif |
||||
|
||||
#ifndef SERIAL_USART_CR1 |
||||
# define SERIAL_USART_CR1 (USART_CR1_PCE | USART_CR1_PS | USART_CR1_M0) // parity enable, odd parity, 9 bit length
|
||||
#endif |
||||
|
||||
#ifndef SERIAL_USART_CR2 |
||||
# define SERIAL_USART_CR2 (USART_CR2_STOP_1) // 2 stop bits
|
||||
#endif |
||||
|
||||
#ifndef SERIAL_USART_CR3 |
||||
# define SERIAL_USART_CR3 0 |
||||
#endif |
||||
|
||||
#if defined(USART1_REMAP) |
||||
# define USART_REMAP \ |
||||
do { \
|
||||
(AFIO->MAPR |= AFIO_MAPR_USART1_REMAP); \
|
||||
} while (0) |
||||
#elif defined(USART2_REMAP) |
||||
# define USART_REMAP \ |
||||
do { \
|
||||
(AFIO->MAPR |= AFIO_MAPR_USART2_REMAP); \
|
||||
} while (0) |
||||
#elif defined(USART3_PARTIALREMAP) |
||||
# define USART_REMAP \ |
||||
do { \
|
||||
(AFIO->MAPR |= AFIO_MAPR_USART3_REMAP_PARTIALREMAP); \
|
||||
} while (0) |
||||
#elif defined(USART3_FULLREMAP) |
||||
# define USART_REMAP \ |
||||
do { \
|
||||
(AFIO->MAPR |= AFIO_MAPR_USART3_REMAP_FULLREMAP); \
|
||||
} while (0) |
||||
#endif |
||||
|
||||
#ifndef SELECT_SOFT_SERIAL_SPEED |
||||
# define SELECT_SOFT_SERIAL_SPEED 1 |
||||
#endif |
||||
|
||||
#ifdef SERIAL_USART_SPEED |
||||
// Allow advanced users to directly set SERIAL_USART_SPEED
|
||||
#elif SELECT_SOFT_SERIAL_SPEED == 0 |
||||
# define SERIAL_USART_SPEED 460800 |
||||
#elif SELECT_SOFT_SERIAL_SPEED == 1 |
||||
# define SERIAL_USART_SPEED 230400 |
||||
#elif SELECT_SOFT_SERIAL_SPEED == 2 |
||||
# define SERIAL_USART_SPEED 115200 |
||||
#elif SELECT_SOFT_SERIAL_SPEED == 3 |
||||
# define SERIAL_USART_SPEED 57600 |
||||
#elif SELECT_SOFT_SERIAL_SPEED == 4 |
||||
# define SERIAL_USART_SPEED 38400 |
||||
#elif SELECT_SOFT_SERIAL_SPEED == 5 |
||||
# define SERIAL_USART_SPEED 19200 |
||||
#else |
||||
# error invalid SELECT_SOFT_SERIAL_SPEED value |
||||
#endif |
||||
|
||||
#ifndef SERIAL_USART_TIMEOUT |
||||
# define SERIAL_USART_TIMEOUT 100 |
||||
#endif |
||||
|
||||
#define HANDSHAKE_MAGIC 7 |
@ -0,0 +1,261 @@ |
||||
/* Copyright 2021 QMK
|
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include "serial_usart.h" |
||||
|
||||
#include <stdatomic.h> |
||||
|
||||
#if !defined(USE_GPIOV1) |
||||
// The default PAL alternate modes are used to signal that the pins are used for USART
|
||||
# if !defined(SERIAL_USART_TX_PAL_MODE) |
||||
# define SERIAL_USART_TX_PAL_MODE 7 |
||||
# endif |
||||
# if !defined(SERIAL_USART_RX_PAL_MODE) |
||||
# define SERIAL_USART_RX_PAL_MODE 7 |
||||
# endif |
||||
#endif |
||||
|
||||
#if !defined(SERIAL_USART_DRIVER) |
||||
# define SERIAL_USART_DRIVER UARTD1 |
||||
#endif |
||||
|
||||
#if !defined(SERIAL_USART_TX_PIN) |
||||
# define SERIAL_USART_TX_PIN A9 |
||||
#endif |
||||
|
||||
#if !defined(SERIAL_USART_RX_PIN) |
||||
# define SERIAL_USART_RX_PIN A10 |
||||
#endif |
||||
|
||||
#define SIGNAL_HANDSHAKE_RECEIVED 0x1 |
||||
|
||||
void handle_transactions_slave(uint8_t sstd_index); |
||||
static void receive_transaction_handshake(UARTDriver* uartp, uint16_t received_handshake); |
||||
|
||||
/*
|
||||
* UART driver configuration structure. We use the blocking DMA enabled API and |
||||
* the rxchar callback to receive handshake tokens but only on the slave halve. |
||||
*/ |
||||
// clang-format off
|
||||
static UARTConfig uart_config = { |
||||
.txend1_cb = NULL, |
||||
.txend2_cb = NULL, |
||||
.rxend_cb = NULL, |
||||
.rxchar_cb = NULL, |
||||
.rxerr_cb = NULL, |
||||
.timeout_cb = NULL, |
||||
.speed = (SERIAL_USART_SPEED), |
||||
.cr1 = (SERIAL_USART_CR1), |
||||
.cr2 = (SERIAL_USART_CR2), |
||||
.cr3 = (SERIAL_USART_CR3) |
||||
}; |
||||
// clang-format on
|
||||
|
||||
static SSTD_t* Transaction_table = NULL; |
||||
static uint8_t Transaction_table_size = 0; |
||||
static atomic_uint_least8_t handshake = 0xFF; |
||||
static thread_reference_t tp_target = NULL; |
||||
|
||||
/*
|
||||
* This callback is invoked when a character is received but the application |
||||
* was not ready to receive it, the character is passed as parameter. |
||||
* Receive transaction table index from initiator, which doubles as basic handshake token. */ |
||||
static void receive_transaction_handshake(UARTDriver* uartp, uint16_t received_handshake) { |
||||
/* Check if received handshake is not a valid transaction id.
|
||||
* Please note that we can still catch a seemingly valid handshake |
||||
* i.e. a byte from a ongoing transfer which is in the allowed range. |
||||
* So this check mainly prevents any obviously wrong handshakes and |
||||
* subsequent wakeups of the receiving thread, which is a costly operation. */ |
||||
if (received_handshake > Transaction_table_size) { |
||||
return; |
||||
} |
||||
|
||||
handshake = (uint8_t)received_handshake; |
||||
chSysLockFromISR(); |
||||
/* Wakeup receiving thread to start a transaction. */ |
||||
chEvtSignalI(tp_target, (eventmask_t)SIGNAL_HANDSHAKE_RECEIVED); |
||||
chSysUnlockFromISR(); |
||||
} |
||||
|
||||
__attribute__((weak)) void usart_init(void) { |
||||
#if defined(USE_GPIOV1) |
||||
palSetLineMode(SERIAL_USART_TX_PIN, PAL_MODE_STM32_ALTERNATE_PUSHPULL); |
||||
palSetLineMode(SERIAL_USART_RX_PIN, PAL_MODE_INPUT); |
||||
#else |
||||
palSetLineMode(SERIAL_USART_TX_PIN, PAL_MODE_ALTERNATE(SERIAL_USART_TX_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); |
||||
palSetLineMode(SERIAL_USART_RX_PIN, PAL_MODE_ALTERNATE(SERIAL_USART_RX_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); |
||||
#endif |
||||
} |
||||
|
||||
/*
|
||||
* This thread runs on the slave half and reacts to transactions initiated from the master. |
||||
*/ |
||||
static THD_WORKING_AREA(waSlaveThread, 1024); |
||||
static THD_FUNCTION(SlaveThread, arg) { |
||||
(void)arg; |
||||
chRegSetThreadName("slave_usart_tx_rx"); |
||||
|
||||
while (true) { |
||||
/* We sleep as long as there is no handshake waiting for us. */ |
||||
chEvtWaitAny((eventmask_t)SIGNAL_HANDSHAKE_RECEIVED); |
||||
handle_transactions_slave(handshake); |
||||
} |
||||
} |
||||
|
||||
void soft_serial_target_init(SSTD_t* const sstd_table, int sstd_table_size) { |
||||
Transaction_table = sstd_table; |
||||
Transaction_table_size = (uint8_t)sstd_table_size; |
||||
usart_init(); |
||||
|
||||
#if defined(USART_REMAP) |
||||
USART_REMAP; |
||||
#endif |
||||
|
||||
tp_target = chThdCreateStatic(waSlaveThread, sizeof(waSlaveThread), HIGHPRIO, SlaveThread, NULL); |
||||
|
||||
// Start receiving handshake tokens on slave halve
|
||||
uart_config.rxchar_cb = receive_transaction_handshake; |
||||
uartStart(&SERIAL_USART_DRIVER, &uart_config); |
||||
} |
||||
|
||||
/**
|
||||
* @brief React to transactions started by the master. |
||||
* This version uses duplex send and receive usart pheriphals and DMA backed transfers. |
||||
*/ |
||||
void inline handle_transactions_slave(uint8_t sstd_index) { |
||||
size_t buffer_size = 0; |
||||
msg_t msg = 0; |
||||
SSTD_t* trans = &Transaction_table[sstd_index]; |
||||
|
||||
/* Send back the handshake which is XORed as a simple checksum,
|
||||
to signal that the slave is ready to receive possible transaction buffers */ |
||||
sstd_index ^= HANDSHAKE_MAGIC; |
||||
buffer_size = (size_t)sizeof(sstd_index); |
||||
msg = uartSendTimeout(&SERIAL_USART_DRIVER, &buffer_size, &sstd_index, TIME_MS2I(SERIAL_USART_TIMEOUT)); |
||||
|
||||
if (msg != MSG_OK) { |
||||
if (trans->status) { |
||||
*trans->status = TRANSACTION_NO_RESPONSE; |
||||
} |
||||
return; |
||||
} |
||||
|
||||
/* Receive transaction buffer from the master. If this transaction requires it.*/ |
||||
buffer_size = (size_t)trans->initiator2target_buffer_size; |
||||
if (buffer_size) { |
||||
msg = uartReceiveTimeout(&SERIAL_USART_DRIVER, &buffer_size, trans->initiator2target_buffer, TIME_MS2I(SERIAL_USART_TIMEOUT)); |
||||
if (msg != MSG_OK) { |
||||
if (trans->status) { |
||||
*trans->status = TRANSACTION_NO_RESPONSE; |
||||
} |
||||
return; |
||||
} |
||||
} |
||||
|
||||
/* Send transaction buffer to the master. If this transaction requires it. */ |
||||
buffer_size = (size_t)trans->target2initiator_buffer_size; |
||||
if (buffer_size) { |
||||
msg = uartSendFullTimeout(&SERIAL_USART_DRIVER, &buffer_size, trans->target2initiator_buffer, TIME_MS2I(SERIAL_USART_TIMEOUT)); |
||||
if (msg != MSG_OK) { |
||||
if (trans->status) { |
||||
*trans->status = TRANSACTION_NO_RESPONSE; |
||||
} |
||||
return; |
||||
} |
||||
} |
||||
|
||||
if (trans->status) { |
||||
*trans->status = TRANSACTION_ACCEPTED; |
||||
} |
||||
} |
||||
|
||||
void soft_serial_initiator_init(SSTD_t* const sstd_table, int sstd_table_size) { |
||||
Transaction_table = sstd_table; |
||||
Transaction_table_size = (uint8_t)sstd_table_size; |
||||
usart_init(); |
||||
|
||||
#if defined(SERIAL_USART_PIN_SWAP) |
||||
uart_config.cr2 |= USART_CR2_SWAP; // master has swapped TX/RX pins
|
||||
#endif |
||||
|
||||
#if defined(USART_REMAP) |
||||
USART_REMAP; |
||||
#endif |
||||
|
||||
uartStart(&SERIAL_USART_DRIVER, &uart_config); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Start transaction from the master to the slave. |
||||
* This version uses duplex send and receive usart pheriphals and DMA backed transfers. |
||||
* |
||||
* @param index Transaction Table index of the transaction to start. |
||||
* @return int TRANSACTION_NO_RESPONSE in case of Timeout. |
||||
* TRANSACTION_TYPE_ERROR in case of invalid transaction index. |
||||
* TRANSACTION_END in case of success. |
||||
*/ |
||||
#if !defined(SERIAL_USE_MULTI_TRANSACTION) |
||||
int soft_serial_transaction(void) { |
||||
uint8_t sstd_index = 0; |
||||
#else |
||||
int soft_serial_transaction(int index) { |
||||
uint8_t sstd_index = index; |
||||
#endif |
||||
|
||||
if (sstd_index > Transaction_table_size) { |
||||
return TRANSACTION_TYPE_ERROR; |
||||
} |
||||
|
||||
SSTD_t* const trans = &Transaction_table[sstd_index]; |
||||
msg_t msg = 0; |
||||
size_t buffer_size = (size_t)sizeof(sstd_index); |
||||
|
||||
/* Send transaction table index to the slave, which doubles as basic handshake token. */ |
||||
uartSendFullTimeout(&SERIAL_USART_DRIVER, &buffer_size, &sstd_index, TIME_MS2I(SERIAL_USART_TIMEOUT)); |
||||
|
||||
uint8_t sstd_index_shake = 0xFF; |
||||
buffer_size = (size_t)sizeof(sstd_index_shake); |
||||
|
||||
/* Receive the handshake token from the slave. The token was XORed by the slave as a simple checksum.
|
||||
If the tokens match, the master will start to send and receive possible transaction buffers. */ |
||||
msg = uartReceiveTimeout(&SERIAL_USART_DRIVER, &buffer_size, &sstd_index_shake, TIME_MS2I(SERIAL_USART_TIMEOUT)); |
||||
if (msg != MSG_OK || (sstd_index_shake != (sstd_index ^ HANDSHAKE_MAGIC))) { |
||||
dprintln("USART: Handshake Failed"); |
||||
return TRANSACTION_NO_RESPONSE; |
||||
} |
||||
|
||||
/* Send transaction buffer to the slave. If this transaction requires it. */ |
||||
buffer_size = (size_t)trans->initiator2target_buffer_size; |
||||
if (buffer_size) { |
||||
msg = uartSendFullTimeout(&SERIAL_USART_DRIVER, &buffer_size, trans->initiator2target_buffer, TIME_MS2I(SERIAL_USART_TIMEOUT)); |
||||
if (msg != MSG_OK) { |
||||
dprintln("USART: Send Failed"); |
||||
return TRANSACTION_NO_RESPONSE; |
||||
} |
||||
} |
||||
|
||||
/* Receive transaction buffer from the slave. If this transaction requires it. */ |
||||
buffer_size = (size_t)trans->target2initiator_buffer_size; |
||||
if (buffer_size) { |
||||
msg = uartReceiveTimeout(&SERIAL_USART_DRIVER, &buffer_size, trans->target2initiator_buffer, TIME_MS2I(SERIAL_USART_TIMEOUT)); |
||||
if (msg != MSG_OK) { |
||||
dprintln("USART: Receive Failed"); |
||||
return TRANSACTION_NO_RESPONSE; |
||||
} |
||||
} |
||||
|
||||
return TRANSACTION_END; |
||||
} |
@ -1,59 +0,0 @@ |
||||
#include QMK_KEYBOARD_H |
||||
|
||||
#define _QWERTY 0 |
||||
#define _FN1 1 |
||||
#define _FN2 2 |
||||
#define KC_ KC_TRNS |
||||
#define KC_X0 LT(_FN2, KC_CAPS) |
||||
#define KC_X1 MO(_FN1) |
||||
#define KC_X2 BL_STEP |
||||
#define KC_X3 BL_BRTG |
||||
#define KC_X4 BL_TOGG |
||||
#define KC_X5 BL_INC |
||||
#define KC_X6 BL_DEC |
||||
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
[_QWERTY] = LAYOUT_kc( |
||||
/*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */ |
||||
ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL , BSPC , INS ,PGUP, |
||||
/*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------| |----`----| */ |
||||
TAB , Q , W , E , R , T , Y , U , I , O , P ,LBRC,RBRC, BSLS , DEL ,PGDN, |
||||
/*|------`----`----`----`----`----`----`----`----`----`----`----`----`------| `----`----' */ |
||||
X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT, ENTER , |
||||
/*|-------`----`----`----`----`----`----`----`----`----`----`----`----------| ,----. */ |
||||
LSFT , Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, RSFT , UP , |
||||
/*|---------`----`----`----`----`----`----`----`----`----`----`-------------.--|----|----. */ |
||||
LCTL ,LGUI ,LALT , SPACE , X1 ,RALT ,RCTL , LEFT,DOWN,RGHT |
||||
/*`-----+-----+-----+------------------------------+------+-----+-----' `----+----+----' */ |
||||
), |
||||
|
||||
[_FN1] = LAYOUT_kc( |
||||
/*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */ |
||||
GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , ,HOME, |
||||
/*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */ |
||||
, , UP , , , , , , ,PSCR,SLCK,PAUS, X2 , , ,END, |
||||
/*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */ |
||||
X0 ,LEFT,DOWN,RGHT, , X6 , X5 , X4 , X3 , X2 ,HOME, , , |
||||
/*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */ |
||||
, ,MPLY,MSTP,MPRV,MNXT,VOLD,VOLU,MUTE, ,END , , X5 , |
||||
/*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */ |
||||
, , , , , , , X3 , X6 , X4 |
||||
/*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */ |
||||
), |
||||
|
||||
[_FN2] = LAYOUT_kc( |
||||
/*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */ |
||||
GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME, |
||||
/*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */ |
||||
, , , UP , , , , 7 , 8 , 9 , , , , , VOLD,END, |
||||
/*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */ |
||||
, ,LEFT,DOWN,RGHT, , , 4 , 5 , 6 , , , , |
||||
/*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */ |
||||
, , , , , , 0 , 1 , 2 , 3 , , , MUTE, |
||||
/*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */ |
||||
, , , , , , , MPRV,MPLY,MNXT |
||||
/*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */ |
||||
) |
||||
}; |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue