mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-13 03:11:33 +00:00
57 lines
1.9 KiB
C
57 lines
1.9 KiB
C
// Copyright 2024 QMK
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
#include "lamparray.h"
|
|
#include "lamparray_surface.h"
|
|
#include "rgb_matrix.h"
|
|
|
|
/**
|
|
* \brief Get feature specific lamp info.
|
|
*
|
|
* Scales the LED config with the assumed RGB Matrix dimensions (224x64), for simplicity, as a completely flat device.
|
|
* Assumes all keys are either on the top or bottom of the resulting rectangle.
|
|
*/
|
|
__attribute__((weak)) void lamparray_get_lamp_impl(uint16_t lamp_id, lamparray_attributes_response_t* data) {
|
|
data->position.x = (LAMPARRAY_WIDTH / 224) * g_led_config.point[lamp_id].x;
|
|
data->position.y = (LAMPARRAY_HEIGHT / 64) * g_led_config.point[lamp_id].y;
|
|
|
|
if (g_led_config.flags[lamp_id] & LED_FLAG_UNDERGLOW) {
|
|
data->position.z = LAMPARRAY_DEPTH;
|
|
data->purposes = LAMP_PURPOSE_ACCENT;
|
|
} else if (g_led_config.flags[lamp_id] & LED_FLAG_INDICATOR) {
|
|
data->position.z = 0;
|
|
data->purposes = LAMP_PURPOSE_STATUS;
|
|
} else {
|
|
data->position.z = 0;
|
|
data->purposes = LAMP_PURPOSE_CONTROL;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* \brief Query a HID usage for a given lamp
|
|
*/
|
|
__attribute__((weak)) uint8_t lamparray_get_lamp_binding_impl(uint16_t lamp_id) {
|
|
for (uint8_t i_row = 0; i_row < MATRIX_ROWS; i_row++) {
|
|
for (uint8_t i_col = 0; i_col < MATRIX_COLS; i_col++) {
|
|
if (g_led_config.matrix_co[i_row][i_col] == lamp_id) {
|
|
return lamparray_binding_at_keymap_location(i_row, i_col);
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// TODO: temporay binding of storage and render
|
|
#include "rgb_matrix/overlay.c"
|
|
|
|
void lamparray_surface_enable(bool enable) {
|
|
rgb_matrix_overlay_enable(enable);
|
|
}
|
|
|
|
void lamparray_surface_set_item(uint16_t index, lamp_state_t color) {
|
|
rgb_matrix_overlay_set(index, (rgba_t){color.red, color.green, color.blue, color.intensity ? 0xFF : 0});
|
|
}
|
|
|
|
void lamparray_surface_update_finished(void) {
|
|
rgb_matrix_overlay_flush();
|
|
}
|