/*! * Gets a command response from the radio chip * * @param cmd Command ID * @param pollCts Set to poll CTS * @param byteCount Number of bytes to get from the radio chip * @param pData Pointer to where to put the data */ void radio_comm_WriteData(U8 cmd, U8 pollCts, U8 byteCount, U8* pData) { if(pollCts) { while(!ctsWentHigh) { radio_comm_PollCTS(); } } radio_hal_ClearNsel(); radio_hal_SpiWriteByte(cmd); radio_hal_SpiWriteData(byteCount, pData); radio_hal_SetNsel(); ctsWentHigh = 0; }
/*! * Sends a command to the radio chip * * @param byteCount Number of bytes in the command to send to the radio device * @param pData Pointer to the command to send. */ void radio_comm_SendCmd(U8 byteCount, U8* pData) { /* There was a bug in A1 hardware that will not handle 1 byte commands. It was supposedly fixed in B0 but the fix didn't make it at the last minute, so here we go again */ if (byteCount == 1) byteCount++; while (!ctsWentHigh) { radio_comm_PollCTS(); } radio_hal_ClearNsel(); radio_hal_SpiWriteData(byteCount, pData); radio_hal_SetNsel(); ctsWentHigh = 0; }
void radio_comm_ReadData(U8 cmd, uint8 pollCts, U16 byteCount, U8* pData) { if(pollCts) { while(!ctsWentHigh) { radio_comm_PollCTS(); } } radio_hal_ClearNsel(); //int TimBaseVal=GetTimingBase(); radio_hal_SpiWriteByte(cmd); radio_hal_SpiReadData(byteCount, pData); radio_hal_SetNsel(); ctsWentHigh = 0; }
void si4455_ezconfig_check(U16 CHECKSUM) { /* Do not check CTS */ radio_hal_ClearNsel(); /* Command byte */ radio_hal_SpiWriteByte(SI4455_CMD_ID_EZCONFIG_CHECK); /* CRC */ radio_hal_SpiWriteByte((U16) CHECKSUM >> 8u); radio_hal_SpiWriteByte((U16) CHECKSUM & 0x00FF); radio_hal_SetNsel(); /* Get the respoonse from the radio chip */ radio_comm_GetResp(1u, radioCmd); }
U8 radio_comm_GetResp(U8 byteCount, U8* pData) { SEGMENT_VARIABLE(ctsVal = 0u, U8); SEGMENT_VARIABLE(errCnt = RADIO_CTS_TIMEOUT, U16); while (errCnt != 0) //wait until radio IC is ready with the data { radio_hal_ClearNsel(); radio_hal_SpiWriteByte(0x44); //read CMD buffer ctsVal = radio_hal_SpiReadByte(); if (ctsVal == 0xFF) { if (byteCount) { radio_hal_SpiReadData(byteCount, pData); } radio_hal_SetNsel(); break; } radio_hal_SetNsel(); errCnt--; } if (errCnt == 0) { while(1) { /* ERROR!!!! CTS should never take this long. */ #ifdef RADIO_COMM_ERROR_CALLBACK RADIO_COMM_ERROR_CALLBACK(); #endif } } if (ctsVal == 0xFF) { ctsWentHigh = 1; } return ctsVal; }