From cd5b07a0e6e490458dea06a6b8faf3428d685079 Mon Sep 17 00:00:00 2001
From: Sebastien Lorquet <sebastien@lorquet.fr>
Date: Thu, 29 Mar 2018 16:53:39 +0200
Subject: [PATCH] Fix bad header definition that prevented the driver for
 working at all. START_IMMEDIATE was actually asking to wait for expiration of
 the wake up timer, which requires enabling the 32 kHz low power oscillator,
 which just does not exist on the RFM26W, so the wake up timer was NEVER
 expiring

---
 drivers/wireless/generic/si4463.c | 22 +++-------------------
 drivers/wireless/generic/si4463.h |  4 ++--
 2 files changed, 5 insertions(+), 21 deletions(-)

diff --git a/drivers/wireless/generic/si4463.c b/drivers/wireless/generic/si4463.c
index 6ccff82367..6baae85bff 100644
--- a/drivers/wireless/generic/si4463.c
+++ b/drivers/wireless/generic/si4463.c
@@ -153,14 +153,6 @@ struct si4463_dev_s
  * Private function prototypes
  ****************************************************************************/
 
-#if 0
-static void si4463_lock      (FAR struct spi_dev_s *spi);
-static int  si4463_initialize(FAR struct si4463_dev_s *dev, int txpin,
-                              int rxpin);
-static void si4463_irqworker (FAR void *arg);
-static int  si4463_interrupt (int irq, FAR void *context, FAR void *arg);
-#endif
-
 static int si4463_setbasefreq       (FAR struct genradio_dev_s *dev, 
                                      uint32_t Hz);
 static int si4463_setchanspacing    (FAR struct genradio_dev_s *dev,
@@ -2150,8 +2142,6 @@ static int si4463_rxenable(FAR struct genradio_dev_s *dev, int state)
 
   _info("called, buf=%p len=%d chan=%d\n", dev->rxbuf, dev->rxlen, dev->channel);
 
-  /* enable RX interrupts */
-
   /* Setup field 2 length to the MAX receivable length */
   ret = si4463_setprop_short(priv, SI4463_PROP_PKT_FIELD_2_LENGTH_0, 0x1FFF);
   if(ret != 0)
@@ -2165,15 +2155,9 @@ static int si4463_rxenable(FAR struct genradio_dev_s *dev, int state)
   cmd_rx.condition   = STARTRX_CONDITION_IMMEDIATE;
   cmd_rx.rx_len      = 0;
 
-#if 1
-  cmd_rx.next_state1 = STARTRX_STATE_READY;
-  cmd_rx.next_state2 = STARTRX_STATE_READY;
-  cmd_rx.next_state3 = STARTRX_STATE_READY;
-#else
-  cmd_rx.next_state1 = STARTRX_STATE_RX;
-  cmd_rx.next_state2 = STARTRX_STATE_READY;
-  cmd_rx.next_state3 = STARTRX_STATE_READY;
-#endif
+  cmd_rx.next_state1 = STARTRX_STATE_RX;    /* State after RX timeout */
+  cmd_rx.next_state2 = STARTRX_STATE_READY; /* State after RX valid */
+  cmd_rx.next_state3 = STARTRX_STATE_READY; /* State after RX invalid */
 
   /* Prepare reception state: no bytes received yet (in public and private states)*/
   dev ->rxdone       = 0;
diff --git a/drivers/wireless/generic/si4463.h b/drivers/wireless/generic/si4463.h
index edad19f1f0..27dd97d6f1 100644
--- a/drivers/wireless/generic/si4463.h
+++ b/drivers/wireless/generic/si4463.h
@@ -1,7 +1,7 @@
 /****************************************************************************
  * drivers/wireless/generic/si4463.h
  *
- *   Copyright (C) 2017 Sebastien Lorquet. All rights reserved.
+ *   Copyright (C) 2017-2018 Sebastien Lorquet. All rights reserved.
  *   Author: Sebastien Lorquet <sebastien@lorquet.fr>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -453,7 +453,7 @@ end_packed_struct;
 
 
 #define STARTRX_CONDITION_WUT       (1 << 0)
-#define STARTRX_CONDITION_IMMEDIATE (1 << 0)
+#define STARTRX_CONDITION_IMMEDIATE (0 << 0)
 #define STARTRX_STATE_NOCHANGE      0
 #define STARTRX_STATE_SLEEP         1 
 #define STARTRX_STATE_SPI_ACTIVE    2
-- 
GitLab