@@ -128,7 +128,7 @@ static xSemaphoreHandle g_rmt_block_lock = NULL;
128128 */ 
129129static  void  _initPin (int  pin , int  channel , bool  tx_not_rx );
130130
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 );
132132
133133static  void  IRAM_ATTR  _rmt_isr (void *  arg );
134134
@@ -234,6 +234,21 @@ bool rmtDeinit(rmt_obj_t *rmt)
234234 return  true;
235235}
236236
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+ 
237252bool  rmtWrite (rmt_obj_t *  rmt , rmt_data_t *  data , size_t  size )
238253{
239254 if  (!rmt ) {
@@ -282,10 +297,10 @@ bool rmtWrite(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
282297 RMT_MUTEX_UNLOCK (channel );
283298
284299 // start the transation 
285-  return  _rmtSendOnce (rmt , data , MAX_DATA_PER_ITTERATION );
300+  return  _rmtSendOnce (rmt , data , MAX_DATA_PER_ITTERATION , false );
286301 } else  {
287302 // use one-go mode if data fits one buffer  
288-  return  _rmtSendOnce (rmt , data , size );
303+  return  _rmtSendOnce (rmt , data , size , false );
289304 }
290305}
291306
@@ -553,7 +568,7 @@ rmt_obj_t* rmtInit(int pin, bool tx_not_rx, rmt_reserve_memsize_t memsize)
553568/** 
554569 * Private methods definitions 
555570 */ 
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 )
557572{
558573 if  (!rmt ) {
559574 return  false;
@@ -571,6 +586,7 @@ bool _rmtSendOnce(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
571586 }
572587
573588 RMT_MUTEX_LOCK (channel );
589+  RMT .conf_ch [channel ].conf1 .tx_conti_mode  =  continuous ;
574590 RMT .conf_ch [channel ].conf1 .mem_rd_rst  =  1 ;
575591 RMT .conf_ch [channel ].conf1 .tx_start  =  1 ;
576592 RMT_MUTEX_UNLOCK (channel );
0 commit comments