mirror of
https://github.com/qmk/qmk_firmware.git
synced 2026-06-03 14:13:46 -03:00
[Bugfix] WS2812 indexing in split boards (#25407)
* initial * oops * Update quantum/rgb_matrix/rgb_matrix.c Co-authored-by: フィルターペーパー <76888457+filterpaper@users.noreply.github.com> --------- Co-authored-by: フィルターペーパー <76888457+filterpaper@users.noreply.github.com>
This commit is contained in:
@@ -158,15 +158,31 @@ void rgb_matrix_update_pwm_buffers(void) {
|
||||
|
||||
__attribute__((weak)) int rgb_matrix_led_index(int index) {
|
||||
#if defined(RGB_MATRIX_SPLIT)
|
||||
if (!is_keyboard_left() && index >= k_rgb_matrix_split[0]) {
|
||||
return index - k_rgb_matrix_split[0];
|
||||
const bool index_in_left_side = index < k_rgb_matrix_split[0];
|
||||
|
||||
if (is_keyboard_left()) {
|
||||
if (index_in_left_side) {
|
||||
return index;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (index_in_left_side) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return index - k_rgb_matrix_split[0];
|
||||
#endif
|
||||
return index;
|
||||
}
|
||||
|
||||
void rgb_matrix_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
|
||||
rgb_matrix_driver.set_color(rgb_matrix_led_index(index), red, green, blue);
|
||||
const int led_index = rgb_matrix_led_index(index);
|
||||
if (led_index < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
rgb_matrix_driver.set_color(led_index, red, green, blue);
|
||||
}
|
||||
|
||||
void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
|
||||
|
||||
@@ -151,6 +151,14 @@ void eeconfig_force_flush_rgb_matrix(void);
|
||||
uint8_t rgb_matrix_map_row_column_to_led_kb(uint8_t row, uint8_t column, uint8_t *led_i);
|
||||
uint8_t rgb_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *led_i);
|
||||
|
||||
/**
|
||||
* @brief Convert an index to the addressing used by underlying driver
|
||||
*
|
||||
* @param index Logical index of the LED we want to work on
|
||||
*
|
||||
* @return Resolved index to be used on the driver
|
||||
* @retval < 0 Error (eg: trying to address a LED on the other half of a split board)
|
||||
*/
|
||||
int rgb_matrix_led_index(int index);
|
||||
|
||||
void rgb_matrix_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
|
||||
|
||||
Reference in New Issue
Block a user