Skip to content

Commit 81c567f

Browse files
committed
Optimizes final binary size
1 parent f964a2c commit 81c567f

File tree

1 file changed

+29
-50
lines changed

1 file changed

+29
-50
lines changed

cores/esp32/esp32-hal-rmt.c

Lines changed: 29 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -249,18 +249,33 @@ static bool _rmtCreateRxTask(rmt_obj_t* rmt)
249249
return true;
250250
}
251251

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+
}
252271

253272
/**
254273
* Public method definitions
255274
*/
256275

257276
bool rmtSetCarrier(rmt_obj_t* rmt, bool carrier_en, bool carrier_level, uint32_t low, uint32_t high)
258277
{
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) {
264279
return false;
265280
}
266281
size_t channel = rmt->channel;
@@ -273,11 +288,7 @@ bool rmtSetCarrier(rmt_obj_t* rmt, bool carrier_en, bool carrier_level, uint32_t
273288

274289
bool rmtSetFilter(rmt_obj_t* rmt, bool filter_en, uint32_t filter_level)
275290
{
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) {
281292
return false;
282293
}
283294
size_t channel = rmt->channel;
@@ -290,11 +301,7 @@ bool rmtSetFilter(rmt_obj_t* rmt, bool filter_en, uint32_t filter_level)
290301

291302
bool rmtSetRxThreshold(rmt_obj_t* rmt, uint32_t value)
292303
{
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) {
298305
return false;
299306
}
300307
size_t channel = rmt->channel;
@@ -355,11 +362,7 @@ bool rmtDeinit(rmt_obj_t *rmt)
355362

356363
bool rmtLoop(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
357364
{
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)) {
363366
return false;
364367
}
365368
int channel = rmt->channel;
@@ -373,11 +376,7 @@ bool rmtLoop(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
373376

374377
bool rmtWrite(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
375378
{
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)) {
381380
return false;
382381
}
383382
int channel = rmt->channel;
@@ -391,13 +390,9 @@ bool rmtWrite(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
391390

392391
bool rmtWriteBlocking(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
393392
{
394-
if (!rmt) {
393+
if (!_rmtCheckTXnotRX(rmt, RMT_TX_MODE)) {
395394
return false;
396395
}
397-
if (!rmt->tx_not_rx) {
398-
log_e("Can't write on a RX RMT Channel");
399-
return false;
400-
}
401396
int channel = rmt->channel;
402397
RMT_MUTEX_LOCK(channel);
403398
rmt_tx_stop(channel);
@@ -409,11 +404,7 @@ bool rmtWriteBlocking(rmt_obj_t* rmt, rmt_data_t* data, size_t size)
409404

410405
bool rmtReadData(rmt_obj_t* rmt, uint32_t* data, size_t size)
411406
{
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)) {
417408
return false;
418409
}
419410
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)
423414

424415
bool rmtBeginReceive(rmt_obj_t* rmt)
425416
{
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)) {
431418
return false;
432419
}
433420
int channel = rmt->channel;
@@ -451,11 +438,7 @@ bool rmtReceiveCompleted(rmt_obj_t* rmt)
451438

452439
bool rmtRead(rmt_obj_t* rmt, rmt_rx_data_cb_t cb, void * arg)
453440
{
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)) {
459442
return false;
460443
}
461444
int channel = rmt->channel;
@@ -498,11 +481,7 @@ bool rmtEnd(rmt_obj_t* rmt)
498481

499482
bool rmtReadAsync(rmt_obj_t* rmt, rmt_data_t* data, size_t size, void* eventFlag, bool waitForData, uint32_t timeout)
500483
{
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)) {
506485
return false;
507486
}
508487
int channel = rmt->channel;

0 commit comments

Comments
 (0)