ezradio_api_lib_add.c

00001 /***************************************************************************/
00034 #include <stdint.h>
00035 #include <stdarg.h>
00036 #include "em_gpio.h"
00037 #include "gpiointerrupt.h"
00038 
00039 #include "ezradio_cmd.h"
00040 #include "ezradio_prop.h"
00041 #include "ezradio_comm.h"
00042 #include "ezradio_hal.h"
00043 #include "ezradio_api_lib.h"
00044 #include "ezradio_api_lib_add.h"
00045 
00050 EZRADIO_ConfigRet_t ezradio_configuration_init(const uint8_t* pSetPropCmd)
00051 {
00052   uint8_t col;
00053   uint8_t response;
00054   uint8_t numOfBytes;
00055 
00056   /* While cycle as far as the pointer points to a command */
00057   while (*pSetPropCmd != 0x00)
00058   {
00059     /* Commands structure in the array:
00060      * --------------------------------
00061      * LEN | <LEN length of data>
00062      */
00063 
00064     numOfBytes = *pSetPropCmd++;
00065 
00066     if (numOfBytes > 16u)
00067     {
00068       /* Number of command bytes exceeds maximal allowable length */
00069       return EZRADIO_CONFIG_COMMAND_ERROR;
00070     }
00071 
00072     for (col = 0u; col < numOfBytes; col++)
00073     {
00074       ezradioCmd[col] = *pSetPropCmd;
00075       pSetPropCmd++;
00076     }
00077 
00078     if (ezradio_comm_SendCmdGetResp(numOfBytes, ezradioCmd, 1, &response) != 0xFF)
00079     {
00080       /* Timeout occured */
00081       return EZRADIO_CONFIG_CTS_TIMEOUT;
00082     }
00083 
00084     if (ezradio_hal_NirqLevel() == 0)
00085     {
00086       /* Get and clear all interrupts.  An error has occured... */
00087       ezradio_get_int_status(0, 0, 0);
00088       if (ezradioReply.GET_INT_STATUS.CHIP_PEND & EZRADIO_CMD_GET_CHIP_STATUS_REP_CHIP_PEND_CMD_ERROR_PEND_MASK)
00089       {
00090         return EZRADIO_CONFIG_COMMAND_ERROR;
00091       }
00092     }
00093   }
00094 
00095   return EZRADIO_CONFIG_SUCCESS;
00096 }
00097 
00098 #ifdef EZRADIO_DRIVER_EXTENDED_SUPPORT
00099 /* Extended driver support functions */
00100 
00101 #ifdef EZRADIO_DRIVER_FULL_SUPPORT
00102 /* Full driver support functions */
00103 
00109 void ezradio_get_adc_reading( uint8_t adc_en, uint8_t adc_cfg )
00110 {
00111     ezradioCmd[0] = EZRADIO_CMD_ID_GET_ADC_READING;
00112     ezradioCmd[1] = adc_en;
00113     ezradioCmd[1] = adc_cfg;
00114 
00115     ezradio_comm_SendCmdGetResp( EZRADIO_CMD_ARG_COUNT_GET_ADC_READING,
00116                               ezradioCmd,
00117                               EZRADIO_CMD_REPLY_COUNT_GET_ADC_READING,
00118                               ezradioCmd );
00119 
00120     ezradioReply.GET_ADC_READING.GPIO_ADC         = ((uint16_t)ezradioCmd[0] << 8) & 0xFF00;
00121     ezradioReply.GET_ADC_READING.GPIO_ADC        |=  (uint16_t)ezradioCmd[1] & 0x00FF;
00122     ezradioReply.GET_ADC_READING.BATTERY_ADC      = ((uint16_t)ezradioCmd[2] << 8) & 0xFF00;
00123     ezradioReply.GET_ADC_READING.BATTERY_ADC     |=  (uint16_t)ezradioCmd[3] & 0x00FF;
00124     ezradioReply.GET_ADC_READING.TEMP_ADC         = ((uint16_t)ezradioCmd[4] << 8) & 0xFF00;
00125     ezradioReply.GET_ADC_READING.TEMP_ADC        |=  (uint16_t)ezradioCmd[5] & 0x00FF;
00126 }
00127 
00136 void ezradio_ircal(uint8_t searching_step_size, uint8_t searching_rssi_avg, uint8_t rx_chain_setting1, uint8_t rx_chain_setting2)
00137 {
00138     ezradioCmd[0] = EZRADIO_CMD_ID_IRCAL;
00139     ezradioCmd[1] = searching_step_size;
00140     ezradioCmd[2] = searching_rssi_avg;
00141     ezradioCmd[3] = rx_chain_setting1;
00142     ezradioCmd[4] = rx_chain_setting2;
00143 
00144     ezradio_comm_SendCmd( EZRADIO_CMD_ARG_COUNT_IRCAL, ezradioCmd);
00145 }
00146 
00153 void ezradio_ircal_manual(uint8_t ircal_amp, uint8_t ircal_ph)
00154 {
00155     ezradioCmd[0] = EZRADIO_CMD_ID_IRCAL_MANUAL;
00156     ezradioCmd[1] = ircal_amp;
00157     ezradioCmd[2] = ircal_ph;
00158 
00159     ezradio_comm_SendCmdGetResp( EZRADIO_CMD_ARG_COUNT_IRCAL_MANUAL,
00160                               ezradioCmd,
00161                               EZRADIO_CMD_REPLY_COUNT_IRCAL_MANUAL,
00162                               ezradioCmd );
00163 
00164     ezradioReply.IRCAL_MANUAL.IRCAL_AMP_REPLY   = ezradioCmd[0];
00165     ezradioReply.IRCAL_MANUAL.IRCAL_PH_REPLY    = ezradioCmd[1];
00166 }
00167 
00180 void ezradio_tx_hop(uint8_t inte, uint8_t frac2, uint8_t frac1, uint8_t frac0, uint8_t vco_cnt1, uint8_t vco_cnt0, uint8_t pll_settle_time1, uint8_t pll_settle_time0)
00181 {
00182     ezradioCmd[0] = EZRADIO_CMD_ID_TX_HOP;
00183     ezradioCmd[1] = inte;
00184     ezradioCmd[2] = frac2;
00185     ezradioCmd[3] = frac1;
00186     ezradioCmd[4] = frac0;
00187     ezradioCmd[5] = vco_cnt1;
00188     ezradioCmd[6] = vco_cnt0;
00189     ezradioCmd[7] = pll_settle_time1;
00190     ezradioCmd[8] = pll_settle_time0;
00191 
00192     ezradio_comm_SendCmd( EZRADIO_CMD_ARG_COUNT_TX_HOP, ezradioCmd );
00193 }
00194 
00205 void ezradio_rx_hop(uint8_t inte, uint8_t frac2, uint8_t frac1, uint8_t frac0, uint8_t vco_cnt1, uint8_t vco_cnt0)
00206 {
00207     ezradioCmd[0] = EZRADIO_CMD_ID_RX_HOP;
00208     ezradioCmd[1] = inte;
00209     ezradioCmd[2] = frac2;
00210     ezradioCmd[3] = frac1;
00211     ezradioCmd[4] = frac0;
00212     ezradioCmd[5] = vco_cnt1;
00213     ezradioCmd[6] = vco_cnt0;
00214 
00215     ezradio_comm_SendCmd( EZRADIO_CMD_ARG_COUNT_RX_HOP, ezradioCmd );
00216 }
00217 
00218 #endif /* EZRADIO_DRIVER_FULL_SUPPORT */
00219 
00220 #endif /* EZRADIO_DRIVER_EXTENDED_SUPPORT */