diff options
author | Alin Marin Elena <alin@elena.space> | 2022-06-11 19:18:45 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-11 11:18:45 -0700 |
commit | 51cfb1b45780c8ee42d993814aeef1f45477d58d (patch) | |
tree | 9f94cb8ebfc0b7f9f6bf9f4758cfa1903ff708c5 /keyboards/mlego/m65/m65.c | |
parent | dbd4ac5a3fb02f274024f5d7f9c2ec62626e94ad (diff) |
[Keyboard] mlego fix product id and sync oled code (#16237)
* sync oled code over the keymaps
* put different product ids
* put different product ids for the rest
* put different product ids for the rest
* try to reduce code duplication
* make ifdefs nice and correct
* move the leds code out of keymap
* try to reduce code duplication
* move the rgb code outside the keymaps for reuse
* Update keyboards/mlego/m65/m65.c
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Update keyboards/mlego/m65/m65.c
Co-authored-by: Drashna Jaelre <drashna@live.com>
* move more code outside keymaps for reuse
* add few more xps
* add mic mute
* update to new name of macros for reset
* style for matrix
* clean split
* use tinyuf2 as bootloader
* Update keyboards/mlego/m65/rev4/rules.mk
Co-authored-by: Ryan <fauxpark@gmail.com>
* radionalise product id and device version
* add tinyuf2 as default bootloader for stm32f4
* update tinyuf2
* update tinyuf2 and via. f411 remove tinyuf2 since is not really working. make the config more conditional
* sync the keymap with default
* revert via non building with gcc 11
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Diffstat (limited to 'keyboards/mlego/m65/m65.c')
-rw-r--r-- | keyboards/mlego/m65/m65.c | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/keyboards/mlego/m65/m65.c b/keyboards/mlego/m65/m65.c index 153359f337..3f71a27790 100644 --- a/keyboards/mlego/m65/m65.c +++ b/keyboards/mlego/m65/m65.c @@ -16,3 +16,189 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "m65.h" + +// let us assume we start with both layers off +static bool toggle_lwr = false; +static bool toggle_rse = false; + +#ifdef RGBLIGHT_ENABLE + +const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE}); +const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN}); +const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED}); +const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN}); + +const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer); + +#endif + +#ifdef OLED_ENABLE + +static uint32_t oled_logo_timer = 0; +static bool clear_logo = true; +static const char PROGMEM m65_logo[] = { + 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, + 0}; + +#endif + +#ifdef RGBLIGHT_ENABLE + +void set_rgb_layers(layer_state_t state){ + + rgblight_set_layer_state(0, layer_state_cmp(state, _QW)); + rgblight_set_layer_state(1, layer_state_cmp(state, _LWR)); + rgblight_set_layer_state(2, layer_state_cmp(state, _RSE)); + rgblight_set_layer_state(3, layer_state_cmp(state, _ADJ)); + +} + +void set_default_rgb_layers(layer_state_t state){ + rgblight_set_layer_state(0, layer_state_cmp(state, _QW)); +} + +const rgblight_segment_t * const* my_rgb(void){ + return my_rgb_layers; +} + +#endif + +void set_led_toggle(const uint8_t layer, const bool state){ + + switch (layer) { + case _LWR: + toggle_lwr = state; + break; + case _RSE: + toggle_rse = state; + break; + default: + break; + } +} + +void toggle_leds(void){ + + led_lwr(toggle_lwr); + led_rse(toggle_rse); + led_t led_state = host_keyboard_led_state(); + led_caps(led_state.caps_lock); + if (layer_state_is(_ADJ)) { + led_lwr(true); + led_rse(true); + } + +} + +#ifdef ENCODER_ENABLE + +# define MEDIA_KEY_DELAY 10 + +void my_encoders(const uint8_t index, const bool clockwise) { + if (index == 0) { /* First encoder */ + if (IS_LAYER_ON(_LWR)) { + if (clockwise) { + rgblight_decrease_val_noeeprom(); + } else { + rgblight_increase_val_noeeprom(); + } + } else if (IS_LAYER_ON(_RSE)) { + if (clockwise) { + rgblight_decrease_hue_noeeprom(); + } else { + rgblight_increase_hue_noeeprom(); + } + + } else { + if (clockwise) { + tap_code_delay(KC_VOLD, MEDIA_KEY_DELAY); + } else { + tap_code_delay(KC_VOLU, MEDIA_KEY_DELAY); + } + } + } +} + +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { return false; } + my_encoders(index, clockwise); + return false; +} + +#endif + +#ifdef OLED_ENABLE + +void init_timer(void){ + oled_logo_timer = timer_read32(); +}; + +void user_oled_magic(void) { + // Host Keyboard Layer Status + oled_write_P(PSTR("Layer: "), false); + + switch (get_highest_layer(layer_state)) { + case _QW: + oled_write_P(PSTR("Default\n"), false); + break; + case _LWR: + oled_write_P(PSTR("Lower\n"), false); + break; + case _RSE: + oled_write_P(PSTR("Raise\n"), false); + break; + case _ADJ: + oled_write_P(PSTR("ADJ\n"), false); + break; + default: + // Or use the write_ln shortcut over adding '\n' to the end of your string + oled_write_ln_P(PSTR("Undefined"), false); + } + + // Host Keyboard LED Status + led_t led_state = host_keyboard_led_state(); + oled_write_P(led_state.num_lock ? PSTR("Lower ") : PSTR(" "), false); + oled_write_P(led_state.scroll_lock ? PSTR("Raise ") : PSTR(" "), false); + oled_write_P(led_state.caps_lock ? PSTR("CapsLock ") : PSTR(" "), false); +#ifdef WPM_ENABLE + oled_write_P(PSTR("\nwpm: "), false); + uint8_t wpm = get_current_wpm(); + oled_write_P(wpm != 0 ? get_u8_str(wpm,' ') : PSTR(" "), false); +#endif +} + +void render_logo(void) { + oled_write_P(m65_logo, false); +} + +void clear_screen(void) { + if (clear_logo){ + for (uint8_t i = 0; i < OLED_DISPLAY_HEIGHT; ++i) { + for (uint8_t j = 0; j < OLED_DISPLAY_WIDTH; ++j) { + oled_write_raw_byte(0x0, i*OLED_DISPLAY_WIDTH + j); + } + } + clear_logo = false; + } +} + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + return OLED_ROTATION_180; +} + +# define SHOW_LOGO 5000 +bool oled_task_kb(void) { + if (!oled_task_user()) { return false; } + if ((timer_elapsed32(oled_logo_timer) < SHOW_LOGO)){ + render_logo(); + }else{ + clear_screen(); + user_oled_magic(); + } + return false; +} + +#endif |