Пример #1
0
int main(void)
{
	CLK_init();
	SYS_init();
	UART_init();
	ADC_init();
	PWM_init();			//Initialize PWM (servos not running)
	PWM_dutySet(500, 200);

	_bis_SR_register(LPM0_bits + GIE); // interrupts enabled

	while(1)
	{

		//_ldrL_ADCVal = _readADC(INCH_4); 		//Read ADC input on P2.1
		//_ldrR_ADCVal = _readADC(INCH_5); 		//Read ADC input on P2.2

		UART_puts((char *)"\n\r");
		UART_puts((char *)"_ldrL_ADCVal: ");
		UART_outdec(_ldrL_ADCVal, 0);
		UART_puts((char *)"\n\r");
		UART_puts((char *)"_ldrR_ADCVal: ");
		UART_outdec(_ldrR_ADCVal, 0);

		_delay_cycles(125000);
		P1OUT ^= (BIT0 + BIT6);
	}
}
Пример #2
0
void SYS_loop(void)
{
    SYS_init();

    MO_appInit();

    for (;;)
    {
       if (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_GPIO_INT_EVT)
       {
           SYS_globalEvtMsk1 &= ~(SYS_GLOBAL_EVT_GPIO_INT_EVT);
           MO_appGPIOEvtHndlr();
       }

       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_TIMER_A0_EXPIRY)
       {
           SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_TIMER_A0_EXPIRY);
           PLTFRM_timerA1ExpHndlr();
       }

       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_TIMER_A1_EXPIRY)
       {
           SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_TIMER_A1_EXPIRY);
           PLTFRM_timerA1ExpHndlr();
       }

#ifdef PLTFRM_UART_ENA
#ifdef UART_TX_INT_ENA
       if (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_UART_BLOCK_TX_DONE)
       {
           SYS_globalEvtMsk1 &= ~(SYS_GLOBAL_EVT_UART_BLOCK_TX_DONE);
           MO_uartTxDoneHndlr();
       }
#endif
#endif

       if (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_ENTER_LPM_REQUEST)
       {
           SYS_globalEvtMsk1 &= ~(SYS_GLOBAL_EVT_ENTER_LPM_REQUEST);
           PLTFRM_enterLPM();
       }
    }
}
Пример #3
0
void SYS_loop(void)
{
    SYS_init();

    PHY_PIB_init();

    MAC_init();

    ADP_init();

#if !defined(DEV_TYPE_RFD) && !defined(DEV_TYPE_SNIFFER)
    AODVL_init();
#endif

#ifndef DEV_TYPE_SNIFFER
#ifdef DEV_TYPE_RFD
    RFD_APP_COMMON_init();
#elif defined (DEV_TYPE_FFD) && !defined(NODE_HOST_IF_ENA)
    FFD_APP_commonInit();
#endif
#endif

#ifdef UC_FU_ENA
    FU_init();
#endif


#ifdef GW_ENA
    GW_init();
#endif

#ifndef EKM160111X_ENA_ON_PWR_UP
    NM_start();
#endif

#if !defined(DEV_TYPE_RFD) && !defined(DEV_TYPE_SNIFFER)
    PLTFRM_start1HzPeriodicTimer(SYS_periodicTmrExpCbFunc);
#endif

#if defined(PLTFRM_UART_ENA) || defined(NODE_HOST_IF_ENA)
    UART_start(PLTFRM_UART_HW_1_DEV_ID);
#endif

#ifdef LPWMN_COORD
#ifdef GW_ENA
#ifndef GREENOPIA_COORD_BUILD
    GW_sendSysBootEvt();
#endif
#endif
#endif

#ifdef TEST_TIMER_A0
    P2DIR |= BIT0;
    for (;;)
    {
        if (PLTFRM_startTimerA0(100, 0, __junkTestFunc) != PLTFRM_STS_SUCCESS)
            SYS_fatal(SYS_FATAL_ERR_34);

        while (_junkTF == 0)
        {
            if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_TIMER_A0_EXPIRY)
            {
                SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_TIMER_A0_EXPIRY);
                PLTFRM_timerA0ExpHndlr();
            }
        }

        _junkTF = 0;
    }
