コード例 #1
0
ファイル: main.cpp プロジェクト: ENT-MBS-MTE/hackathon
static bool SendFrame( void )
{
    uint8_t sendFrameStatus = 0;

    sendFrameStatus = LoRaMacSendFrame( AppPort, AppData, AppDataSize );
  //  sendFrameStatus = LoRaMacSendConfirmedFrame( AppPort, AppData, AppDataSize, 8 );
    switch( sendFrameStatus )
    {
    case 5: // NO_FREE_CHANNEL
        // Try again later
        return true;
    default:
        return false;
    }
}
コード例 #2
0
ファイル: main.c プロジェクト: hollie/LoRaMac-node
/**
 * Main application entry point.
 */
int main( void )
{
	uint8_t sendFrameStatus = 0;
	uint8_t batteryLevel = 0;   

	BoardInitMcu( );
	BoardInitPeriph( );

	// Initialize LoRaMac device unique ID
	BoardGetUniqueId( DevEui );

	LoRaMacEvents.MacEvent = OnMacEvent;
	LoRaMacInit( &LoRaMacEvents );

	IsNetworkJoined = false;

#if( OVER_THE_AIR_ACTIVATION == 0 )
	// Random seed initialization
	srand( RAND_SEED );
	// Choose a random device address
    // NwkID = 0
    // NwkAddr rand [0, 33554431]
    DevAddr = randr( 0, 0x01FFFFFF );
	
    LoRaMacInitNwkIds( 0x000000, DevAddr, NwkSKey, AppSKey );
	IsNetworkJoined = true;
#else
	// Sends a JoinReq Command every 5 seconds until the network is joined
	TimerInit( &JoinReqTimer, OnJoinReqTimerEvent ); 
	TimerSetValue( &JoinReqTimer, OVER_THE_AIR_ACTIVATION_DUTYCYCLE );
	TimerStart( &JoinReqTimer );
#endif

	TxNextPacket = true;
	TimerInit( &TxNextPacketTimer, OnTxNextPacketTimerEvent );
	
	TimerInit( &Led1Timer, OnLed1TimerEvent ); 
	TimerSetValue( &Led1Timer, 25000 );

	TimerInit( &Led2Timer, OnLed2TimerEvent ); 
	TimerSetValue( &Led2Timer, 25000 );

	LoRaMacSetAdrOn( true );

	while( 1 )
	{
		while( IsNetworkJoined == false )
		{
#if( OVER_THE_AIR_ACTIVATION != 0 )
			if( TxNextPacket == true )
			{
				TxNextPacket = false;
				
				LoRaMacJoinReq( DevEui, AppEui, AppKey );

				// Relaunch timer for next trial
				TimerStart( &JoinReqTimer );
			}
			TimerLowPowerHandler( );
#endif
		}
		if( Led1TimerEvent == true )
		{
			Led1TimerEvent = false;
			
			// Switch LED 1 OFF
			GpioWrite( &Led1, 1 );
		}

		if( Led2TimerEvent == true )
		{
			Led2TimerEvent = false;
			
			// Switch LED 2 OFF
			GpioWrite( &Led2, 1 );
		}

		if( TxAckReceived == true )
		{
			TxAckReceived = false;
			// Switch LED 2 ON
			GpioWrite( &Led2, 0 );
			TimerStart( &Led2Timer );
		}
		
		if( RxDone == true )
		{
			RxDone = false;
			
            // Switch LED 2 ON
            GpioWrite( &Led2, 0 );
            TimerStart( &Led2Timer );

			if( AppLedStateOn == true )
			{
				// Switch LED 3 ON
				GpioWrite( &Led2, 0 );
			}
			else
			{
				// Switch LED 3 OFF
				GpioWrite( &Led2, 1 );
			}
		}
		
		if( TxDone == true )
		{
			TxDone = false;
			
			// Schedule next packet transmission
			TxDutyCycleTime = APP_TX_DUTYCYCLE + randr( -APP_TX_DUTYCYCLE_RND, APP_TX_DUTYCYCLE_RND );
			TimerSetValue( &TxNextPacketTimer, TxDutyCycleTime );
			TimerStart( &TxNextPacketTimer );
		}

		if( TxNextPacket == true )
		{
			TxNextPacket = false;
		
			batteryLevel = BoardMeasureBatterieLevel( );						// 1 (very low) to 254 (fully charged)
		
			// Switch LED 1 ON
			GpioWrite( &Led1, 0 );
			TimerStart( &Led1Timer );
		
			AppData[0] = AppLedStateOn;
			//
			//
			//
			AppData[7] = batteryLevel;
			
			 sendFrameStatus = LoRaMacSendFrame( 2, AppData, APP_DATA_SIZE );
            //sendFrameStatus = LoRaMacSendConfirmedFrame( 2, AppData, APP_DATA_SIZE, 8 );
            switch( sendFrameStatus )
            {
            case 3: // LENGTH_PORT_ERROR
            case 4: // MAC_CMD_ERROR
            case 5: // NO_FREE_CHANNEL
                // Schedule a new transmission
                TxDone = true;
                break;
            default:
                break;
			}
        }

		TimerLowPowerHandler( );
	}
}