uint32_t SX1272FskGetBitrate( void ) { SX1272ReadBuffer( REG_BITRATEMSB, &SX1272->RegBitrateMsb, 2 ); FskSettings.Bitrate = ( ( ( uint32_t )SX1272->RegBitrateMsb << 8 ) | ( ( uint32_t )SX1272->RegBitrateLsb ) ); FskSettings.Bitrate = ( uint16_t )( ( double )XTAL_FREQ / ( double )FskSettings.Bitrate ); return FskSettings.Bitrate; }
uint32_t SX1272FskGetRFFrequency( void ) { SX1272ReadBuffer( REG_FRFMSB, &SX1272->RegFrfMsb, 3 ); FskSettings.RFFrequency = ( ( uint32_t )SX1272->RegFrfMsb << 16 ) | ( ( uint32_t )SX1272->RegFrfMid << 8 ) | ( ( uint32_t )SX1272->RegFrfLsb ); FskSettings.RFFrequency = ( uint32_t )( ( double )FskSettings.RFFrequency * ( double )FREQ_STEP ); return FskSettings.RFFrequency; }
uint32_t SX1272FskGetFdev( void ) { SX1272ReadBuffer( REG_FDEVMSB, &SX1272->RegFdevMsb, 2 ); FskSettings.Fdev = ( ( ( uint32_t )SX1272->RegFdevMsb << 8 ) | ( ( uint32_t )SX1272->RegFdevLsb ) ); FskSettings.Fdev = ( uint16_t )( ( double )FskSettings.Fdev * ( double )FREQ_STEP ); return FskSettings.Fdev; }
void SX1272SetLoRaOn( bool enable ) { if( LoRaOnState == enable ) { return; } LoRaOnState = enable; LoRaOn = enable; if( LoRaOn == true ) { SX1272LoRaSetOpMode( RFLR_OPMODE_SLEEP ); SX1272LR->RegOpMode = ( SX1272LR->RegOpMode & RFLR_OPMODE_LONGRANGEMODE_MASK ) | RFLR_OPMODE_LONGRANGEMODE_ON; SX1272Write( REG_LR_OPMODE, SX1272LR->RegOpMode ); SX1272LoRaSetOpMode( RFLR_OPMODE_STANDBY ); // RxDone RxTimeout FhssChangeChannel CadDone SX1272LR->RegDioMapping1 = RFLR_DIOMAPPING1_DIO0_00 | RFLR_DIOMAPPING1_DIO1_00 | RFLR_DIOMAPPING1_DIO2_00 | RFLR_DIOMAPPING1_DIO3_00; // CadDetected ModeReady SX1272LR->RegDioMapping2 = RFLR_DIOMAPPING2_DIO4_00 | RFLR_DIOMAPPING2_DIO5_00; SX1272WriteBuffer( REG_LR_DIOMAPPING1, &SX1272LR->RegDioMapping1, 2 ); SX1272ReadBuffer( REG_LR_OPMODE, SX1272Regs + 1, 0x70 - 1 ); } else { SX1272LoRaSetOpMode( RFLR_OPMODE_SLEEP ); SX1272LR->RegOpMode = ( SX1272LR->RegOpMode & RFLR_OPMODE_LONGRANGEMODE_MASK ) | RFLR_OPMODE_LONGRANGEMODE_OFF; SX1272Write( REG_LR_OPMODE, SX1272LR->RegOpMode ); SX1272LoRaSetOpMode( RFLR_OPMODE_STANDBY ); SX1272ReadBuffer( REG_OPMODE, SX1272Regs + 1, 0x70 - 1 ); } }
void SX1272LoRaInit( void ) { RFLRState = RFLR_STATE_IDLE; SX1272LoRaSetDefaults( ); SX1272ReadBuffer( REG_LR_OPMODE, SX1272Regs + 1, 0x70 - 1 ); #if ( PLATFORM == SX12xxEiger ) SX1272LR->RegPaConfig = ( SX1272LR->RegPaConfig & RFLR_PACONFIG_PASELECT_PABOOST ) | RFLR_PACONFIG_PASELECT_PABOOST; #else SX1272LR->RegPaConfig = ( SX1272LR->RegPaConfig & RFLR_PACONFIG_PASELECT_PABOOST ) | RFLR_PACONFIG_PASELECT_RFO; #endif SX1272LR->RegLna = RFLR_LNA_GAIN_G1 | RFLR_LNA_BOOST_ON; SX1272WriteBuffer( REG_LR_OPMODE, SX1272Regs + 1, 0x70 - 1 ); // set the RF settings SX1272LoRaSetRFFrequency( LoRaSettings.RFFrequency ); #if ( PLATFORM == SX12xxEiger ) SX1272LoRaSetPa20dBm( true ); #else SX1272LoRaSetPa20dBm( false ); #endif SX1272LoRaSetRFPower( LoRaSettings.Power ); SX1272LoRaSetSpreadingFactor( LoRaSettings.SpreadingFactor ); // SF6 only operates in implicit header mode. SX1272LoRaSetErrorCoding( LoRaSettings.ErrorCoding ); SX1272LoRaSetPacketCrcOn( LoRaSettings.CrcOn ); SX1272LoRaSetSignalBandwidth( LoRaSettings.SignalBw ); SX1272LoRaSetImplicitHeaderOn( LoRaSettings.ImplicitHeaderOn ); SX1272LoRaSetSymbTimeout( 0x3FF ); SX1272LoRaSetPayloadLength( LoRaSettings.PayloadLength ); SX1272LoRaSetLowDatarateOptimize( true ); SX1272LoRaSetOpMode( RFLR_OPMODE_STANDBY ); }
void SX1272ReadFifo( uint8_t *buffer, uint8_t size ) { SX1272ReadBuffer( 0, buffer, size ); }
void SX1272Read( uint8_t addr, uint8_t *data ) { SX1272ReadBuffer( addr, data, 1 ); }