This should work now:
DISABLE_MODULE += netdev_ieee802154_mr_oqpsk
DISABLE_MODULE += netdev_ieee802154_mr_ofdm
DISABLE_MODULE += netdev_ieee802154_mr_fsk
To calibrate the at86rf215 radio, trim value has to be set at run-time
during board production.
Add two helper functions to control the trim value and clock output register.
With the last cleanup an error sneaked in:
Now the 2.4 GHz interface is disabled, when the `at86rf215m` module
(chip with sub-GHz radio only) is *not* used.
This is the reverse of what should happen.
Reduced Power Consumption is available for MR-O-QPSK and
MR-FSK.
In this mode the receiver will be turned off periodically,
defaulting to a 50% duty cycle.
This reduces power consumption when in IDLE RX by almost 50%
and is therefore enabled by default.
This changes the prefixes of the symbols generated from USEMODULE and
USEPKG variables. The changes are as follow:
KCONFIG_MODULE_ => KCONFIG_USEMODULE_
KCONFIG_PKG_ => KCONFIG_USEPKG_
MODULE_ => USEMODULE_
PKG_ => USEPKG_
Some hardware designers like to include filtering capacitors into reset
lines in order to protect against ESD or other pulses.
This increases the raise time of the reset signal. To still reach the
required 16 µs reset pulse width, we thus have to increase the reset pulse
width via board config.
Previously the function attempted to block here and manually service
the ISR.
This lead to unexpected results, in particular messages queuing up in
the threads message queue.
The result was that the radio would not end up in the correct state.
E.g. sending SLEEP to both interfaces while a transmission was ongoing
would lead to the interfaces waking up again.
With this patch the operation will just return -ERRNO so the caller can
try again.
To reproduce, try the attached patch for the `gnrc_networking` example:
On master you will find that the radio still consumes ~2.4mA after 'shutdown'.
(It is in fact in the state TRXOFF as it woke up again)
With this change the radio should consume less than 1µA (DEEP SLEEP).
diff --git a/examples/gnrc_networking/main.c b/examples/gnrc_networking/main.c
index 6301f4291d..93b96eb939 100644
--- a/examples/gnrc_networking/main.c
+++ b/examples/gnrc_networking/main.c
@@ -23,12 +23,47 @@
#include "shell.h"
#include "msg.h"
+#include "periph/pm.h"
+
+#include "net/netopt.h"
+#include "net/gnrc/netif.h"
+
#define MAIN_QUEUE_SIZE (8)
static msg_t _main_msg_queue[MAIN_QUEUE_SIZE];
extern int udp_cmd(int argc, char **argv);
+extern void send(char *addr_str, char *port_str, char *data, unsigned int num,
+ unsigned int delay);
+
+static int send_and_shutdown(int argc, char **argv)
+{
+ (void) argc;
+ (void) argv;
+
+ /* the address must not exist */
+ char addr[] = "fe80::2068:3123:59f5:d238%7";
+ char port[] = "1234";
+ char data[] = "Hello World!";
+
+ send(addr, port, data, 1, 0);
+
+ /* disable radio */
+ gnrc_netif_t* netif = NULL;
+ netopt_state_t state = NETOPT_STATE_SLEEP;
+ while ((netif = gnrc_netif_iter(netif))) {
+ /* retry while busy */
+ while (gnrc_netapi_set(netif->pid, NETOPT_STATE, 0, &state,
+ sizeof(netopt_state_t)) == -EBUSY);
+ }
+
+ pm_set(0);
+
+ return 0;
+}
+
static const shell_command_t shell_commands[] = {
+ { "shutdown", "turn off the radio & shut down", send_and_shutdown },
{ "udp", "send data over UDP and listen on UDP ports", udp_cmd },
{ NULL, NULL, NULL }
};
diff --git a/examples/gnrc_networking/udp.c b/examples/gnrc_networking/udp.c
index e8a559846e..cb80855b76 100644
--- a/examples/gnrc_networking/udp.c
+++ b/examples/gnrc_networking/udp.c
@@ -36,7 +36,7 @@ static gnrc_netreg_entry_t server = GNRC_NETREG_ENTRY_INIT_PID(GNRC_NETREG_DEMUX
KERNEL_PID_UNDEF);
-static void send(char *addr_str, char *port_str, char *data, unsigned int num,
+void send(char *addr_str, char *port_str, char *data, unsigned int num,
unsigned int delay)
{
gnrc_netif_t *netif = NULL;