kopia lustrzana https://github.com/jgromes/RadioLib
				
				
				
			[SX127x] Added check for LoRa header CRC mismatch (#200)
							rodzic
							
								
									9b5eed83d2
								
							
						
					
					
						commit
						c127712c5e
					
				| 
						 | 
				
			
			@ -283,6 +283,11 @@
 | 
			
		|||
*/
 | 
			
		||||
#define ERR_INVALID_ENCODING                          -23
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
  \brief LoRa packet header has been damaged.
 | 
			
		||||
*/
 | 
			
		||||
#define ERR_LORA_HEADER_DAMAGED                        -24
 | 
			
		||||
 | 
			
		||||
// RF69-specific status codes
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -361,6 +361,7 @@ float SX1272::getRSSI() {
 | 
			
		|||
int16_t SX1272::setCRC(bool enableCRC) {
 | 
			
		||||
  if(getActiveModem() == SX127X_LORA) {
 | 
			
		||||
    // set LoRa CRC
 | 
			
		||||
    SX127x::_crcEnabled = enableCRC;
 | 
			
		||||
    if(enableCRC) {
 | 
			
		||||
      return(_mod->SPIsetRegValue(SX127X_REG_MODEM_CONFIG_2, SX1272_RX_CRC_MODE_ON, 2, 2));
 | 
			
		||||
    } else {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -439,6 +439,7 @@ float SX1278::getRSSI() {
 | 
			
		|||
int16_t SX1278::setCRC(bool enableCRC) {
 | 
			
		||||
  if(getActiveModem() == SX127X_LORA) {
 | 
			
		||||
    // set LoRa CRC
 | 
			
		||||
    SX127x::_crcEnabled = enableCRC;
 | 
			
		||||
    if(enableCRC) {
 | 
			
		||||
      return(_mod->SPIsetRegValue(SX127X_REG_MODEM_CONFIG_2, SX1278_RX_CRC_MODE_ON, 2, 2));
 | 
			
		||||
    } else {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -490,11 +490,18 @@ int16_t SX127x::readData(uint8_t* data, size_t len) {
 | 
			
		|||
      length = getPacketLength();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // check integrity CRC
 | 
			
		||||
    // check packet header integrity
 | 
			
		||||
    if(_crcEnabled && (_mod->SPIgetRegValue(SX127X_REG_HOP_CHANNEL, 6, 6)) == 0) {
 | 
			
		||||
      // CRC is disabled according to packet header and enabled according to user
 | 
			
		||||
      // most likely damaged packet header
 | 
			
		||||
      clearIRQFlags();
 | 
			
		||||
      return(ERR_LORA_HEADER_DAMAGED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // check payload CRC
 | 
			
		||||
    if(_mod->SPIgetRegValue(SX127X_REG_IRQ_FLAGS, 5, 5) == SX127X_CLEAR_IRQ_FLAG_PAYLOAD_CRC_ERROR) {
 | 
			
		||||
      // clear interrupt flags
 | 
			
		||||
      clearIRQFlags();
 | 
			
		||||
 | 
			
		||||
      return(ERR_CRC_MISMATCH);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -950,6 +950,7 @@ class SX127x: public PhysicalLayer {
 | 
			
		|||
    float _br = 0;
 | 
			
		||||
    float _rxBw = 0;
 | 
			
		||||
    bool _ook = false;
 | 
			
		||||
    bool _crcEnabled = false;
 | 
			
		||||
 | 
			
		||||
    int16_t setFrequencyRaw(float newFreq);
 | 
			
		||||
    int16_t config();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue