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
@ -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:
|
||||||
|
@ -36,10 +36,10 @@ static int state_machine = -1;
|
|||||||
// clang-format off
|
// clang-format off
|
||||||
static const uint16_t ws2812_program_instructions[] = {
|
static const uint16_t ws2812_program_instructions[] = {
|
||||||
// .wrap_target
|
// .wrap_target
|
||||||
0x7221, // 0: out x, 1 side 1 [2]
|
0x7221, // 0: out x, 1 side 1 [2]
|
||||||
0x0123, // 1: jmp !x, 3 side 0 [1]
|
0x0123, // 1: jmp !x, 3 side 0 [1]
|
||||||
0x0400, // 2: jmp 0 side 0 [4]
|
0x0400, // 2: jmp 0 side 0 [4]
|
||||||
0xb442, // 3: nop side 1 [4]
|
0xb442, // 3: nop side 1 [4]
|
||||||
// .wrap
|
// .wrap
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -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,8 +88,8 @@
|
|||||||
*/
|
*/
|
||||||
#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 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief High period for a zero, in ticks
|
* @brief High period for a zero, in ticks
|
||||||
@ -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…
Reference in New Issue
Block a user