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); } }
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(); } } }
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 } }
void SYS_loop(void) { SYS_init(); __udpMain(); }