diff --git a/lib/led_ws2812b.c b/lib/led_ws2812b.c index 7d08781..8515e3d 100644 --- a/lib/led_ws2812b.c +++ b/lib/led_ws2812b.c @@ -104,10 +104,10 @@ void ws2812b_set_rgb(uint16_t led, uint8_t red, uint8_t green, uint8_t blue) } } -void ws2812b_transmit(void) +bool ws2812b_transmit(void) { - while (transmit_flag) { // wait for previous transmission to complete - __WFI(); + if (transmit_flag) { // a transmission is already ongoing + return false; } transmit_flag = true; // remember transmission started dma_set_memory_address(WS2812B_DMA, WS2812B_DMA_CH, (uint32_t)ws2812b_data); @@ -119,6 +119,7 @@ void ws2812b_transmit(void) timer_set_counter(WS2812B_TIMER, 0); // reset timer counter fro clean clock timer_enable_counter(WS2812B_TIMER); // start timer to generate clock + return true; } void ws2812b_setup(void) diff --git a/lib/led_ws2812b.h b/lib/led_ws2812b.h index b936a9b..5c61ff2 100644 --- a/lib/led_ws2812b.h +++ b/lib/led_ws2812b.h @@ -33,5 +33,7 @@ void ws2812b_setup(void); * @note transmission needs to be done separately */ void ws2812b_set_rgb(uint16_t led, uint8_t red, uint8_t green, uint8_t blue); -/** @brief transmit color values to WS2812b LEDs */ -void ws2812b_transmit(void); +/** @brief transmit color values to WS2812b LEDs + * @return true if transmission started, false if another transmission is already ongoing + */ +bool ws2812b_transmit(void);