summaryrefslogtreecommitdiff
path: root/keyboards/mxss/mxss_frontled.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/mxss/mxss_frontled.c')
-rw-r--r--keyboards/mxss/mxss_frontled.c278
1 files changed, 0 insertions, 278 deletions
diff --git a/keyboards/mxss/mxss_frontled.c b/keyboards/mxss/mxss_frontled.c
deleted file mode 100644
index 2ab9a27bea..0000000000
--- a/keyboards/mxss/mxss_frontled.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/* Copyright 2020 Jumail Mundekkat / MxBlue
- *
- * 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 <http://www.gnu.org/licenses/>.
- *
- * Extended from the work done by fcoury: https://github.com/qmk/qmk_firmware/pull/4915
- */
-
-#include "mxss_frontled.h"
-#include "eeprom.h"
-#include "rgblight.h"
-#include "via.h"
-#include "version.h" // for QMK_BUILDDATE used in EEPROM magic
-
-// Variables for controlling front LED application
-uint8_t fled_mode; // Mode for front LEDs
-uint8_t fled_val; // Brightness for front leds (0 - 255)
-LED_TYPE fleds[2]; // Front LED rgb values for indicator mode use
-
-// Layer indicator colors
-__attribute__ ((weak))
-hs_set layer_colors[FRONTLED_COLOR_MAXCNT];
-
-// Caps lock indicator color
-__attribute__ ((weak))
-hs_set caps_color;
-
-__attribute__ ((weak))
-size_t lc_size = ARRAY_SIZE(layer_colors);
-
-void fled_init(void) {
- // This checks both an EEPROM reset (from bootmagic lite, keycodes)
- // and also firmware build date (from via_eeprom_is_valid())
- if (eeconfig_is_enabled()) {
- fled_load_conf();
- // Else, default config
- } else {
- // Default mode/brightness
- fled_mode = FLED_RGB;
- fled_val = 10 * FLED_VAL_STEP;
-
- // Default colors
- caps_color.hue = 0;
- caps_color.sat = 255;
- layer_colors[0].hue = 0;
- layer_colors[0].sat = 0;
- layer_colors[1].hue = 86;
- layer_colors[1].sat = 255;
- layer_colors[2].hue = 36;
- layer_colors[2].sat = 255;
- layer_colors[3].hue = 185;
- layer_colors[3].sat = 255;
-
- fled_update_conf(); // Store default config to EEPROM
- }
-
- // Set default values for leds
- setrgb(0, 0, 0, &fleds[0]);
- setrgb(0, 0, 0, &fleds[1]);
-
- // Handle lighting for indicator mode
- if (fled_mode == FLED_INDI) {
- fled_lock_update(host_keyboard_led_state());
- fled_layer_update(layer_state);
- }
-}
-
-void process_record_fled(uint16_t keycode, keyrecord_t *record) {
- // Handle custom keycodes for front LED operation
- switch (keycode) {
- case FLED_MOD: // Change between front LED operation modes (off, indicator, RGB)
- if (record->event.pressed)
- fled_mode_cycle();
- break;
-
- case FLED_VAI: // Increase the brightness of the front LEDs by FLED_VAL_STEP
- if (record->event.pressed)
- fled_val_increase();
- break;
-
- case FLED_VAD: // Decrease the brightness of the front LEDs by FLED_VAL_STEP
- if (record->event.pressed)
- fled_val_decrease();
- break;
-
- default:
- break; // Process all other keycodes normally
- }
-
- return;
-}
-
-void fled_load_conf(void) {
- // Load config
- fled_config fled_conf;
- fled_conf.raw = eeprom_read_byte(FRONTLED_CONF_ADDR);
- fled_mode = fled_conf.mode;
- fled_val = fled_conf.val * FLED_VAL_STEP;
-
- // Load color data
- uint8_t stored_cnt = eeprom_read_byte(FRONTLED_COLOR_CNT_ADDR);
- uint16_t *color_ptr = FRONTLED_COLOR_ADDR;
- caps_color.raw = eeprom_read_word(color_ptr); // Should always store at least 1 color
- for (uint8_t i = 1; i < stored_cnt; i++) {
- if (i == lc_size) // Can't load more layers than we have available
- break;
- layer_colors[i].raw = eeprom_read_word(&color_ptr[i]);
- }
- layer_colors[0].raw = 0; // hue = sat = 0 for layer 0
-}
-
-// Store current front led config in EEPROM
-void fled_update_conf(void)
-{
- // Create storage struct and set values
- fled_config conf;
- conf.mode = fled_mode;
-
- // Small hack to ensure max value is stored correctly
- if (fled_val == 255)
- conf.val = 256 / FLED_VAL_STEP;
- else
- conf.val = fled_val / FLED_VAL_STEP;
-
- // Store config
- eeprom_update_byte(FRONTLED_CONF_ADDR, conf.raw);
-
- // Store color data
- uint16_t *color_ptr = FRONTLED_COLOR_ADDR;
- eeprom_update_word(color_ptr, caps_color.raw);
- // Start from 1, layer 0 is not modifiable and therefore not persisted
- uint8_t i = 1;
- for (; i < lc_size; i++) {
- if (i == FRONTLED_COLOR_MAXCNT) // Can't store more than the EEPROM we have available
- break;
- eeprom_update_word(&color_ptr[i], layer_colors[i].raw);
- }
- eeprom_update_byte(FRONTLED_COLOR_CNT_ADDR, i); // For safety, store the count of colors stored
-}
-
-// Custom keycode functions
-
-void fled_mode_cycle(void)
-{
- // FLED -> FLED_RGB -> FLED_INDI
- switch (fled_mode) {
- case FLED_OFF:
- fled_mode = FLED_RGB;
- rgblight_timer_enable();
- break;
-
- case FLED_RGB:
- fled_mode = FLED_INDI;
- break;
-
- case FLED_INDI:
- fled_mode = FLED_OFF;
- break;
- }
-
- // Update stored config
- fled_update_conf();
- rgblight_set();
-}
-
-void fled_val_increase(void)
-{
- // Increase val by FLED_VAL_STEP, handling the upper edge case
- if (fled_val + FLED_VAL_STEP > 255)
- fled_val = 255;
- else
- fled_val += FLED_VAL_STEP;
-
- // Update stored config
- fled_update_conf();
-
- // Update and set LED state
- if (fled_mode == FLED_INDI) {
- fled_layer_update(layer_state);
- fled_lock_update(host_keyboard_led_state());
- } else {
- rgblight_set();
- }
-}
-
-void fled_val_decrease(void)
-{
- // Decrease val by FLED_VAL_STEP, handling the lower edge case
- if (fled_val - FLED_VAL_STEP > 255)
- fled_val = 255;
- else
- fled_val -= FLED_VAL_STEP;
-
- // Update stored config
- fled_update_conf();
-
- // Update and set LED state
- if (fled_mode == FLED_INDI) {
- fled_layer_update(layer_state);
- fled_lock_update(host_keyboard_led_state());
- } else {
- rgblight_set();
- }
-}
-
-void fled_layer_update(layer_state_t state) {
- // Determine and set colour of layer LED according to current layer
- // if hue = sat = 0, leave LED off
- uint8_t layer = get_highest_layer(state);
-
- if (layer < lc_size && !(layer_colors[layer].hue == 0 && layer_colors[layer].sat == 0)) {
- sethsv(layer_colors[layer].hue, layer_colors[layer].sat, fled_val, &fleds[1]);
- } else {
- setrgb(0, 0, 0, &fleds[1]);
- }
-}
-
-void fled_lock_update(led_t led_state) {
- // Set indicator LED appropriately, whether it is used or not
- if (led_state.caps_lock) {
- sethsv(caps_color.hue, caps_color.sat, fled_val, &fleds[0]);
- } else {
- setrgb(0, 0, 0, &fleds[0]);
- }
-
- rgblight_set();
-}
-
-void set_fled_layer_color(uint8_t layer, hs_set hs) {
- // Update layer colors and refresh LEDs
- layer_colors[layer] = hs;
- fled_layer_update(layer_state);
- fled_update_conf();
-}
-
-hs_set get_fled_layer_color(uint8_t layer) {
- return layer_colors[layer];
-}
-
-void set_fled_caps_color(hs_set hs) {
- // Update caplock color and refresh LEDs
- caps_color = hs;
- fled_lock_update(host_keyboard_led_state());
- fled_update_conf();
-}
-
-hs_set get_fled_caps_color(void) {
- return caps_color;
-}
-
-// Fallback eeprom functions if VIA is not enabled
-#ifndef VIA_ENABLE
-
-// Can be called in an overriding via_init_kb() to test if keyboard level code usage of
-// EEPROM is invalid and use/save defaults.
-bool via_eeprom_is_valid(void)
-{
- char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
- uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
- uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
- uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
-
- return (eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0 ) == magic0 &&
- eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1 ) == magic1 &&
- eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2 ) == magic2 );
-}
-
-#endif