summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/driver/nrf24l01.h27
-rw-r--r--src/app/nrf24l01test/main.cc4
-rw-r--r--src/driver/nrf24l01.cc29
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<<pipe) ;
+ }
+ else
+ {
+ en_aa &= ~(1<<pipe) ;
+ }
+ writeRegister( EN_AA, en_aa ) ;
+ }
+}
+
uint8_t Nrf24l01::writePayload(const void *buf, uint8_t data_len, const uint8_t writeType)
{
data_len = rf24_min(data_len, payload_size);