Reduce duplication for ARM/AVR ws2812 RGB Matrix driver (#7180)
* Reduce duplication for ARM/AVR ws2812 rgb_matrix driver * Reduce duplication for ARM/AVR ws2812 rgb_matrix driver - Fix setled_all use of r,g,b
This commit is contained in:
parent
1b06ea0c86
commit
e48fdebe5a
@ -25,13 +25,17 @@
|
|||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
#if !defined(LED_ARRAY) && defined(RGB_MATRIX_ENABLE)
|
/*
|
||||||
// LED color buffer
|
* Forward declare internal functions
|
||||||
LED_TYPE led[DRIVER_LED_TOTAL];
|
*
|
||||||
# define LED_ARRAY led
|
* The functions take a byte-array and send to the data output as WS2812 bitstream.
|
||||||
#endif
|
* The length is the number of bytes to send - three per LED.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void ws2812_sendarray(uint8_t *array, uint16_t length);
|
||||||
|
void ws2812_sendarray_mask(uint8_t *array, uint16_t length, uint8_t pinmask);
|
||||||
|
|
||||||
|
|
||||||
#ifdef RGBW_BB_TWI
|
#ifdef RGBW_BB_TWI
|
||||||
|
|
||||||
@ -135,23 +139,6 @@ unsigned char I2C_Write(unsigned char c) {
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef RGB_MATRIX_ENABLE
|
|
||||||
// Set an led in the buffer to a color
|
|
||||||
void inline ws2812_setled(int i, uint8_t r, uint8_t g, uint8_t b) {
|
|
||||||
led[i].r = r;
|
|
||||||
led[i].g = g;
|
|
||||||
led[i].b = b;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ws2812_setled_all(uint8_t r, uint8_t g, uint8_t b) {
|
|
||||||
for (int i = 0; i < sizeof(led) / sizeof(led[0]); i++) {
|
|
||||||
led[i].r = r;
|
|
||||||
led[i].g = g;
|
|
||||||
led[i].b = b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Setleds for standard RGB
|
// Setleds for standard RGB
|
||||||
void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {
|
void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {
|
||||||
// ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin));
|
// ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin));
|
||||||
|
@ -20,13 +20,7 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LIGHT_WS2812_H_
|
#pragma once
|
||||||
#define LIGHT_WS2812_H_
|
|
||||||
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <avr/interrupt.h>
|
|
||||||
//#include "ws2812_config.h"
|
|
||||||
//#include "i2cmaster.h"
|
|
||||||
|
|
||||||
#include "quantum/color.h"
|
#include "quantum/color.h"
|
||||||
|
|
||||||
@ -42,33 +36,6 @@
|
|||||||
* - Send out the LED data
|
* - Send out the LED data
|
||||||
* - Wait 50<EFBFBD>s to reset the LEDs
|
* - Wait 50<EFBFBD>s to reset the LEDs
|
||||||
*/
|
*/
|
||||||
#ifdef RGB_MATRIX_ENABLE
|
|
||||||
void ws2812_setled(int index, uint8_t r, uint8_t g, uint8_t b);
|
|
||||||
void ws2812_setled_all(uint8_t r, uint8_t g, uint8_t b);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
|
void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
|
||||||
void ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t number_of_leds, uint8_t pinmask);
|
void ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t number_of_leds, uint8_t pinmask);
|
||||||
void ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t number_of_leds);
|
void ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t number_of_leds);
|
||||||
|
|
||||||
/*
|
|
||||||
* Old interface / Internal functions
|
|
||||||
*
|
|
||||||
* The functions take a byte-array and send to the data output as WS2812 bitstream.
|
|
||||||
* The length is the number of bytes to send - three per LED.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void ws2812_sendarray(uint8_t *array, uint16_t length);
|
|
||||||
void ws2812_sendarray_mask(uint8_t *array, uint16_t length, uint8_t pinmask);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Internal defines
|
|
||||||
*/
|
|
||||||
#ifndef CONCAT
|
|
||||||
# define CONCAT(a, b) a##b
|
|
||||||
#endif
|
|
||||||
#ifndef CONCAT_EXP
|
|
||||||
# define CONCAT_EXP(a, b) CONCAT(a, b)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* LIGHT_WS2812_H_ */
|
|
||||||
|
@ -97,19 +97,33 @@ const rgb_matrix_driver_t rgb_matrix_driver = {
|
|||||||
|
|
||||||
#elif defined(WS2812)
|
#elif defined(WS2812)
|
||||||
|
|
||||||
extern LED_TYPE led[DRIVER_LED_TOTAL];
|
// LED color buffer
|
||||||
|
LED_TYPE led[DRIVER_LED_TOTAL];
|
||||||
|
|
||||||
|
static void init(void) {}
|
||||||
|
|
||||||
static void flush(void) {
|
static void flush(void) {
|
||||||
// Assumes use of RGB_DI_PIN
|
// Assumes use of RGB_DI_PIN
|
||||||
ws2812_setleds(led, DRIVER_LED_TOTAL);
|
ws2812_setleds(led, DRIVER_LED_TOTAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init(void) {}
|
// Set an led in the buffer to a color
|
||||||
|
static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) {
|
||||||
|
led[i].r = r;
|
||||||
|
led[i].g = g;
|
||||||
|
led[i].b = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void setled_all(uint8_t r, uint8_t g, uint8_t b) {
|
||||||
|
for (int i = 0; i < sizeof(led) / sizeof(led[0]); i++) {
|
||||||
|
setled(i, r, g, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const rgb_matrix_driver_t rgb_matrix_driver = {
|
const rgb_matrix_driver_t rgb_matrix_driver = {
|
||||||
.init = init,
|
.init = init,
|
||||||
.flush = flush,
|
.flush = flush,
|
||||||
.set_color = ws2812_setled,
|
.set_color = setled,
|
||||||
.set_color_all = ws2812_setled_all,
|
.set_color_all = setled_all,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user