aboutsummaryrefslogtreecommitdiffstats
path: root/keyboards/bpiphany/frosty_flake/frosty_flake.c
diff options
context:
space:
mode:
authorDustin L. Howett <dustin@howett.net>2020-03-01 21:17:09 -0800
committerGitHub <noreply@github.com>2020-03-02 05:17:09 +0000
commitb72a1aa3fec986bfa7e439b68d6b7546ab1e280b (patch)
treed9d1de0e5f0893fc204dd712fd4b16b543c960e9 /keyboards/bpiphany/frosty_flake/frosty_flake.c
parent78069d482634b3b727e5d09b526fa24c227cc4e2 (diff)
downloadfirmware-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.c73
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