Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

mbed-dev/targets/TARGET_Silicon_Labs/TARGET_SL_RAIL/efr32-rf-driver/rail/pa.h

Committer:
sahilmgandhi
Date:
2017-06-03
Revision:
46:b156ef445742
Parent:
18:6a4db94011d3

File content as of revision 46:b156ef445742:

/***************************************************************************//**
 * @file pa.h
 * @brief RADIO PA API
 *******************************************************************************
 * @section License
 * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
 *******************************************************************************
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 *
 * 1. The origin of this software must not be misrepresented; you must not
 *    claim that you wrote the original software.
 * 2. Altered source versions must be plainly marked as such, and must not be
 *    misrepresented as being the original software.
 * 3. This notice may not be removed or altered from any source distribution.
 *
 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
 * obligation to support this Software. Silicon Labs is providing the
 * Software "AS IS", with no express or implied warranties of any kind,
 * including, but not limited to, any implied warranties of merchantability
 * or fitness for any particular purpose or warranties against infringement
 * of any proprietary rights of a third party.
 *
 * Silicon Labs will not be liable for any consequential, incidental, or
 * special damages, or any other relief, or for any claim by any third party,
 * arising from your use of this Software.
 *
 ******************************************************************************/
#ifndef __RADIO_PA_H
#define __RADIO_PA_H

