forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rewrite the Bathroom Epiphanies Frosty Flake matrix and LED handling (q…
…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).
- Loading branch information
Showing
5 changed files
with
77 additions
and
168 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters