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
 | 
					#    define WS2812_TRST_US 280
 | 
				
			||||||
#endif
 | 
					#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
 | 
					/* User Interface
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Input:
 | 
					 * Input:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,7 +62,7 @@ static const pio_program_t ws2812_program = {
 | 
				
			||||||
    .origin       = -1,
 | 
					    .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;
 | 
					static const rp_dma_channel_t* WS2812_DMA_CHANNEL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ws2812_init(void) {
 | 
					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
 | 
					            // Abort the synchronization if we have to wait longer than the total
 | 
				
			||||||
            // count of LEDs in millisecounds. This is safely much longer than it
 | 
					            // count of LEDs in millisecounds. This is safely much longer than it
 | 
				
			||||||
            // would take to push all the data out.
 | 
					            // 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!");
 | 
					                dprintln("ERROR: WS2812 DMA transfer has stalled, aborting!");
 | 
				
			||||||
                dmaChannelDisableX(WS2812_DMA_CHANNEL);
 | 
					                dmaChannelDisableX(WS2812_DMA_CHANNEL);
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,7 +88,7 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define WS2812_COLOR_BITS (WS2812_CHANNELS * 8)
 | 
					#define WS2812_COLOR_BITS (WS2812_CHANNELS * 8)
 | 
				
			||||||
#define WS2812_RESET_BIT_N (1000 * WS2812_TRST_US / WS2812_TIMING)
 | 
					#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 */
 | 
					#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
 | 
					 * @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] byte:                 The byte number [0, 2]
 | 
				
			||||||
 * @param[in] bit:                  The bit number [0, 7]
 | 
					 * @param[in] bit:                  The bit number [0, 7]
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -147,7 +147,7 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @note    The red byte is the middle byte in the color packet
 | 
					 * @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]
 | 
					 * @param[in] bit:                  The bit number [0, 7]
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return                          The bit index
 | 
					 * @return                          The bit index
 | 
				
			||||||
| 
						 | 
					@ -159,7 +159,7 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @note    The red byte is the first byte in the color packet
 | 
					 * @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]
 | 
					 * @param[in] bit:                  The bit number [0, 7]
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return                          The bit index
 | 
					 * @return                          The bit index
 | 
				
			||||||
| 
						 | 
					@ -171,7 +171,7 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @note    The red byte is the last byte in the color packet
 | 
					 * @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]
 | 
					 * @param[in] bit:                  The bit index [0, 7]
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return                          The bit index
 | 
					 * @return                          The bit index
 | 
				
			||||||
| 
						 | 
					@ -184,7 +184,7 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @note    The red byte is the middle byte in the color packet
 | 
					 * @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]
 | 
					 * @param[in] bit:                  The bit number [0, 7]
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return                          The bit index
 | 
					 * @return                          The bit index
 | 
				
			||||||
| 
						 | 
					@ -196,7 +196,7 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @note    The red byte is the first byte in the color packet
 | 
					 * @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]
 | 
					 * @param[in] bit:                  The bit number [0, 7]
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return                          The bit index
 | 
					 * @return                          The bit index
 | 
				
			||||||
| 
						 | 
					@ -208,7 +208,7 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @note    The red byte is the last byte in the color packet
 | 
					 * @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]
 | 
					 * @param[in] bit:                  The bit index [0, 7]
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return                          The bit index
 | 
					 * @return                          The bit index
 | 
				
			||||||
| 
						 | 
					@ -221,7 +221,7 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @note    The red byte is the middle byte in the color packet
 | 
					 * @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]
 | 
					 * @param[in] bit:                  The bit number [0, 7]
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return                          The bit index
 | 
					 * @return                          The bit index
 | 
				
			||||||
| 
						 | 
					@ -233,7 +233,7 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @note    The red byte is the first byte in the color packet
 | 
					 * @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]
 | 
					 * @param[in] bit:                  The bit number [0, 7]
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return                          The bit index
 | 
					 * @return                          The bit index
 | 
				
			||||||
| 
						 | 
					@ -245,7 +245,7 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @note    The red byte is the last byte in the color packet
 | 
					 * @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]
 | 
					 * @param[in] bit:                  The bit index [0, 7]
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return                          The bit index
 | 
					 * @return                          The bit index
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -80,7 +80,7 @@
 | 
				
			||||||
#    define WS2812_CHANNELS 3
 | 
					#    define WS2812_CHANNELS 3
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#define BYTES_FOR_LED (BYTES_FOR_LED_BYTE * WS2812_CHANNELS)
 | 
					#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 RESET_SIZE (1000 * WS2812_TRST_US / (2 * WS2812_TIMING))
 | 
				
			||||||
#define PREAMBLE_SIZE 4
 | 
					#define PREAMBLE_SIZE 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue