forked from mirrors/qmk_userspace
		
	ws2812: replace RGBLED_NUM with driver-owned constant to decouple driver from RGBLEDs/RGBMATRIX defines (#18036)
This commit is contained in:
		
					parent
					
						
							
								a7d6643e3d
							
						
					
				
			
			
				commit
				
					
						c4f99f06ab
					
				
			
		
					 4 changed files with 25 additions and 19 deletions
				
			
		| 
						 | 
				
			
			@ -56,6 +56,12 @@
 | 
			
		|||
#    define WS2812_TRST_US 280
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(RGBLED_NUM)
 | 
			
		||||
#    define WS2812_LED_COUNT RGBLED_NUM
 | 
			
		||||
#elif defined(RGB_MATRIX_LED_COUNT)
 | 
			
		||||
#    define WS2812_LED_COUNT RGB_MATRIX_LED_COUNT
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* User Interface
 | 
			
		||||
 *
 | 
			
		||||
 * Input:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ static const pio_program_t ws2812_program = {
 | 
			
		|||
    .origin       = -1,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static uint32_t                WS2812_BUFFER[RGBLED_NUM];
 | 
			
		||||
static uint32_t                WS2812_BUFFER[WS2812_LED_COUNT];
 | 
			
		||||
static const rp_dma_channel_t* WS2812_DMA_CHANNEL;
 | 
			
		||||
 | 
			
		||||
bool ws2812_init(void) {
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +154,7 @@ static inline void sync_ws2812_transfer(void) {
 | 
			
		|||
            // Abort the synchronization if we have to wait longer than the total
 | 
			
		||||
            // count of LEDs in millisecounds. This is safely much longer than it
 | 
			
		||||
            // would take to push all the data out.
 | 
			
		||||
            if (unlikely(timer_elapsed_fast(start) > RGBLED_NUM)) {
 | 
			
		||||
            if (unlikely(timer_elapsed_fast(start) > WS2812_LED_COUNT)) {
 | 
			
		||||
                dprintln("ERROR: WS2812 DMA transfer has stalled, aborting!");
 | 
			
		||||
                dmaChannelDisableX(WS2812_DMA_CHANNEL);
 | 
			
		||||
                return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,7 +88,7 @@
 | 
			
		|||
 */
 | 
			
		||||
#define WS2812_COLOR_BITS (WS2812_CHANNELS * 8)
 | 
			
		||||
#define WS2812_RESET_BIT_N (1000 * WS2812_TRST_US / WS2812_TIMING)
 | 
			
		||||
#define WS2812_COLOR_BIT_N (RGBLED_NUM * WS2812_COLOR_BITS)    /**< Number of data bits */
 | 
			
		||||
#define WS2812_COLOR_BIT_N (WS2812_LED_COUNT * WS2812_COLOR_BITS) /**< Number of data bits */
 | 
			
		||||
#define WS2812_BIT_N (WS2812_COLOR_BIT_N + WS2812_RESET_BIT_N)    /**< Total number of bits in a frame */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -133,7 +133,7 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @brief   Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given bit
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref RGBLED_NUM)
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref WS2812_LED_COUNT)
 | 
			
		||||
 * @param[in] byte:                 The byte number [0, 2]
 | 
			
		||||
 * @param[in] bit:                  The bit number [0, 7]
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -147,7 +147,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 * @note    The red byte is the middle byte in the color packet
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref RGBLED_NUM)
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref WS2812_LED_COUNT)
 | 
			
		||||
 * @param[in] bit:                  The bit number [0, 7]
 | 
			
		||||
 *
 | 
			
		||||
 * @return                          The bit index
 | 
			
		||||
| 
						 | 
				
			
			@ -159,7 +159,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 * @note    The red byte is the first byte in the color packet
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref RGBLED_NUM)
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref WS2812_LED_COUNT)
 | 
			
		||||
 * @param[in] bit:                  The bit number [0, 7]
 | 
			
		||||
 *
 | 
			
		||||
 * @return                          The bit index
 | 
			
		||||
| 
						 | 
				
			
			@ -171,7 +171,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 * @note    The red byte is the last byte in the color packet
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref RGBLED_NUM)
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref WS2812_LED_COUNT)
 | 
			
		||||
 * @param[in] bit:                  The bit index [0, 7]
 | 
			
		||||
 *
 | 
			
		||||
 * @return                          The bit index
 | 
			
		||||
| 
						 | 
				
			
			@ -184,7 +184,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 * @note    The red byte is the middle byte in the color packet
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref RGBLED_NUM)
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref WS2812_LED_COUNT)
 | 
			
		||||
 * @param[in] bit:                  The bit number [0, 7]
 | 
			
		||||
 *
 | 
			
		||||
 * @return                          The bit index
 | 
			
		||||
| 
						 | 
				
			
			@ -196,7 +196,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 * @note    The red byte is the first byte in the color packet
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref RGBLED_NUM)
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref WS2812_LED_COUNT)
 | 
			
		||||
 * @param[in] bit:                  The bit number [0, 7]
 | 
			
		||||
 *
 | 
			
		||||
 * @return                          The bit index
 | 
			
		||||
| 
						 | 
				
			
			@ -208,7 +208,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 * @note    The red byte is the last byte in the color packet
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref RGBLED_NUM)
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref WS2812_LED_COUNT)
 | 
			
		||||
 * @param[in] bit:                  The bit index [0, 7]
 | 
			
		||||
 *
 | 
			
		||||
 * @return                          The bit index
 | 
			
		||||
| 
						 | 
				
			
			@ -221,7 +221,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 * @note    The red byte is the middle byte in the color packet
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref RGBLED_NUM)
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref WS2812_LED_COUNT)
 | 
			
		||||
 * @param[in] bit:                  The bit number [0, 7]
 | 
			
		||||
 *
 | 
			
		||||
 * @return                          The bit index
 | 
			
		||||
| 
						 | 
				
			
			@ -233,7 +233,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 * @note    The red byte is the first byte in the color packet
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref RGBLED_NUM)
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref WS2812_LED_COUNT)
 | 
			
		||||
 * @param[in] bit:                  The bit number [0, 7]
 | 
			
		||||
 *
 | 
			
		||||
 * @return                          The bit index
 | 
			
		||||
| 
						 | 
				
			
			@ -245,7 +245,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 * @note    The red byte is the last byte in the color packet
 | 
			
		||||
 *
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref RGBLED_NUM)
 | 
			
		||||
 * @param[in] led:                  The led index [0, @ref WS2812_LED_COUNT)
 | 
			
		||||
 * @param[in] bit:                  The bit index [0, 7]
 | 
			
		||||
 *
 | 
			
		||||
 * @return                          The bit index
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,7 +80,7 @@
 | 
			
		|||
#    define WS2812_CHANNELS 3
 | 
			
		||||
#endif
 | 
			
		||||
#define BYTES_FOR_LED (BYTES_FOR_LED_BYTE * WS2812_CHANNELS)
 | 
			
		||||
#define DATA_SIZE (BYTES_FOR_LED * RGBLED_NUM)
 | 
			
		||||
#define DATA_SIZE (BYTES_FOR_LED * WS2812_LED_COUNT)
 | 
			
		||||
#define RESET_SIZE (1000 * WS2812_TRST_US / (2 * WS2812_TIMING))
 | 
			
		||||
#define PREAMBLE_SIZE 4
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue