LED drivers: create structs to hold PWM/scaling buffers (#22955)
This commit is contained in:
parent
a5ea619139
commit
66015f1645
24 changed files with 668 additions and 479 deletions
|
@ -45,8 +45,15 @@
|
|||
# define AW20216S_SPI_DIVISOR 4
|
||||
#endif
|
||||
|
||||
uint8_t g_pwm_buffer[AW20216S_DRIVER_COUNT][AW20216S_PWM_REGISTER_COUNT];
|
||||
bool g_pwm_buffer_update_required[AW20216S_DRIVER_COUNT] = {false};
|
||||
typedef struct aw20216s_driver_t {
|
||||
uint8_t pwm_buffer[AW20216S_PWM_REGISTER_COUNT];
|
||||
bool pwm_buffer_dirty;
|
||||
} PACKED aw20216s_driver_t;
|
||||
|
||||
aw20216s_driver_t driver_buffers[AW20216S_DRIVER_COUNT] = {{
|
||||
.pwm_buffer = {0},
|
||||
.pwm_buffer_dirty = false,
|
||||
}};
|
||||
|
||||
bool aw20216s_write(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t* data, uint8_t len) {
|
||||
static uint8_t s_spi_transfer_buffer[2] = {0};
|
||||
|
@ -131,14 +138,14 @@ void aw20216s_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
|
|||
aw20216s_led_t led;
|
||||
memcpy_P(&led, (&g_aw20216s_leds[index]), sizeof(led));
|
||||
|
||||
if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
|
||||
if (driver_buffers[led.driver].pwm_buffer[led.r] == red && driver_buffers[led.driver].pwm_buffer[led.g] == green && driver_buffers[led.driver].pwm_buffer[led.b] == blue) {
|
||||
return;
|
||||
}
|
||||
|
||||
g_pwm_buffer[led.driver][led.r] = red;
|
||||
g_pwm_buffer[led.driver][led.g] = green;
|
||||
g_pwm_buffer[led.driver][led.b] = blue;
|
||||
g_pwm_buffer_update_required[led.driver] = true;
|
||||
driver_buffers[led.driver].pwm_buffer[led.r] = red;
|
||||
driver_buffers[led.driver].pwm_buffer[led.g] = green;
|
||||
driver_buffers[led.driver].pwm_buffer[led.b] = blue;
|
||||
driver_buffers[led.driver].pwm_buffer_dirty = true;
|
||||
}
|
||||
|
||||
void aw20216s_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
|
||||
|
@ -148,9 +155,9 @@ void aw20216s_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
|
|||
}
|
||||
|
||||
void aw20216s_update_pwm_buffers(pin_t cs_pin, uint8_t index) {
|
||||
if (g_pwm_buffer_update_required[index]) {
|
||||
aw20216s_write(cs_pin, AW20216S_PAGE_PWM, 0, g_pwm_buffer[index], AW20216S_PWM_REGISTER_COUNT);
|
||||
g_pwm_buffer_update_required[index] = false;
|
||||
if (driver_buffers[index].pwm_buffer_dirty) {
|
||||
aw20216s_write(cs_pin, AW20216S_PAGE_PWM, 0, driver_buffers[index].pwm_buffer, AW20216S_PWM_REGISTER_COUNT);
|
||||
driver_buffers[index].pwm_buffer_dirty = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue