mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-04 07:12:33 +01:00 
			
		
		
		
	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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user