/***************************************************************************** Function: void WFSpiTxRx(void) Summary: Transmits and receives SPI bytes Description: Transmits and receives N bytes of SPI data. Precondition: None Parameters: p_txBuf - pointer to SPI tx data txLen - number of bytes to Tx p_rxBuf - pointer to where SPI rx data will be stored rxLen - number of SPI rx bytes caller wants copied to p_rxBuf Returns: None Remarks: Will clock out the larger of txLen or rxLen, and pad if necessary. *****************************************************************************/ void WFSpiTxRx(UINT8 *p_txBuf, UINT16 txLen, UINT8 *p_rxBuf, UINT16 rxLen) { #if defined(__18CXX) static UINT16 byteCount; /* avoid local variables in functions called from interrupt routine */ static UINT16 i; static UINT8 rxTrash; #else UINT16 byteCount; UINT16 i; UINT8 rxTrash; #endif #ifdef WF_DEBUG /* Cannot communicate with MRF24WB0M when it is in hibernate mode */ { static UINT8 state; /* avoid local vars in functions called from interrupt */ WF_GetPowerSaveState(&state); WF_ASSERT(state != WF_PS_HIBERNATE); } #endif /* total number of byte to clock is whichever is larger, txLen or rxLen */ byteCount = (txLen >= rxLen)?txLen:rxLen; for (i = 0; i < byteCount; ++i) { /* if still have bytes to transmit from tx buffer */ if (txLen > 0) { WF_SSPBUF = *p_txBuf++; --txLen; } /* else done writing bytes out from tx buffer */ else { WF_SSPBUF = 0xff; /* clock out a "don't care" byte */ } /* wait until tx/rx byte to completely clock out */ WaitForDataByte(); /* if still have bytes to read into rx buffer */ if (rxLen > 0) { *p_rxBuf++ = WF_SSPBUF; --rxLen; } /* else done reading bytes into rx buffer */ else { rxTrash = WF_SSPBUF; /* read and throw away byte */ } } /* end for loop */ }
/******************************************************************************* Function: BOOL iwconfigSetCb(void) Summary: Set the iwconfigCb structure Description: Set the iwconfigCb structure Parameters: None. Returns: TRUE or FALSE Remarks: None. *****************************************************************************/ BOOL iwconfigSetCb(void) { UINT8 cpId; if ( !iwconfigCbInitialized ) // first time call of iwconfigSetCb { memset(&iwconfigCb, 0, sizeof(iwconfigCb)); iwconfigCbInitialized = TRUE; } #if defined(WF_USE_POWER_SAVE_FUNCTIONS) WF_GetPowerSaveState(&iwconfigCb.powerSaveState); #endif if (iwconfigCb.powerSaveState == WF_PS_HIBERNATE) { WFConsolePrintRomStr("WF device hibernated", TRUE); return FALSE; } WF_CMGetConnectionState(&iwconfigCb.connState, &cpId); if ( iwconfigCb.cpId == WF_CURRENT_CPID_NONE ) { if ( cpId == WF_CURRENT_CPID_NONE ) { iwconfigCb.cpId = 1; // console demo only supports 1 CPID; don't create a new one here } else if ( cpId == WF_CURRENT_CPID_LIST ) { WFConsolePrintRomStr("Connection profile list not supported", TRUE); return FALSE; } else { iwconfigCb.cpId = cpId; // use the application-created profile } } else // WF_MIN_NUM_CPID <= iwconfigCb.cpId && iwconfigCb.cpId <= WF_MAX_NUM_CPID { if ( cpId == WF_CURRENT_CPID_NONE ) { // continue to use iwconfigCb.cpId } else if ( cpId == WF_CURRENT_CPID_LIST ) { WFConsolePrintRomStr("Conection profile list not supported", TRUE); WF_CPDelete(iwconfigCb.cpId); iwconfigCb.cpId = WF_CURRENT_CPID_NONE; return FALSE; } else if ( cpId != iwconfigCb.cpId ) { WF_CPDelete(iwconfigCb.cpId); iwconfigCb.cpId = cpId; // use the application-created profile } else // cpId == iwconfigCb.cpId { // contine to use iwconfigCb.cpId } } if ((iwconfigCb.connState == WF_CSTATE_NOT_CONNECTED) || (iwconfigCb.connState == WF_CSTATE_CONNECTION_PERMANENTLY_LOST)) { iwconfigCb.isIdle = TRUE; } else { iwconfigCb.isIdle = FALSE; } return TRUE; }