don't block on led transmission
This commit is contained in:
parent
63c17af691
commit
72b3d5188b
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue