EFM32 Pearl Gecko Software Documentation  efm32pg1-doc-4.2.1
ezradio_comm.c
Go to the documentation of this file.
1 /**************************************************************************/
33 #include <stdint.h>
34 #include <stdarg.h>
35 #include "em_gpio.h"
36 #include "gpiointerrupt.h"
37 
38 #include "ezradio_hal.h"
39 #include "ezradio_comm.h"
40 
43 
52 uint8_t ezradio_comm_GetResp(uint8_t byteCount, uint8_t* pData)
53 {
54  uint8_t ctsVal = 0;
55  uint16_t errCnt = EZRADIO_CTS_TIMEOUT;
56 
57  while (errCnt != 0) //wait until radio IC is ready with the data
58  {
60  ezradio_hal_SpiWriteByte(0x44); //read CMD buffer
61  ezradio_hal_SpiReadByte(&ctsVal);
62  if (ctsVal == 0xFF)
63  {
64  if (byteCount)
65  {
66  ezradio_hal_SpiReadData(byteCount, pData);
67  }
69  break;
70  }
72  errCnt--;
73  }
74 
75  if (errCnt == 0)
76  {
77  while(1)
78  {
79  /* ERROR!!!! CTS should never take this long. */
80  #ifdef ezradio_comm_ERROR_CALLBACK
81  ezradio_comm_ERROR_CALLBACK();
82  #endif
83  }
84  }
85 
86  if (ctsVal == 0xFF)
87  {
89  }
90 
91  return ctsVal;
92 }
93 
100 void ezradio_comm_SendCmd(uint8_t byteCount, uint8_t* pData)
101 {
102  while (!ezradio_comm_CtsWentHigh)
103  {
105  }
107  ezradio_hal_SpiWriteData(byteCount, pData);
110 }
111 
120 void ezradio_comm_ReadData(uint8_t cmd, uint8_t pollCts, uint8_t byteCount, uint8_t* pData)
121 {
122  if(pollCts)
123  {
125  {
127  }
128  }
131  ezradio_hal_SpiReadData(byteCount, pData);
134 }
135 
136 
145 void ezradio_comm_WriteData(uint8_t cmd, uint8_t pollCts, uint8_t byteCount, uint8_t* pData)
146 {
147  if(pollCts)
148  {
150  {
152  }
153  }
156  ezradio_hal_SpiWriteData(byteCount, pData);
159 }
160 
166 uint8_t ezradio_comm_PollCTS(void)
167 {
168 #ifdef RADIO_USER_CFG_USE_GPIO1_FOR_CTS
169  while(!ezradio_hal_Gpio1Level())
170  {
171  /* Wait...*/
172  }
174  return 0xFF;
175 #else
176  return ezradio_comm_GetResp(0, 0);
177 #endif
178 }
179 
184 {
186 }
187 
198 uint8_t ezradio_comm_SendCmdGetResp(uint8_t cmdByteCount, uint8_t* pCmdData, uint8_t respByteCount, uint8_t* pRespData)
199 {
200  ezradio_comm_SendCmd(cmdByteCount, pCmdData);
201  return ezradio_comm_GetResp(respByteCount, pRespData);
202 }
203 
void ezradio_hal_SetNsel(void)
Definition: ezradio_hal.c:154
void ezradio_comm_ClearCTS()
Definition: ezradio_comm.c:183
This file contains EZRadio HAL.
void ezradio_hal_SpiWriteData(uint8_t byteCount, uint8_t *pData)
Definition: ezradio_hal.c:195
General Purpose IO (GPIO) peripheral API.
void ezradio_hal_SpiWriteByte(uint8_t byteToWrite)
Definition: ezradio_hal.c:174
uint8_t ezradio_comm_PollCTS(void)
Definition: ezradio_comm.c:166
void ezradio_hal_SpiReadData(uint8_t byteCount, uint8_t *pData)
Definition: ezradio_hal.c:206
uint8_t ezradio_comm_GetResp(uint8_t byteCount, uint8_t *pData)
Definition: ezradio_comm.c:52
uint8_t ezradio_comm_SendCmdGetResp(uint8_t cmdByteCount, uint8_t *pCmdData, uint8_t respByteCount, uint8_t *pRespData)
Definition: ezradio_comm.c:198
void ezradio_hal_SpiReadByte(uint8_t *readByte)
Definition: ezradio_hal.c:184
void ezradio_comm_WriteData(uint8_t cmd, uint8_t pollCts, uint8_t byteCount, uint8_t *pData)
Definition: ezradio_comm.c:145
GPIOINT API definition.
#define EZRADIO_CTS_TIMEOUT
Definition: ezradio_comm.h:58
void ezradio_hal_ClearNsel(void)
Definition: ezradio_hal.c:146
void ezradio_comm_ReadData(uint8_t cmd, uint8_t pollCts, uint8_t byteCount, uint8_t *pData)
Definition: ezradio_comm.c:120
This file contains the EZRadio communication layer.
void ezradio_comm_SendCmd(uint8_t byteCount, uint8_t *pData)
Definition: ezradio_comm.c:100
uint8_t ezradio_comm_CtsWentHigh
Definition: ezradio_comm.c:42