diff --git a/Firmware/LoRaSerial_Firmware/Commands.ino b/Firmware/LoRaSerial_Firmware/Commands.ino index e50dde1a..7e549c7d 100644 --- a/Firmware/LoRaSerial_Firmware/Commands.ino +++ b/Firmware/LoRaSerial_Firmware/Commands.ino @@ -578,6 +578,25 @@ bool commandAT(const char * commandString) systemPrint(" lastModemStatus: "); systemPrint(lastModemStatus, HEX); systemPrintln(); + systemPrint(" irqFlags: 0x"); + systemPrint(irqFlags, HEX); + systemPrintln(); + if (irqFlags & 0x80) + systemPrintln(" RX Timeout"); + if (irqFlags & 0x40) + systemPrintln(" RX Done"); + if (irqFlags & 0x20) + systemPrintln(" Payload CRC Error"); + if (irqFlags & 0x10) + systemPrintln(" Valid Header"); + if (irqFlags & 8) + systemPrintln(" TX Done"); + if (irqFlags & 4) + systemPrintln(" CAD Done"); + if (irqFlags & 2) + systemPrintln(" FHSS Change Channel"); + if (irqFlags & 1) + systemPrintln(" CAD Detected"); systemPrint(" receiveInProcess: "); systemPrintln(receiveInProcess() ? "True" : "False"); outputSerialData(true); diff --git a/Firmware/LoRaSerial_Firmware/LoRaSerial_Firmware.ino b/Firmware/LoRaSerial_Firmware/LoRaSerial_Firmware.ino index 3cb31840..89a09406 100644 --- a/Firmware/LoRaSerial_Firmware/LoRaSerial_Firmware.ino +++ b/Firmware/LoRaSerial_Firmware/LoRaSerial_Firmware.ino @@ -385,6 +385,7 @@ uint8_t frameSentCount = 0; //Increases each time a frame is sent unsigned long lastPacketReceived = 0; //Controls link LED in broadcast mode unsigned long lastLinkBlink = 0; //Controls link LED in broadcast mode +volatile uint16_t irqFlags; //IRQ Flags register value volatile bool transactionComplete = false; //Used in dio0ISR uint8_t sf6ExpectedSize = MAX_PACKET_SIZE; //Used during SF6 operation to reduce packet size when needed diff --git a/Firmware/LoRaSerial_Firmware/Radio.ino b/Firmware/LoRaSerial_Firmware/Radio.ino index 790fbefa..d0d5abc1 100644 --- a/Firmware/LoRaSerial_Firmware/Radio.ino +++ b/Firmware/LoRaSerial_Firmware/Radio.ino @@ -1662,6 +1662,9 @@ PacketType rcvDatagram() //Save the receive time rcvTimeMillis = millis(); + //Get the IRQ flags + irqFlags = radio.getIRQFlags(); + //Get the received datagram framesReceived++; int state = radio.readData(incomingBuffer, MAX_PACKET_SIZE); diff --git a/Firmware/LoRaSerial_Firmware/States.ino b/Firmware/LoRaSerial_Firmware/States.ino index a90ec492..aed1816f 100644 --- a/Firmware/LoRaSerial_Firmware/States.ino +++ b/Firmware/LoRaSerial_Firmware/States.ino @@ -401,6 +401,7 @@ void updateRadioState() COMPUTE_TX_TIME(); triggerEvent(TRIGGER_TX_DONE); transactionComplete = false; //Reset ISR flag + irqFlags = radio.getIRQFlags(); startChannelTimerPending = true; //Starts at RX of SYNC_CLOCKS frame returnToReceiving(); changeState(RADIO_P2P_WAIT_SYNC_CLOCKS); @@ -529,6 +530,7 @@ void updateRadioState() COMPUTE_TX_TIME(); triggerEvent(TRIGGER_TX_DONE); transactionComplete = false; //Reset ISR flag + irqFlags = radio.getIRQFlags(); //Hop to the next channel hopChannel(); @@ -617,6 +619,7 @@ void updateRadioState() { transactionComplete = false; //Reset ISR flag COMPUTE_TX_TIME(); + irqFlags = radio.getIRQFlags(); setHeartbeatShort(); //We sent the last ack so be responsible for sending the next heartbeat @@ -727,6 +730,7 @@ void updateRadioState() COMPUTE_TX_TIME(); } triggerEvent(TRIGGER_TX_DONE); + irqFlags = radio.getIRQFlags(); //Determine the next packet size for SF6 if (ackTimer) @@ -1267,6 +1271,7 @@ void updateRadioState() if (transactionComplete) { transactionComplete = false; //Reset ISR flag + irqFlags = radio.getIRQFlags(); returnToReceiving(); changeState(RADIO_DISCOVER_SCANNING); } @@ -1447,6 +1452,7 @@ void updateRadioState() if (transactionComplete == true) { transactionComplete = false; //Reset ISR flag + irqFlags = radio.getIRQFlags(); returnToReceiving(); changeState(RADIO_MP_STANDBY); } @@ -1498,6 +1504,7 @@ void updateRadioState() //Indicate that the receive is complete triggerEvent(TRIGGER_TRAINING_CLIENT_TX_FIND_PARTNER_DONE); + irqFlags = radio.getIRQFlags(); //Start the receive operation returnToReceiving(); @@ -1592,6 +1599,7 @@ void updateRadioState() if (transactionComplete == true) { transactionComplete = false; + irqFlags = radio.getIRQFlags(); endClientServerTraining(TRIGGER_TRAINING_CLIENT_TX_ACK_DONE); } break; @@ -1712,6 +1720,7 @@ void updateRadioState() //Indicate that the receive is complete triggerEvent(TRIGGER_TRAINING_SERVER_TX_PARAMS_DONE); + irqFlags = radio.getIRQFlags(); //Start the receive operation returnToReceiving(); @@ -1857,6 +1866,7 @@ void updateRadioState() //Indicate that the transmission is complete transactionComplete = false; triggerEvent(TRIGGER_TX_DONE); + irqFlags = radio.getIRQFlags(); //Start the receive operation returnToReceiving();