@@ -249,18 +249,33 @@ static bool _rmtCreateRxTask(rmt_obj_t* rmt)
249
249
return true;
250
250
}
251
251
252
+ // Helper function to test if a RMT channel is correctly assigned to TX or RX, issuing a error message if necessary
253
+ // return true when it is correctly assigned, false otherwise
254
+ static bool _rmtCheckTXnotRX (rmt_obj_t * rmt , bool tx_not_rx )
255
+ {
256
+ if (!rmt ) { // also returns false on NULL
257
+ return false;
258
+ }
259
+
260
+ if (rmt -> tx_not_rx == tx_not_rx ) { // matches expected RX/TX channel
261
+ return true;
262
+ }
263
+
264
+ if (tx_not_rx ) { // expected TX channel
265
+ log_e ("Can't write on a RX RMT Channel" );
266
+ } else { // expected RX channel
267
+ log_e ("Can't read on a TX RMT Channel" );
268
+ }
269
+ return false; // missmatched
270
+ }
252
271
253
272
/**
254
273
* Public method definitions
255
274
*/
256
275
257
276
bool rmtSetCarrier (rmt_obj_t * rmt , bool carrier_en , bool carrier_level , uint32_t low , uint32_t high )
258
277
{
259
- if (!rmt || low > 0xFFFF || high > 0xFFFF ) {
260
- return false;
261
- }
262
- if (!rmt -> tx_not_rx ) {
263
- log_e ("Can't write on a RX RMT Channel" );
278
+ if (!_rmtCheckTXnotRX (rmt , RMT_TX_MODE ) || low > 0xFFFF || high > 0xFFFF ) {
264
279
return false;
265
280
}
266
281
size_t channel = rmt -> channel ;
@@ -273,11 +288,7 @@ bool rmtSetCarrier(rmt_obj_t* rmt, bool carrier_en, bool carrier_level, uint32_t
273
288
274
289
bool rmtSetFilter (rmt_obj_t * rmt , bool filter_en , uint32_t filter_level )
275
290
{
276
- if (!rmt || filter_level > 0xFF ) {
277
- return false;
278
- }
279
- if (rmt -> tx_not_rx ) {
280
- log_e ("Can't read on a TX RMT Channel" );
291
+ if (!_rmtCheckTXnotRX (rmt , RMT_RX_MODE ) || filter_level > 0xFF ) {
281
292
return false;
282
293
}
283
294
size_t channel = rmt -> channel ;
@@ -290,11 +301,7 @@ bool rmtSetFilter(rmt_obj_t* rmt, bool filter_en, uint32_t filter_level)
290
301
291
302
bool rmtSetRxThreshold (rmt_obj_t * rmt , uint32_t value )
292
303
{
293
- if (!rmt || value > 0xFFFF ) {
294
- return false;
295
- }
296
- if (rmt -> tx_not_rx ) {
297
- log_e ("Can't read on a TX RMT Channel" );
304
+ if (!_rmtCheckTXnotRX (rmt , RMT_RX_MODE ) || value > 0xFFFF ) {
298
305
return false;
299
306
}
300
307
size_t channel = rmt -> channel ;
@@ -355,11 +362,7 @@ bool rmtDeinit(rmt_obj_t *rmt)
355
362
356
363
bool rmtLoop (rmt_obj_t * rmt , rmt_data_t * data , size_t size )
357
364
{
358
- if (!rmt ) {
359
- return false;
360
- }
361
- if (!rmt -> tx_not_rx ) {
362
- log_e ("Can't write on a RX RMT Channel" );
365
+ if (!_rmtCheckTXnotRX (rmt , RMT_TX_MODE )) {
363
366
return false;
364
367
}
365
368
int channel = rmt -> channel ;
@@ -373,11 +376,7 @@ bool rmtLoop(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
373
376
374
377
bool rmtWrite (rmt_obj_t * rmt , rmt_data_t * data , size_t size )
375
378
{
376
- if (!rmt ) {
377
- return false;
378
- }
379
- if (!rmt -> tx_not_rx ) {
380
- log_e ("Can't write on a RX RMT Channel" );
379
+ if (!_rmtCheckTXnotRX (rmt , RMT_TX_MODE )) {
381
380
return false;
382
381
}
383
382
int channel = rmt -> channel ;
@@ -391,13 +390,9 @@ bool rmtWrite(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
391
390
392
391
bool rmtWriteBlocking (rmt_obj_t * rmt , rmt_data_t * data , size_t size )
393
392
{
394
- if (!rmt ) {
393
+ if (!_rmtCheckTXnotRX ( rmt , RMT_TX_MODE ) ) {
395
394
return false;
396
395
}
397
- if (!rmt -> tx_not_rx ) {
398
- log_e ("Can't write on a RX RMT Channel" );
399
- return false;
400
- }
401
396
int channel = rmt -> channel ;
402
397
RMT_MUTEX_LOCK (channel );
403
398
rmt_tx_stop (channel );
@@ -409,11 +404,7 @@ bool rmtWriteBlocking(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
409
404
410
405
bool rmtReadData (rmt_obj_t * rmt , uint32_t * data , size_t size )
411
406
{
412
- if (!rmt ) {
413
- return false;
414
- }
415
- if (rmt -> tx_not_rx ) {
416
- log_e ("Can't read on a TX RMT Channel" );
407
+ if (!_rmtCheckTXnotRX (rmt , RMT_RX_MODE )) {
417
408
return false;
418
409
}
419
410
rmtReadAsync (rmt , (rmt_data_t * ) data , size , NULL , false, 0 );
@@ -423,11 +414,7 @@ bool rmtReadData(rmt_obj_t* rmt, uint32_t* data, size_t size)
423
414
424
415
bool rmtBeginReceive (rmt_obj_t * rmt )
425
416
{
426
- if (!rmt ) {
427
- return false;
428
- }
429
- if (rmt -> tx_not_rx ) {
430
- log_e ("Can't read on a TX RMT Channel" );
417
+ if (!_rmtCheckTXnotRX (rmt , RMT_RX_MODE )) {
431
418
return false;
432
419
}
433
420
int channel = rmt -> channel ;
@@ -451,11 +438,7 @@ bool rmtReceiveCompleted(rmt_obj_t* rmt)
451
438
452
439
bool rmtRead (rmt_obj_t * rmt , rmt_rx_data_cb_t cb , void * arg )
453
440
{
454
- if (!rmt || !cb ) {
455
- return false;
456
- }
457
- if (rmt -> tx_not_rx ) {
458
- log_e ("Can't read on a TX RMT Channel" );
441
+ if (!_rmtCheckTXnotRX (rmt , RMT_RX_MODE )) {
459
442
return false;
460
443
}
461
444
int channel = rmt -> channel ;
@@ -498,11 +481,7 @@ bool rmtEnd(rmt_obj_t* rmt)
498
481
499
482
bool rmtReadAsync (rmt_obj_t * rmt , rmt_data_t * data , size_t size , void * eventFlag , bool waitForData , uint32_t timeout )
500
483
{
501
- if (!rmt ) {
502
- return false;
503
- }
504
- if (rmt -> tx_not_rx ) {
505
- log_e ("Can't read on a TX RMT Channel" );
484
+ if (!_rmtCheckTXnotRX (rmt , RMT_RX_MODE )) {
506
485
return false;
507
486
}
508
487
int channel = rmt -> channel ;
0 commit comments