add back the old code that checked if the radio was actvively receiving

pull/117/head
geeksville 2020-04-30 21:29:51 -07:00
rodzic a8f64c3cc8
commit 1f1d683f4f
4 zmienionych plików z 27 dodań i 9 usunięć

Wyświetl plik

@ -18,9 +18,8 @@ bool RF95Interface::init()
if (power > 20) // This chip has lower power limits than some if (power > 20) // This chip has lower power limits than some
power = 20; power = 20;
auto dev = new RadioLibRF95(&module); iface = lora = new RadioLibRF95(&module);
iface = lora = dev; int res = lora->begin(freq, bw, sf, cr, syncWord, power, currentLimit, preambleLength);
int res = dev->begin(freq, bw, sf, cr, syncWord, power, currentLimit, preambleLength);
DEBUG_MSG("LORA init result %d\n", res); DEBUG_MSG("LORA init result %d\n", res);
if (res == ERR_NONE) if (res == ERR_NONE)
@ -113,7 +112,7 @@ bool RF95Interface::canSendImmediately()
// To do otherwise would be doubly bad because not only would we drop the packet that was on the way in, // To do otherwise would be doubly bad because not only would we drop the packet that was on the way in,
// we almost certainly guarantee no one outside will like the packet we are sending. // we almost certainly guarantee no one outside will like the packet we are sending.
bool busyTx = sendingPacket != NULL; bool busyTx = sendingPacket != NULL;
bool busyRx = false; // FIXME - use old impl. isReceiving && lora->getPacketLength() > 0; bool busyRx = isReceiving && lora->isReceiving();
if (busyTx || busyRx) if (busyTx || busyRx)
DEBUG_MSG("Can not set now, busyTx=%d, busyRx=%d\n", busyTx, busyRx); DEBUG_MSG("Can not set now, busyTx=%d, busyRx=%d\n", busyTx, busyRx);

Wyświetl plik

@ -2,13 +2,14 @@
#include "MeshRadio.h" // kinda yucky, but we need to know which region we are in #include "MeshRadio.h" // kinda yucky, but we need to know which region we are in
#include "RadioLibInterface.h" #include "RadioLibInterface.h"
#include "RadioLibRF95.h"
/** /**
* Our new not radiohead adapter for RF95 style radios * Our new not radiohead adapter for RF95 style radios
*/ */
class RF95Interface : public RadioLibInterface class RF95Interface : public RadioLibInterface
{ {
SX1278 *lora; // Either a RFM95 or RFM96 depending on what was stuffed on this board RadioLibRF95 *lora; // Either a RFM95 or RFM96 depending on what was stuffed on this board
public: public:
RF95Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, SPIClass &spi); RF95Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, SPIClass &spi);

Wyświetl plik

@ -1,7 +1,7 @@
#include "RadioLibRF95.h" #include "RadioLibRF95.h"
#define RFM95_CHIP_VERSION 0x12 #define RF95_CHIP_VERSION 0x12
#define RFM95_ALT_VERSION 0x11 // Supposedly some versions of the chip have id 0x11 #define RF95_ALT_VERSION 0x11 // Supposedly some versions of the chip have id 0x11
RadioLibRF95::RadioLibRF95(Module *mod) : SX1278(mod) {} RadioLibRF95::RadioLibRF95(Module *mod) : SX1278(mod) {}
@ -9,9 +9,9 @@ int16_t RadioLibRF95::begin(float freq, float bw, uint8_t sf, uint8_t cr, uint8_
uint16_t preambleLength, uint8_t gain) uint16_t preambleLength, uint8_t gain)
{ {
// execute common part // execute common part
int16_t state = SX127x::begin(RFM95_CHIP_VERSION, syncWord, currentLimit, preambleLength); int16_t state = SX127x::begin(RF95_CHIP_VERSION, syncWord, currentLimit, preambleLength);
if (state != ERR_NONE) if (state != ERR_NONE)
state = SX127x::begin(RFM95_ALT_VERSION, syncWord, currentLimit, preambleLength); state = SX127x::begin(RF95_ALT_VERSION, syncWord, currentLimit, preambleLength);
RADIOLIB_ASSERT(state); RADIOLIB_ASSERT(state);
// configure settings not accessible by API // configure settings not accessible by API
@ -46,3 +46,18 @@ int16_t RadioLibRF95::setFrequency(float freq)
// set frequency // set frequency
return (SX127x::setFrequencyRaw(freq)); return (SX127x::setFrequencyRaw(freq));
} }
#define RH_RF95_MODEM_STATUS_CLEAR 0x10
#define RH_RF95_MODEM_STATUS_HEADER_INFO_VALID 0x08
#define RH_RF95_MODEM_STATUS_RX_ONGOING 0x04
#define RH_RF95_MODEM_STATUS_SIGNAL_SYNCHRONIZED 0x02
#define RH_RF95_MODEM_STATUS_SIGNAL_DETECTED 0x01
bool RadioLibRF95::isReceiving()
{
// 0x0b == Look for header info valid, signal synchronized or signal detected
uint8_t reg = _mod->SPIreadRegister(SX127X_REG_MODEM_STAT) & 0x1f;
// Serial.printf("reg %x\n", reg);
return (reg & (RH_RF95_MODEM_STATUS_SIGNAL_DETECTED | RH_RF95_MODEM_STATUS_SIGNAL_SYNCHRONIZED |
RH_RF95_MODEM_STATUS_HEADER_INFO_VALID)) != 0;
}

Wyświetl plik

@ -59,6 +59,9 @@ class RadioLibRF95: public SX1278 {
*/ */
int16_t setFrequency(float freq); int16_t setFrequency(float freq);
// Return true if we are actively receiving a message currently
bool isReceiving();
#ifndef RADIOLIB_GODMODE #ifndef RADIOLIB_GODMODE
private: private:
#endif #endif