
versionepudee2018
Dependencies: mbed LoRaWAN-lib SX1272Lib
Fork of LoRaWAN-demo-72 by
Revision 3:3152aa75c58d, committed 2016-05-13
- Comitter:
- mluis
- Date:
- Fri May 13 15:14:44 2016 +0000
- Parent:
- 2:2eeaeae2c725
- Child:
- 4:78bf111a5f6a
- Commit message:
- Updated mbed, LoRaWAN-lib and SX1272Lib libraries.
Changed in this revision
--- a/app/Comissioning.h Mon Mar 14 09:17:05 2016 +0000 +++ b/app/Comissioning.h Fri May 13 15:14:44 2016 +0000 @@ -29,9 +29,14 @@ #if( OVER_THE_AIR_ACTIVATION != 0 ) /*! + * IEEE Organizationally Unique Identifier ( OUI ) (big endian) + */ +#define IEEE_OUI 0x11, 0x22, 0x33 + +/*! * Mote device IEEE EUI (big endian) */ -#define LORAWAN_DEVICE_EUI { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 } +#define LORAWAN_DEVICE_EUI { IEEE_OUI, 0x44, 0x55, 0x66, 0x77, 0x88 } /*! * Application IEEE EUI (big endian)
--- a/app/main.cpp Mon Mar 14 09:17:05 2016 +0000 +++ b/app/main.cpp Fri May 13 15:14:44 2016 +0000 @@ -23,7 +23,7 @@ /*! * Join requests trials duty cycle. */ -#define OVER_THE_AIR_ACTIVATION_DUTYCYCLE 10000000 // 10 [s] value in us +#define OVER_THE_AIR_ACTIVATION_DUTYCYCLE 10000000 // 10 [s] value in us /*! * Defines the application data transmission duty cycle. 5s, value in [us]. @@ -37,7 +37,7 @@ #define APP_TX_DUTYCYCLE_RND 1000000 /*! - * Default mote datarate + * Default datarate */ #define LORAWAN_DEFAULT_DATARATE DR_0 @@ -64,6 +64,20 @@ */ #define LORAWAN_DUTYCYCLE_ON true +#define USE_SEMTECH_DEFAULT_CHANNEL_LINEUP 1 + +#if( USE_SEMTECH_DEFAULT_CHANNEL_LINEUP == 1 ) + +#define LC4 { 867100000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 } +#define LC5 { 867300000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 } +#define LC6 { 867500000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 } +#define LC7 { 867700000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 } +#define LC8 { 867900000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 } +#define LC9 { 868800000, { ( ( DR_7 << 4 ) | DR_7 ) }, 2 } +#define LC10 { 868300000, { ( ( DR_6 << 4 ) | DR_6 ) }, 1 } + +#endif + #endif /*! @@ -342,7 +356,7 @@ mcpsReq.Req.Unconfirmed.fBuffer = NULL; mcpsReq.Req.Unconfirmed.fBufferSize = 0; mcpsReq.Req.Unconfirmed.Datarate = LORAWAN_DEFAULT_DATARATE; - + LoRaMacUplinkStatus.Acked = false; LoRaMacUplinkStatus.Port = 0; LoRaMacUplinkStatus.Buffer = NULL; @@ -435,14 +449,14 @@ /*! * \brief MCPS-Confirm event function * - * \param [IN] McpsConfirm - Pointer to the confirm structure, + * \param [IN] mcpsConfirm - Pointer to the confirm structure, * containing confirm attributes. */ -static void McpsConfirm( McpsConfirm_t *McpsConfirm ) +static void McpsConfirm( McpsConfirm_t *mcpsConfirm ) { - if( McpsConfirm->Status == LORAMAC_EVENT_INFO_STATUS_OK ) + if( mcpsConfirm->Status == LORAMAC_EVENT_INFO_STATUS_OK ) { - switch( McpsConfirm->McpsRequest ) + switch( mcpsConfirm->McpsRequest ) { case MCPS_UNCONFIRMED: { @@ -455,8 +469,8 @@ // Check Datarate // Check TxPower // Check AckReceived - // Check NbRetries - LoRaMacUplinkStatus.Acked = McpsConfirm->AckReceived; + // Check NbTrials + LoRaMacUplinkStatus.Acked = mcpsConfirm->AckReceived; break; } case MCPS_PROPRIETARY: @@ -466,9 +480,9 @@ default: break; } - LoRaMacUplinkStatus.Datarate = McpsConfirm->Datarate; - LoRaMacUplinkStatus.UplinkCounter = McpsConfirm->UpLinkCounter; - + LoRaMacUplinkStatus.Datarate = mcpsConfirm->Datarate; + LoRaMacUplinkStatus.UplinkCounter = mcpsConfirm->UpLinkCounter; + UplinkStatusUpdated = true; } NextTx = true; @@ -477,17 +491,17 @@ /*! * \brief MCPS-Indication event function * - * \param [IN] McpsIndication - Pointer to the indication structure, + * \param [IN] mcpsIndication - Pointer to the indication structure, * containing indication attributes. */ -static void McpsIndication( McpsIndication_t *McpsIndication ) +static void McpsIndication( McpsIndication_t *mcpsIndication ) { - if( McpsIndication->Status != LORAMAC_EVENT_INFO_STATUS_OK ) + if( mcpsIndication->Status != LORAMAC_EVENT_INFO_STATUS_OK ) { return; } - switch( McpsIndication->McpsIndication ) + switch( mcpsIndication->McpsIndication ) { case MCPS_UNCONFIRMED: { @@ -518,38 +532,38 @@ // Check Rssi // Check Snr // Check RxSlot - LoRaMacDownlinkStatus.Rssi = McpsIndication->Rssi; - if( McpsIndication->Snr & 0x80 ) // The SNR sign bit is 1 + LoRaMacDownlinkStatus.Rssi = mcpsIndication->Rssi; + if( mcpsIndication->Snr & 0x80 ) // The SNR sign bit is 1 { // Invert and divide by 4 - LoRaMacDownlinkStatus.Snr = ( ( ~McpsIndication->Snr + 1 ) & 0xFF ) >> 2; + LoRaMacDownlinkStatus.Snr = ( ( ~mcpsIndication->Snr + 1 ) & 0xFF ) >> 2; LoRaMacDownlinkStatus.Snr = -LoRaMacDownlinkStatus.Snr; } else { // Divide by 4 - LoRaMacDownlinkStatus.Snr = ( McpsIndication->Snr & 0xFF ) >> 2; + LoRaMacDownlinkStatus.Snr = ( mcpsIndication->Snr & 0xFF ) >> 2; } LoRaMacDownlinkStatus.DownlinkCounter++; - LoRaMacDownlinkStatus.RxData = McpsIndication->RxData; - LoRaMacDownlinkStatus.Port = McpsIndication->Port; - LoRaMacDownlinkStatus.Buffer = McpsIndication->Buffer; - LoRaMacDownlinkStatus.BufferSize = McpsIndication->BufferSize; + LoRaMacDownlinkStatus.RxData = mcpsIndication->RxData; + LoRaMacDownlinkStatus.Port = mcpsIndication->Port; + LoRaMacDownlinkStatus.Buffer = mcpsIndication->Buffer; + LoRaMacDownlinkStatus.BufferSize = mcpsIndication->BufferSize; if( ComplianceTest.Running == true ) { ComplianceTest.DownLinkCounter++; } - if( McpsIndication->RxData == true ) + if( mcpsIndication->RxData == true ) { - switch( McpsIndication->Port ) + switch( mcpsIndication->Port ) { case 1: // The application LED can be controlled on port 1 or 2 case 2: - if( McpsIndication->BufferSize == 1 ) + if( mcpsIndication->BufferSize == 1 ) { - AppLedStateOn = McpsIndication->Buffer[0] & 0x01; + AppLedStateOn = mcpsIndication->Buffer[0] & 0x01; Led3StateChanged = true; } break; @@ -557,11 +571,11 @@ if( ComplianceTest.Running == false ) { // Check compliance test enable command (i) - if( ( McpsIndication->BufferSize == 4 ) && - ( McpsIndication->Buffer[0] == 0x01 ) && - ( McpsIndication->Buffer[1] == 0x01 ) && - ( McpsIndication->Buffer[2] == 0x01 ) && - ( McpsIndication->Buffer[3] == 0x01 ) ) + if( ( mcpsIndication->BufferSize == 4 ) && + ( mcpsIndication->Buffer[0] == 0x01 ) && + ( mcpsIndication->Buffer[1] == 0x01 ) && + ( mcpsIndication->Buffer[2] == 0x01 ) && + ( mcpsIndication->Buffer[3] == 0x01 ) ) { IsTxConfirmed = false; AppPort = 224; @@ -585,7 +599,7 @@ } else { - ComplianceTest.State = McpsIndication->Buffer[0]; + ComplianceTest.State = mcpsIndication->Buffer[0]; switch( ComplianceTest.State ) { case 0: // Check compliance test disable command (ii) @@ -615,12 +629,12 @@ ComplianceTest.State = 1; break; case 4: // (vii) - AppDataSize = McpsIndication->BufferSize; + AppDataSize = mcpsIndication->BufferSize; AppData[0] = 4; for( uint8_t i = 1; i < AppDataSize; i++ ) { - AppData[i] = McpsIndication->Buffer[i] + 1; + AppData[i] = mcpsIndication->Buffer[i] + 1; } break; case 5: // (viii) @@ -650,14 +664,14 @@ /*! * \brief MLME-Confirm event function * - * \param [IN] MlmeConfirm - Pointer to the confirm structure, + * \param [IN] mlmeConfirm - Pointer to the confirm structure, * containing confirm attributes. */ -static void MlmeConfirm( MlmeConfirm_t *MlmeConfirm ) +static void MlmeConfirm( MlmeConfirm_t *mlmeConfirm ) { - if( MlmeConfirm->Status == LORAMAC_EVENT_INFO_STATUS_OK ) + if( mlmeConfirm->Status == LORAMAC_EVENT_INFO_STATUS_OK ) { - switch( MlmeConfirm->MlmeRequest ) + switch( mlmeConfirm->MlmeRequest ) { case MLME_JOIN: { @@ -672,8 +686,8 @@ if( ComplianceTest.Running == true ) { ComplianceTest.LinkCheck = true; - ComplianceTest.DemodMargin = MlmeConfirm->DemodMargin; - ComplianceTest.NbGateways = MlmeConfirm->NbGateways; + ComplianceTest.DemodMargin = mlmeConfirm->DemodMargin; + ComplianceTest.NbGateways = mlmeConfirm->NbGateways; } break; } @@ -765,6 +779,17 @@ #if defined( USE_BAND_868 ) LoRaMacTestSetDutyCycleOn( LORAWAN_DUTYCYCLE_ON ); SerialDisplayUpdateDutyCycle( LORAWAN_DUTYCYCLE_ON ); + +#if( USE_SEMTECH_DEFAULT_CHANNEL_LINEUP == 1 ) + LoRaMacChannelAdd( 3, ( ChannelParams_t )LC4 ); + LoRaMacChannelAdd( 4, ( ChannelParams_t )LC5 ); + LoRaMacChannelAdd( 5, ( ChannelParams_t )LC6 ); + LoRaMacChannelAdd( 6, ( ChannelParams_t )LC7 ); + LoRaMacChannelAdd( 7, ( ChannelParams_t )LC8 ); + LoRaMacChannelAdd( 8, ( ChannelParams_t )LC9 ); + LoRaMacChannelAdd( 9, ( ChannelParams_t )LC10 ); +#endif + #endif SerialDisplayUpdateActivationMode( OVER_THE_AIR_ACTIVATION ); SerialDisplayUpdateAdr( LORAWAN_ADR_ON ); @@ -847,8 +872,8 @@ } if( ComplianceTest.Running == true ) { - // Schedule next packet transmission as soon as possible - TxDutyCycleTime = 1000; // 1 ms + // Schedule next packet transmission + TxDutyCycleTime = 5000000; // 5000000 us } else { @@ -860,11 +885,11 @@ } case DEVICE_STATE_CYCLE: { + DeviceState = DEVICE_STATE_SLEEP; + // Schedule next packet transmission TimerSetValue( &TxNextPacketTimer, TxDutyCycleTime ); TimerStart( &TxNextPacketTimer ); - - DeviceState = DEVICE_STATE_SLEEP; break; } case DEVICE_STATE_SLEEP:
--- a/mac/LoRaWAN-lib.lib Mon Mar 14 09:17:05 2016 +0000 +++ b/mac/LoRaWAN-lib.lib Fri May 13 15:14:44 2016 +0000 @@ -1,1 +1,1 @@ -http://developer.mbed.org/teams/Semtech/code/LoRaWAN-lib/#b9d87593a8ae +http://developer.mbed.org/teams/Semtech/code/LoRaWAN-lib/#37c12dbc8dc7
--- a/mbed.bld Mon Mar 14 09:17:05 2016 +0000 +++ b/mbed.bld Fri May 13 15:14:44 2016 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/252557024ec3 \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/7c328cabac7e \ No newline at end of file
--- a/radio/SX1272Lib.lib Mon Mar 14 09:17:05 2016 +0000 +++ b/radio/SX1272Lib.lib Fri May 13 15:14:44 2016 +0000 @@ -1,1 +1,1 @@ -http://developer.mbed.org/teams/Semtech/code/SX1272Lib/#5baff45eb3c5 +http://developer.mbed.org/teams/Semtech/code/SX1272Lib/#90bd79f1b458
--- a/system/crypto/aes.cpp Mon Mar 14 09:17:05 2016 +0000 +++ b/system/crypto/aes.cpp Fri May 13 15:14:44 2016 +0000 @@ -46,7 +46,7 @@ #include <stdint.h> /* define if you have fast 32-bit types on your system */ -#if 1 +#if ( __CORTEX_M != 0 ) // if Cortex is different from M0/M0+ # define HAVE_UINT_32T #endif @@ -239,7 +239,7 @@ static uint8_t gf_inv(const uint8_t x) { uint8_t p1 = x, p2 = BPOLY, n1 = hibit(x), n2 = 0x80, v1 = 1, v2 = 0; - if(x < 2) + if(x < 2) return x; for( ; ; ) @@ -247,20 +247,20 @@ if(n1) while(n2 >= n1) /* divide polynomial p2 by p1 */ { - n2 /= n1; /* shift smaller polynomial left */ + n2 /= n1; /* shift smaller polynomial left */ p2 ^= (p1 * n2) & 0xff; /* and remove from larger one */ - v2 ^= (v1 * n2); /* shift accumulated value and */ + v2 ^= (v1 * n2); /* shift accumulated value and */ n2 = hibit(p2); /* add into result */ } else return v1; - if(n2) /* repeat with values swapped */ + if(n2) /* repeat with values swapped */ while(n1 >= n2) { - n1 /= n2; - p1 ^= p2 * n1; - v1 ^= v2 * n1; + n1 /= n2; + p1 ^= p2 * n1; + v1 ^= v2 * n1; n1 = hibit(p1); } else @@ -270,13 +270,13 @@ /* The forward and inverse affine transformations used in the S-box */ uint8_t fwd_affine(const uint8_t x) -{ +{ #if defined( HAVE_UINT_32T ) uint32_t w = x; w ^= (w << 1) ^ (w << 2) ^ (w << 3) ^ (w << 4); return 0x63 ^ ((w ^ (w >> 8)) & 0xff); #else - return 0x63 ^ x ^ (x << 1) ^ (x << 2) ^ (x << 3) ^ (x << 4) + return 0x63 ^ x ^ (x << 1) ^ (x << 2) ^ (x << 3) ^ (x << 4) ^ (x >> 7) ^ (x >> 6) ^ (x >> 5) ^ (x >> 4); #endif } @@ -288,7 +288,7 @@ w = (w << 1) ^ (w << 3) ^ (w << 6); return 0x05 ^ ((w ^ (w >> 8)) & 0xff); #else - return 0x05 ^ (x << 1) ^ (x << 3) ^ (x << 6) + return 0x05 ^ (x << 1) ^ (x << 3) ^ (x << 6) ^ (x >> 7) ^ (x >> 5) ^ (x >> 2); #endif } @@ -520,8 +520,8 @@ case 24: case 32: break; - default: - ctx->rnd = 0; + default: + ctx->rnd = 0; return ( uint8_t )-1; } block_copy_nn(ctx->ksch, key, keylen); @@ -648,10 +648,10 @@ return_type aes_cbc_decrypt( const uint8_t *in, uint8_t *out, int32_t n_block, uint8_t iv[N_BLOCK], const aes_context ctx[1] ) -{ +{ while(n_block--) { uint8_t tmp[N_BLOCK]; - + //memcpy(tmp, in, N_BLOCK); block_copy(tmp, in); if(aes_decrypt(in, out, ctx) != EXIT_SUCCESS)
--- a/system/crypto/cmac.cpp Mon Mar 14 09:17:05 2016 +0000 +++ b/system/crypto/cmac.cpp Fri May 13 15:14:44 2016 +0000 @@ -86,7 +86,7 @@ len -= mlen; } while (len > 16) { /* not last block */ - + XOR(data, ctx->X); //rijndael_encrypt(&ctx->rijndael, ctx->X, ctx->X); @@ -119,7 +119,7 @@ } else LSHIFT(K, K); - + if (ctx->M_n == 16) { /* last block was a complete block */ XOR(K, ctx->M_last); @@ -138,13 +138,13 @@ ctx->M_last[ctx->M_n] = 0; XOR(K, ctx->M_last); - - + + } XOR(ctx->M_last, ctx->X); - + //rijndael_encrypt(&ctx->rijndael, ctx->X, digest); - + memcpy1(in, &ctx->X[0], 16); //Bestela ez du ondo iten aes_encrypt(in, digest, &ctx->rijndael); memset1(K, 0, sizeof K);
--- a/system/timer.cpp Mon Mar 14 09:17:05 2016 +0000 +++ b/system/timer.cpp Fri May 13 15:14:44 2016 +0000 @@ -40,6 +40,22 @@ return ( ( TimerTime_t )CurrentTime ); } +TimerTime_t TimerGetElapsedTime( TimerTime_t savedTime ) +{ + CurrentTime += TimeCounter.read_us( ); + TimeCounter.reset( ); + TimeCounter.start( ); + return ( TimerTime_t )( CurrentTime - savedTime ); +} + +TimerTime_t TimerGetFutureTime( TimerTime_t eventInFuture ) +{ + CurrentTime += TimeCounter.read_us( ); + TimeCounter.reset( ); + TimeCounter.start( ); + return ( TimerTime_t )( CurrentTime + eventInFuture ); +} + void TimerInit( TimerEvent_t *obj, void ( *callback )( void ) ) { obj->value = 0;
--- a/system/timer.h Mon Mar 14 09:17:05 2016 +0000 +++ b/system/timer.h Fri May 13 15:14:44 2016 +0000 @@ -88,5 +88,20 @@ */ TimerTime_t TimerGetCurrentTime( void ); +/*! + * \brief Return the Time elapsed since a fix moment in Time + * + * \param [IN] savedTime fix moment in Time + * \retval time returns elapsed time + */ +TimerTime_t TimerGetElapsedTime( TimerTime_t savedTime ); + +/*! + * \brief Return the Time elapsed since a fix moment in Time + * + * \param [IN] eventInFuture fix moment in the future + * \retval time returns difference between now and future event + */ +TimerTime_t TimerGetFutureTime( TimerTime_t eventInFuture ); #endif // __TIMER_H__