diff --git a/keyboards/mode/m256wh/config.h b/keyboards/mode/m256wh/config.h index 06f1658ea52..5bb3d6d1f38 100644 --- a/keyboards/mode/m256wh/config.h +++ b/keyboards/mode/m256wh/config.h @@ -23,5 +23,3 @@ along with this program. If not, see . #define WS2812_PWM_PAL_MODE 1 #define WS2812_PWM_DMA_STREAM STM32_DMA2_STREAM5 #define WS2812_PWM_DMA_CHANNEL 6 - -#define EECONFIG_KB_DATA_SIZE (1) diff --git a/keyboards/mode/m256wh/keymaps/via/config.h b/keyboards/mode/m256wh/keymaps/via/config.h new file mode 100644 index 00000000000..31dfebf49af --- /dev/null +++ b/keyboards/mode/m256wh/keymaps/via/config.h @@ -0,0 +1,20 @@ +/* +Copyright 2022 Gondolindrim + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +#define EECONFIG_USER_DATA_SIZE (1) diff --git a/keyboards/mode/m256wh/keymaps/via/keymap.c b/keyboards/mode/m256wh/keymaps/via/keymap.c index a81d6634506..6adb5cfffa4 100644 --- a/keyboards/mode/m256wh/keymaps/via/keymap.c +++ b/keyboards/mode/m256wh/keymaps/via/keymap.c @@ -31,3 +31,135 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) }; + +bool is_second_rgb_row_active; + +enum via_secondrow_enable { + id_is_second_rgb_row_active = 0 +}; + +// Sets the second RGB row on or off; done by setting effect range. +void set_second_rgb_row(bool is_active) { + rgblight_disable_noeeprom(); + switch (is_active) + { + case true: + { + rgblight_set_effect_range(0,30); + break; + } + case false: + { + rgblight_set_effect_range(0,15); + break; + } + } + rgblight_enable_noeeprom(); +} + +// At the keyboard start, retrieves PMEM stored configs +void keyboard_post_init_user(void) { + rgblight_disable_noeeprom(); + wait_ms(20); + eeconfig_read_user_datablock(&is_second_rgb_row_active); + set_second_rgb_row(is_second_rgb_row_active); + rgblight_reload_from_eeprom(); + rgblight_set(); +} + +void eeconfig_init_user(void) { // EEPROM is getting reset! + // rgblight_disable(); // Enable RGB by default + // Define the defualt value and write it to EEPROM + is_second_rgb_row_active = true; + set_second_rgb_row(is_second_rgb_row_active); + eeconfig_update_user_datablock(&is_second_rgb_row_active); + + // Disable rgblight by default on EEPROM initialization + rgblight_disable(); +} + +void secondrow_config_set_value( uint8_t *data ) +{ + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch ( *value_id ) + { + case id_is_second_rgb_row_active: + { + is_second_rgb_row_active = (bool) *value_data; + break; + } + default: + { + is_second_rgb_row_active = true; + } + } + set_second_rgb_row(is_second_rgb_row_active); +} + +void secondrow_config_get_value( uint8_t *data ) +{ + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch ( *value_id ) + { + case id_is_second_rgb_row_active: + { + *value_data = is_second_rgb_row_active; + break; + } + default: + { + *value_data = false; + } + } +} + +void secondrow_config_save(void) +{ + eeconfig_update_user_datablock(&is_second_rgb_row_active); +} + +void via_custom_value_command_kb(uint8_t *data, uint8_t length) { + // data = [ command_id, channel_id, value_id, value_data ] + uint8_t *command_id = &(data[0]); + uint8_t *channel_id = &(data[1]); + uint8_t *value_id_and_data = &(data[2]); + + if ( *channel_id == id_custom_channel ) { + switch ( *command_id ) + { + case id_custom_set_value: + { + secondrow_config_set_value(value_id_and_data); + break; + } + case id_custom_get_value: + { + secondrow_config_get_value(value_id_and_data); + break; + } + case id_custom_save: + { + secondrow_config_save(); + break; + } + default: + { + // Unhandled message. + *command_id = id_unhandled; + break; + } + } + return; + } + + // Return the unhandled state + *command_id = id_unhandled; + + // DO NOT call raw_hid_send(data,length) here, let caller do this +} diff --git a/keyboards/mode/m256wh/m256wh.c b/keyboards/mode/m256wh/m256wh.c deleted file mode 100644 index cec427f329c..00000000000 --- a/keyboards/mode/m256wh/m256wh.c +++ /dev/null @@ -1,154 +0,0 @@ -/* Copyright 2022 Gondolindrim - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" - -#ifdef VIA_ENABLE -bool is_second_rgb_row_active; -enum via_secondrow_enable { - id_is_second_rgb_row_active = 0 -}; - -// Sets the second RGB row on or off; done by setting effect range. -void set_second_rgb_row(bool is_active) { - rgblight_disable_noeeprom(); - switch (is_active) - { - case true: - { - rgblight_set_effect_range(0,30); - break; - } - case false: - { - rgblight_set_effect_range(0,15); - break; - } - } - rgblight_enable_noeeprom(); -} - -// At the keyboard start, retrieves PMEM stored configs -void keyboard_post_init_kb(void) { - rgblight_disable_noeeprom(); - wait_ms(20); - eeconfig_read_kb_datablock(&is_second_rgb_row_active); - set_second_rgb_row(is_second_rgb_row_active); - rgblight_reload_from_eeprom(); - rgblight_set(); -} - -void eeconfig_init_kb(void) { // EEPROM is getting reset! - // rgblight_disable(); // Enable RGB by default - // Define the defualt value and write it to EEPROM - is_second_rgb_row_active = true; - set_second_rgb_row(is_second_rgb_row_active); - eeconfig_update_kb_datablock(&is_second_rgb_row_active); - - // Disable rgblight by default on EEPROM initialization - rgblight_disable(); - - // Run user code if any - eeconfig_init_user(); -} - -void secondrow_config_set_value( uint8_t *data ) -{ - // data = [ value_id, value_data ] - uint8_t *value_id = &(data[0]); - uint8_t *value_data = &(data[1]); - - switch ( *value_id ) - { - case id_is_second_rgb_row_active: - { - is_second_rgb_row_active = (bool) *value_data; - break; - } - default: - { - is_second_rgb_row_active = true; - } - } - set_second_rgb_row(is_second_rgb_row_active); -} - -void secondrow_config_get_value( uint8_t *data ) -{ - // data = [ value_id, value_data ] - uint8_t *value_id = &(data[0]); - uint8_t *value_data = &(data[1]); - - switch ( *value_id ) - { - case id_is_second_rgb_row_active: - { - *value_data = is_second_rgb_row_active; - break; - } - default: - { - *value_data = false; - } - } -} - -void secondrow_config_save(void) -{ - - eeconfig_update_kb_datablock(&is_second_rgb_row_active); -} - -void via_custom_value_command_kb(uint8_t *data, uint8_t length) { - // data = [ command_id, channel_id, value_id, value_data ] - uint8_t *command_id = &(data[0]); - uint8_t *channel_id = &(data[1]); - uint8_t *value_id_and_data = &(data[2]); - - if ( *channel_id == id_custom_channel ) { - switch ( *command_id ) - { - case id_custom_set_value: - { - secondrow_config_set_value(value_id_and_data); - break; - } - case id_custom_get_value: - { - secondrow_config_get_value(value_id_and_data); - break; - } - case id_custom_save: - { - secondrow_config_save(); - break; - } - default: - { - // Unhandled message. - *command_id = id_unhandled; - break; - } - } - return; - } - - // Return the unhandled state - *command_id = id_unhandled; - - // DO NOT call raw_hid_send(data,length) here, let caller do this -} -#endif