Option to allow lighting layers when RGB Lighting is off (#9051)
This commit is contained in:
parent
dfcd4f0d25
commit
e2e287ec5f
3 changed files with 24 additions and 6 deletions
|
@ -197,6 +197,8 @@ If you define these options you will enable the associated feature, which may in
|
||||||
* Note: Increasing the maximum will increase the firmware size and slow sync on split keyboards.
|
* Note: Increasing the maximum will increase the firmware size and slow sync on split keyboards.
|
||||||
* `#define RGBLIGHT_LAYER_BLINK`
|
* `#define RGBLIGHT_LAYER_BLINK`
|
||||||
* Adds ability to [blink](feature_rgblight.md?id=lighting-layer-blink) a lighting layer for a specified number of milliseconds (e.g. to acknowledge an action).
|
* Adds ability to [blink](feature_rgblight.md?id=lighting-layer-blink) a lighting layer for a specified number of milliseconds (e.g. to acknowledge an action).
|
||||||
|
* `#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF`
|
||||||
|
* If defined, then [lighting layers](feature_rgblight?id=overriding-rgb-lighting-onoff-status) will be shown even if RGB Light is off.
|
||||||
* `#define RGBLED_NUM 12`
|
* `#define RGBLED_NUM 12`
|
||||||
* number of LEDs
|
* number of LEDs
|
||||||
* `#define RGBLIGHT_SPLIT`
|
* `#define RGBLIGHT_SPLIT`
|
||||||
|
|
|
@ -278,6 +278,10 @@ void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Overriding RGB Lighting on/off status
|
||||||
|
|
||||||
|
Normally lighting layers are not shown when RGB Lighting is disabled (e.g. with `RGB_TOG` keycode). If you would like lighting layers to work even when the RGB Lighting is otherwise off, add `#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF` to your `config.h`.
|
||||||
|
|
||||||
## Functions
|
## Functions
|
||||||
|
|
||||||
If you need to change your RGB lighting in code, for example in a macro to change the color whenever you switch layers, QMK provides a set of functions to assist you. See [`rgblight.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight.h) for the full list, but the most commonly used functions include:
|
If you need to change your RGB lighting in code, for example in a macro to change the color whenever you switch layers, QMK provides a set of functions to assist you. See [`rgblight.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight.h) for the full list, but the most commonly used functions include:
|
||||||
|
|
|
@ -628,6 +628,13 @@ void rgblight_set_layer_state(uint8_t layer, bool enabled) {
|
||||||
if (rgblight_status.timer_enabled == false) {
|
if (rgblight_status.timer_enabled == false) {
|
||||||
rgblight_mode_noeeprom(rgblight_config.mode);
|
rgblight_mode_noeeprom(rgblight_config.mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ifdef RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
|
||||||
|
// If not enabled, then nothing else will actually set the LEDs...
|
||||||
|
if (!rgblight_config.enable) {
|
||||||
|
rgblight_set();
|
||||||
|
}
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rgblight_get_layer_state(uint8_t layer) {
|
bool rgblight_get_layer_state(uint8_t layer) {
|
||||||
|
@ -693,16 +700,11 @@ void rgblight_unblink_layers(void) {
|
||||||
__attribute__((weak)) void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { ws2812_setleds(start_led, num_leds); }
|
__attribute__((weak)) void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { ws2812_setleds(start_led, num_leds); }
|
||||||
|
|
||||||
#ifndef RGBLIGHT_CUSTOM_DRIVER
|
#ifndef RGBLIGHT_CUSTOM_DRIVER
|
||||||
|
|
||||||
void rgblight_set(void) {
|
void rgblight_set(void) {
|
||||||
LED_TYPE *start_led;
|
LED_TYPE *start_led;
|
||||||
uint8_t num_leds = rgblight_ranges.clipping_num_leds;
|
uint8_t num_leds = rgblight_ranges.clipping_num_leds;
|
||||||
|
|
||||||
# ifdef RGBLIGHT_LAYERS
|
|
||||||
if (rgblight_layers != NULL) {
|
|
||||||
rgblight_layers_write();
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
if (!rgblight_config.enable) {
|
if (!rgblight_config.enable) {
|
||||||
for (uint8_t i = rgblight_ranges.effect_start_pos; i < rgblight_ranges.effect_end_pos; i++) {
|
for (uint8_t i = rgblight_ranges.effect_start_pos; i < rgblight_ranges.effect_end_pos; i++) {
|
||||||
led[i].r = 0;
|
led[i].r = 0;
|
||||||
|
@ -714,6 +716,16 @@ void rgblight_set(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ifdef RGBLIGHT_LAYERS
|
||||||
|
if (rgblight_layers != NULL
|
||||||
|
# ifndef RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
|
||||||
|
&& rgblight_config.enable
|
||||||
|
# endif
|
||||||
|
) {
|
||||||
|
rgblight_layers_write();
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
# ifdef RGBLIGHT_LED_MAP
|
# ifdef RGBLIGHT_LED_MAP
|
||||||
LED_TYPE led0[RGBLED_NUM];
|
LED_TYPE led0[RGBLED_NUM];
|
||||||
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
||||||
|
|
Loading…
Reference in a new issue