diff --git a/src/LoRa.cpp b/src/LoRa.cpp index a16e55e..90355d0 100644 --- a/src/LoRa.cpp +++ b/src/LoRa.cpp @@ -47,7 +47,6 @@ #define MODE_TX 0x03 #define MODE_RX_CONTINUOUS 0x05 #define MODE_RX_SINGLE 0x06 -#define MODE_CAD 0x07 // PA config #define PA_BOOST 0x80 @@ -56,8 +55,6 @@ #define IRQ_TX_DONE_MASK 0x08 #define IRQ_PAYLOAD_CRC_ERROR_MASK 0x20 #define IRQ_RX_DONE_MASK 0x40 -#define IRQ_CAD_DONE_MASK 0x04 -#define IRQ_CAD_DETECTED_MASK 0x01 #define RF_MID_BAND_THRESHOLD 525E6 #define RSSI_OFFSET_HF_PORT 157 @@ -79,7 +76,6 @@ LoRaClass::LoRaClass() : _packetIndex(0), _implicitHeaderMode(0), _onReceive(NULL), - _onCadDone(NULL), _onTxDone(NULL) { // overide Stream timeout value @@ -278,14 +274,14 @@ float LoRaClass::packetSnr() long LoRaClass::packetFrequencyError() { int32_t freqError = 0; - freqError = static_cast(readRegister(REG_FREQ_ERROR_MSB) & 0b111); + freqError = static_cast(readRegister(REG_FREQ_ERROR_MSB) & B111); freqError <<= 8L; freqError += static_cast(readRegister(REG_FREQ_ERROR_MID)); freqError <<= 8L; freqError += static_cast(readRegister(REG_FREQ_ERROR_LSB)); - if (readRegister(REG_FREQ_ERROR_MSB) & 0b1000) { // Sign bit is on - freqError -= 524288; // 0b1000'0000'0000'0000'0000 + if (readRegister(REG_FREQ_ERROR_MSB) & B1000) { // Sign bit is on + freqError -= 524288; // B1000'0000'0000'0000'0000 } const float fXtal = 32E6; // FXOSC: crystal oscillator (XTAL) frequency (2.5. Chip Specification, p. 14) @@ -381,24 +377,6 @@ void LoRaClass::onReceive(void(*callback)(int)) } } -void LoRaClass::onCadDone(void(*callback)(boolean)) -{ - _onCadDone = callback; - - if (callback) { - pinMode(_dio0, INPUT); -#ifdef SPI_HAS_NOTUSINGINTERRUPT - SPI.usingInterrupt(digitalPinToInterrupt(_dio0)); -#endif - attachInterrupt(digitalPinToInterrupt(_dio0), LoRaClass::onDio0Rise, RISING); - } else { - detachInterrupt(digitalPinToInterrupt(_dio0)); -#ifdef SPI_HAS_NOTUSINGINTERRUPT - SPI.notUsingInterrupt(digitalPinToInterrupt(_dio0)); -#endif - } -} - void LoRaClass::onTxDone(void(*callback)()) { _onTxDone = callback; @@ -432,12 +410,6 @@ void LoRaClass::receive(int size) writeRegister(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_RX_CONTINUOUS); } - -void LoRaClass::channelActivityDetection(void) -{ - writeRegister(REG_DIO_MAPPING_1, 0x80);// DIO0 => CADDONE - writeRegister(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_CAD); -} #endif void LoRaClass::idle() @@ -487,6 +459,11 @@ void LoRaClass::setTxPower(int level, int outputPin) } } +long LoRaClass::getFrequency() +{ + return _frequency; +} + void LoRaClass::setFrequency(long frequency) { _frequency = frequency; @@ -586,13 +563,6 @@ void LoRaClass::setLdoFlag() writeRegister(REG_MODEM_CONFIG_3, config3); } -void LoRaClass::setLdoFlagForced(const boolean ldoOn) -{ - uint8_t config3 = readRegister(REG_MODEM_CONFIG_3); - bitWrite(config3, 3, ldoOn); - writeRegister(REG_MODEM_CONFIG_3, config3); -} - void LoRaClass::setCodingRate4(int denominator) { if (denominator < 5) { @@ -639,16 +609,6 @@ void LoRaClass::disableInvertIQ() writeRegister(REG_INVERTIQ2, 0x1d); } -void LoRaClass::enableLowDataRateOptimize() -{ - setLdoFlagForced(true); -} - -void LoRaClass::disableLowDataRateOptimize() -{ - setLdoFlagForced(false); -} - void LoRaClass::setOCP(uint8_t mA) { uint8_t ocpTrim = 27; @@ -741,11 +701,7 @@ void LoRaClass::handleDio0Rise() // clear IRQ's writeRegister(REG_IRQ_FLAGS, irqFlags); - if ((irqFlags & IRQ_CAD_DONE_MASK) != 0) { - if (_onCadDone) { - _onCadDone((irqFlags & IRQ_CAD_DETECTED_MASK) != 0); - } - } else if ((irqFlags & IRQ_PAYLOAD_CRC_ERROR_MASK) == 0) { + if ((irqFlags & IRQ_PAYLOAD_CRC_ERROR_MASK) == 0) { if ((irqFlags & IRQ_RX_DONE_MASK) != 0) { // received a packet @@ -760,7 +716,8 @@ void LoRaClass::handleDio0Rise() if (_onReceive) { _onReceive(packetLength); } - } else if ((irqFlags & IRQ_TX_DONE_MASK) != 0) { + } + else if ((irqFlags & IRQ_TX_DONE_MASK) != 0) { if (_onTxDone) { _onTxDone(); } @@ -782,13 +739,15 @@ uint8_t LoRaClass::singleTransfer(uint8_t address, uint8_t value) { uint8_t response; - _spi->beginTransaction(_spiSettings); digitalWrite(_ss, LOW); + + _spi->beginTransaction(_spiSettings); _spi->transfer(address); response = _spi->transfer(value); - digitalWrite(_ss, HIGH); _spi->endTransaction(); + digitalWrite(_ss, HIGH); + return response; } diff --git a/src/LoRa.h b/src/LoRa.h index a7002b4..50bce98 100644 --- a/src/LoRa.h +++ b/src/LoRa.h @@ -36,10 +36,10 @@ class LoRaClass : public Stream { int begin(long frequency); void end(); - + long getFrequency(); int beginPacket(int implicitHeader = false); int endPacket(bool async = false); - + int getSpreadingFactor(); int parsePacket(int size = 0); int packetRssi(); float packetSnr(); @@ -59,11 +59,9 @@ class LoRaClass : public Stream { #ifndef ARDUINO_SAMD_MKRWAN1300 void onReceive(void(*callback)(int)); - void onCadDone(void(*callback)(boolean)); void onTxDone(void(*callback)()); void receive(int size = 0); - void channelActivityDetection(void); #endif void idle(); void sleep(); @@ -79,8 +77,6 @@ class LoRaClass : public Stream { void disableCrc(); void enableInvertIQ(); void disableInvertIQ(); - void enableLowDataRateOptimize(); - void disableLowDataRateOptimize(); void setOCP(uint8_t mA); // Over Current Protection control @@ -105,11 +101,10 @@ class LoRaClass : public Stream { void handleDio0Rise(); bool isTransmitting(); - int getSpreadingFactor(); + // int getSpreadingFactor(); long getSignalBandwidth(); void setLdoFlag(); - void setLdoFlagForced(const boolean); uint8_t readRegister(uint8_t address); void writeRegister(uint8_t address, uint8_t value); @@ -127,7 +122,6 @@ class LoRaClass : public Stream { int _packetIndex; int _implicitHeaderMode; void (*_onReceive)(int); - void (*_onCadDone)(boolean); void (*_onTxDone)(); };