@@ -128,7 +128,7 @@ static xSemaphoreHandle g_rmt_block_lock = NULL;
128
128
*/
129
129
static void _initPin (int pin , int channel , bool tx_not_rx );
130
130
131
- static bool _rmtSendOnce (rmt_obj_t * rmt , rmt_data_t * data , size_t size );
131
+ static bool _rmtSendOnce (rmt_obj_t * rmt , rmt_data_t * data , size_t size , bool continuous );
132
132
133
133
static void IRAM_ATTR _rmt_isr (void * arg );
134
134
@@ -234,6 +234,21 @@ bool rmtDeinit(rmt_obj_t *rmt)
234
234
return true;
235
235
}
236
236
237
+ bool rmtLoop (rmt_obj_t * rmt , rmt_data_t * data , size_t size )
238
+ {
239
+ if (!rmt ) {
240
+ return false;
241
+ }
242
+
243
+ int channel = rmt -> channel ;
244
+ int allocated_size = MAX_DATA_PER_CHANNEL * rmt -> buffers ;
245
+
246
+ if (size > allocated_size ) {
247
+ return false;
248
+ }
249
+ return _rmtSendOnce (rmt , data , size , true);
250
+ }
251
+
237
252
bool rmtWrite (rmt_obj_t * rmt , rmt_data_t * data , size_t size )
238
253
{
239
254
if (!rmt ) {
@@ -282,10 +297,10 @@ bool rmtWrite(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
282
297
RMT_MUTEX_UNLOCK (channel );
283
298
284
299
// start the transation
285
- return _rmtSendOnce (rmt , data , MAX_DATA_PER_ITTERATION );
300
+ return _rmtSendOnce (rmt , data , MAX_DATA_PER_ITTERATION , false );
286
301
} else {
287
302
// use one-go mode if data fits one buffer
288
- return _rmtSendOnce (rmt , data , size );
303
+ return _rmtSendOnce (rmt , data , size , false );
289
304
}
290
305
}
291
306
@@ -553,7 +568,7 @@ rmt_obj_t* rmtInit(int pin, bool tx_not_rx, rmt_reserve_memsize_t memsize)
553
568
/**
554
569
* Private methods definitions
555
570
*/
556
- bool _rmtSendOnce (rmt_obj_t * rmt , rmt_data_t * data , size_t size )
571
+ bool _rmtSendOnce (rmt_obj_t * rmt , rmt_data_t * data , size_t size , bool continuous )
557
572
{
558
573
if (!rmt ) {
559
574
return false;
@@ -571,6 +586,7 @@ bool _rmtSendOnce(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
571
586
}
572
587
573
588
RMT_MUTEX_LOCK (channel );
589
+ RMT .conf_ch [channel ].conf1 .tx_conti_mode = continuous ;
574
590
RMT .conf_ch [channel ].conf1 .mem_rd_rst = 1 ;
575
591
RMT .conf_ch [channel ].conf1 .tx_start = 1 ;
576
592
RMT_MUTEX_UNLOCK (channel );
0 commit comments