Based on SX1276Lib. Simplified and targeted for Modtronix inAir modules. All pins can now be specified to use interrupts or general purpose I/O pins.

Revision:
5:1a255cc8d54a
Parent:
4:0086deec9cac
Child:
6:d542b5a44d5a
--- a/inair.cpp	Thu Sep 17 11:22:51 2015 +1000
+++ b/inair.cpp	Thu Sep 17 16:51:47 2015 +1000
@@ -1270,8 +1270,6 @@
 #endif  //#if (INAIR_ENABLE_FSK==1)
             case MODEM_LORA:
                 {
-                    uint8_t snr = 0;
-
                     // Clear Irq
                     Write( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_RXDONE );
 
@@ -1285,7 +1283,6 @@
                         {
                             this->settings.State = IDLE;
                         }
-                        //MODTRONIX BEGIN /////////////////////////////////////////
                         // For Continuous reception, we remain in Receive mode. Delete current packet!
                         // - RegFifoAddrPtr = FIFO Pointer used for SPI instructions.
                         // - RegFifoRxByteAddr = Address of last byte written to FIFO + 1 = Start address of next receive packet
@@ -1295,7 +1292,6 @@
                             //Set SPI pointer to address of next packet we will receive = delete current packet!
                             Write(REG_LR_FIFOADDRPTR, startAddNxtPckt);
                         }
-                        //MODTRONIX END ///////////////////////////////////////////
                         rxTimeoutTimer.detach( );
 
                         if( ( rxError != NULL ) )
@@ -1306,47 +1302,36 @@
                     }
 
                     this->settings.LoRaPacketHandler.SnrValue = Read( REG_LR_PKTSNRVALUE );
-                    if( this->settings.LoRaPacketHandler.SnrValue & 0x80 ) // The SNR sign bit is 1
-                    {
-                        // Invert and divide by 4
-                        snr = ( ( ~this->settings.LoRaPacketHandler.SnrValue + 1 ) & 0xFF ) >> 2;
-                        snr = -snr;
-                    }
-                    else
-                    {
-                        // Divide by 4
-                        snr = ( this->settings.LoRaPacketHandler.SnrValue & 0xFF ) >> 2;
-                    }
 
                     int16_t rssi = Read( REG_LR_PKTRSSIVALUE );
                     if( this->settings.LoRaPacketHandler.SnrValue < 0 )
                     {
                         if( this->settings.Channel > RF_MID_BAND_THRESH )
                         {
-                            this->settings.LoRaPacketHandler.RssiValue = RSSI_OFFSET_HF + rssi + ( rssi >> 4 ) +
-                                                                          snr;
+                            this->settings.LoRaPacketHandler.RssiValue = RSSI_OFFSET_HF;
                         }
                         else
                         {
-                            this->settings.LoRaPacketHandler.RssiValue = RSSI_OFFSET_LF + rssi + ( rssi >> 4 ) +
-                                                                          snr;
+                            this->settings.LoRaPacketHandler.RssiValue = RSSI_OFFSET_LF;
                         }
+                        this->settings.LoRaPacketHandler.RssiValue += rssi + ( rssi >> 4 )
+                                + (this->settings.LoRaPacketHandler.SnrValue / 4);
                     }
                     else
                     {    
                         if( this->settings.Channel > RF_MID_BAND_THRESH )
                         {
-                            this->settings.LoRaPacketHandler.RssiValue = RSSI_OFFSET_HF + rssi + ( rssi >> 4 );
+                            this->settings.LoRaPacketHandler.RssiValue = RSSI_OFFSET_HF;
                         }
                         else
                         {
-                            this->settings.LoRaPacketHandler.RssiValue = RSSI_OFFSET_LF + rssi + ( rssi >> 4 );
+                            this->settings.LoRaPacketHandler.RssiValue = RSSI_OFFSET_LF;
                         }
+                        this->settings.LoRaPacketHandler.RssiValue += rssi + ( rssi >> 4 );
                     }
 
                     this->settings.LoRaPacketHandler.Size = Read( REG_LR_RXNBBYTES );
 
-                    //MODTRONIX BEGIN /////////////////////////////////////////
                     //Debug Output:
                     // - RegRxNbBytes = Nb bytes RXed
                     // - RegFifoAddrPtr = FIFO Pointer used for SPI instructions.
@@ -1362,7 +1347,6 @@
                     //Ensure we read the last packet received. Without doing this, the bytes read can get out of sync
                     //with the last packet received after errors occur!
                     Write(REG_LR_FIFOADDRPTR, Read(REG_LR_FIFORXCURRENTADDR));
-                    //MODTRONIX END ///////////////////////////////////////////
                     ReadFifo( rxBuffer, this->settings.LoRaPacketHandler.Size );
                 
                     if( this->settings.LoRa.RxContinuous == false )