From 72b3d5188b4b672104f830cc1315d678f2f2cc4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Sat, 16 Apr 2016 12:12:47 +0200 Subject: [PATCH] don't block on led transmission --- lib/led_ws2812b.c | 7 ++++--- lib/led_ws2812b.h | 6 ++++-- 2 files changed, 8 insertions(+), 5 deletions(-) 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);