static void ProcessNotification(const void* hIf) { #if defined(TCPIP_IF_MRF24W) mrf_txEvents = MRF24W_GetTrafficEvents(&mrf_txEventInfo); mrf_mgmtEvents = MRF24W_GetMgmtEvents(&mrf_mgmtEventInfo); mrf_EventCnt++; if(mrf_mgmtEvents) { WF_ProcessEvent(mrf_mgmtEvents, mrf_mgmtEventInfo); } #endif }
static void EventCheck() { t_event event; // if event queue empty then nothing to do if (isEventQEmpty()) { return; } // get next event from queue EventDequeue(&event); // notify application of event WF_ProcessEvent(event.eventType, event.eventData); }
/***************************************************************************** * FUNCTION: ProcessInterruptServiceResult * * RETURNS: N/A * * PARAMS: * N/A * * * NOTES: Processes EXINT from MRF24WB0M. Called by WFProcess(). *****************************************************************************/ static void ProcessInterruptServiceResult(void) { UINT8 hostIntRegValue; UINT8 hostIntMaskRegValue; UINT8 hostInt; /* Ensure the MRF24WB0M stays awake (only applies if PS-Poll was enabled) */ EnsureWFisAwake(); /* read hostInt register to determine cause of interrupt */ hostIntRegValue = Read8BitWFRegister(WF_HOST_INTR_REG); // OR in the saved interrupts during the time when we were waiting for raw complete, set by WFEintHandler() hostIntRegValue |= g_HostIntSaved; // done with the saved interrupts, clear variable g_HostIntSaved = 0; hostIntMaskRegValue = Read8BitWFRegister(WF_HOST_MASK_REG); // AND the two registers together to determine which active, enabled interrupt has occurred hostInt = hostIntRegValue & hostIntMaskRegValue; // if received a level 2 interrupt (should not happen!) if((hostInt & WF_HOST_INT_MASK_INT2) == WF_HOST_INT_MASK_INT2) { /* read the 16 bit interrupt register */ /* CURRENTLY unhandled interrupt */ WF_ASSERT(FALSE); WF_EintEnable(); } // else if got a FIFO 1 Threshold interrupt (Management Fifo) else if((hostInt & WF_HOST_INT_MASK_FIFO_1_THRESHOLD) == WF_HOST_INT_MASK_FIFO_1_THRESHOLD) { /* clear this interrupt */ Write8BitWFRegister(WF_HOST_INTR_REG, WF_HOST_INT_MASK_FIFO_1_THRESHOLD); // notify MAC state machine that management message needs to be processed g_MgmtReadMsgReady = TRUE; } // else if got a FIFO 0 Threshold Interrupt (Data Fifo) else if((hostInt & WF_HOST_INT_MASK_FIFO_0_THRESHOLD) == WF_HOST_INT_MASK_FIFO_0_THRESHOLD) { /* clear this interrupt */ Write8BitWFRegister(WF_HOST_INTR_REG, WF_HOST_INT_MASK_FIFO_0_THRESHOLD); g_HostRAWDataPacketReceived = TRUE; /* this global flag is used in MACGetHeader() to determine a received data packet */ #if defined(WF_USE_DATA_TX_RX_FUNCTIONS) { UINT16 rxDataPacketLength; /* determine length of packet and signal the rx data packet event */ rxDataPacketLength = Read16BitWFRegister(WF_HOST_RFIFO_BCNT0_REG) & 0x0fff; /* LS 12 bits are the data length */ WF_ProcessEvent(WF_EVENT_RX_PACKET_RECEIVED, rxDataPacketLength); } #endif } // else got a Host interrupt that we don't handle else if(hostInt) { /* unhandled interrupt */ /* clear this interrupt */ Write8BitWFRegister(WF_HOST_INTR_REG, hostInt); WF_EintEnable(); } // we got a spurious interrupt (no bits set in register) else { /* spurious interrupt */ WF_EintEnable(); } }