@@ -421,15 +421,20 @@ bool rmtWriteLooping(int pin, rmt_data_t *data, size_t num_rmt_symbols) {
421
421
return _rmtWrite (pin , data , num_rmt_symbols , false /*blocks*/ , 1 /*looping*/ , 0 /*N/A*/ );
422
422
}
423
423
424
- // Same as rmtWriteLooping(...) but limits number of loops to "loop_count"
425
- // loop_count shall be higher than 1 because 0 means no looping (single transmission)
426
- // 1 means infinite looping (it shall use rmtWriteLooping() instead)
424
+ // Same as rmtWriteLooping(...) but it transmits the data a fixed number of times ("loop_count").
425
+ // loop_count == 0 is invalid (no transmission); loop_count >= 1 means transmit that many times.
427
426
bool rmtWriteLoopingCount (int pin , rmt_data_t * data , size_t num_rmt_symbols , uint32_t loop_count ) {
428
- if (loop_count <= 1 ) {
429
- log_w ("rmtWriteLoopingCount: Invalid loop_count (%u). Must be greater than 1." , loop_count );
427
+ if (loop_count == 0 ) {
428
+ log_w ("rmtWriteLoopingCount: Invalid loop_count (%u). Must be at least 1." , loop_count );
430
429
return false;
431
430
}
432
- return _rmtWrite (pin , data , num_rmt_symbols , false /*blocks*/ , loop_count /*looping*/ , 0 /*N/A*/ );
431
+ if (loop_count == 1 ) {
432
+ // send the RMT symbols once using non blocking write, like "looping" it a single time
433
+ return rmtWriteAsync (int pin , rmt_data_t * data , size_t num_rmt_symbols );
434
+ } else {
435
+ // write the RMT symbols for loop_count times
436
+ return _rmtWrite (pin , data , num_rmt_symbols , false /*blocks*/ , loop_count /*looping*/ , 0 /*N/A*/ );
437
+ }
433
438
}
434
439
435
440
bool rmtTransmitCompleted (int pin ) {
0 commit comments