Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite the Bathroom Epiphanies Frosty Flake matrix and LED handling #8243

Merged
merged 4 commits into from
Mar 2, 2020

Conversation

DHowett
Copy link
Contributor

@DHowett DHowett commented Feb 25, 2020

This pull request comprises three individual commits with their own descriptions, copied below.

dc994e883 - Keyboard: rewrite frosty_flake's matrix reader to be a lite custom matrix

This commit replaces frosty_flake's custom matrix and debounce logic
with a "lite" custom matrix. In addition to being somewhat clearer, this
allows a consumer of the flake board to choose their own debouncing
algorithm. The one closest to the implementation originally in use is
sym_g, but this opens us up to supporting eager_pk and eager_pr.

The original matrix code was 18 columns for 8 rows, but using a single
row read and unpacking the bits into individual columns. To simplify,
I've changed the key layout to be 8C 18R instead of 18C 8R: this lets us
use a single read directly into the matrix and drop down to a uint8_t
instead of a uint32_t for matrix_row_t.

Since we're no longer implementing our own debouncing and row unpacking,
we save ~400 bytes on the final firmware image.

Fully tested against a CM Storm QFR hosting the flake -- this commit
message was written using the new matrix code.

Firmware Sizes (assuming stock configuration as of 42d6270)

Matrix+Debounce     Size (bytes)
---------------     ------------
original            17740
new + sym_g         17284
new + eager_pr      18106
new + eager_pk      18204

I expect that there are some scanning speed benefits as well.

df14844619b - Keyboard: update frosty_flake's UNUSED_PINS

66bb555d - Keyboard: revamp frosty-flake leds

This commit transitions bpiphany/frosty_flake to led_update_{kb,user}
and rewrites the AVR bit twiddling logic to use the standard QMK GPIO
API.

f3428f9be09 - Keyboards: Remove meaningless weak redefinitions from frosty

These are not necessary (and all of them already live somewhere in
Quantum).

Types of Changes

  • Core
  • Bugfix
  • New feature
  • Enhancement/optimization
  • Keyboard (addition or update)
  • Keymap/layout/userspace (addition or update)
  • Documentation

Checklist

  • My code follows the code style of this project (I believe)
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have read the CONTRIBUTING document.
  • I have added tests to cover my changes.
  • I have tested the changes and verified that they work and don't break anything (as well as I can manage).

@DHowett DHowett changed the title Rewrite the Bathroom Epiphanies' Frosty Flake matrix and LED handling Rewrite the Bathroom Epiphanies Frosty Flake matrix and LED handling Feb 25, 2020
@DHowett
Copy link
Contributor Author

DHowett commented Feb 25, 2020

CI build failure seems unrelated to this change ☹️

@noroadsleft
Copy link
Member

CI build failure seems unrelated to this change ☹️

It was unrelated.


led_set_user(usb_led);
return true;
}

__attribute__ ((weak))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Everything from this line onwards can be deleted.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Happy to. I kept most of these since they were in the original implementation, but I wasn’t sure if they were only valuable as a “here’s how to write a keyboard” template or had practical use.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done- I also pulled the two above which were matrix_{init,scan}_kb and were also present in quantum/

This commit transitions bpiphany/frosty_flake to led_update_{kb,user}
and rewrites the AVR bit twiddling logic to use the standard QMK GPIO
API.
…trix

This commit replaces frosty_flake's custom matrix and debounce logic
with a "lite" custom matrix. In addition to being somewhat clearer, this
allows a consumer of the flake board to choose their own debouncing
algorithm. The one closest to the implementation originally in use is
sym_g, but this opens us up to supporting eager_pk and eager_pr.

The original matrix code was 18 columns for 8 rows, but using a single
row read and unpacking the bits into individual columns. To simplify,
I've changed the key layout to be 8C 18R instead of 18C 8R: this lets us
use a single read directly into the matrix _and_ drop down to a uint8_t
instead of a uint32_t for matrix_row_t.

Since we're no longer implementing our own debouncing and row unpacking,
we save ~400 bytes on the final firmware image.

Fully tested against a CM Storm QFR hosting the flake -- this commit
message was written using the new matrix code.

Firmware Sizes (assuming stock configuration as of 42d6270)

