|
@@ -22,6 +22,7 @@
|
|
|
#include "protocol.h"
|
|
|
|
|
|
ap2_led_t led_mask[KEY_COUNT];
|
|
|
+ap2_led_t led_colors[KEY_COUNT];
|
|
|
ap2_led_status_t ap2_led_status;
|
|
|
uint8_t rgb_row_changed[NUM_ROW];
|
|
|
|
|
@@ -91,6 +92,32 @@ void ap2_led_mask_set_all(void) {
|
|
|
/* Set all keys to a given color */
|
|
|
void ap2_led_mask_set_mono(const ap2_led_t color) { proto_tx(CMD_LED_MASK_SET_MONO, (uint8_t *)&color, sizeof(color), 1); }
|
|
|
|
|
|
+void ap2_led_colors_set_key(uint8_t row, uint8_t col, ap2_led_t color) {
|
|
|
+ uint8_t payload[] = {row, col, color.p.blue, color.p.green, color.p.red, color.p.alpha};
|
|
|
+ proto_tx(CMD_LED_COLOR_SET_KEY, payload, sizeof(payload), 1);
|
|
|
+}
|
|
|
+
|
|
|
+/* Push a whole local row to the shine */
|
|
|
+void ap2_led_colors_set_row(uint8_t row) {
|
|
|
+ uint8_t payload[NUM_COLUMN * sizeof(ap2_led_t) + 1];
|
|
|
+ payload[0] = row;
|
|
|
+ memcpy(payload + 1, &led_colors[ROWCOL2IDX(row, 0)], sizeof(*led_colors) * NUM_COLUMN);
|
|
|
+ proto_tx(CMD_LED_COLOR_SET_ROW, payload, sizeof(payload), 1);
|
|
|
+}
|
|
|
+
|
|
|
+/* Synchronize all rows */
|
|
|
+void ap2_led_colors_set_all(void) {
|
|
|
+ for (int row = 0; row < 5; row++) ap2_led_colors_set_row(row);
|
|
|
+}
|
|
|
+
|
|
|
+/* Set all keys to a given color */
|
|
|
+void ap2_led_colors_set_mono(const ap2_led_t color) { proto_tx(CMD_LED_COLOR_SET_MONO, (uint8_t *)&color, sizeof(color), 1); }
|
|
|
+
|
|
|
+void ap2_led_set_manual_control(uint8_t manual) {
|
|
|
+ uint8_t payload[] = {manual};
|
|
|
+ proto_tx(CMD_LED_SET_MANUAL, payload, sizeof(payload), 1);
|
|
|
+}
|
|
|
+
|
|
|
void ap2_led_blink(uint8_t row, uint8_t col, ap2_led_t color, uint8_t count, uint8_t hundredths) {
|
|
|
uint8_t payload[] = {row, col, color.p.blue, color.p.green, color.p.red, color.p.alpha, count, hundredths};
|
|
|
proto_tx(CMD_LED_KEY_BLINK, payload, sizeof(payload), 1);
|