Cheapino: support onboard LED, and a small init flash

This commit is contained in:
Thomas Haukland 2023-04-28 21:26:18 +02:00
parent 47a116e13f
commit c6cca1c013
5 changed files with 84 additions and 23 deletions

View File

@ -0,0 +1,75 @@
#include "wait.h"
#include "quantum.h"
// This is to keep state between callbacks, when it is 0 the
// initial RGB flash is finished
uint8_t _hue_countdown = 25;
// These are to keep track of user selected color, so we
// can restore it after RGB flash
uint8_t _hue;
uint8_t _saturation;
uint8_t _value;
// Do a little 2.5 seconds display of the different colors
// Use the deferred executor so the LED flash dance does not
// stop us from using the keyboard.
// https://docs.qmk.fm/#/custom_quantum_functions?id=deferred-executor-registration
uint32_t flash_led(uint32_t next_trigger_time, void *cb_arg) {
rgblight_sethsv(_hue_countdown * 10, 230, 70);
_hue_countdown--;
if (_hue_countdown == 0) {
// Finished, reset to user chosen led color
rgblight_sethsv(_hue, _saturation, _value);
return 0;
} else {
return 100;
}
}
void keyboard_post_init_user(void) {
//debug_enable=true;
//debug_matrix=true;
//debug_keyboard=true;
//debug_mouse=true;
// Store user selected rgb hsv:
_hue = rgblight_get_hue();
_saturation = rgblight_get_sat();
_value = rgblight_get_val();
// Flash a little on start
defer_exec(100, flash_led, NULL);
}
// Make the builtin RGB led show different colors per layer:
// This seemed like a good idea but turned out pretty annoying,
// to me at least... Uncomment the lines below to enable
/*
uint8_t get_hue(uint8_t layer) {
switch (layer) {
case 6:
return 169;
case 5:
return 43;
case 4:
return 85;
case 3:
return 120;
case 2:
return 180;
case 1:
return 220;
default:
return 0;
}
}
layer_state_t layer_state_set_user(layer_state_t state) {
uint8_t sat = rgblight_get_sat();
uint8_t val = rgblight_get_val();
uint8_t hue = get_hue(get_highest_layer(state));
rgblight_sethsv(hue, sat, val);
return state;
}
*/

View File

@ -20,7 +20,6 @@
//#define NO_ACTION_ONESHOT
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 128
#define WS2812_PIO_USE_PIO1 // Force the usage of PIO1 peripheral, by default the WS2812 implementation uses the PIO0 peripheral
//#define WS2812_TRST_US 80
#define WS2812_BYTE_ORDER WS2812_BYTE_ORDER_RGB
@ -34,10 +33,8 @@
#define TAPPING_FORCE_HOLD
//#define RETRO_TAPPING
#ifdef RGB_MATRIX_ENABLE
// #define NOP_FUDGE 0.4
#define RGB_DI_PIN GP16 // The pin connected to the data pin of the LEDs
#define RGB_MATRIX_LED_COUNT 1 // The number of LEDs connected
#define ENABLE_RGB_MATRIX_SINGLE_COLOR // Single hue brightness cycling animation
#define ENABLE_RGB_MATRIX_BREATHING
#endif
#define RGBLED_NUM 1 // The number of LEDs connected
#define MAX_DEFERRED_EXECUTORS 32

View File

@ -10,8 +10,7 @@
"console": true,
"extrakey": true,
"mousekey": true,
"nkro": false,
"rgb_matrix": true
"nkro": false
},
"matrix_pins": {
"cols": ["GP0", "GP0", "GP1", "GP1", "GP2", "GP2", "GP29", "GP29", "GP28", "GP28", "GP27", "GP27"],
@ -24,11 +23,6 @@
"pid": "0x0000",
"vid": "0xFEED"
},
"rgb_matrix": {
"driver": "WS2812",
"layout": [
{ "flags": 4, "matrix": [0, 0] , "x": 4 , "y": 0.25 }
]},
"layouts": {
"LAYOUT_split_3x5_3": {
"layout": [

View File

@ -33,14 +33,6 @@ static const pin_t row_pins[] = MATRIX_ROW_PINS;
static const pin_t col_pins[] = MATRIX_COL_PINS;
static matrix_row_t previous_matrix[MATRIX_ROWS];
void keyboard_post_init_user(void) {
// Customise these values to desired behaviour
debug_enable=true;
debug_matrix=true;
debug_keyboard=true;
//debug_mouse=true;
}
static void select_row(uint8_t row) {
setPinOutput(row_pins[row]);
writePinLow(row_pins[row]);
@ -150,3 +142,4 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) {
return has_matrix_changed(current_matrix);
}

View File

@ -1,5 +1,7 @@
CAPS_WORD_ENABLE = yes
CUSTOM_MATRIX = lite
WS2812_DRIVER = vendor
RGBLIGHT_ENABLE = yes
DEFERRED_EXEC_ENABLE = yes
SRC += encoder.c
SRC += matrix.c