mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-05 21:24:34 +00:00
sx1262 improvements attn @dafeman
This commit is contained in:
parent
96a15bec3b
commit
60ad1793e4
@ -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);
|
||||||
|
@ -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...
|
||||||
|
@ -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.
|
||||||
|
@ -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:
|
||||||
|
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user