@@ -154,7 +154,7 @@ void RF24::read_register(uint8_t reg, uint8_t* buf, uint8_t len)
154
154
uint8_t * ptx = spi_txbuff;
155
155
uint8_t size = static_cast <uint8_t >(len + 1 ); // Add register value to transmit buffer
156
156
157
- *ptx++ = (R_REGISTER | reg) ;
157
+ *ptx++ = reg;
158
158
159
159
while (len--) {
160
160
*ptx++ = RF24_NOP; // Dummy operation, just for reading
@@ -179,13 +179,13 @@ void RF24::read_register(uint8_t reg, uint8_t* buf, uint8_t len)
179
179
180
180
beginTransaction ();
181
181
#if defined(RF24_SPI_PTR)
182
- status = _spi->transfer (R_REGISTER | reg);
182
+ status = _spi->transfer (reg);
183
183
while (len--) {
184
184
*buf++ = _spi->transfer (0xFF );
185
185
}
186
186
187
187
#else // !defined(RF24_SPI_PTR)
188
- status = _SPI.transfer (R_REGISTER | reg);
188
+ status = _SPI.transfer (reg);
189
189
while (len--) {
190
190
*buf++ = _SPI.transfer (0xFF );
191
191
}
@@ -206,7 +206,7 @@ uint8_t RF24::read_register(uint8_t reg)
206
206
207
207
uint8_t * prx = spi_rxbuff;
208
208
uint8_t * ptx = spi_txbuff;
209
- *ptx++ = (R_REGISTER | reg) ;
209
+ *ptx++ = reg;
210
210
*ptx++ = RF24_NOP; // Dummy operation, just for reading
211
211
212
212
#if defined(RF24_RP2)
@@ -223,11 +223,11 @@ uint8_t RF24::read_register(uint8_t reg)
223
223
224
224
beginTransaction ();
225
225
#if defined(RF24_SPI_PTR)
226
- status = _spi->transfer (R_REGISTER | reg);
226
+ status = _spi->transfer (reg);
227
227
result = _spi->transfer (0xff );
228
228
229
229
#else // !defined(RF24_SPI_PTR)
230
- status = _SPI.transfer (R_REGISTER | reg);
230
+ status = _SPI.transfer (reg);
231
231
result = _SPI.transfer (0xff );
232
232
233
233
#endif // !defined(RF24_SPI_PTR)
@@ -247,7 +247,7 @@ void RF24::write_register(uint8_t reg, const uint8_t* buf, uint8_t len)
247
247
uint8_t * ptx = spi_txbuff;
248
248
uint8_t size = static_cast <uint8_t >(len + 1 ); // Add register value to transmit buffer
249
249
250
- *ptx++ = (W_REGISTER | (REGISTER_MASK & reg) );
250
+ *ptx++ = (W_REGISTER | reg);
251
251
while (len--) {
252
252
*ptx++ = *buf++;
253
253
}
@@ -282,54 +282,36 @@ void RF24::write_register(uint8_t reg, const uint8_t* buf, uint8_t len)
282
282
283
283
/* ***************************************************************************/
284
284
285
- void RF24::write_register (uint8_t reg, uint8_t value, bool is_cmd_only )
285
+ void RF24::write_register (uint8_t reg, uint8_t value)
286
286
{
287
- if (is_cmd_only) {
288
- if (reg != RF24_NOP) { // don't print the get_status() operation
289
- IF_RF24_DEBUG (printf_P (PSTR (" write_register(%02x)\r\n " ), reg));
290
- }
291
- beginTransaction ();
292
- #if defined(RF24_LINUX)
293
- status = _SPI.transfer (W_REGISTER | reg);
294
- #else // !defined(RF24_LINUX) || defined (RF24_RP2)
295
- #if defined(RF24_SPI_PTR)
296
- status = _spi->transfer (W_REGISTER | reg);
297
- #else // !defined (RF24_SPI_PTR)
298
- status = _SPI.transfer (W_REGISTER | reg);
299
- #endif // !defined (RF24_SPI_PTR)
300
- #endif // !defined(RF24_LINUX) || defined(RF24_RP2)
301
- endTransaction ();
302
- }
303
- else {
304
- IF_RF24_DEBUG (printf_P (PSTR (" write_register(%02x,%02x)\r\n " ), reg, value));
287
+ IF_RF24_DEBUG (printf_P (PSTR (" write_register(%02x,%02x)\r\n " ), reg, value));
305
288
#if defined(RF24_LINUX) || defined(RF24_RP2)
306
- beginTransaction ();
307
- uint8_t * prx = spi_rxbuff;
308
- uint8_t * ptx = spi_txbuff;
309
- *ptx++ = (W_REGISTER | reg);
310
- *ptx = value;
289
+ beginTransaction ();
290
+ uint8_t * prx = spi_rxbuff;
291
+ uint8_t * ptx = spi_txbuff;
292
+ *ptx++ = (W_REGISTER | reg);
293
+ *ptx = value;
311
294
312
295
#if defined(RF24_RP2)
313
- _spi->transfernb ((const uint8_t *)spi_txbuff, spi_rxbuff, 2 );
296
+ _spi->transfernb ((const uint8_t *)spi_txbuff, spi_rxbuff, 2 );
314
297
#else // !defined(RF24_RP2)
315
- _SPI.transfernb (reinterpret_cast <char *>(spi_txbuff), reinterpret_cast <char *>(spi_rxbuff), 2 );
298
+ _SPI.transfernb (reinterpret_cast <char *>(spi_txbuff), reinterpret_cast <char *>(spi_rxbuff), 2 );
316
299
#endif // !defined(RF24_RP2)
317
300
318
- status = *prx++; // status is 1st byte of receive buffer
319
- endTransaction ();
301
+ status = *prx++; // status is 1st byte of receive buffer
302
+ endTransaction ();
320
303
#else // !defined(RF24_LINUX) && !defined(RF24_RP2)
321
304
322
- beginTransaction ();
305
+ beginTransaction ();
323
306
#if defined(RF24_SPI_PTR)
324
- status = _spi->transfer (W_REGISTER | reg);
325
- _spi->transfer (value);
307
+ status = _spi->transfer (W_REGISTER | reg);
308
+ _spi->transfer (value);
326
309
#else // !defined(RF24_SPI_PTR)
327
- status = _SPI.transfer (W_REGISTER | reg);
328
- _SPI.transfer (value);
310
+ status = _SPI.transfer (W_REGISTER | reg);
311
+ _SPI.transfer (value);
329
312
#endif // !defined(RF24_SPI_PTR)
330
- endTransaction ();
313
+ endTransaction ();
331
314
#endif // !defined(RF24_LINUX) && !defined(RF24_RP2)
332
- }
333
315
}
334
316
335
317
/* ***************************************************************************/
@@ -348,7 +330,7 @@ void RF24::write_payload(const void* buf, uint8_t data_len, const uint8_t writeT
348
330
}
349
331
350
332
// printf("[Writing %u bytes %u blanks]",data_len,blank_len);
351
- IF_RF24_DEBUG (printf (" [Writing %u bytes %u blanks]\n " , data_len, blank_len););
333
+ IF_RF24_DEBUG (printf_P (" [Writing %u bytes %u blanks]\n " , data_len, blank_len););
352
334
353
335
#if defined(RF24_LINUX) || defined(RF24_RP2)
354
336
beginTransaction ();
@@ -420,7 +402,7 @@ void RF24::read_payload(void* buf, uint8_t data_len)
420
402
421
403
// printf("[Reading %u bytes %u blanks]",data_len,blank_len);
422
404
423
- IF_RF24_DEBUG (printf (" [Reading %u bytes %u blanks]\n " , data_len, blank_len););
405
+ IF_RF24_DEBUG (printf_P (" [Reading %u bytes %u blanks]\n " , data_len, blank_len););
424
406
425
407
#if defined(RF24_LINUX) || defined(RF24_RP2)
426
408
beginTransaction ();
@@ -486,23 +468,25 @@ void RF24::read_payload(void* buf, uint8_t data_len)
486
468
487
469
uint8_t RF24::flush_rx (void )
488
470
{
489
- write_register (FLUSH_RX, RF24_NOP, true );
471
+ read_register (FLUSH_RX, (uint8_t *)nullptr , 0 );
472
+ IF_RF24_DEBUG (printf_P (" [Flushing RX FIFO]" ););
490
473
return status;
491
474
}
492
475
493
476
/* ***************************************************************************/
494
477
495
478
uint8_t RF24::flush_tx (void )
496
479
{
497
- write_register (FLUSH_TX, RF24_NOP, true );
480
+ read_register (FLUSH_TX, (uint8_t *)nullptr , 0 );
481
+ IF_RF24_DEBUG (printf_P (" [Flushing RX FIFO]" ););
498
482
return status;
499
483
}
500
484
501
485
/* ***************************************************************************/
502
486
503
487
uint8_t RF24::get_status (void )
504
488
{
505
- write_register (RF24_NOP, RF24_NOP, true );
489
+ read_register (RF24_NOP, ( uint8_t *) nullptr , 0 );
506
490
return status;
507
491
}
508
492
@@ -545,7 +529,7 @@ void RF24::print_address_register(const char* name, uint8_t reg, uint8_t qty)
545
529
name);
546
530
while (qty--) {
547
531
uint8_t * buffer = new uint8_t [addr_width];
548
- read_register (reg++ & REGISTER_MASK , buffer, addr_width);
532
+ read_register (reg++, buffer, addr_width);
549
533
550
534
printf_P (PSTR (" 0x" ));
551
535
uint8_t * bufptr = buffer + addr_width;
@@ -564,7 +548,7 @@ uint8_t RF24::sprintf_address_register(char* out_buffer, uint8_t reg, uint8_t qt
564
548
uint8_t offset = 0 ;
565
549
uint8_t * read_buffer = new uint8_t [addr_width];
566
550
while (qty--) {
567
- read_register (reg++ & REGISTER_MASK , read_buffer, addr_width);
551
+ read_register (reg++, read_buffer, addr_width);
568
552
uint8_t * bufptr = read_buffer + addr_width;
569
553
while (--bufptr >= read_buffer) {
570
554
offset += sprintf_P (out_buffer + offset, PSTR (" %02X" ), *bufptr);
@@ -1325,7 +1309,8 @@ bool RF24::writeBlocking(const void* buf, uint8_t len, uint32_t timeout)
1325
1309
void RF24::reUseTX ()
1326
1310
{
1327
1311
write_register (NRF_STATUS, _BV (MAX_RT)); // Clear max retry flag
1328
- write_register (REUSE_TX_PL, RF24_NOP, true );
1312
+ read_register (REUSE_TX_PL, (uint8_t *)nullptr , 0 );
1313
+ IF_RF24_DEBUG (printf_P (" [Reusing payload in TX FIFO]" ););
1329
1314
ce (LOW); // Re-Transfer packet
1330
1315
ce (HIGH);
1331
1316
}
@@ -1690,7 +1675,7 @@ void RF24::enableDynamicPayloads(void)
1690
1675
// toggle_features();
1691
1676
write_register (FEATURE, read_register (FEATURE) | _BV (EN_DPL));
1692
1677
1693
- IF_RF24_DEBUG (printf (" FEATURE=%i\r\n " , read_register (FEATURE)));
1678
+ IF_RF24_DEBUG (printf_P (" FEATURE=%i\r\n " , read_register (FEATURE)));
1694
1679
1695
1680
// Enable dynamic payload on all pipes
1696
1681
//
@@ -1710,7 +1695,7 @@ void RF24::disableDynamicPayloads(void)
1710
1695
// toggle_features();
1711
1696
write_register (FEATURE, 0 );
1712
1697
1713
- IF_RF24_DEBUG (printf (" FEATURE=%i\r\n " , read_register (FEATURE)));
1698
+ IF_RF24_DEBUG (printf_P (" FEATURE=%i\r\n " , read_register (FEATURE)));
1714
1699
1715
1700
// Disable dynamic payload on all pipes
1716
1701
//
@@ -1731,7 +1716,7 @@ void RF24::enableAckPayload(void)
1731
1716
if (!ack_payloads_enabled) {
1732
1717
write_register (FEATURE, read_register (FEATURE) | _BV (EN_ACK_PAY) | _BV (EN_DPL));
1733
1718
1734
- IF_RF24_DEBUG (printf (" FEATURE=%i\r\n " , read_register (FEATURE)));
1719
+ IF_RF24_DEBUG (printf_P (" FEATURE=%i\r\n " , read_register (FEATURE)));
1735
1720
1736
1721
// Enable dynamic payload on pipes 0 & 1
1737
1722
write_register (DYNPD, read_register (DYNPD) | _BV (DPL_P1) | _BV (DPL_P0));
@@ -1748,7 +1733,7 @@ void RF24::disableAckPayload(void)
1748
1733
if (ack_payloads_enabled) {
1749
1734
write_register (FEATURE, static_cast <uint8_t >(read_register (FEATURE) & ~_BV (EN_ACK_PAY)));
1750
1735
1751
- IF_RF24_DEBUG (printf (" FEATURE=%i\r\n " , read_register (FEATURE)));
1736
+ IF_RF24_DEBUG (printf_P (" FEATURE=%i\r\n " , read_register (FEATURE)));
1752
1737
1753
1738
ack_payloads_enabled = false ;
1754
1739
}
@@ -1764,7 +1749,7 @@ void RF24::enableDynamicAck(void)
1764
1749
// toggle_features();
1765
1750
write_register (FEATURE, read_register (FEATURE) | _BV (EN_DYN_ACK));
1766
1751
1767
- IF_RF24_DEBUG (printf (" FEATURE=%i\r\n " , read_register (FEATURE)));
1752
+ IF_RF24_DEBUG (printf_P (" FEATURE=%i\r\n " , read_register (FEATURE)));
1768
1753
}
1769
1754
1770
1755
/* ***************************************************************************/
@@ -1774,7 +1759,7 @@ bool RF24::writeAckPayload(uint8_t pipe, const void* buf, uint8_t len)
1774
1759
if (ack_payloads_enabled) {
1775
1760
const uint8_t * current = reinterpret_cast <const uint8_t *>(buf);
1776
1761
1777
- write_payload (current, len, W_ACK_PAYLOAD | (pipe & 0x07 ));
1762
+ write_register ( W_ACK_PAYLOAD | (pipe & 0x07 ), current, rf24_min (len, static_cast < uint8_t >( 32 ) ));
1778
1763
return !(status & _BV (TX_FULL));
1779
1764
}
1780
1765
return 0 ;
0 commit comments