diff options
author | Dustin L. Howett <dustin@howett.net> | 2020-03-01 21:17:09 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-02 05:17:09 +0000 |
commit | b72a1aa3fec986bfa7e439b68d6b7546ab1e280b (patch) | |
tree | d9d1de0e5f0893fc204dd712fd4b16b543c960e9 /keyboards/bpiphany/frosty_flake/frosty_flake.c | |
parent | 78069d482634b3b727e5d09b526fa24c227cc4e2 (diff) | |
download | firmware-b72a1aa3fec986bfa7e439b68d6b7546ab1e280b.tar.gz firmware-b72a1aa3fec986bfa7e439b68d6b7546ab1e280b.tar.bz2 firmware-b72a1aa3fec986bfa7e439b68d6b7546ab1e280b.zip |
Rewrite the Bathroom Epiphanies Frosty Flake matrix and LED handling (#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 42d6270f2)
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).
Diffstat (limited to 'keyboards/bpiphany/frosty_flake/frosty_flake.c')
-rw-r--r-- | keyboards/bpiphany/frosty_flake/frosty_flake.c | 73 |
1 files changed, 17 insertions, 56 deletions
diff --git a/keyboards/bpiphany/frosty_flake/frosty_flake.c b/keyboards/bpiphany/frosty_flake/frosty_flake.c index 1cd476038..be4e1a312 100644 --- a/keyboards/bpiphany/frosty_flake/frosty_flake.c +++ b/keyboards/bpiphany/frosty_flake/frosty_flake.c @@ -1,63 +1,24 @@ #include "frosty_flake.h" -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - - matrix_init_user(); +void keyboard_pre_init_kb() { + setPinOutput(B7); // num lock + writePinHigh(B7); + setPinOutput(C5); // caps lock + writePinHigh(C7); + setPinOutput(C6); // scroll lock + writePinHigh(C6); + + keyboard_pre_init_user(); } -void matrix_scan_kb(void) { - // put your looping keyboard code here - // runs every cycle (a lot) - - matrix_scan_user(); -} +bool led_update_kb(led_t usb_led) { + // user requests no further processing + if (!led_update_user(usb_led)) + return true; -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - // put your per-action keyboard code here - // runs for every action, just before processing by the firmware + writePin(C5, !usb_led.caps_lock); + writePin(B7, !usb_led.num_lock); + writePin(C6, !usb_led.scroll_lock); - return process_record_user(keycode, record); + return true; } - -void led_set_kb(uint8_t usb_led) { - DDRB |= (1<<7); - DDRC |= (1<<5) | (1<<6); - - print_dec(usb_led); - - if (usb_led & (1<<USB_LED_CAPS_LOCK)) - PORTC &= ~(1<<5); - else - PORTC |= (1<<5); - - if (usb_led & (1<<USB_LED_NUM_LOCK)) - PORTB &= ~(1<<7); - else - PORTB |= (1<<7); - - if (usb_led & (1<<USB_LED_SCROLL_LOCK)) - PORTC &= ~(1<<6); - else - PORTC |= (1<<6); - - led_set_user(usb_led); -} - -__attribute__ ((weak)) -void matrix_init_user(void) { -} - -__attribute__ ((weak)) -void matrix_scan_user(void) { -} - -__attribute__ ((weak)) -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - -__attribute__ ((weak)) -void led_set_user(uint8_t usb_led) { -}
\ No newline at end of file |