sx1262 improvements attn @dafeman

This commit is contained in:
geeksville 2020-06-16 06:26:21 -07:00
parent 96a15bec3b
commit 60ad1793e4
4 changed files with 21 additions and 16 deletions

View File

@ -304,6 +304,8 @@ void RadioLibInterface::startSend(MeshPacket *txp)
printPacket("Starting low level send", txp); printPacket("Starting low level send", txp);
setStandby(); // Cancel any already in process receives setStandby(); // Cancel any already in process receives
configHardwareForSend(); // must be after setStandby
size_t numbytes = beginSending(txp); size_t numbytes = beginSending(txp);
int res = iface->startTransmit(radiobuf, numbytes); int res = iface->startTransmit(radiobuf, numbytes);

View File

@ -105,16 +105,19 @@ class RadioLibInterface : public RadioInterface, private PeriodicTask
virtual void doTask(); virtual void doTask();
/** start an immediate transmit
* This method is virtual so subclasses can hook as needed, subclasses should not call directly
*/
virtual void startSend(MeshPacket *txp);
protected: protected:
/// Initialise the Driver transport hardware and software. /// Initialise the Driver transport hardware and software.
/// Make sure the Driver is properly configured before calling init(). /// Make sure the Driver is properly configured before calling init().
/// \return true if initialisation succeeded. /// \return true if initialisation succeeded.
virtual bool init(); virtual bool init();
/** start an immediate transmit /** Do any hardware setup needed on entry into send configuration for the radio. Subclasses can customize */
* This method is virtual so subclasses can hook as needed, subclasses should not call directly virtual void configHardwareForSend() {}
*/
virtual void startSend(MeshPacket *txp);
/** /**
* Convert our modemConfig enum into wf, sf, etc... * Convert our modemConfig enum into wf, sf, etc...

View File

@ -16,9 +16,9 @@ bool SX1262Interface::init()
#ifdef SX1262_RXEN // set not rx or tx mode #ifdef SX1262_RXEN // set not rx or tx mode
pinMode(SX1262_RXEN, OUTPUT); pinMode(SX1262_RXEN, OUTPUT);
#endif
#ifdef SX1262_TXEN
pinMode(SX1262_TXEN, OUTPUT); pinMode(SX1262_TXEN, OUTPUT);
digitalWrite(SX1262_RXEN, LOW);
digitalWrite(SX1262_TXEN, LOW);
#endif #endif
#ifndef SX1262_E22 #ifndef SX1262_E22
@ -36,7 +36,7 @@ bool SX1262Interface::init()
DEBUG_MSG("LORA init result %d\n", res); DEBUG_MSG("LORA init result %d\n", res);
#ifdef SX1262_RXEN #ifdef SX1262_RXEN
// lora.begin assumes Dio2 is RF switch control, which is not true if we are manually controlling RX and TX // lora.begin sets Dio2 as RF switch control, which is not true if we are manually controlling RX and TX
if (res == ERR_NONE) if (res == ERR_NONE)
res = lora.setDio2AsRfSwitch(false); res = lora.setDio2AsRfSwitch(false);
#endif #endif
@ -101,6 +101,8 @@ void SX1262Interface::setStandby()
#ifdef SX1262_RXEN // we have RXEN/TXEN control - turn off RX and TX power #ifdef SX1262_RXEN // we have RXEN/TXEN control - turn off RX and TX power
digitalWrite(SX1262_RXEN, LOW); digitalWrite(SX1262_RXEN, LOW);
#endif
#ifdef SX1262_TXEN
digitalWrite(SX1262_TXEN, LOW); digitalWrite(SX1262_TXEN, LOW);
#endif #endif
@ -120,14 +122,13 @@ void SX1262Interface::addReceiveMetadata(MeshPacket *mp)
/** start an immediate transmit /** start an immediate transmit
* We override to turn on transmitter power as needed. * We override to turn on transmitter power as needed.
*/ */
void SX1262Interface::startSend(MeshPacket *txp) void SX1262Interface::configHardwareForSend()
{ {
#ifdef SX1262_RXEN // we have RXEN/TXEN control - turn on TX power / off RX power #ifdef SX1262_TXEN // we have RXEN/TXEN control - turn on TX power / off RX power
digitalWrite(SX1262_RXEN, LOW);
digitalWrite(SX1262_TXEN, HIGH); digitalWrite(SX1262_TXEN, HIGH);
#endif #endif
RadioLibInterface::startSend(txp); RadioLibInterface::configHardwareForSend();
} }
// For power draw measurements, helpful to force radio to stay sleeping // For power draw measurements, helpful to force radio to stay sleeping
@ -139,12 +140,12 @@ void SX1262Interface::startReceive()
sleep(); sleep();
#else #else
setStandby();
#ifdef SX1262_RXEN // we have RXEN/TXEN control - turn on RX power / off TX power #ifdef SX1262_RXEN // we have RXEN/TXEN control - turn on RX power / off TX power
digitalWrite(SX1262_RXEN, HIGH); digitalWrite(SX1262_RXEN, HIGH);
digitalWrite(SX1262_TXEN, LOW);
#endif #endif
setStandby();
// int err = lora.startReceive(); // int err = lora.startReceive();
int err = lora.startReceiveDutyCycleAuto(); // We use a 32 bit preamble so this should save some power by letting radio sit in int err = lora.startReceiveDutyCycleAuto(); // We use a 32 bit preamble so this should save some power by letting radio sit in
// standby mostly. // standby mostly.

View File

@ -44,10 +44,10 @@ class SX1262Interface : public RadioLibInterface
*/ */
virtual void startReceive(); virtual void startReceive();
/** start an immediate transmit /**
* We override to turn on transmitter power as needed. * We override to turn on transmitter power as needed.
*/ */
virtual void startSend(MeshPacket *txp); virtual void configHardwareForSend();
/** /**
* Add SNR data to received messages * Add SNR data to received messages
@ -57,5 +57,4 @@ class SX1262Interface : public RadioLibInterface
virtual void setStandby(); virtual void setStandby();
private: private:
}; };