diff --git a/src/lora_utils.cpp b/src/lora_utils.cpp index 7cb4c31..103fbe0 100644 --- a/src/lora_utils.cpp +++ b/src/lora_utils.cpp @@ -13,8 +13,7 @@ extern uint32_t lastRxTime; extern std::vector receivedPackets; bool transmissionFlag = true; -bool ignorePacket = false; -bool operationDone = true; +bool enableInterrupt = true; #ifdef HAS_SX1262 SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); @@ -38,7 +37,10 @@ float snr; namespace LoRa_Utils { void setFlag(void) { - operationDone = true; + if(!enableInterrupt) { + return; + } + transmissionFlag = true; } void setup() { @@ -51,9 +53,6 @@ namespace LoRa_Utils { Utils::println("Starting LoRa failed!"); while (true); } - #if defined(HAS_SX1278) || defined(HAS_SX1276) - radio.setDio0Action(setFlag, RISING); - #endif #if defined(HAS_SX1262) || defined(HAS_SX1268) if (!Config.lowPowerMode) { radio.setDio1Action(setFlag); @@ -61,6 +60,9 @@ namespace LoRa_Utils { radio.setDIOMapping(1, RADIOLIB_SX126X_IRQ_RX_DONE); } #endif + #if defined(HAS_SX1278) || defined(HAS_SX1276) + radio.setDio0Action(setFlag, RISING); + #endif radio.setSpreadingFactor(Config.loramodule.spreadingFactor); float signalBandwidth = Config.loramodule.signalBandwidth/1000; radio.setBandwidth(signalBandwidth); @@ -77,11 +79,15 @@ namespace LoRa_Utils { #if defined(HELTEC_V3) || defined(HELTEC_WSL_V3) || defined(HELTEC_WS) || defined(TTGO_T_Beam_V1_0_SX1268) || defined(TTGO_T_Beam_V1_2_SX1262) state = radio.setOutputPower(Config.loramodule.power + 2); // values available: 10, 17, 22 --> if 20 in tracker_conf.json it will be updated to 22. #endif + #if defined(HAS_SX1262) || defined(HAS_SX1268) radio.setRxBoostedGainMode(true); #endif + if (state == RADIOLIB_ERR_NONE) { Utils::println("init : LoRa Module ... done!"); + delay(500); + radio.startReceive(); } else { Utils::println("Starting LoRa failed!"); while (true); @@ -110,8 +116,8 @@ namespace LoRa_Utils { #ifdef INTERNAL_LED_PIN digitalWrite(INTERNAL_LED_PIN, HIGH); #endif + enableInterrupt = false; int state = radio.transmit("\x3c\xff\x01" + newPacket); - transmissionFlag = true; if (state == RADIOLIB_ERR_NONE) { if (Config.syslog.active && WiFi.status() == WL_CONNECTED) { SYSLOG_Utils::log(3, newPacket, 0, 0, 0); // TX @@ -128,7 +134,8 @@ namespace LoRa_Utils { if (Config.loramodule.txFreq != Config.loramodule.rxFreq) { changeFreqRx(); } - //ignorePacket = true; + enableInterrupt = true; + radio.startReceive(); } String packetSanitization(const String& packet) { @@ -150,44 +157,35 @@ namespace LoRa_Utils { } String receivePacket() { - if(!operationDone && !Config.lowPowerMode) return ""; - - operationDone = false; - - String loraPacket = ""; - - if (transmissionFlag && !Config.lowPowerMode) { - radio.startReceive(); + String packet = ""; + if (transmissionFlag) { transmissionFlag = false; - } else { - int state = radio.readData(loraPacket); + int state = radio.readData(packet); if (state == RADIOLIB_ERR_NONE) { - if (loraPacket != "" && !ignorePacket) { - rssi = radio.getRSSI(); - snr = radio.getSNR(); - freqError = radio.getFrequencyError(); - Utils::println("<--- LoRa Packet Rx : " + loraPacket); + if (packet != "") { + rssi = radio.getRSSI(); + snr = radio.getSNR(); + freqError = radio.getFrequencyError(); + Utils::println("<--- LoRa Packet Rx : " + packet); Utils::println("(RSSI:" + String(rssi) + " / SNR:" + String(snr) + " / FreqErr:" + String(freqError) + ")"); if (!Config.lowPowerMode) { ReceivedPacket receivedPacket; - receivedPacket.millis = millis(); - receivedPacket.packet = loraPacket.substring(3); - receivedPacket.RSSI = rssi; - receivedPacket.SNR = snr; - + receivedPacket.millis = millis(); + receivedPacket.packet = packet.substring(3); + receivedPacket.RSSI = rssi; + receivedPacket.SNR = snr; if (receivedPackets.size() >= 20) { receivedPackets.erase(receivedPackets.begin()); } - receivedPackets.push_back(receivedPacket); } if (Config.syslog.active && WiFi.status() == WL_CONNECTED) { - SYSLOG_Utils::log(1, loraPacket, rssi, snr, freqError); // RX + SYSLOG_Utils::log(1, packet, rssi, snr, freqError); // RX } lastRxTime = millis(); - return loraPacket; + return packet; } } else if (state == RADIOLIB_ERR_CRC_MISMATCH) { rssi = radio.getRSSI(); @@ -195,23 +193,17 @@ namespace LoRa_Utils { freqError = radio.getFrequencyError(); Utils::println(F("CRC error!")); if (Config.syslog.active && WiFi.status() == WL_CONNECTED) { - SYSLOG_Utils::log(0, loraPacket, rssi, snr, freqError); // CRC + SYSLOG_Utils::log(0, packet, rssi, snr, freqError); // CRC } - loraPacket = ""; + //packet = ""; + Utils::println(packet); } else { Utils::print(F("failed, code ")); Utils::println(String(state)); - } - - if (ignorePacket) { - Utils::println("<--- LoRa Packet Rx : " + loraPacket); - Utils::println("Received own packet. Ignoring"); - - ignorePacket = false; - return ""; + packet = ""; } } - return loraPacket; + return packet; } } \ No newline at end of file diff --git a/src/lora_utils.h b/src/lora_utils.h index 501c1bc..e1073b4 100644 --- a/src/lora_utils.h +++ b/src/lora_utils.h @@ -12,7 +12,7 @@ namespace LoRa_Utils { String receivePacket(); void changeFreqTx(); void changeFreqRx(); - void startReceive(); + void startReceive(); // ??? }