diff --git a/keyboards/work_louder/loop/config.h b/keyboards/work_louder/loop/config.h index 011fe4f321a..bd8e3d075cc 100644 --- a/keyboards/work_louder/loop/config.h +++ b/keyboards/work_louder/loop/config.h @@ -24,7 +24,7 @@ along with this program. If not, see . #define PRODUCT_ID 0x1DF8 #define DEVICE_VER 0x0001 #define MANUFACTURER Work Louder -#define PRODUCT loop +#define PRODUCT Loop Pad /* key matrix size */ #define MATRIX_ROWS 2 @@ -40,7 +40,8 @@ along with this program. If not, see . * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) * */ -#define MATRIX_ROW_PINS { F5 } +#define MATRIX_ROW_PINS \ + { F5, NO_PIN } #define MATRIX_COL_PINS { B3, B2, B1, D6, D7, B4, B5, B6, C6, C7, F7, F6 } #define UNUSED_PINS @@ -63,20 +64,21 @@ along with this program. If not, see . //# define RGBLIGHT_HUE_STEP 8 //# define RGBLIGHT_SAT_STEP 8 //# define RGBLIGHT_VAL_STEP 8 -//# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ -# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ -/*== all animations enable ==*/ -# define RGBLIGHT_ANIMATIONS +#define RGBLIGHT_LIMIT_VAL 120 /* The maximum brightness level */ +#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ /*== or choose animations ==*/ -//# define RGBLIGHT_EFFECT_BREATHING -//# define RGBLIGHT_EFFECT_RAINBOW_MOOD -//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL -//# define RGBLIGHT_EFFECT_SNAKE -//# define RGBLIGHT_EFFECT_KNIGHT -//# define RGBLIGHT_EFFECT_CHRISTMAS -//# define RGBLIGHT_EFFECT_STATIC_GRADIENT -//# define RGBLIGHT_EFFECT_RGB_TEST -//# define RGBLIGHT_EFFECT_ALTERNATING +#define RGBLIGHT_EFFECT_BREATHING +#define RGBLIGHT_EFFECT_RAINBOW_MOOD +#define RGBLIGHT_EFFECT_RAINBOW_SWIRL +#define RGBLIGHT_EFFECT_SNAKE +#define RGBLIGHT_EFFECT_KNIGHT +#define RGBLIGHT_EFFECT_CHRISTMAS +#define RGBLIGHT_EFFECT_STATIC_GRADIENT +#define RGBLIGHT_EFFECT_RGB_TEST +#define RGBLIGHT_EFFECT_TWINKLE + +#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_STATIC_LIGHT +#define RGBLIGHT_DEFAULT_HUE 36 /*== customize breathing effect ==*/ /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/ //# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64 @@ -87,7 +89,10 @@ along with this program. If not, see . #define RGB_DI_PIN F1 #define DRIVER_LED_TOTAL 9 +#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 #define RGB_MATRIX_DISABLE_KEYCODES +#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT // Sets the default mode, if none has been set +#define RGB_DISABLE_WHEN_USB_SUSPENDED /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ #define DEBOUNCE 5 diff --git a/keyboards/work_louder/loop/keymaps/via/keymap.c b/keyboards/work_louder/loop/keymaps/via/keymap.c index 134bce65dfa..c5769b99109 100644 --- a/keyboards/work_louder/loop/keymaps/via/keymap.c +++ b/keyboards/work_louder/loop/keymaps/via/keymap.c @@ -15,11 +15,11 @@ */ #include QMK_KEYBOARD_H +// clang-format off const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Base */ [0] = LAYOUT_via( KC_MUTE, KC_MPLY, R_M_TOG, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, MO(1), - KC_VOLD, KC_VOLD, KC_MPRV, KC_MNXT, R_M_MOD, R_M_RMOD + KC_VOLU, KC_VOLD, KC_MNXT, KC_MPRV, R_M_MOD, R_M_RMOD ), [1] = LAYOUT_via( RESET, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, MO(2), _______, diff --git a/keyboards/work_louder/loop/loop.c b/keyboards/work_louder/loop/loop.c index 3551995317d..5c0d108d192 100644 --- a/keyboards/work_louder/loop/loop.c +++ b/keyboards/work_louder/loop/loop.c @@ -43,14 +43,15 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { #endif #ifdef RGB_MATRIX_ENABLE +// clang-format off led_config_t g_led_config = { { { NO_LED, NO_LED, NO_LED, 8, 7, 6, 5, 4, 3, 2, 1, 0 } }, { - { 36, 32 }, { 55, 32 }, { 74, 32 }, { 93, 32 }, { 112, 32 }, { 131, 32 }, { 150, 32 }, { 169, 32 }, { 188, 32 } + {188, 32}, {169, 32}, {150, 32}, {131, 32}, {112, 32}, {93, 32}, {74, 32}, {55, 32}, {36, 32} }, { 4, 4, 4, 4, 4, 4, 4, 4, 4 } }; - +// clang-format on #endif diff --git a/keyboards/work_louder/nano/config.h b/keyboards/work_louder/nano/config.h index 4c897b7e51b..1a47e725bb8 100644 --- a/keyboards/work_louder/nano/config.h +++ b/keyboards/work_louder/nano/config.h @@ -24,15 +24,11 @@ along with this program. If not, see . #define PRODUCT_ID 0xE6EF #define DEVICE_VER 0x0001 #define MANUFACTURER Work Louder -#define PRODUCT nano +#define PRODUCT Nano Pad /* key matrix size */ -#define MATRIX_ROWS 1 -#ifdef VIA_ENABLE -# define MATRIX_COLS 5 -#else -# define MATRIX_COLS 3 -#endif +#define MATRIX_ROWS 1 +#define MATRIX_COLS 5 /* * Keyboard Matrix Assignments @@ -44,13 +40,13 @@ along with this program. If not, see . * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) * */ -#define MATRIX_ROW_PINS { F7 } -#define MATRIX_COL_PINS { B5, B6, C6 } -#define UNUSED_PINS +#define MATRIX_ROW_PINS \ + { F7 } +#define MATRIX_COL_PINS \ + { B5, B6, C6, NO_PIN, NO_PIN } /* COL2ROW, ROW2COL */ -#define DIODE_DIRECTION COL2ROW - +#define DIODE_DIRECTION COL2ROW //#define LED_NUM_LOCK_PIN B0 //#define LED_CAPS_LOCK_PIN B1 @@ -62,25 +58,26 @@ along with this program. If not, see . //#define BACKLIGHT_LEVELS 3 //#define BACKLIGHT_BREATHING -#define RGBLIGHT_DI_PIN C7 -# define RGBLED_NUM 6 +#define RGBLIGHT_DI_PIN C7 +#define RGBLED_NUM 6 //# define RGBLIGHT_HUE_STEP 8 //# define RGBLIGHT_SAT_STEP 8 //# define RGBLIGHT_VAL_STEP 8 -//# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ -# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ -/*== all animations enable ==*/ -# define RGBLIGHT_ANIMATIONS +#define RGBLIGHT_LIMIT_VAL 120 /* The maximum brightness level */ +#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ /*== or choose animations ==*/ -//# define RGBLIGHT_EFFECT_BREATHING -//# define RGBLIGHT_EFFECT_RAINBOW_MOOD -//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL -//# define RGBLIGHT_EFFECT_SNAKE -//# define RGBLIGHT_EFFECT_KNIGHT -//# define RGBLIGHT_EFFECT_CHRISTMAS -//# define RGBLIGHT_EFFECT_STATIC_GRADIENT -//# define RGBLIGHT_EFFECT_RGB_TEST -//# define RGBLIGHT_EFFECT_ALTERNATING +#define RGBLIGHT_EFFECT_BREATHING +#define RGBLIGHT_EFFECT_RAINBOW_MOOD +#define RGBLIGHT_EFFECT_RAINBOW_SWIRL +#define RGBLIGHT_EFFECT_SNAKE +#define RGBLIGHT_EFFECT_KNIGHT +#define RGBLIGHT_EFFECT_CHRISTMAS +#define RGBLIGHT_EFFECT_STATIC_GRADIENT +#define RGBLIGHT_EFFECT_RGB_TEST +#define RGBLIGHT_EFFECT_TWINKLE +#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_STATIC_LIGHT +#define RGBLIGHT_DEFAULT_HUE 170 + /*== customize breathing effect ==*/ /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/ //# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64 @@ -89,9 +86,11 @@ along with this program. If not, see . //# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255 //#endif -#define RGB_DI_PIN F6 -#define DRIVER_LED_TOTAL 2 +#define RGB_DI_PIN F6 +#define DRIVER_LED_TOTAL 2 +#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 #define RGB_MATRIX_DISABLE_KEYCODES +#define RGB_DISABLE_WHEN_USB_SUSPENDED /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ #define DEBOUNCE 5 @@ -151,14 +150,21 @@ along with this program. If not, see . #define NO_ACTION_FUNCTION /* Bootmagic Lite key configuration */ -#define BOOTMAGIC_LITE_ROW 0 -#define BOOTMAGIC_LITE_COLUMN 3 - +#define BOOTMAGIC_LITE_ROW 0 +#define BOOTMAGIC_LITE_COLUMN 2 -#define ENCODERS_PAD_A { D7 } -#define ENCODERS_PAD_B { B4 } +#define ENCODERS_PAD_A \ + { D7 } +#define ENCODERS_PAD_B \ + { B4 } #define ENCODERS 1 -#define ENCODERS_CW_KEY { { 3, 0 } } -#define ENCODERS_CCW_KEY { { 4, 0 } } +#define ENCODERS_CW_KEY \ + { \ + { 3, 0 } \ + } +#define ENCODERS_CCW_KEY \ + { \ + { 4, 0 } \ + } diff --git a/keyboards/work_louder/rgb_functions.c b/keyboards/work_louder/rgb_functions.c index 5a2043f9b40..c9106b39760 100644 --- a/keyboards/work_louder/rgb_functions.c +++ b/keyboards/work_louder/rgb_functions.c @@ -17,13 +17,160 @@ #include QMK_KEYBOARD_H #include "rgb_functions.h" -#if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_EANBLE) -# undef RGB_DI_PIN -# define RGBLIGHT_DI_PIN -# include "ws2812.c" +#ifdef RGBLIGHT_ENABLE +# include "ws2812.h" +# include +# include +# include + +# define pinmask(pin) (_BV((pin)&0xF)) + +/* + * Forward declare internal functions + * + * The functions take a byte-array and send to the data output as WS2812 bitstream. + * The length is the number of bytes to send - three per LED. + */ + +static inline void ws2812_sendarray_mask(uint8_t *data, uint16_t datlen, uint8_t masklo, uint8_t maskhi); + +/* + This routine writes an array of bytes with RGB values to the Dataout pin + using the fast 800kHz clockless WS2811/2812 protocol. +*/ + +// Timing in ns +# define w_zeropulse 350 +# define w_onepulse 900 +# define w_totalperiod 1250 + +// Fixed cycles used by the inner loop +# define w_fixedlow 2 +# define w_fixedhigh 4 +# define w_fixedtotal 8 + +// Insert NOPs to match the timing, if possible +# define w_zerocycles (((F_CPU / 1000) * w_zeropulse) / 1000000) +# define w_onecycles (((F_CPU / 1000) * w_onepulse + 500000) / 1000000) +# define w_totalcycles (((F_CPU / 1000) * w_totalperiod + 500000) / 1000000) + +// w1_nops - nops between rising edge and falling edge - low +# if w_zerocycles >= w_fixedlow +# define w1_nops (w_zerocycles - w_fixedlow) +# else +# define w1_nops 0 +# endif + +// w2_nops - nops between fe low and fe high +# if w_onecycles >= (w_fixedhigh + w1_nops) +# define w2_nops (w_onecycles - w_fixedhigh - w1_nops) +# else +# define w2_nops 0 +# endif + +// w3_nops - nops to complete loop +# if w_totalcycles >= (w_fixedtotal + w1_nops + w2_nops) +# define w3_nops (w_totalcycles - w_fixedtotal - w1_nops - w2_nops) +# else +# define w3_nops 0 +# endif + +// The only critical timing parameter is the minimum pulse length of the "0" +// Warn or throw error if this timing can not be met with current F_CPU settings. +# define w_lowtime ((w1_nops + w_fixedlow) * 1000000) / (F_CPU / 1000) +# if w_lowtime > 550 +# error "Light_ws2812: Sorry, the clock speed is too low. Did you set F_CPU correctly?" +# elif w_lowtime > 450 +# warning "Light_ws2812: The timing is critical and may only work on WS2812B, not on WS2812(S)." +# warning "Please consider a higher clockspeed, if possible" +# endif + +# define w_nop1 "nop \n\t" +# define w_nop2 "rjmp .+0 \n\t" +# define w_nop4 w_nop2 w_nop2 +# define w_nop8 w_nop4 w_nop4 +# define w_nop16 w_nop8 w_nop8 + +static inline void ws2812_sendarray_mask(uint8_t *data, uint16_t datlen, uint8_t masklo, uint8_t maskhi) { + uint8_t curbyte, ctr, sreg_prev; + + sreg_prev = SREG; + cli(); + + while (datlen--) { + curbyte = (*data++); + + asm volatile(" ldi %0,8 \n\t" + "loop%=: \n\t" + " out %2,%3 \n\t" // '1' [01] '0' [01] - re +# if (w1_nops & 1) + w_nop1 +# endif +# if (w1_nops & 2) + w_nop2 +# endif +# if (w1_nops & 4) + w_nop4 +# endif +# if (w1_nops & 8) + w_nop8 +# endif +# if (w1_nops & 16) + w_nop16 +# endif + " sbrs %1,7 \n\t" // '1' [03] '0' [02] + " out %2,%4 \n\t" // '1' [--] '0' [03] - fe-low + " lsl %1 \n\t" // '1' [04] '0' [04] +# if (w2_nops & 1) + w_nop1 +# endif +# if (w2_nops & 2) + w_nop2 +# endif +# if (w2_nops & 4) + w_nop4 +# endif +# if (w2_nops & 8) + w_nop8 +# endif +# if (w2_nops & 16) + w_nop16 +# endif + " out %2,%4 \n\t" // '1' [+1] '0' [+1] - fe-high +# if (w3_nops & 1) + w_nop1 +# endif +# if (w3_nops & 2) + w_nop2 +# endif +# if (w3_nops & 4) + w_nop4 +# endif +# if (w3_nops & 8) + w_nop8 +# endif +# if (w3_nops & 16) + w_nop16 +# endif + + " dec %0 \n\t" // '1' [+2] '0' [+2] + " brne loop%=\n\t" // '1' [+3] '0' [+4] + : "=&d"(ctr) + : "r"(curbyte), "I"(_SFR_IO_ADDR(PORTx_ADDRESS(RGBLIGHT_DI_PIN))), "r"(maskhi), "r"(masklo)); + } + + SREG = sreg_prev; +} void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { - ws2812_setleds(start_led, num_leds); + DDRx_ADDRESS(RGBLIGHT_DI_PIN) |= pinmask(RGBLIGHT_DI_PIN); + + uint8_t masklo = ~(pinmask(RGBLIGHT_DI_PIN)) & PORTx_ADDRESS(RGBLIGHT_DI_PIN); + uint8_t maskhi = pinmask(RGBLIGHT_DI_PIN) | PORTx_ADDRESS(RGBLIGHT_DI_PIN); + + ws2812_sendarray_mask((uint8_t *)start_led, num_leds * sizeof(LED_TYPE), masklo, maskhi); + + _delay_us(WS2812_TRST_US); } #endif diff --git a/keyboards/work_louder/work_board/config.h b/keyboards/work_louder/work_board/config.h index 2ccc1be4c4c..fb9723db0b6 100644 --- a/keyboards/work_louder/work_board/config.h +++ b/keyboards/work_louder/work_board/config.h @@ -27,8 +27,8 @@ along with this program. If not, see . #define PRODUCT Work Board /* key matrix size */ -#define MATRIX_ROWS 4 -#define MATRIX_COLS 13 +#define MATRIX_ROWS 4 +#define MATRIX_COLS 13 /* * Keyboard Matrix Assignments @@ -40,42 +40,35 @@ along with this program. If not, see . * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) * */ -#define MATRIX_ROW_PINS { F0, F1, F4, F5 } -#define MATRIX_COL_PINS { D3, D5, D4, D6, D7, B4, B5, B6, C6, C7, F7, F6, E6 } +#define MATRIX_ROW_PINS \ + { F0, F1, F4, F5 } +#define MATRIX_COL_PINS \ + { D3, D5, D4, D6, D7, B4, B5, B6, C6, C7, F7, F6, E6 } #define UNUSED_PINS /* COL2ROW, ROW2COL */ -#define DIODE_DIRECTION COL2ROW +#define DIODE_DIRECTION COL2ROW -#define LED_NUM_LOCK_PIN B2 -#define LED_CAPS_LOCK_PIN B3 -#define LED_SCROLL_LOCK_PIN B7 -//#define LED_COMPOSE_PIN B3 -//#define LED_KANA_PIN B4 - -//#define BACKLIGHT_PIN B7 -//#define BACKLIGHT_LEVELS 3 -//#define BACKLIGHT_BREATHING - -#define RGBLIGHT_DI_PIN D2 -# define RGBLED_NUM 26 +#define RGBLIGHT_DI_PIN D2 +#define RGBLED_NUM 26 //# define RGBLIGHT_HUE_STEP 8 //# define RGBLIGHT_SAT_STEP 8 //# define RGBLIGHT_VAL_STEP 8 -# define RGBLIGHT_LIMIT_VAL 100 /* The maximum brightness level */ -# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ -/*== all animations enable ==*/ -# define RGBLIGHT_ANIMATIONS +#define RGBLIGHT_LIMIT_VAL 120 /* The maximum brightness level */ +#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ /*== or choose animations ==*/ -//# define RGBLIGHT_EFFECT_BREATHING -//# define RGBLIGHT_EFFECT_RAINBOW_MOOD -//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL -//# define RGBLIGHT_EFFECT_SNAKE -//# define RGBLIGHT_EFFECT_KNIGHT -//# define RGBLIGHT_EFFECT_CHRISTMAS -//# define RGBLIGHT_EFFECT_STATIC_GRADIENT -//# define RGBLIGHT_EFFECT_RGB_TEST -//# define RGBLIGHT_EFFECT_ALTERNATING +#define RGBLIGHT_EFFECT_BREATHING +#define RGBLIGHT_EFFECT_RAINBOW_MOOD +#define RGBLIGHT_EFFECT_RAINBOW_SWIRL +#define RGBLIGHT_EFFECT_SNAKE +#define RGBLIGHT_EFFECT_KNIGHT +#define RGBLIGHT_EFFECT_CHRISTMAS +#define RGBLIGHT_EFFECT_STATIC_GRADIENT +#define RGBLIGHT_EFFECT_RGB_TEST +#define RGBLIGHT_EFFECT_TWINKLE + +#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_STATIC_GRADIENT + 9 +#define RGBLIGHT_DEFAULT_HUE 213 /*== customize breathing effect ==*/ /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/ //# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64 @@ -84,10 +77,11 @@ along with this program. If not, see . //# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255 //#endif -#define RGB_DI_PIN D0 -#define DRIVER_LED_TOTAL 50 -#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 100 +#define RGB_DI_PIN D1 +#define DRIVER_LED_TOTAL 49 +#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 #define RGB_MATRIX_DISABLE_KEYCODES +#define RGB_DISABLE_WHEN_USB_SUSPENDED /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ #define DEBOUNCE 5 @@ -146,14 +140,24 @@ along with this program. If not, see . #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION -#define ENCODERS_PAD_A { B0 } -#define ENCODERS_PAD_B { B1 } +#define ENCODERS_PAD_A \ + { B0 } +#define ENCODERS_PAD_B \ + { B1 } #define ENCODERS 1 -#define ENCODERS_CW_KEY { { 12, 1 } } -#define ENCODERS_CCW_KEY { { 12, 2 } } +#define ENCODERS_CW_KEY \ + { \ + { 12, 1 } \ + } +#define ENCODERS_CCW_KEY \ + { \ + { 12, 2 } \ + } /* Bootmagic Lite key configuration */ //#define BOOTMAGIC_LITE_ROW 0 //#define BOOTMAGIC_LITE_COLUMN 0 + +#define VIA_EEPROM_LAYOUT_OPTIONS_DEFAULT 0x1 diff --git a/keyboards/work_louder/work_board/keymaps/via/keymap.c b/keyboards/work_louder/work_board/keymaps/via/keymap.c index 6bdc75ac22d..1cf5e075776 100644 --- a/keyboards/work_louder/work_board/keymaps/via/keymap.c +++ b/keyboards/work_louder/work_board/keymaps/via/keymap.c @@ -27,14 +27,15 @@ enum tap_dances { ENC_TAP, }; -#define LOWER KC_FN13 -#define RAISE KC_FN23 +#define LOWER FN_MO13 +#define RAISE FN_MO23 +// clang-format off const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = LAYOUT_via( KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, USER09, - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_VOLD, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , KC_VOLU, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_VOLU, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , KC_VOLD, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT ), @@ -59,7 +60,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ) }; - +// clang-format on void dance_enc_finished(qk_tap_dance_state_t *state, void *user_data) { if (state->count == 1) { @@ -93,3 +94,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return true; } + +layer_state_t layer_state_set_user(layer_state_t state) { + writePinLow(B2); + writePinLow(B3); + writePinLow(B7); + + switch (get_highest_layer(state)) { + case 1: + writePinHigh(B2); + break; + case 2: + writePinHigh(B3); + break; + case 3: + writePinHigh(B7); + break; + } + + return state; +} diff --git a/keyboards/work_louder/work_board/work_board.c b/keyboards/work_louder/work_board/work_board.c index e17f7417ccb..a2722a055a1 100644 --- a/keyboards/work_louder/work_board/work_board.c +++ b/keyboards/work_louder/work_board/work_board.c @@ -18,7 +18,9 @@ #if !defined(VIA_ENABLE) && defined(ENCODER_ENABLE) bool encoder_update_kb(uint8_t index, bool clockwise) { - if (!encoder_update_user(index, clockwise)) { return false; } + if (!encoder_update_user(index, clockwise)) { + return false; + } if (clockwise) { tap_code(KC_VOLD); } else { @@ -71,23 +73,56 @@ __attribute__((weak)) void oled_task_user(void) { } #endif - #ifdef RGB_MATRIX_ENABLE +// clang-format off led_config_t g_led_config = { { - { 49, 48, 47, 46, 45, 43, 42, 41, 40, 39, 38, 37}, - { 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36 }, - { 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13 }, - { 0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12 }, + { 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48 }, + { 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25 }, + { 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 }, + { 12, 11, 10, 9, 8, 7, 5, 4, 3, 2, 1, 0} }, { - { 223, 63 }, { 203, 63 }, { 183, 63 }, { 162, 63 }, { 142, 63 }, { 122, 63 }, { 101, 63 }, { 81, 63 }, { 61, 63 }, { 40, 63 }, { 20, 63 }, { 0, 63 }, + { 223, 63 }, { 203, 63 }, { 183, 63 }, { 162, 63 }, { 142, 63 }, { 122, 63 }, { 112, 63 }, { 101, 63 }, { 81, 63 }, { 61, 63 }, { 40, 63 }, { 20, 63 }, { 0, 63 }, { 0, 42 }, { 20, 42 }, { 40, 42 }, { 61, 42 }, { 81, 42 }, { 101, 42 }, { 122, 42 }, { 142, 42 }, { 162, 42 }, { 183, 42 }, { 203, 42 }, { 223, 42 }, { 223, 21 }, { 203, 21 }, { 183, 21 }, { 162, 21 }, { 142, 21 }, { 122, 21 }, { 101, 21 }, { 81, 21 }, { 61, 21 }, { 40, 21 }, { 20, 21 }, { 0, 21 }, - { 0, 0 }, { 20, 0 }, { 40, 0 }, { 61, 0 }, { 81, 0 }, { 101, 0 }, { 122, 0 }, { 132, 0 }, { 142, 0 }, { 162, 0 }, { 183, 0 }, { 203, 0 }, { 223, 0 }, + { 0, 0 }, { 20, 0 }, { 40, 0 }, { 61, 0 }, { 81, 0 }, { 101, 0 }, { 122, 0 }, { 142, 0 }, { 162, 0 }, { 183, 0 }, { 203, 0 }, { 223, 0 } }, { + 1, 1, 1, 1, 1, 4,4,4, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 4,4,4, 1, 1, 1, 1, 1 + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1 } }; +// clang-format on + +__attribute__((weak)) void rgb_matrix_indicators_user(void) { +# ifdef VIA_ENABLE + static bool layout_2u = false; + static uint16_t timer = 0; + if (timer_elapsed(timer) > 500) { + timer = timer_read(); + layout_2u = (bool)via_get_layout_options(); + } + if (layout_2u) { + rgb_matrix_set_color(5, 0, 0, 0); + rgb_matrix_set_color(7, 0, 0, 0); + } else { + rgb_matrix_set_color(6, 0, 0, 0); + } +# else + rgb_matrix_set_color(5, 0, 0, 0); + rgb_matrix_set_color(7, 0, 0, 0); +# endif +} + +void keyboard_pre_init_kb(void) { + setPinOutput(B2); + setPinOutput(B3); + setPinOutput(B7); + + writePinLow(B2); + writePinLow(B3); + writePinLow(B7); + + keyboard_pre_init_user(); +} #endif