Forked LoRaWAN-lib for Legacy Gateway testing
Fork of LoRaWAN-lib by
Diff: LoRaMac.cpp
- Revision:
- 10:e52525844705
- Parent:
- 8:2d237e069df2
--- a/LoRaMac.cpp Wed Mar 22 12:38:38 2017 +0000 +++ b/LoRaMac.cpp Thu Apr 20 14:26:48 2017 +0000 @@ -36,7 +36,7 @@ /*! * FRMPayload overhead to be used when setting the Radio.SetMaxPayloadLength - * in RxWindowSetup function. + * in function. * Maximum PHYPayload = MaxPayloadOfDatarate/MaxPayloadOfDatarateRepeater + LORA_MAC_FRMPAYLOAD_OVERHEAD */ #define LORA_MAC_FRMPAYLOAD_OVERHEAD 13 // MHDR(1) + FHDR(7) + Port(1) + MIC(4) @@ -362,11 +362,15 @@ LC2, LC3, }; -#elif defined( USE_BAND_868 ) +#elif defined( USE_BAND_868 ) || defined( USE_BAND_868_LEGACY ) /*! * Data rates table definition */ +#if defined( USE_BAND_868 ) const uint8_t Datarates[] = { 12, 11, 10, 9, 8, 7, 7, 50 }; +#else +const uint8_t Datarates[] = { 12, 11, 10, 9, 8, 7, 50, 50 }; // TODO FSK datarates +#endif /*! * Bandwidths table definition in Hz @@ -1712,7 +1716,7 @@ } else { -#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) +#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) || defined( USE_BAND_868_LEGACY ) // Re-enable default channels LC1, LC2, LC3 LoRaMacParams.ChannelsMask[0] = LoRaMacParams.ChannelsMask[0] | ( LC( 1 ) + LC( 2 ) + LC( 3 ) ); #elif defined( USE_BAND_470 ) @@ -1815,6 +1819,15 @@ #if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) RxWindowSetup( Channels[Channel].Frequency, RxWindowsParams[0].Datarate, RxWindowsParams[0].Bandwidth, RxWindowsParams[0].RxWindowTimeout, false ); +#elif defined( USE_BAND_868_LEGACY ) + if( (RxWindowsParams[0].Datarate == DR_7) || (RxWindowsParams[0].Datarate == DR_6) ) + { + RxWindowSetup( 869525000, RxWindowsParams[0].Datarate, RxWindowsParams[0].Bandwidth, RxWindowsParams[0].RxWindowTimeout, false ); + } + else + { + RxWindowSetup( 869850000, RxWindowsParams[0].Datarate, RxWindowsParams[0].Bandwidth, RxWindowsParams[0].RxWindowTimeout, false ); + } #elif defined( USE_BAND_470 ) RxWindowSetup( LORAMAC_FIRST_RX1_CHANNEL + ( Channel % 48 ) * LORAMAC_STEPWIDTH_RX1_CHANNEL, RxWindowsParams[0].Datarate, RxWindowsParams[0].Bandwidth, RxWindowsParams[0].RxWindowTimeout, false ); #elif ( defined( USE_BAND_915 ) || defined( USE_BAND_915_HYBRID ) ) @@ -1934,7 +1947,7 @@ { // Check if the channel is enabled continue; } -#if defined( USE_BAND_868 ) || defined( USE_BAND_433 ) || defined( USE_BAND_780 ) +#if defined( USE_BAND_868 ) || defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868_LEGACY ) if( IsLoRaMacNetworkJoined == false ) { if( ( JOIN_CHANNELS & ( 1 << j ) ) == 0 ) @@ -2013,6 +2026,20 @@ modem = MODEM_LORA; Radio.SetRxConfig( modem, bandwidth, downlinkDatarate, 1, 0, 8, timeout, false, 0, false, 0, 0, true, rxContinuous ); } +#elif defined( USE_BAND_868_LEGACY ) + if( (datarate == DR_7) || (datarate == DR_6) ) + { + //Radio.SetChannel( 869525000 ); + modem = MODEM_FSK; + Radio.SetRxConfig( modem, 14.8e3, 4.8 * 1e3, 0, 83.333e3, 5, timeout, false, 0, true, 0, 0, false, rxContinuous ); + } + else + { + //Radio.SetChannel( 869850000 ); + modem = MODEM_LORA; + Radio.SetRxConfig( modem, bandwidth, downlinkDatarate, 1, 0, 8, timeout, false, 0, false, 0, 0, true, rxContinuous ); + //Radio.SetRxConfig( modem, bandwidth, 7, 1, 0, 8, timeout, false, 0, false, 0, 0, true, rxContinuous ); + } #elif defined( USE_BAND_470 ) || defined( USE_BAND_915 ) || defined( USE_BAND_915_HYBRID ) modem = MODEM_LORA; Radio.SetRxConfig( modem, bandwidth, downlinkDatarate, 1, 0, 8, timeout, false, 0, false, 0, 0, true, rxContinuous ); @@ -2042,7 +2069,7 @@ static bool Rx2FreqInRange( uint32_t freq ) { -#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) +#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) || defined( USE_BAND_868_LEGACY ) if( Radio.CheckRfFrequency( freq ) == true ) #elif defined( USE_BAND_470 ) || defined( USE_BAND_915 ) || defined( USE_BAND_915_HYBRID ) if( ( Radio.CheckRfFrequency( freq ) == true ) && @@ -2273,7 +2300,7 @@ { if( ( AdrAckCounter % ADR_ACK_DELAY ) == 0 ) { -#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) +#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) || defined( USE_BAND_868_LEGACY ) if( datarate > LORAMAC_TX_MIN_DATARATE ) { datarate--; @@ -2518,7 +2545,7 @@ { nbRep = 1; } -#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) +#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) || defined( USE_BAND_868_LEGACY ) if( ( chMaskCntl == 0 ) && ( chMask == 0 ) ) { status &= 0xFE; // Channel mask KO @@ -2861,7 +2888,7 @@ // Set the default datarate LoRaMacParams.ChannelsDatarate = LoRaMacParamsDefaults.ChannelsDatarate; -#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) +#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) || defined( USE_BAND_868_LEGACY ) // Re-enable default channels LC1, LC2, LC3 LoRaMacParams.ChannelsMask[0] = LoRaMacParams.ChannelsMask[0] | ( LC( 1 ) + LC( 2 ) + LC( 3 ) ); #endif @@ -3112,7 +3139,16 @@ // Compute Rx1 windows parameters #if ( defined( USE_BAND_915 ) || defined( USE_BAND_915_HYBRID ) ) RxWindowsParams[0] = ComputeRxWindowParameters( datarateOffsets[LoRaMacParams.ChannelsDatarate][LoRaMacParams.Rx1DrOffset], DEFAULT_SYSTEM_MAX_RX_ERROR ); -#else +#elif defined( USE_BAND_868_LEGACY ) + if( (LoRaMacParams.ChannelsDatarate == DR_7) || (LoRaMacParams.ChannelsDatarate == DR_6) ) + { + RxWindowsParams[0] = ComputeRxWindowParameters( DR_6, DEFAULT_SYSTEM_MAX_RX_ERROR ); + } + else + { + RxWindowsParams[0] = ComputeRxWindowParameters( DR_5, DEFAULT_SYSTEM_MAX_RX_ERROR ); + } +#else RxWindowsParams[0] = ComputeRxWindowParameters( MAX( DR_0, LoRaMacParams.ChannelsDatarate - LoRaMacParams.Rx1DrOffset ), DEFAULT_SYSTEM_MAX_RX_ERROR ); #endif // Compute Rx2 windows parameters @@ -3255,6 +3291,26 @@ Radio.SetTxConfig( MODEM_LORA, txPower, 0, 0, datarate, 1, 8, false, true, 0, 0, false, 3e3 ); TxTimeOnAir = Radio.TimeOnAir( MODEM_LORA, LoRaMacBufferPktLen ); } +#elif defined( USE_BAND_868_LEGACY ) + if( LoRaMacParams.ChannelsDatarate == DR_7 ) + { // High Speed FSK channel + Radio.SetMaxPayloadLength( MODEM_FSK, LoRaMacBufferPktLen ); + Radio.SetTxConfig( MODEM_FSK, txPower, 20e3, 0, 19.2 * 1e3, 0, 5, false, true, 0, 0, false, 3e3 ); + TxTimeOnAir = Radio.TimeOnAir( MODEM_FSK, LoRaMacBufferPktLen ); + + } + else if( LoRaMacParams.ChannelsDatarate == DR_6 ) + { // Low speed FSK channel + Radio.SetMaxPayloadLength( MODEM_FSK, LoRaMacBufferPktLen ); + Radio.SetTxConfig( MODEM_FSK, txPower, 5e3, 0, 4.8 * 1e3, 0, 5, false, true, 0, 0, false, 3e3 ); + TxTimeOnAir = Radio.TimeOnAir( MODEM_FSK, LoRaMacBufferPktLen ); + } + else + { // Normal LoRa channel + Radio.SetMaxPayloadLength( MODEM_LORA, LoRaMacBufferPktLen ); + Radio.SetTxConfig( MODEM_LORA, txPower, 0, 0, datarate, 1, 8, false, true, 0, 0, false, 3e3 ); + TxTimeOnAir = Radio.TimeOnAir( MODEM_LORA, LoRaMacBufferPktLen ); + } #elif defined( USE_BAND_915 ) || defined( USE_BAND_915_HYBRID ) Radio.SetMaxPayloadLength( MODEM_LORA, LoRaMacBufferPktLen ); if( LoRaMacParams.ChannelsDatarate >= DR_4 ) @@ -3352,7 +3408,7 @@ DutyCycleOn = false; #elif defined( USE_BAND_780 ) DutyCycleOn = true; -#elif defined( USE_BAND_868 ) +#elif defined( USE_BAND_868 ) || defined( USE_BAND_868_LEGACY ) DutyCycleOn = true; #elif defined( USE_BAND_915 ) || defined( USE_BAND_915_HYBRID ) DutyCycleOn = false; @@ -3387,7 +3443,7 @@ LoRaMacParamsDefaults.ChannelsMask[5] = 0xFFFF; #elif defined( USE_BAND_780 ) LoRaMacParamsDefaults.ChannelsMask[0] = LC( 1 ) + LC( 2 ) + LC( 3 ); -#elif defined( USE_BAND_868 ) +#elif defined( USE_BAND_868 ) || defined( USE_BAND_868_LEGACY ) LoRaMacParamsDefaults.ChannelsMask[0] = LC( 1 ) + LC( 2 ) + LC( 3 ); #elif defined( USE_BAND_915 ) LoRaMacParamsDefaults.ChannelsMask[0] = 0xFFFF; @@ -3900,7 +3956,7 @@ } case MIB_CHANNELS_DEFAULT_DATARATE: { -#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) +#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) || defined( USE_BAND_868_LEGACY ) if( ValueInRange( mibSet->Param.ChannelsDefaultDatarate, DR_0, DR_5 ) ) { @@ -4008,7 +4064,7 @@ datarateInvalid = true; } -#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) +#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) || defined( USE_BAND_868_LEGACY ) if( id < 3 ) { if( params.Frequency != Channels[id].Frequency ) @@ -4030,7 +4086,7 @@ // Validate the frequency if( ( Radio.CheckRfFrequency( params.Frequency ) == true ) && ( params.Frequency > 0 ) && ( frequencyInvalid == false ) ) { -#if defined( USE_BAND_868 ) +#if defined( USE_BAND_868 ) || defined( USE_BAND_868_LEGACY ) if( ( params.Frequency >= 863000000 ) && ( params.Frequency < 865000000 ) ) { band = BAND_G1_2; @@ -4090,7 +4146,7 @@ LoRaMacStatus_t LoRaMacChannelRemove( uint8_t id ) { -#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) +#if defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868 ) || defined( USE_BAND_868_LEGACY ) if( ( LoRaMacState & LORAMAC_TX_RUNNING ) == LORAMAC_TX_RUNNING ) { if( ( LoRaMacState & LORAMAC_TX_CONFIG ) != LORAMAC_TX_CONFIG ) @@ -4403,7 +4459,7 @@ void LoRaMacTestSetDutyCycleOn( bool enable ) { -#if ( defined( USE_BAND_868 ) || defined( USE_BAND_433 ) || defined( USE_BAND_780 ) ) +#if ( defined( USE_BAND_868 ) || defined( USE_BAND_433 ) || defined( USE_BAND_780 ) || defined( USE_BAND_868_LEGACY ) ) DutyCycleOn = enable; #else DutyCycleOn = false; @@ -4441,6 +4497,12 @@ tSymbol = ( 1.0 / ( double )Datarates[datarate] ) * 8.0; // 1 symbol equals 1 byte } else +#elif defined( USE_BAND_868_LEGACY ) + if( (datarate == DR_7) || (datarate == DR_6) ) + { // FSK + tSymbol = ( 1.0 / ( double )Datarates[datarate] ) * 8.0; // 1 symbol equals 1 byte + } + else #endif { // LoRa tSymbol = ( ( double )( 1 << Datarates[datarate] ) / ( double )Bandwidths[datarate] ) * 1e3;