#endif

    for (;;)
    {
#if defined(DEV_TYPE_RFD) || defined(DEV_TYPE_FFD) && !defined(NODE_HOST_IF_ENA)
       if (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_GPIO_INT_EVT)
       {
           SYS_globalEvtMsk1 &= ~(SYS_GLOBAL_EVT_GPIO_INT_EVT);
           APP_COMMON_procGPIOEvt();
       }
#endif

#if defined(DEV_TYPE_FFD) || defined(DEV_TYPE_SNIFFER)
       // SYS_checkEnterLPM();
#endif

#if 0
#ifdef GPIO_MGMT_ENA
       if (PLTFRM_checkGPIOEvt())
           APP_procGPIOEvt();
#endif
#endif

#ifndef CC1101_WOR_ENA
       RADIO_checkRadioErrors( );
#endif

#if defined(LPWMN_COORD) || defined(DEV_TYPE_SNIFFER)
#ifdef PLTFRM_UART_ENA
#ifndef UART_TX_INT_ENA
       // Not using UART transmit done interrupt since interrupt interferes with SPI
       // connection to cc2520. Polling UART transmit over condition instead.
       UART_POLL_TX();
#endif
#endif
#endif

       if (MAC_TX_MODULE_IS_IDLE())
    	   MAC_checkPendAction();

#ifdef DEV_TYPE_RFD
       // Do not go into deep sleep if coordinator poll is pending or is in progress
       while ((!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_IMAGE_REFLASH_PENDING))
    		   && (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_ENTER_LPM_REQUEST)
               && MAC_TX_MODULE_IS_IDLE())
       {
#ifdef RFD_KA_ENA
    	   UINT8_t kaSent = 0;

           RFD_APP_sleepTimeElapsed = 0;
#endif
           SYS_globalEvtMsk1 &= ~(SYS_GLOBAL_EVT_ENTER_LPM_REQUEST);

#ifdef RADIO_CC2520
           if (RADIO_state != RADIO_STATE_LPM)
#else
           if (!(RADIO_inLPM()))
#endif
           {
               RADIO_enterLPM();

               // Clear all radio related flags since these are no longer valid
               // as the radio is in low power mode.
               SYS_globalEvtMsk0 &= ~SYS_GLOBAL_EVT_RADIO_RX_FIFO_OVFL;
               SYS_globalEvtMsk0 &= ~SYS_GLOBAL_EVT_MAC_FRAME_TX_DONE;
               SYS_globalEvtMsk0 &= ~SYS_GLOBAL_EVT_MAC_FRAME_RX_DONE;
           }

           PLTFRM_stopWakeUpTimer();

           if (SYS_wakeUpIntervalSecs > 0)
               PLTFRM_startWakeUpTimer(SYS_wakeUpIntervalSecs);
#ifdef RFD_KA_ENA
           else
           {

               if (NM_cntxt.rfdKeepAliveTmoSecs > 0)
        	       PLTFRM_startWakeUpTimer((NM_cntxt.rfdKeepAliveTmoSecs << 1));  // Yes, twice not half
           }
#endif

#ifndef RFD_KA_ENA
           PLTFRM_intDisable();
           RFD_APP_prepareToEnterLPM();  // Let APP know that micro is going to sleep.
           PLTFRM_enterLPM();

#else
           PLTFRM_intDisable();
           RFD_APP_prepareToEnterLPM();  // Let APP know that micro is going to sleep.

           do
           {
               PLTFRM_enterLPM();

               if (!(SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_WAKEUP_TIMER_EXPIRY_EVT)
                   && (!(SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_GPIO_INT_EVT))
                   && MAC_nodeJoined())
               {
                   // Check if keep alive needs to be sent to the parent.
                   if (RFD_APP_checkKAProc())
                   {
                       MAC_wakeUpProc();
                       RFD_APP_keepAliveTmrExpEvt();
                       kaSent = 1;
                       break;
                   }
               }
               else
                   break;

           } while (1);

           if (kaSent)
        	   break;
#endif

#if 0
           {
               UINT16_t sv = PLTFRM_getAvgSupplyVoltage();
               if (sv < PLTFRM_LOW_VOLTAGE_TH_IN_MV)
               {
                   // Supply voltage is too low for normal operations.
                   // Indicate this to the app and let it decide whether
                   // to continue or go back to sleep. APP can choose
                   // to change SYS_wakeUpIntervalSecs.
                   if (!RFD_APP_continueWithLowSupplyV())
                   {
                       SYS_globalEvtMsk1 |= SYS_GLOBAL_EVT_ENTER_LPM_REQUEST;
                       continue;
                   }
               }
           }
#endif

           MAC_wakeUpProc();


           if (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_WAKEUP_TIMER_EXPIRY_EVT)
           {
               // [email protected] / Jan/12/15 / commented out since RFD_APP_wakeUpTimerExpEvt()
               // does not seem to be doing anything.
               SYS_globalEvtMsk1 &= ~SYS_GLOBAL_EVT_WAKEUP_TIMER_EXPIRY_EVT;
               // RFD_APP_wakeUpTimerExpEvt();
           }

           if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_TIMER_A1_EXPIRY)
           {
               SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_TIMER_A1_EXPIRY);
               PLTFRM_timerA1ExpHndlr();
           }

           if (SYS_wakeUpIntervalSecs > 0)
               PLTFRM_stopWakeUpTimer();  // In case micro is woken by a GPIO interrupt

