diff options
Diffstat (limited to 'drivers/chibios/ws2812_spi.c')
| -rw-r--r-- | drivers/chibios/ws2812_spi.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/chibios/ws2812_spi.c b/drivers/chibios/ws2812_spi.c index 7a1d2f05d..1dec1f516 100644 --- a/drivers/chibios/ws2812_spi.c +++ b/drivers/chibios/ws2812_spi.c | |||
| @@ -62,9 +62,15 @@ static uint8_t get_protocol_eq(uint8_t data, int pos) { | |||
| 62 | static void set_led_color_rgb(LED_TYPE color, int pos) { | 62 | static void set_led_color_rgb(LED_TYPE color, int pos) { |
| 63 | uint8_t* tx_start = &txbuf[PREAMBLE_SIZE]; | 63 | uint8_t* tx_start = &txbuf[PREAMBLE_SIZE]; |
| 64 | 64 | ||
| 65 | #if (WS2812_BYTE_ORDER == WS2812_BYTE_ORDER_GRB) | ||
| 65 | for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.g, j); | 66 | for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.g, j); |
| 66 | for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.r, j); | 67 | for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.r, j); |
| 67 | for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.b, j); | 68 | for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.b, j); |
| 69 | #elif (WS2812_BYTE_ORDER == WS2812_BYTE_ORDER_RGB) | ||
| 70 | for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.r, j); | ||
| 71 | for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.g, j); | ||
| 72 | for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.b, j); | ||
| 73 | #endif | ||
| 68 | } | 74 | } |
| 69 | 75 | ||
| 70 | void ws2812_init(void) { | 76 | void ws2812_init(void) { |
