From f4394afb4e7915457f0a901e9c3d9d0f08470593 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Tue, 25 Jun 2019 15:52:18 +0200 Subject: addsetautoack --- include/driver/nrf24l01.h | 27 ++++++++++++++++++++++++--- src/app/nrf24l01test/main.cc | 4 ++-- src/driver/nrf24l01.cc | 29 +++++++++++++++++++++++++++-- 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/include/driver/nrf24l01.h b/include/driver/nrf24l01.h index ae88640..6b69029 100644 --- a/include/driver/nrf24l01.h +++ b/include/driver/nrf24l01.h @@ -275,7 +275,7 @@ public: * @param enable desired DynamicPayloads status * */ - void enableDynamicPayloads(bool enabled); + void setDynamicPayloads(bool enabled); /** * Enable dynamic ACKs (single write multicast or unicast) for chosen messages @@ -286,12 +286,33 @@ public: * * @warning This MUST be called prior to attempting single write NOACK calls * @code - * radio.enableDynamicAck(); + * radio.setDynamicAck(); * radio.write(&data,32,1); // Sends a payload with no acknowledgement requested * radio.write(&data,32,0); // Sends a payload using auto-retry/autoACK * @endcode */ - void enableDynamicAck(bool enabled); + void setDynamicAck(bool enabled); + + /** + * Enable or disable auto-acknowlede packets + * + * This is enabled by default, so it's only needed if you want to turn + * it off for some reason. + * + * @param enable Whether to enable (true) or disable (false) auto-acks + */ + void setAutoAck(bool enable); + + /** + * Enable or disable auto-acknowlede packets on a per pipeline basis. + * + * AA is enabled by default, so it's only needed if you want to turn + * it off/on for some reason on a per pipeline basis. + * + * @param pipe Which pipeline to modify + * @param enable Whether to enable (true) or disable (false) auto-acks + */ + void setAutoAck(uint8_t pipe, bool enable); /** * Be sure to call openWritingPipe() first to set the destination diff --git a/src/app/nrf24l01test/main.cc b/src/app/nrf24l01test/main.cc index 9dddb58..f1d7ef0 100644 --- a/src/app/nrf24l01test/main.cc +++ b/src/app/nrf24l01test/main.cc @@ -35,8 +35,8 @@ void loop(void) kout << "write: "; nrf24l01.setRetries(0, 0); - nrf24l01.enableDynamicPayloads(false); - nrf24l01.enableDynamicAck(false); + nrf24l01.setDynamicPayloads(false); + nrf24l01.setDynamicAck(false); TIMEIT("blocking write(3)", nrf24l01.write("foo", 3, true, true)); TIMEIT("blocking write(10)", nrf24l01.write("123456789", 10, true, true)); TIMEIT("blocking write(20)", nrf24l01.write("123456789123456789", 20, true, true)); diff --git a/src/driver/nrf24l01.cc b/src/driver/nrf24l01.cc index 194b1b7..921f69d 100644 --- a/src/driver/nrf24l01.cc +++ b/src/driver/nrf24l01.cc @@ -338,7 +338,7 @@ uint8_t Nrf24l01::writeRegister(uint8_t reg, uint8_t value) return rxbuf[0]; } -void Nrf24l01::enableDynamicPayloads(const bool enabled) +void Nrf24l01::setDynamicPayloads(const bool enabled) { if (enabled) { @@ -354,7 +354,7 @@ void Nrf24l01::enableDynamicPayloads(const bool enabled) dynamic_payloads_enabled = enabled; } -void Nrf24l01::enableDynamicAck(const bool enabled) +void Nrf24l01::setDynamicAck(const bool enabled) { if (enabled) { @@ -366,6 +366,31 @@ void Nrf24l01::enableDynamicAck(const bool enabled) } } +void Nrf24l01::setAutoAck(bool enable) +{ + if ( enable ) + writeRegister(EN_AA, 0b111111); + else + writeRegister(EN_AA, 0); +} + +void Nrf24l01::setAutoAck( uint8_t pipe, bool enable ) +{ + if ( pipe <= 6 ) + { + uint8_t en_aa = readRegister( EN_AA ) ; + if( enable ) + { + en_aa |= (1<