Matrix+Debounce     Size (bytes)
---------------     ------------
original            17740
new + sym_g         17284
new + eager_pr      18106
new + eager_pk      18204

I expect that there are some scanning speed benefits as well.
These are not necessary (and all of them already live somewhere in
Quantum).
@drashna drashna requested a review from a team March 1, 2020 00:45
@drashna drashna requested a review from a team March 1, 2020 01:09
@DHowett
Copy link
Contributor Author

DHowett commented Mar 2, 2020

FWIW: I maintained the four commits indicated without intermediate "address PR feedback" commits for if you have a rebasing pull request workflow. 😄 Thanks for the review!

@zvecr zvecr merged commit b72a1aa into qmk:master Mar 2, 2020
@zvecr
Copy link
Member

zvecr commented Mar 2, 2020

Thanks!

Shinichi-Ohki added a commit to Shinichi-Ohki/qmk_firmware that referenced this pull request Mar 3, 2020
* 'master' of https://github.com/qmk/qmk_firmware: (37 commits)
  Update Hungarian keymap and add sendstring LUT (qmk#8220)
  Remove "ugly hack in usb_main.c" comments (qmk#8296)
  Update encoder functions for Iris VIA keymap (qmk#8295)
  Reduce PROGMEM usage for sendstring LUT (qmk#8109)
  [Docs] Update ISP Flashing guide (qmk#8149)
  Rewrite the Bathroom Epiphanies Frosty Flake matrix and LED handling (qmk#8243)
  Add onekey keymap for testing reset to bootloader. (qmk#8288)
  Get the direction right on the S75 encoder (qmk#8287)
  Prune out pure software pwm && custom driver && remove wrapping BACKLIGHT_PIN (qmk#8041)
  Make a fix to savage65 and tmov2 for via (qmk#8286)
  format code according to conventions [skip ci]
  Short term fix for conflicting types for 'tfp_printf' (qmk#8157)
  Fix recent clang-format breaking quantum.c (qmk#8282)
  format code according to conventions [skip ci]
  Remove duplicate BRTG case (qmk#8277)
  Clean up includes for glcdfont headers (qmk#7745)
  Fix the Breaking Changes doc again
  [Docs] translated 'feature_tap_dance.md' to japanese. (qmk#8137)
  PWM DMA based RGB Underglow for STM32 (qmk#7928)
  Add VIA support to Prime_M. Clean up all files (qmk#8247)
  ...
HokieGeek pushed a commit to HokieGeek/qmk_firmware that referenced this pull request Mar 5, 2020
…mk#8243)

* Keyboard: revamp frosty-flake leds

This commit transitions bpiphany/frosty_flake to led_update_{kb,user}
and rewrites the AVR bit twiddling logic to use the standard QMK GPIO
API.

* Keyboard: rewrite frosty_flake's matrix reader to be a lite custom matrix

This commit replaces frosty_flake's custom matrix and debounce logic
with a "lite" custom matrix. In addition to being somewhat clearer, this
allows a consumer of the flake board to choose their own debouncing
algorithm. The one closest to the implementation originally in use is
sym_g, but this opens us up to supporting eager_pk and eager_pr.

The original matrix code was 18 columns for 8 rows, but using a single
row read and unpacking the bits into individual columns. To simplify,
I've changed the key layout to be 8C 18R instead of 18C 8R: this lets us
use a single read directly into the matrix _and_ drop down to a uint8_t
instead of a uint32_t for matrix_row_t.

Since we're no longer implementing our own debouncing and row unpacking,
we save ~400 bytes on the final firmware image.

Fully tested against a CM Storm QFR hosting the flake -- this commit
message was written using the new matrix code.

Firmware Sizes (assuming stock configuration as of 42d6270)

Matrix+Debounce     Size (bytes)
---------------     ------------
original            17740
new + sym_g         17284
new + eager_pr      18106
new + eager_pk      18204

I expect that there are some scanning speed benefits as well.

* Keyboard: update frosty_flake's UNUSED_PINS

* Keyboard: Remove meaningless weak redefinitions from frosty

These are not necessary (and all of them already live somewhere in
Quantum).
nesth pushed a commit to nesth/qmk_firmware that referenced this pull request Mar 5, 2020
* upstream/master: (37 commits)
  Add RGB lighting through one of the free pins (qmk#8294)
  [Keymap] Adding the 4sStylZ xd75 (qmk#8285)
  YD60MQ refactor and Configurator layout support (qmk#8313)
  [Keyboard] Forget to ifdef Super16 led config (qmk#8314)
  [Keyboard] Switch to RGB Matrix for Super16 (qmk#8305)
  [Keymap] Keymap Update (qmk#8309)
  New Keyboard: SiddersKB Majbritt (Pronounced My Brit) (qmk#8260)
  [Keyboard] VIA Support: Tada68 (qmk#8289)
  [Keyboard] LFK78 refactor (qmk#7835)
  [Keymap] new userspace for ibnuda (qmk#8221)
  [Keymap] Add crd's equinox keymap (qmk#8251)
  [Keymap] Feature/alfrdmalr/keymap update (qmk#8174)
  Fix bootloader definition for namecard2x4 (qmk#8301)
  Update Hungarian keymap and add sendstring LUT (qmk#8220)
  Remove "ugly hack in usb_main.c" comments (qmk#8296)
  Update encoder functions for Iris VIA keymap (qmk#8295)
  Reduce PROGMEM usage for sendstring LUT (qmk#8109)
  [Docs] Update ISP Flashing guide (qmk#8149)
  Rewrite the Bathroom Epiphanies Frosty Flake matrix and LED handling (qmk#8243)
  Add onekey keymap for testing reset to bootloader. (qmk#8288)
  ...
c0psrul3 pushed a commit to c0psrul3/qmk_firmware that referenced this pull request Mar 23, 2020
…mk#8243)

* Keyboard: revamp frosty-flake leds

This commit transitions bpiphany/frosty_flake to led_update_{kb,user}
and rewrites the AVR bit twiddling logic to use the standard QMK GPIO
API.

* Keyboard: rewrite frosty_flake's matrix reader to be a lite custom matrix

This commit replaces frosty_flake's custom matrix and debounce logic
with a "lite" custom matrix. In addition to being somewhat clearer, this
allows a consumer of the flake board to choose their own debouncing
algorithm. The one closest to the implementation originally in use is
sym_g, but this opens us up to supporting eager_pk and eager_pr.

The original matrix code was 18 columns for 8 rows, but using a single
row read and unpacking the bits into individual columns. To simplify,
I've changed the key layout to be 8C 18R instead of 18C 8R: this lets us
use a single read directly into the matrix _and_ drop down to a uint8_t
instead of a uint32_t for matrix_row_t.

Since we're no longer implementing our own debouncing and row unpacking,
we save ~400 bytes on the final firmware image.

Fully tested against a CM Storm QFR hosting the flake -- this commit
message was written using the new matrix code.

Firmware Sizes (assuming stock configuration as of 42d6270)

Matrix+Debounce     Size (bytes)
---------------     ------------
original            17740
new + sym_g         17284
new + eager_pr      18106
new + eager_pk      18204

I expect that there are some scanning speed benefits as well.

* Keyboard: update frosty_flake's UNUSED_PINS

* Keyboard: Remove meaningless weak redefinitions from frosty

These are not necessary (and all of them already live somewhere in
Quantum).
sowbug pushed a commit to sowbug/qmk_firmware that referenced this pull request Apr 2, 2020
…mk#8243)

* Keyboard: revamp frosty-flake leds

This commit transitions bpiphany/frosty_flake to led_update_{kb,user}
and rewrites the AVR bit twiddling logic to use the standard QMK GPIO
API.

* Keyboard: rewrite frosty_flake's matrix reader to be a lite custom matrix

This commit replaces frosty_flake's custom matrix and debounce logic
with a "lite" custom matrix. In addition to being somewhat clearer, this
allows a consumer of the flake board to choose their own debouncing
algorithm. The one closest to the implementation originally in use is
sym_g, but this opens us up to supporting eager_pk and eager_pr.

The original matrix code was 18 columns for 8 rows, but using a single
row read and unpacking the bits into individual columns. To simplify,
I've changed the key layout to be 8C 18R instead of 18C 8R: this lets us
use a single read directly into the matrix _and_ drop down to a uint8_t
instead of a uint32_t for matrix_row_t.

Since we're no longer implementing our own debouncing and row unpacking,
we save ~400 bytes on the final firmware image.

Fully tested against a CM Storm QFR hosting the flake -- this commit
message was written using the new matrix code.

Firmware Sizes (assuming stock configuration as of 42d6270)

Matrix+Debounce     Size (bytes)
---------------     ------------
original            17740
new + sym_g         17284
new + eager_pr      18106
new + eager_pk      18204

I expect that there are some scanning speed benefits as well.

* Keyboard: update frosty_flake's UNUSED_PINS

* Keyboard: Remove meaningless weak redefinitions from frosty

These are not necessary (and all of them already live somewhere in
Quantum).
kylekuj pushed a commit to kylekuj/qmk_firmware that referenced this pull request Apr 21, 2020
…mk#8243)

* Keyboard: revamp frosty-flake leds

This commit transitions bpiphany/frosty_flake to led_update_{kb,user}
and rewrites the AVR bit twiddling logic to use the standard QMK GPIO
API.

* Keyboard: rewrite frosty_flake's matrix reader to be a lite custom matrix

This commit replaces frosty_flake's custom matrix and debounce logic
with a "lite" custom matrix. In addition to being somewhat clearer, this
allows a consumer of the flake board to choose their own debouncing
algorithm. The one closest to the implementation originally in use is
sym_g, but this opens us up to supporting eager_pk and eager_pr.

The original matrix code was 18 columns for 8 rows, but using a single
row read and unpacking the bits into individual columns. To simplify,
I've changed the key layout to be 8C 18R instead of 18C 8R: this lets us
use a single read directly into the matrix _and_ drop down to a uint8_t
instead of a uint32_t for matrix_row_t.

Since we're no longer implementing our own debouncing and row unpacking,
we save ~400 bytes on the final firmware image.

Fully tested against a CM Storm QFR hosting the flake -- this commit
message was written using the new matrix code.

Firmware Sizes (assuming stock configuration as of 42d6270)

Matrix+Debounce     Size (bytes)
---------------     ------------
original            17740
new + sym_g         17284
new + eager_pr      18106
new + eager_pk      18204

I expect that there are some scanning speed benefits as well.

* Keyboard: update frosty_flake's UNUSED_PINS

* Keyboard: Remove meaningless weak redefinitions from frosty

These are not necessary (and all of them already live somewhere in
Quantum).
jakeisnt pushed a commit to jakeisnt/qmk_firmware that referenced this pull request Aug 20, 2020
…mk#8243)

* Keyboard: revamp frosty-flake leds

This commit transitions bpiphany/frosty_flake to led_update_{kb,user}
and rewrites the AVR bit twiddling logic to use the standard QMK GPIO
API.

* Keyboard: rewrite frosty_flake's matrix reader to be a lite custom matrix

This commit replaces frosty_flake's custom matrix and debounce logic
with a "lite" custom matrix. In addition to being somewhat clearer, this
allows a consumer of the flake board to choose their own debouncing
algorithm. The one closest to the implementation originally in use is
sym_g, but this opens us up to supporting eager_pk and eager_pr.

The original matrix code was 18 columns for 8 rows, but using a single
row read and unpacking the bits into individual columns. To simplify,
I've changed the key layout to be 8C 18R instead of 18C 8R: this lets us
use a single read directly into the matrix _and_ drop down to a uint8_t
instead of a uint32_t for matrix_row_t.

Since we're no longer implementing our own debouncing and row unpacking,
we save ~400 bytes on the final firmware image.

Fully tested against a CM Storm QFR hosting the flake -- this commit
message was written using the new matrix code.

Firmware Sizes (assuming stock configuration as of 42d6270)

Matrix+Debounce     Size (bytes)
---------------     ------------
original            17740
new + sym_g         17284
new + eager_pr      18106
new + eager_pk      18204

I expect that there are some scanning speed benefits as well.

* Keyboard: update frosty_flake's UNUSED_PINS

* Keyboard: Remove meaningless weak redefinitions from frosty

These are not necessary (and all of them already live somewhere in
Quantum).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants