Add advanced/efficient RGB Matrix Indicators (#8564)
* Add Advanced RGB Matrix effects Add a new option, so that we can better handle custom indicators * Switch to led min/max instead of params Because params has already been incremented and is wrong now * Add indicator color function for use with advanced indicator functions * Add docs and helper macros * Add comment for explanations * Fix macro variables * Fix typo * Run clang-format on rgb_matrix.h
This commit is contained in:
parent
b1a6b161f3
commit
08caa7afd6
3 changed files with 43 additions and 4 deletions
|
@ -401,6 +401,10 @@ void rgb_matrix_task(void) {
|
|||
break;
|
||||
case RENDERING:
|
||||
rgb_task_render(effect);
|
||||
if (!suspend_backlight) {
|
||||
rgb_matrix_indicators();
|
||||
rgb_matrix_indicators_advanced(&rgb_effect_params);
|
||||
}
|
||||
break;
|
||||
case FLUSHING:
|
||||
rgb_task_flush(effect);
|
||||
|
@ -409,10 +413,6 @@ void rgb_matrix_task(void) {
|
|||
rgb_task_sync();
|
||||
break;
|
||||
}
|
||||
|
||||
if (!suspend_backlight) {
|
||||
rgb_matrix_indicators();
|
||||
}
|
||||
}
|
||||
|
||||
void rgb_matrix_indicators(void) {
|
||||
|
@ -424,6 +424,28 @@ __attribute__((weak)) void rgb_matrix_indicators_kb(void) {}
|
|||
|
||||
__attribute__((weak)) void rgb_matrix_indicators_user(void) {}
|
||||
|
||||
void rgb_matrix_indicators_advanced(effect_params_t *params) {
|
||||
/* special handling is needed for "params->iter", since it's already been incremented.
|
||||
* Could move the invocations to rgb_task_render, but then it's missing a few checks
|
||||
* and not sure which would be better. Otherwise, this should be called from
|
||||
* rgb_task_render, right before the iter++ line.
|
||||
*/
|
||||
#if defined(RGB_MATRIX_LED_PROCESS_LIMIT) && RGB_MATRIX_LED_PROCESS_LIMIT > 0 && RGB_MATRIX_LED_PROCESS_LIMIT < DRIVER_LED_TOTAL
|
||||
uint8_t min = RGB_MATRIX_LED_PROCESS_LIMIT * (params->iter - 1);
|
||||
uint8_t max = min + RGB_MATRIX_LED_PROCESS_LIMIT;
|
||||
if (max > DRIVER_LED_TOTAL) max = DRIVER_LED_TOTAL;
|
||||
#else
|
||||
uint8_t min = 0;
|
||||
uint8_t max = DRIVER_LED_TOTAL;
|
||||
#endif
|
||||
rgb_matrix_indicators_advanced_kb(min, max);
|
||||
rgb_matrix_indicators_advanced_user(min, max);
|
||||
}
|
||||
|
||||
__attribute__((weak)) void rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {}
|
||||
|
||||
__attribute__((weak)) void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {}
|
||||
|
||||
void rgb_matrix_init(void) {
|
||||
rgb_matrix_driver.init();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue