don't block on led transmission

This commit is contained in:
King Kévin 2016-04-16 12:12:47 +02:00
parent 63c17af691
commit 72b3d5188b
2 changed files with 8 additions and 5 deletions

View File

@ -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)

View File

@ -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);