Add RGBW support to PWM and SPI drivers for ChibiOS (#14327)
* Add RGBW support to PWM and SPI drivers for ChibiOS * Apply suggestions from code review Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: Ryan <fauxpark@gmail.com>
This commit is contained in:
		
							parent
							
								
									0760093978
								
							
						
					
					
						commit
						7c10d00ca6
					
				
					 2 changed files with 44 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -3,10 +3,6 @@
 | 
			
		|||
 | 
			
		||||
/* Adapted from https://github.com/gamazeps/ws2812b-chibios-SPIDMA/ */
 | 
			
		||||
 | 
			
		||||
#ifdef RGBW
 | 
			
		||||
#    error "RGBW not supported"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Define the spi your LEDs are plugged to here
 | 
			
		||||
#ifndef WS2812_SPI
 | 
			
		||||
#    define WS2812_SPI SPID1
 | 
			
		||||
| 
						 | 
				
			
			@ -74,8 +70,12 @@
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
#define BYTES_FOR_LED_BYTE 4
 | 
			
		||||
#define NB_COLORS 3
 | 
			
		||||
#define BYTES_FOR_LED (BYTES_FOR_LED_BYTE * NB_COLORS)
 | 
			
		||||
#ifdef RGBW
 | 
			
		||||
#    define WS2812_CHANNELS 4
 | 
			
		||||
#else
 | 
			
		||||
#    define WS2812_CHANNELS 3
 | 
			
		||||
#endif
 | 
			
		||||
#define BYTES_FOR_LED (BYTES_FOR_LED_BYTE * WS2812_CHANNELS)
 | 
			
		||||
#define DATA_SIZE (BYTES_FOR_LED * RGBLED_NUM)
 | 
			
		||||
#define RESET_SIZE (1000 * WS2812_TRST_US / (2 * 1250))
 | 
			
		||||
#define PREAMBLE_SIZE 4
 | 
			
		||||
| 
						 | 
				
			
			@ -116,6 +116,9 @@ static void set_led_color_rgb(LED_TYPE color, int pos) {
 | 
			
		|||
    for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.g, j);
 | 
			
		||||
    for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.r, j);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef RGBW
 | 
			
		||||
    for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 4 + j] = get_protocol_eq(color.w, j);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ws2812_init(void) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue