|
19 | 19 | #include "is31fl3737.h"
|
20 | 20 | #include "i2c_master.h"
|
21 | 21 | #include "wait.h"
|
| 22 | +#include "progmem.h" |
22 | 23 |
|
23 | 24 | // This is a 7-bit address, that gets left-shifted and bit 0
|
24 | 25 | // set to 0 for write, 1 for read (as per I2C protocol)
|
@@ -65,11 +66,15 @@ uint8_t g_twi_transfer_buffer[20];
|
65 | 66 | // We could optimize this and take out the unused registers from these
|
66 | 67 | // buffers and the transfers in IS31FL3737_write_pwm_buffer() but it's
|
67 | 68 | // probably not worth the extra complexity.
|
68 |
| -uint8_t g_pwm_buffer[DRIVER_COUNT][192]; |
69 |
| -bool g_pwm_buffer_update_required = false; |
70 | 69 |
|
71 |
| -uint8_t g_led_control_registers[DRIVER_COUNT][24] = {{0}}; |
72 |
| -bool g_led_control_registers_update_required = false; |
| 70 | + |
| 71 | + |
| 72 | + |
| 73 | +uint8_t g_pwm_buffer[DRIVER_COUNT][(192)]; |
| 74 | +bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false}; |
| 75 | + |
| 76 | +uint8_t g_led_control_registers[DRIVER_COUNT][24] = {0}; |
| 77 | +bool g_led_control_registers_update_required[DRIVER_COUNT] = {false}; |
73 | 78 |
|
74 | 79 | void IS31FL3737_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
|
75 | 80 | g_twi_transfer_buffer[0] = reg;
|
@@ -158,7 +163,7 @@ void IS31FL3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
|
158 | 163 | g_pwm_buffer[led.driver][led.r] = red;
|
159 | 164 | g_pwm_buffer[led.driver][led.g] = green;
|
160 | 165 | g_pwm_buffer[led.driver][led.b] = blue;
|
161 |
| - g_pwm_buffer_update_required = true; |
| 166 | + g_pwm_buffer_update_required[led.driver] = true; |
162 | 167 | }
|
163 | 168 | }
|
164 | 169 |
|
@@ -194,30 +199,31 @@ void IS31FL3737_set_led_control_register(uint8_t index, bool red, bool green, bo
|
194 | 199 | g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b);
|
195 | 200 | }
|
196 | 201 |
|
197 |
| - g_led_control_registers_update_required = true; |
| 202 | + g_led_control_registers_update_required[led.driver] = true; |
198 | 203 | }
|
199 | 204 |
|
200 |
| -void IS31FL3737_update_pwm_buffers(uint8_t addr1, uint8_t addr2) { |
201 |
| - if (g_pwm_buffer_update_required) { |
| 205 | +void IS31FL3737_update_pwm_buffers(uint8_t addr, uint8_t index) { |
| 206 | + if (g_pwm_buffer_update_required[index]) { |
202 | 207 | // Firstly we need to unlock the command register and select PG1
|
203 |
| - IS31FL3737_write_register(addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5); |
204 |
| - IS31FL3737_write_register(addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM); |
| 208 | + IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5); |
| 209 | + IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM); |
| 210 | + |
| 211 | + IS31FL3737_write_pwm_buffer(addr, g_pwm_buffer[index]); |
| 212 | + |
205 | 213 |
|
206 |
| - IS31FL3737_write_pwm_buffer(addr1, g_pwm_buffer[0]); |
207 |
| - // IS31FL3737_write_pwm_buffer(addr2, g_pwm_buffer[1]); |
208 | 214 | }
|
209 |
| - g_pwm_buffer_update_required = false; |
| 215 | + g_pwm_buffer_update_required[index] = false; |
210 | 216 | }
|
211 | 217 |
|
212 |
| -void IS31FL3737_update_led_control_registers(uint8_t addr1, uint8_t addr2) { |
213 |
| - if (g_led_control_registers_update_required) { |
| 218 | +void IS31FL3737_update_led_control_registers(uint8_t addr, uint8_t index) { |
| 219 | + if (g_led_control_registers_update_required[index]) { |
214 | 220 | // Firstly we need to unlock the command register and select PG0
|
215 |
| - IS31FL3737_write_register(addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5); |
216 |
| - IS31FL3737_write_register(addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL); |
| 221 | + IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5); |
| 222 | + IS31FL3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL); |
217 | 223 | for (int i = 0; i < 24; i++) {
|
218 |
| - IS31FL3737_write_register(addr1, i, g_led_control_registers[0][i]); |
219 |
| - // IS31FL3737_write_register(addr2, i, g_led_control_registers[1][i]); |
| 224 | + IS31FL3737_write_register(addr, i, g_led_control_registers[index][i]); |
220 | 225 | }
|
221 |
| - g_led_control_registers_update_required = false; |
222 | 226 | }
|
| 227 | + g_led_control_registers_update_required[index] = false; |
223 | 228 | }
|
| 229 | + |
0 commit comments