#include <stdint.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/***************************************************************************//**
 * @addtogroup Chip_Specific
 * @{
 ******************************************************************************/

/***************************************************************************//**
 * @addtogroup EFR32xG1x_PA
 * @{
 ******************************************************************************/

/*******************************************************************************
 ****************************   CONFIGURATION   ********************************
 ******************************************************************************/
/** Scaling factor applied to all dBm power level inputs and outputs *   */
#define PA_SCALING_FACTOR     10

/** 
 * @brief Selection of the rf power amplifier (PA) to use
 */
typedef enum RADIO_PASel
{
    /** High power PA */
    PA_SEL_2P4_HP,
    /** Low power PA */
    PA_SEL_2P4_LP,
    /** SubGig PA*/
    PA_SEL_SUBGIG,
    /** Invalid PA Selection */
    PA_SEL_INVALID
} RADIO_PASel_t;

/**
 * @brief Selection should match the configuration of the voltage on the vPa pin
 *        of the chip.
 */
typedef enum RADIO_PAVoltMode
{
    /** Vpa = Vbat = 3.3V */
    PA_VOLTMODE_VBAT,
    /** Vpa = DCDC Vout = 1.8V */
    PA_VOLTMODE_DCDC
} RADIO_PAVoltMode_t;

/** 
 * @brief Configuration structure for the rf power amplifier (PA)
 */
typedef struct RADIO_PAInit {
  /** Power Amplifier mode */
  RADIO_PASel_t paSel;
  /** Power Amplifier vPA Voltage mode */
  RADIO_PAVoltMode_t voltMode;
  /** Desired output power in dBm * \ref PA_SCALING_FACTOR */
  int16_t power;
  /** Output power offset in dBm * \ref PA_SCALING_FACTOR */
  int16_t offset;
  /** Desired ramp time in us */
  uint16_t rampTime;
} RADIO_PAInit_t;

/*******************************************************************************
 ******************************   PROTOTYPES   *********************************
 ******************************************************************************/

/**
 * @brief
 *   Initilize the PA settings based on the settings provided in the paInit
 *   structure.
 *
 * @param[in] paInit
 *   Pointer to a structure containing the desired PA configuration settings.
 *
 * @return
 *   True if the settings were accepted.
 *   False if settings were invalid.
 *
 * @warning
 *   The radio should not be transmitting when this function is called!
*/
bool RADIO_PA_Init(RADIO_PAInit_t * paInit);

/**
 * @brief
 *   Returns the current power level of transmit power
 *
 * @return
 *   Current power level in dBm * \ref PA_SCALING_FACTOR
 */
int32_t PA_OutputPowerGet(void);

/**
 * @brief
 *   Sets the output power of the PA.
 *
 *   Each PA has distinct maximum power, minimum power, and power step sizes.
 *   This API will calculate the best pa output power level setting to acheieve
 *   the desired output power.
 *
 * @note
 *   Board and chip variations will affect the accuracy of this API.  Use
 *   of the RADIO_PAInit_t.offset paramter can help account for this variation.
 *
 * @param[in] power
 *   Power value in dBm * \ref PA_SCALING_FACTOR
 *
 *   Examples with \ref PA_SCALING_FACTOR of 10:
 *     - 10  dBm --> 100
 *     - 5.5 dBm -->  55
 *
 * @return
 *   Returns the actual power that was set in dBm * \ref PA_SCALING_FACTOR
 *
 * @warning
 *   The radio should not be transmitting when this function is called!
 */
int32_t PA_OutputPowerSet(int32_t power);

/**
 * @brief
 *   Set the maximum possible output power for the selected PA.
 *
 * @return
 *   Returns the actual power that was set in dBm * \ref PA_SCALING_FACTOR
 *
 * @warning
 *   The radio should not be transmitting when this function is called!
 */
int32_t PA_MaxOutputPowerSet(void);

/**
 * @brief
 *   Return the current ramp time in microseconds
 *
 * @return
 *   Current ramp time in microseconds
 */
uint32_t PA_RampTimeGet(void);

/**
 * @brief
 *   Sets up the ramp configuration so that it best matches the given ramp time
 *
 * @details
 *   Each PA has a distinct ramp level and ramp rate that can be used to
 *   achieve various ramp times.  This API will pick the ramp rate that closest
 *   approximates the desired ramp time.
 *
 * @param[in] ramptime
 *   Desired ramp time in microseconds
 *
 * @return
 *   The actual ramp time that was set in microseconds.
 *
 * @warning
 *   The radio should not be transmitting when this function is called!
 */
uint32_t PA_RampTimeSet(uint32_t ramptime);

/***************************************************************************//**
 * @addtogroup EFR32xG1x_PA_Advanced
 * @{
 ******************************************************************************/

/**
 * @brief
 *   Set PACTUNE value for TX and RX mode.
 *
 *   This value can vary depending on band and match and board design.
 *
 * @param[in] txPaCtuneValue
 *   Transmit value for pa ctune
 * @param[in] rxPaCtuneValue
 *   Receive value for pa ctune
 *
 * @note PACTUNE will reset to default values when RADIO_PA_Init() or
 *       RAIL_RadioConfig() are called.
 *
 * @warning
 *   The radio should not be transmitting when this function is called!
 */
void PA_CTuneSet(uint8_t txPaCtuneValue, uint8_t rxPaCtuneValue);

/**
 * @brief
 *   Set the output power level based on power steps available in the chosen PA.
 *
 * @details
 *   Each PA has distinct maximum power, minimum power, and power step sizes.
 *   This API allows direct access to these power steps to tune between the
 *   maximum and minimum output power the selected PA is capable of.
 *
 * @param[in] pwrLevel
 *   Output power level.  Note that the maximum power level will change
 *   depending on PA selection.
 * @param[in]  boostMode
 *   Output boost mode.  Some PA selections have a mode that will increase the
 *   output power for each step if this is enabled.
 *
 * @return
 *   MSB Configured boost mode. \n
 *   LSB Configured power level
 *
 * @warning
 *   The radio should not be transmitting when this function is called!
 */
uint16_t PA_PowerLevelSet(uint8_t pwrLevel, uint8_t boostMode);

/**
 * @brief
 *   Optimize the PA settings based on expected output power level.
 *
 * @details
 *   This API optimizes the current consumption of the radio based on the
 *   provided output power.  This is only necessary when output power is
 *   controlled by PA_PowerLevelSet().
 *
 * @param[in] power
 *   Power value in dBm * \ref PA_SCALING_FACTOR
 *
 * @warning
 *   The radio should not be transmitting when this function is called!
 */
void PA_PowerLevelOptimize(int32_t power);

/** @} (end addtogroup EFR32xG1x_PA_Advanced) */
/** @} (end addtogroup EFR32xG1x_PA) */
/** @} (end addtogroup Chip_Specific) */

#ifdef __cplusplus
}
#endif


#endif /* __RADIO_PA_H */