qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

20200530.md (13098B)


      1 # QMK Breaking Change - 2020 May 30 Changelog
      2 
      3 Four times a year QMK runs a process for merging Breaking Changes. A Breaking Change is any change which modifies how QMK behaves in a way that is incompatible or potentially dangerous. We limit these changes to 4 times per year so that users can have confidence that updating their QMK tree will not break their keymaps.
      4 
      5 The list of changes follows.
      6 
      7 
      8 ## Core Changes
      9 
     10 ### Converting V-USB usbdrv to a submodule
     11 
     12 [#8321](https://github.com/qmk/qmk_firmware/pull/8321) and [qmk_compiler#62](https://github.com/qmk/qmk_compiler/pull/62).
     13 
     14 These PRs move the V-USB driver code out of the qmk_firmware repository and into a submodule pointed at https://github.com/obdev/v-usb. This will make it easier to update the codebase if needed, while applying any potential QMK-specific modifications by forking it to the QMK GitHub organization.
     15 
     16 ### Unify Tap Hold functions and documentation
     17 
     18 [#8348](https://github.com/qmk/qmk_firmware/pull/8348)
     19 
     20 Updates all of the per key tap-hold functions to pass the `keyrecord_t` structure, and include documentation changes.
     21 
     22 Any remaining versions or code outside of the main repo will need to be converted:
     23 | Old function                                         | New Function                                                              |
     24 |------------------------------------------------------|---------------------------------------------------------------------------|
     25 |`uint16_t get_tapping_term(uint16_t keycode)`         |`uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record)`         |
     26 |`bool get_ignore_mod_tap_interrupt(uint16_t keycode)` |`bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record)` |
     27 
     28 ### Python Required In The Build Process
     29 
     30 [#9000](https://github.com/qmk/qmk_firmware/pull/9000)
     31 
     32 This is the last release of QMK that will work without having Python 3.6 (or later) installed. If your environment is not fully setup you will get a warning instructing you to set it up.
     33 
     34 After the next breaking change you will not be able to build if `bin/qmk hello` does not work.
     35 
     36 ### Upgrade from tinyprintf to mpaland/printf
     37 
     38 [#8269](https://github.com/qmk/qmk_firmware/pull/8269)
     39 
     40 - Provides debug functionality on ChibiOS/ARM that is more compliant than previous integrations.
     41 - Less maintenance, fewer QMK customisations, and allows QMK to sidestep previous compile and runtime issues.
     42 - A `make git-submodule` may be required after pulling the latest QMK Firmware code to update to the new dependency.
     43 
     44 ### Fixed RGB_DISABLE_AFTER_TIMEOUT to be seconds based & small internals cleanup
     45 
     46 [#6480](https://github.com/qmk/qmk_firmware/pull/6480)
     47 
     48 - Changes `RGB_DISABLE_AFTER_TIMEOUT` to be based on milliseconds instead of ticks.
     49 - Includes a code cleanup, resulting in a savings of 100 bytes, depending on features used.
     50 - Fixed issues with timeouts / suspending at the wrong time not turning off all LEDs in some cases.
     51 
     52 The `RGB_DISABLE_AFTER_TIMEOUT` definition is now deprecated, and has been superseded by `RGB_DISABLE_TIMEOUT`. To use the new definition, rename `RGB_DISABLE_AFTER_TIMEOUT` to `RGB_DISABLE_TIMEOUT` in your `config.h` file, and multiply the value set by 1200.
     53 
     54 ```diff
     55 -#define RGB_DISABLE_AFTER_TIMEOUT 100
     56 +#define RGB_DISABLE_TIMEOUT 120000
     57 ```
     58 
     59 ### Switch to qmk forks for everything
     60 
     61 [#9019](https://github.com/qmk/qmk_firmware/pull/9019)
     62 
     63 Fork all QMK submodules to protect against upstream repositories disappearing.
     64 
     65 ### code cleanup regarding deprecated macro PLAY_NOTE_ARRAY by replacing it with PLAY_SONG
     66 
     67 [#8484](https://github.com/qmk/qmk_firmware/pull/8484)
     68 
     69 Removes the deprecated `PLAY_NOTE_ARRAY` macro. References to it are replaced with `PLAY_SONG`, which references the same function.
     70 
     71 ### fixing wrong configuration of AUDIO feature
     72 
     73 [#8903](https://github.com/qmk/qmk_firmware/pull/8903) and [#8974](https://github.com/qmk/qmk_firmware/pull/8974)
     74 
     75 `audio_avr.c` does not default to any pin; there has to be a #define XX_AUDIO in config.h at some level for Audio to actually work. Otherwise, the Audio code ends up cluttering the firmware, possibly breaking builds because the maximum allowed firmware size is exceeded.
     76 
     77 These changes fix this by disabling Audio on keyboards that have the feature misconfigured, and therefore non-functional.
     78 
     79 Also, add a compile-time error to alert the user to a missing pin-configuration (on AVR boards) when `AUDIO_ENABLE = yes` is set.
     80 
     81 
     82 ## Keyboard Refactors
     83 
     84 ### Migrating Lily58 to use split_common
     85 
     86 [#6260](https://github.com/qmk/qmk_firmware/pull/6260)
     87 
     88 Modifies the default firmware for Lily58 to use the `split_common` library, instead of including and depending on its own set of libraries for the following functionality:
     89 
     90 - SSD1306 display
     91 - i2c for OLED
     92 - Serial Communication
     93 
     94 This allows current lily58 firmware to advance with updates to the `split_common` library, which is shared with many other split keyboards.
     95 
     96 #### To migrate existing Lily58 firmware:
     97 
     98 [Changes to `config.h`](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-445ac369c8717dcd6fc6fc3630836fc1):
     99 - Remove `#define SSD1306OLED` from config.h
    100 
    101 
    102 [Changes to `keymap.c`](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7):
    103 - Find/Replace each instance of `#ifdef SSD1306OLED` with `#ifdef OLED_DRIVER_ENABLE`
    104 - The following changes are for compatibility with the OLED driver. If you don't use the OLED driver you may safely delete [this section](https://github.com/qmk/qmk_firmware/blob/e6b9980bd45c186f7360df68c24b6e05a80c10dc/keyboards/lily58/keymaps/default/keymap.c#L144-L190)
    105 - Alternatively, if you did not change the OLED code from that in `default`, you may find it easier to simply copy the [relevant section](https://github.com/qmk/qmk_firmware/blob/4ac310668501ae6786c711ecc8f01f62ddaa1c0b/keyboards/lily58/keymaps/default/keymap.c#L138-L172). Otherwise, the changes you need to make are as follows (sample change [here](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7R138-R173))
    106 - [Remove](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7L138-L141) the block
    107 ```c
    108 #ifdef SSD1306OLED
    109   iota_gfx_init(!has_usb());   // turns on the display
    110 #endif
    111 ```
    112 - Within the block bounded by `#ifdef OLED_DRIVER_ENABLE` and `#endif // OLED_DRIVER_ENABLE`, add the following block to ensure that your two OLEDs are rotated correctly across the left and right sides:
    113 ```c
    114 oled_rotation_t oled_init_user(oled_rotation_t rotation) {
    115   if (!is_keyboard_master())
    116     return OLED_ROTATION_180;  // flips the display 180 degrees if offhand
    117   return rotation;
    118 }
    119 ```
    120 - Remove the functions `matrix_scan_user`, `matrix_update` and `iota_gfx_task_user`
    121 - Find/Replace `matrix_render_user(struct CharacterMatrix *matrix)` with `iota_gfx_task_user(void)`
    122 - Find/Replace `is_master` with `is_keyboard_master()`
    123 - For each instance of `matrix_write_ln(matrix, display_fn())`, rewrite it as `oled_write_ln(read_layer_state(), false);`
    124 - For each instance of `matrix_write(matrix, read_logo());`, replace with `oled_write(read_logo(), false);`
    125 
    126 ### Refactor zinc to use split_common
    127 
    128 [#7114](https://github.com/qmk/qmk_firmware/pull/7114) and [#9171](https://github.com/qmk/qmk_firmware/pull/9171)
    129 
    130 * Refactor to use split_common and remove split codes under the zinc/revx/
    131 * Add - backlight RGB LED and/or underglow RGB LED option
    132 * Add - continuous RGB animations feature (between L and R halves)
    133 * Fix - keymap files to adapt to changes
    134     * all authors of keymaps confirmed this PR
    135 * Update - documents and rules.mk
    136 
    137 ### Refactor of TKC1800 to use common OLED code
    138 
    139 [#8472](https://github.com/qmk/qmk_firmware/pull/8472)
    140 
    141 Modifies the default firmware for TKC1800 to use the in-built I2C and OLED drivers, instead of including and depending on its own set of libraries for the following functionality:
    142 
    143 - SSD1306 display
    144 - i2c for OLED
    145 
    146 This allows current TKC1800 firmware to advance with updates to those drivers, which are shared with other keyboards.
    147 
    148 #### To migrate existing TKC1800 firmware:
    149 
    150 [Changes to `config.h`](https://github.com/qmk/qmk_firmware/pull/8472/files#diff-d10b26e676b4a55cbb00d71955116526):
    151 - Remove `#define SSD1306OLED` from config.h
    152 
    153 [Changes to `tkc1800.c`](https://github.com/qmk/qmk_firmware/pull/8472/files#diff-3b35bd30abe89c8110717c6972cd2cc5):
    154 - Add the following to avoid debug errors on HID_listen if the screen is not present
    155 ```c
    156 void keyboard_pre_init_kb(void) {
    157   setPinInputHigh(D0);
    158   setPinInputHigh(D1);
    159 
    160   keyboard_pre_init_user();
    161 }
    162 ```
    163 
    164 [Changes to `keymap.c`](https://github.com/qmk/qmk_firmware/pull/8472/files#diff-05a2a344ce27e4d045fe68520ccd4771):
    165 - Find/Replace each instance of `#ifdef SSD1306OLED` with `#ifdef OLED_DRIVER_ENABLE`
    166 - The following changes are for compatibility with the OLED driver. If you don't use the OLED driver you may safely delete [this section](https://github.com/qmk/qmk_firmware/blob/e6b9980bd45c186f7360df68c24b6e05a80c10dc/keyboards/lily58/keymaps/default/keymap.c#L144-L190)
    167 - [Remove](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7L91-L158) the block
    168 ```c
    169 #ifdef SSD1306OLED
    170   iota_gfx_init(!has_usb());   // turns on the display
    171 #endif
    172 ```
    173 - Within the block bounded by `#ifdef OLED_DRIVER_ENABLE` and `#endif // OLED_DRIVER_ENABLE`, add the following block to ensure that your two OLEDs are rotated correctly across the left and right sides:
    174 ```c
    175 oled_rotation_t oled_init_user(oled_rotation_t rotation) {
    176   if (!is_keyboard_master())
    177     return OLED_ROTATION_180;  // flips the display 180 degrees if offhand
    178   return rotation;
    179 }
    180 ```
    181 - Remove the function `iota_gfx_task_user`
    182 
    183 ### Split HHKB to ANSI and JP layouts and Add VIA support for each
    184 
    185 [#8582](https://github.com/qmk/qmk_firmware/pull/8582)
    186 
    187 - Splits the HHKB codebase into two separate folders `keyboards/hhkb/ansi` and `keyboards/hhkb/jp`.
    188 - Adds VIA Configurator support for both versions.
    189 
    190 #### Migrating existing HHKB keymaps
    191 
    192 - Remove any checks for the `HHKB_JP` definition
    193   - All checks for this definition have been removed, and each version uses the source that is appropriate to that version.
    194 - Move the directory for your keymap into the appropriate `keymaps` directory
    195   - `keyboards/hhkb/ansi/keymaps/` for ANSI HHKBs
    196   - `keyboards/hhkb/jp/keymaps/` for HHKB JPs
    197 - Compile with the new keyboard names
    198   - This PR changes the compilation instructions for the HHKB Alternate Controller. To compile firmware for this controller moving forward, use:
    199     - `make hhkb/ansi` for ANSI-layout HHKBs
    200     - `make hhkb/jp` for HHKB JP keyboards
    201 
    202 
    203 ## Keyboard Moves
    204 
    205 - [#8412](https://github.com/qmk/qmk_firmware/pull/8412 "Changing board names to prevent confusion") by blindassassin111
    206 - [#8499](https://github.com/qmk/qmk_firmware/pull/8499 "Move the Keyboardio Model01 to a keyboardio/ subdir") by algernon
    207 - [#8830](https://github.com/qmk/qmk_firmware/pull/8830 "Move spaceman keyboards") by Spaceman (formerly known as Rionlion100)
    208 - [#8537](https://github.com/qmk/qmk_firmware/pull/8537 "Organizing my keyboards (plaid, tartan, ergoinu)") by hsgw
    209 
    210 Keyboards by Keyboardio, Spaceman, and hsgw move to vendor folders, while PCBs designed by blindassassin111 are renamed.
    211 
    212 Old Name           | New Name
    213 :----------------- | :-----------------
    214 2_milk             | spaceman/2_milk
    215 at101_blackheart   | at101_bh
    216 ergoinu            | dm9records/ergoinu
    217 model01            | keyboardio/model01
    218 omnikey_blackheart | omnikey_bh
    219 pancake            | spaceman/pancake
    220 plaid              | dm9records/plaid
    221 tartan             | dm9records/tartan
    222 z150_blackheart    | z150_bh
    223 
    224 If you own one of these PCBs, please use the new names to compile your firmware moving forward.
    225 
    226 
    227 ## Keycode Migration PRs
    228 
    229 [#8954](https://github.com/qmk/qmk_firmware/pull/8954 "Migrate `ACTION_LAYER_TOGGLE` to `TG()`"), [#8957](https://github.com/qmk/qmk_firmware/pull/8957 "Migrate `ACTION_MODS_ONESHOT` to `OSM()`"), [#8958](https://github.com/qmk/qmk_firmware/pull/8958 "Migrate `ACTION_DEFAULT_LAYER_SET` to `DF()`"), [#8959](https://github.com/qmk/qmk_firmware/pull/8959 "Migrate `ACTION_LAYER_MODS` to `LM()`"), [#8968](https://github.com/qmk/qmk_firmware/pull/8968 "Migrate `ACTION_MODS_TAP_KEY` to `MT()`"), [#8977](https://github.com/qmk/qmk_firmware/pull/8977 "Migrate miscellaneous `fn_actions` entries"), and [#8979](https://github.com/qmk/qmk_firmware/pull/8979 "Migrate `ACTION_MODS_KEY` to chained mod keycodes")
    230 
    231 Authored by fauxpark, these pull requests remove references to deprecated TMK macros that have been superseded by native QMK keycodes.
    232 
    233 Old `fn_actions` action | New QMK keycode
    234 :---------------------- | :--------------
    235 `ACTION_DEFAULT_LAYER_SET(layer)` | `DF(layer)`
    236 `ACTION_LAYER_MODS(layer, mod)` | `LM(layer, mod)`
    237 `ACTION_LAYER_ONESHOT(mod)` | `OSL(mod)`
    238 `ACTION_LAYER_TOGGLE(layer)` | `TG(layer)`
    239 `ACTION_MODS_ONESHOT(mod)` | `OSM(mod)`
    240 `ACTION_MODS_TAP_KEY(mod, kc)` | `MT(mod, kc)`
    241 `ACTION_MODS_KEY(mod, kc)`<br>e.g. `ACTION_MODS_KEY(MOD_LCTL, KC_0)` | `MOD(kc)`<br>e.g. `LCTL(KC_0)`