forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Relocate RGB keycode processing (qmk#7508)
* Move rgb keycode logic to process_keycode * Fixes for rgb matrix * Fixes for mxss * Fix inc/dec logic, add comments * Fix return RAINBOW_SWIRL logic * stop external use of rgb helper functions * merge fix * Fix 'defined but not used' when all animations are disabled
- Loading branch information
Showing
7 changed files
with
199 additions
and
181 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
/* Copyright 2019 | ||
* | ||
* 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/>. | ||
*/ | ||
#include "process_rgb.h" | ||
#include "rgb.h" | ||
|
||
typedef void (*rgb_func_pointer)(void); | ||
|
||
/** | ||
* Wrapper for inc/dec rgb keycode | ||
* | ||
* noinline to optimise for firmware size not speed (not in hot path) | ||
*/ | ||
static void __attribute__((noinline)) handleKeycodeRGB(const uint8_t is_shifted, const rgb_func_pointer inc_func, const rgb_func_pointer dec_func) { | ||
if (is_shifted) { | ||
dec_func(); | ||
} else { | ||
inc_func(); | ||
} | ||
} | ||
|
||
/** | ||
* Wrapper for animation mode | ||
* - if not in animation family -> jump to that animation | ||
* - otherwise -> wrap round animation speed | ||
* | ||
* noinline to optimise for firmware size not speed (not in hot path) | ||
*/ | ||
static void __attribute__((noinline,unused)) handleKeycodeRGBMode(const uint8_t start, const uint8_t end) { | ||
if ((start <= rgblight_get_mode()) && (rgblight_get_mode() < end)) { | ||
rgblight_step(); | ||
} else { | ||
rgblight_mode(start); | ||
} | ||
} | ||
|
||
/** | ||
* Handle keycodes for both rgblight and rgbmatrix | ||
*/ | ||
bool process_rgb(const uint16_t keycode, const keyrecord_t *record) { | ||
#ifndef SPLIT_KEYBOARD | ||
if (record->event.pressed) { | ||
#else | ||
// Split keyboards need to trigger on key-up for edge-case issue | ||
if (!record->event.pressed) { | ||
#endif | ||
uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)); | ||
switch (keycode) { | ||
case RGB_TOG: | ||
rgblight_toggle(); | ||
return false; | ||
case RGB_MODE_FORWARD: | ||
handleKeycodeRGB(shifted, rgblight_step, rgblight_step_reverse); | ||
return false; | ||
case RGB_MODE_REVERSE: | ||
handleKeycodeRGB(shifted, rgblight_step_reverse, rgblight_step); | ||
return false; | ||
case RGB_HUI: | ||
handleKeycodeRGB(shifted, rgblight_increase_hue, rgblight_decrease_hue); | ||
return false; | ||
case RGB_HUD: | ||
handleKeycodeRGB(shifted, rgblight_decrease_hue, rgblight_increase_hue); | ||
return false; | ||
case RGB_SAI: | ||
handleKeycodeRGB(shifted, rgblight_increase_sat, rgblight_decrease_sat); | ||
return false; | ||
case RGB_SAD: | ||
handleKeycodeRGB(shifted, rgblight_decrease_sat, rgblight_increase_sat); | ||
return false; | ||
case RGB_VAI: | ||
handleKeycodeRGB(shifted, rgblight_increase_val, rgblight_decrease_val); | ||
return false; | ||
case RGB_VAD: | ||
handleKeycodeRGB(shifted, rgblight_decrease_val, rgblight_increase_val); | ||
return false; | ||
case RGB_SPI: | ||
handleKeycodeRGB(shifted, rgblight_increase_speed, rgblight_decrease_speed); | ||
return false; | ||
case RGB_SPD: | ||
handleKeycodeRGB(shifted, rgblight_decrease_speed, rgblight_increase_speed); | ||
return false; | ||
case RGB_MODE_PLAIN: | ||
rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); | ||
return false; | ||
case RGB_MODE_BREATHE: | ||
#ifdef RGBLIGHT_EFFECT_BREATHING | ||
handleKeycodeRGBMode(RGBLIGHT_MODE_BREATHING, RGBLIGHT_MODE_BREATHING_end); | ||
#endif | ||
return false; | ||
case RGB_MODE_RAINBOW: | ||
#ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD | ||
handleKeycodeRGBMode(RGBLIGHT_MODE_RAINBOW_MOOD, RGBLIGHT_MODE_RAINBOW_MOOD_end); | ||
#endif | ||
return false; | ||
case RGB_MODE_SWIRL: | ||
#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL | ||
handleKeycodeRGBMode(RGBLIGHT_MODE_RAINBOW_SWIRL, RGBLIGHT_MODE_RAINBOW_SWIRL_end); | ||
#endif | ||
return false; | ||
case RGB_MODE_SNAKE: | ||
#ifdef RGBLIGHT_EFFECT_SNAKE | ||
handleKeycodeRGBMode(RGBLIGHT_MODE_SNAKE, RGBLIGHT_MODE_SNAKE_end); | ||
#endif | ||
return false; | ||
case RGB_MODE_KNIGHT: | ||
#ifdef RGBLIGHT_EFFECT_KNIGHT | ||
handleKeycodeRGBMode(RGBLIGHT_MODE_KNIGHT, RGBLIGHT_MODE_KNIGHT_end); | ||
#endif | ||
return false; | ||
case RGB_MODE_XMAS: | ||
#ifdef RGBLIGHT_EFFECT_CHRISTMAS | ||
rgblight_mode(RGBLIGHT_MODE_CHRISTMAS); | ||
#endif | ||
return false; | ||
case RGB_MODE_GRADIENT: | ||
#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT | ||
handleKeycodeRGBMode(RGBLIGHT_MODE_STATIC_GRADIENT, RGBLIGHT_MODE_STATIC_GRADIENT_end); | ||
#endif | ||
return false; | ||
case RGB_MODE_RGBTEST: | ||
#ifdef RGBLIGHT_EFFECT_RGB_TEST | ||
rgblight_mode(RGBLIGHT_MODE_RGB_TEST); | ||
#endif | ||
return false; | ||
} | ||
} | ||
|
||
return true; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
/* Copyright 2019 | ||
* | ||
* 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/>. | ||
*/ | ||
#pragma once | ||
|
||
#include "quantum.h" | ||
|
||
bool process_rgb(const uint16_t keycode, const keyrecord_t *record); |
Oops, something went wrong.