[SX127x] Added finishTransmit (#571)

pull/609/head
jgromes 2022-09-18 16:13:39 +02:00
rodzic 0ae6eae4d9
commit 0d72dd2ac3
3 zmienionych plików z 23 dodań i 13 usunięć

Wyświetl plik

@ -114,10 +114,10 @@ void loop() {
} }
// NOTE: in FSK mode, SX127x will not automatically // clean up after transmission is finished
// turn transmitter off after sending a packet // this will ensure transmitter is disabled,
// set mode to standby to ensure we don't jam others // RF switch is powered down etc.
//radio.standby() radio.finishTransmit();
// wait a second before transmitting again // wait a second before transmitting again
delay(1000); delay(1000);

Wyświetl plik

@ -159,7 +159,7 @@ int16_t SX127x::transmit(uint8_t* data, size_t len, uint8_t addr) {
while(!_mod->digitalRead(_mod->getIrq())) { while(!_mod->digitalRead(_mod->getIrq())) {
_mod->yield(); _mod->yield();
if(_mod->micros() - start > timeout) { if(_mod->micros() - start > timeout) {
clearIRQFlags(); finishTransmit();
return(RADIOLIB_ERR_TX_TIMEOUT); return(RADIOLIB_ERR_TX_TIMEOUT);
} }
} }
@ -177,8 +177,7 @@ int16_t SX127x::transmit(uint8_t* data, size_t len, uint8_t addr) {
while(!_mod->digitalRead(_mod->getIrq())) { while(!_mod->digitalRead(_mod->getIrq())) {
_mod->yield(); _mod->yield();
if(_mod->micros() - start > timeout) { if(_mod->micros() - start > timeout) {
clearIRQFlags(); finishTransmit();
standby();
return(RADIOLIB_ERR_TX_TIMEOUT); return(RADIOLIB_ERR_TX_TIMEOUT);
} }
} }
@ -189,12 +188,8 @@ int16_t SX127x::transmit(uint8_t* data, size_t len, uint8_t addr) {
// update data rate // update data rate
uint32_t elapsed = _mod->micros() - start; uint32_t elapsed = _mod->micros() - start;
_dataRate = (len*8.0)/((float)elapsed/1000000.0); _dataRate = (len*8.0)/((float)elapsed/1000000.0);
// clear interrupt flags return(finishTransmit());
clearIRQFlags();
// set mode to standby to disable transmitter
return(standby());
} }
int16_t SX127x::receive(uint8_t* data, size_t len) { int16_t SX127x::receive(uint8_t* data, size_t len) {
@ -607,6 +602,14 @@ int16_t SX127x::startTransmit(uint8_t* data, size_t len, uint8_t addr) {
return(RADIOLIB_ERR_NONE); return(RADIOLIB_ERR_NONE);
} }
int16_t SX127x::finishTransmit() {
// clear interrupt flags
clearIRQFlags();
// set mode to standby to disable transmitter/RF switch
return(standby());
}
int16_t SX127x::readData(uint8_t* data, size_t len) { int16_t SX127x::readData(uint8_t* data, size_t len) {
int16_t modem = getActiveModem(); int16_t modem = getActiveModem();

Wyświetl plik

@ -800,6 +800,13 @@ class SX127x: public PhysicalLayer {
*/ */
int16_t startTransmit(uint8_t* data, size_t len, uint8_t addr = 0) override; int16_t startTransmit(uint8_t* data, size_t len, uint8_t addr = 0) override;
/*!
\brief Clean up after transmission is done.
\returns \ref status_codes
*/
int16_t finishTransmit() override;
/*! /*!
\brief Interrupt-driven receive method. DIO0 will be activated when full valid packet is received. \brief Interrupt-driven receive method. DIO0 will be activated when full valid packet is received.