#if 0
#ifdef GPIO_MGMT_ENA
           PLTFRM_checkGPIOEvt();
#endif
#endif

           RFD_APP_wakeUpProc();

#ifdef PLTFRM_EKMC160111X_ENA
           if (SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_JOIN_NWK_REQ)
           {
               SYS_globalEvtMsk2 &= ~SYS_GLOBAL_EVT_JOIN_NWK_REQ;
               NM_start();
           }
#endif
       }  // while()
#endif

#ifdef LPWMN_COORD
#ifdef GPIO_MGMT_ENA
       PLTFRM_checkGPIOEvt();
#endif
#endif

       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_TIMER_A0_EXPIRY)
       {
           SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_TIMER_A0_EXPIRY);
           PLTFRM_timerA0ExpHndlr();
       }

       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_TIMER_A1_EXPIRY)
       {
           SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_TIMER_A1_EXPIRY);
           PLTFRM_timerA1ExpHndlr();
       }

#ifdef DEV_TYPE_RFD
       if (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_RFD_REASSOC_REQ)
       {
    	   SYS_wakeUpIntervalSecs = 0;  // [email protected] / april/18/15
           SYS_globalEvtMsk1 &= ~SYS_GLOBAL_EVT_RFD_REASSOC_REQ;
           NM_startScan();
       }
#endif

       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_TIMER_1HZ_PERIODIC_EXPIRY)
       {
           SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_TIMER_1HZ_PERIODIC_EXPIRY);
           PLTFRM_timer1HzPeriodicExpHndlr();
       }

#if defined(LPWMN_COORD) || defined(DEV_TYPE_SNIFFER) || defined(DEV_TYPE_FFD)
#ifdef PLTFRM_UART_ENA
       if (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_UART_FRAME_HDR_RCVD)
       {
           SYS_globalEvtMsk1 &= ~(SYS_GLOBAL_EVT_UART_FRAME_HDR_RCVD);
           UART_checkRcvdFrameHdr();
       }

       if (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_UART_FRAME_PYLD_RCVD)
       {
           SYS_globalEvtMsk1 &= ~(SYS_GLOBAL_EVT_UART_FRAME_PYLD_RCVD);
           UART_checkRcvdFramePyld();
       }

#ifdef UART_TX_INT_ENA
       if (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_UART_BLOCK_TX_DONE)
       {
           SYS_globalEvtMsk1 &= ~(SYS_GLOBAL_EVT_UART_BLOCK_TX_DONE);
           UART_blockTxDoneEvtHndlr();
       }
#endif
#endif
#endif

#ifndef DEV_TYPE_SNIFFER
       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_MAC_DATA_CONFIRM
           && (MAC_TX_MODULE_CAN_CONFIRM()))
       {
#ifdef CUSTOMER_ANDY_SPECIFIC_COORD_BUILD
           GW_relayCnfrm(LPWMN_MAC_MODULE,
                         MAC_cntxt.datacnfrmParams.status);
#else
           if (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND))
               ADP_evtHndlr(SYS_GLOBAL_EVT_MAC_DATA_CONFIRM,
                            (void *)&(MAC_cntxt.datacnfrmParams));
#endif
           SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_MAC_DATA_CONFIRM);
           MAC_resetTxModState();
       }

       SYS_rcvdPktCheck();

       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_MAC_FRAME_TX_DONE)
       {
           SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_MAC_FRAME_TX_DONE);
           MAC_evtHndlr(SYS_GLOBAL_EVT_MAC_FRAME_TX_DONE);
       }

       SYS_rcvdPktCheck();

       if ((SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_APP_DATA_REQ_POST_RT_DISC)
           && (!(SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_PENDING_FRAME_TRX_REQ))  // Pending frame trx has highest priority
           && (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND)))
       {
           // [email protected] - dec/25/14 - bug fix (MAC-IDLE-CHECK was missing)
           if (MAC_TX_MODULE_IS_IDLE())
           {
               SYS_globalEvtMsk1 &= ~(SYS_GLOBAL_EVT_APP_DATA_REQ_POST_RT_DISC);
               ADP_retryAppDataTxPostRtDisc();
           }
       }

       SYS_rcvdPktCheck();

#ifndef DEV_TYPE_RFD
       if (SYS_globalEvtMsk0 & AODVL_CTRL_PKT_TX_REQUEST
           && (!(SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_PENDING_FRAME_TRX_REQ))  // Pending frame trx has highest priority
           && (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND)))
       {
           if (MAC_TX_MODULE_IS_IDLE())
           {
               // Called function will update the AODVL_CTRL_PKT_TX_REQUEST bit
               AODVL_pktTxProc(  );
           }
       }
#endif
#endif

#if defined(DEV_TYPE_RFD)  || defined(DEV_TYPE_FFD)
       /*
        * [email protected] - march/1/15
        * MLME_scanRequest() cannot be called directly
        */
       if ((SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_SCAN_REQ)
           && MAC_TX_MODULE_IS_IDLE())
       {
           SYS_globalEvtMsk2 &= ~(SYS_GLOBAL_EVT_NODE_SCAN_REQ);
           NM_procPendScanReq();
       }
#endif

       SYS_rcvdPktCheck();

#if defined(DEV_TYPE_FFD) || defined(DEV_TYPE_RFD)
       if ((SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NWK_RESTART_CMD_RCVD)
           && MAC_TX_MODULE_IS_IDLE())
       {
           UINT8_t t;
           SYS_globalEvtMsk2 &= ~(SYS_GLOBAL_EVT_NWK_RESTART_CMD_RCVD);
           MAC_buildSendNwkRestartCmd();
           PLTFRM_saveSysFEId(SYS_FATAL_ERR_NWK_RESTART);
           for (t=0; t<100; t++) PLTFRM_delay1MilliSec();
           PLTFRM_resetSelf();
       }
#endif

#ifndef DEV_TYPE_SNIFFER
#ifndef DEV_TYPE_RFD
       if ((SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_PENDING_FRAME_TRX_REQ)
           && (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND))
           && (MAC_TX_MODULE_IS_IDLE()))
       {
           SYS_globalEvtMsk1 &= ~(SYS_GLOBAL_EVT_PENDING_FRAME_TRX_REQ);
           MAC_sendPendFrame();
       }
#endif

       SYS_rcvdPktCheck();

#ifdef DEV_TYPE_RFD
#ifdef RFD_COORD_POLL_ENA
       if ((SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_COORD_POLL_PENDING)
           && (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND))
           && (MAC_TX_MODULE_IS_IDLE()))
       {
           SYS_globalEvtMsk2 &= ~(SYS_GLOBAL_EVT_COORD_POLL_PENDING);

           if (MLME_pollRequest() == MAC_STS_SUCCESS)
           {
               SYS_globalEvtMsk2 |= SYS_GLOBAL_EVT_COORD_POLL_IN_PROGRESS;
           }
           else
           {
               // Inform APP about this failure !!
               RFD_APP_coordPollStartFlr();
           }
       }

       if (SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_MLME_POLL_REQ_CONFIRM)
       {
           SYS_globalEvtMsk2 &= ~SYS_GLOBAL_EVT_COORD_POLL_IN_PROGRESS;
           SYS_globalEvtMsk2 &= ~SYS_GLOBAL_EVT_MLME_POLL_REQ_CONFIRM;
           RFD_APP_pollReqCnfrmHndlr();
       }
#endif
#endif

#ifndef DEV_TYPE_RFD
       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_APP_DATA_REQUEST
           && (!(SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_PENDING_FRAME_TRX_REQ))  // Pending frame trx has highest priority
           && (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND)))
       {
           if (MAC_TX_MODULE_IS_IDLE())
           {
#ifdef LPWMN_COORD
               NC_dataReqProc();
#else
#ifdef DIS_ENA
               APP_buildSendPendDataReqs();
#endif

#endif
               SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_APP_DATA_REQUEST);
           }
       }
#endif

       SYS_rcvdPktCheck();

#ifdef LPWMN_COORD
#ifdef GW_ENA
       if (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_GW_RELAY_REQUEST
           && (!(SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_PENDING_FRAME_TRX_REQ)))  // Pending frame trx has highest priority
       {
           if (MAC_TX_MODULE_IS_IDLE())
           {
               GW_relayMsgToRemoteNode();
               SYS_globalEvtMsk1 &= ~(SYS_GLOBAL_EVT_GW_RELAY_REQUEST);
           }
       }
#endif
#endif
#ifdef NODE_HOST_IF_ENA
       if (SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NHI_PING_REQ
           && (!(SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_PENDING_FRAME_TRX_REQ))  // Pending frame trx has highest priority
           && (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND)))
       {
           if (MAC_TX_MODULE_IS_IDLE())
           {
        	   SYS_globalEvtMsk2 &= ~(SYS_GLOBAL_EVT_NHI_PING_REQ);
        	   NHI_sendPing();
           }
       }
#else

#ifdef UC_FU_ENA
#if defined(DEV_TYPE_RFD) || defined(DEV_TYPE_FFD)
       if (SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_PENDING_UC_FU_COMM
           && (!(SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_PENDING_FRAME_TRX_REQ))  // Pending frame trx has highest priority
           && (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND)))
       {
           if (MAC_TX_MODULE_IS_IDLE())
           {
               SYS_globalEvtMsk2 &= ~SYS_GLOBAL_EVT_PENDING_UC_FU_COMM;
               UC_FU_sendResp();
           }
       }
#endif
#endif

       // Check if RFD/FFD app wants to send out any data
       if (SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_PENDING_APP_DATA_REQ
           && (!(SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_PENDING_FRAME_TRX_REQ))  // Pending frame trx has highest priority
           && (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND)))
       {
           if (MAC_TX_MODULE_IS_IDLE())
           {
               SYS_globalEvtMsk2 &= ~(SYS_GLOBAL_EVT_PENDING_APP_DATA_REQ);
#ifdef DEV_TYPE_RFD
               RFD_APP_procPendDataReq();
#elif defined (DEV_TYPE_FFD)
               FFD_APP_procPendDataReq();
#endif
           }
       }
#endif

       SYS_rcvdPktCheck();

       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_ADP_DATA_CONFIRM
           && (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND)))
       {
           SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_ADP_DATA_CONFIRM);
#ifdef DEV_TYPE_RFD
           RFD_APP_evtHndlr(SYS_GLOBAL_EVT_ADP_DATA_CONFIRM,
                            &(ADP_cntxt.cnfrmSts));
#else
#ifdef NODE_HOST_IF_ENA
           NHI_evtHndlr(SYS_GLOBAL_EVT_ADP_DATA_CONFIRM,
                        &(ADP_cntxt.cnfrmSts));
#else
           APP_evtHndlr(SYS_GLOBAL_EVT_ADP_DATA_CONFIRM,
                        &(ADP_cntxt.cnfrmSts));
#endif
#endif
       }

       SYS_rcvdPktCheck();

       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_ADP_DATA_INDICATION
           && (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND)))
       {
           SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_ADP_DATA_INDICATION);
#ifdef DEV_TYPE_RFD
           RFD_APP_evtHndlr(SYS_GLOBAL_EVT_ADP_DATA_INDICATION,
                            &(ADP_cntxt.dataIndParams));

           SYS_rcvdPktCheck();
#else
#ifndef NODE_HOST_IF_ENA
           APP_evtHndlr(SYS_GLOBAL_EVT_ADP_DATA_INDICATION,
                        &(ADP_cntxt.dataIndParams));
#endif
#endif
       }

       SYS_rcvdPktCheck();

       if (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_ADP_TRSCN_PENDING
           && (!(SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_PENDING_FRAME_TRX_REQ))  // Pending frame trx has highest priority
           && (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND)))
       {
           if (MAC_TX_MODULE_IS_IDLE())
           {
               ADP_procPendingTrscns();
           }
       }

       SYS_rcvdPktCheck();

       // Bug fix - [email protected] - dec/23/14
       // MAC_TX_MODULE_CAN_RETRY_CSMA() check was missing
       if ((SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_MAC_RETRY_CCA)
           && (MAC_TX_MODULE_CAN_RETRY_CSMA()))
       {
           if (SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND)
               MAC_resetTxModState();
           else
           {
               SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_MAC_RETRY_CCA);
               MAC_evtHndlr(SYS_GLOBAL_EVT_MAC_RETRY_CCA);
           }
       }
#endif

       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_MAC_DATA_INDICATION)
       {
#ifdef DEV_TYPE_RFD
    	   if (SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_IMAGE_REFLASH_PENDING)
    	   {
    		   SYS_globalEvtMsk2 &= ~SYS_GLOBAL_EVT_IMAGE_REFLASH_PENDING;
    		   if (SYS_BD_HNDL_IS_VALID(MAC_cntxt.rcvdPktInfo.bdHndl))
    		   {
    			   SYS_freeMem(MAC_cntxt.rcvdPktInfo.bdHndl);
    			   MAC_cntxt.rcvdPktInfo.bdHndl = SYS_INV_BD_HDNL;
    		   }
    	   }
#endif

#ifdef DEV_TYPE_SNIFFER


#else
           ADP_evtHndlr(SYS_GLOBAL_EVT_MAC_DATA_INDICATION,
                        &(MAC_cntxt.rcvdPktInfo));

           SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_MAC_DATA_INDICATION);
#endif
       }

#ifndef DEV_TYPE_SNIFFER
#ifndef LPWMN_COORD
       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_MAC_SCAN_CONFIRM)
       {
            SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_MAC_SCAN_CONFIRM);
            NM_evtHndlr(SYS_GLOBAL_EVT_MAC_SCAN_CONFIRM,
                        (void *)&(MAC_cntxt.scanCnfrmParams));
       }

       if (SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_MAC_ASSOC_CONFIRM)
       {
            SYS_globalEvtMsk1 &= ~(SYS_GLOBAL_EVT_MAC_ASSOC_CONFIRM);
            NM_evtHndlr(SYS_GLOBAL_EVT_MAC_ASSOC_CONFIRM,
                        (void *)&(MAC_cntxt.assocCnfrmParams));
       }
#endif

#ifndef DEV_TYPE_RFD
       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_MAC_BCN_REQUEST
           && (!(SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_PENDING_FRAME_TRX_REQ))  // Pending frame trx has highest priority
           && (!(SYS_globalEvtMsk2 & SYS_GLOBAL_EVT_NODE_RESET_PEND)))
       {
           if (MAC_TX_MODULE_IS_IDLE())
           {
#ifdef RADIO_CC1101
               // <TODO> Find another way !!
               CC1101_insertTurnAroundDelay();
#endif
               SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_MAC_BCN_REQUEST);
               MAC_evtHndlr(SYS_GLOBAL_EVT_MAC_BCN_REQUEST);
           }
       }

       SYS_rcvdPktCheck();

       if (SYS_globalEvtMsk0 & SYS_GLOBAL_EVT_MAC_DATA_REQ_CMD_RCVD
           && (!(SYS_globalEvtMsk1 & SYS_GLOBAL_EVT_PENDING_FRAME_TRX_REQ)))  // Pending frame trx has highest priority
       {
           if (MAC_TX_MODULE_IS_IDLE())
           {
               SYS_globalEvtMsk0 &= ~(SYS_GLOBAL_EVT_MAC_DATA_REQ_CMD_RCVD);
               MAC_evtHndlr(SYS_GLOBAL_EVT_MAC_DATA_REQ_CMD_RCVD);
           }
       }

       SYS_rcvdPktCheck();
#endif
#endif
    }
}
Пример #4
0
void SYS_loop(void)
{
    SYS_init();

    __udpMain();
}