text: /*!
   * \file      sx1276-board.h
   *
   * \brief     Target board SX1276 driver implementation
   *
   * \copyright Revised BSD License, see section \ref LICENSE.
   *
   * \code
   *                ______                              _
   *               / _____)             _              | |
   *              ( (____  _____ ____ _| |_ _____  ____| |__
   *               \____ \| ___ |    (_   _) ___ |/ ___)  _ \
   *               _____) ) ____| | | || |_| ____( (___| | | |
   *              (______/|_____)_|_|_| \__)_____)\____)_| |_|
   *              (C)2013-2017 Semtech
   *
   * \endcode
   *
   * \author    Miguel Luis ( Semtech )
   *
   * \author    Gregory Cristian ( Semtech )
   */
  #ifndef __SX1276_BOARD_H__
  #define __SX1276_BOARD_H__
  
  #include <stdint.h>
  #include <stdbool.h>
  #include "sx1276/sx1276.h"
  
  /*!
   * \brief Radio hardware registers initialization definition
   *
   * \remark Can be automatically generated by the SX1276 GUI (not yet implemented)
   */
  #define RADIO_INIT_REGISTERS_VALUE                \
  {                                                 \
      { MODEM_FSK , REG_LNA                , 0x23 },\
      { MODEM_FSK , REG_RSSICONFIG         , 0xD2 },\
      { MODEM_FSK , REG_AFCFEI             , 0x01 },\
      { MODEM_FSK , REG_PREAMBLEDETECT     , 0xAA },\
      { MODEM_FSK , REG_OSC                , 0x07 },\
      { MODEM_FSK , REG_FIFOTHRESH         , 0x9F },\
      { MODEM_FSK , REG_IMAGECAL           , 0x02 },\
  }                                                 \
  
  #define RF_MID_BAND_THRESH                          525000000
  
  /*!
   * \brief Resets the radio
   */
  void SX1276Reset( void );
  
  /*!
   * \brief Enables/disables the TCXO if available on board design.
   *
   * \param [IN] state TCXO enabled when true and disabled when false.
   */
  void SX1276SetBoardTcxo( bool state );
  
  /*!
   * \brief Initializes the RF Switch I/Os pins interface
   */
  void SX1276AntSwInit( void );
  
  /*!
   * \brief De-initializes the RF Switch I/Os pins interface
   *
   * \remark Needed to decrease the power consumption in MCU low power modes
   */
  void SX1276AntSwDeInit( void );
  
  /*!
   * \brief Controls the antenna switch if necessary.
   *
   * \remark see errata note
   *
   * \param [IN] opMode Current radio operating mode
   */
  void SX1276SetAntSw( uint8_t opMode );
  
  /*!
   * \brief Initializes the DIO I/Os pins interface
   */
  void SX1276DioInit( void );
  
  /*!
   * \brief De-initializes the DIO I/Os pins interface
   *
   * \remark Needed to decrease the power consumption in MCU low power modes
   */
  void SX1276DioDeInit( void );
  
  /*!
   * \brief Sets the radio output power.
   *
   * \param [IN] power Sets the RF output power
   */
  void SX1276SetRfTxPower( int8_t power );
  
  /*!
   * \brief Checks if the given RF frequency is supported by the hardware
   *
   * \param [IN] frequency RF frequency to be checked
   * \retval isSupported [true: supported, false: unsupported]
   */
  bool SX1276CheckRfFrequency( uint32_t frequency );
  
  /*!
   * \brief Gets the Defines the time required for the TCXO to wakeup [ms].
   *
   * \retval time Board TCXO wakeup time in ms.
   */
  uint32_t SX1276GetBoardTcxoWakeupTime( void );
  
  /*!
   * \brief Acquires the SPI interface
   */
  void SX1276Acquire( void );
  
  /*!
   * \brief Releases the SPI interface
   */
  void SX1276Release( void );
  
  /*!
   * \brief Writes the radio register at the specified address
   *
   * \param [IN]: addr Register address
   * \param [IN]: data New register value
   */
  void SX1276Write( uint8_t addr, uint8_t data );
  
  /*!
   * \brief Reads the radio register at the specified address
   *
   * \param [IN]: addr Register address
   * \retval data Register value
   */
  uint8_t SX1276Read( uint8_t addr );
  
  /*!
   * \brief Writes multiple radio registers starting at address
   *
   * \param [IN] addr   First Radio register address
   * \param [IN] buffer Buffer containing the new register's values
   * \param [IN] size   Number of registers to be written
   */
  void SX1276WriteBuffer( uint8_t addr, uint8_t *buffer, uint8_t size );
  
  /*!
   * \brief Reads multiple radio registers starting at address
   *
   * \param [IN] addr First Radio register address
   * \param [OUT] buffer Buffer where to copy the registers data
   * \param [IN] size Number of registers to be read
   */
  void SX1276ReadBuffer( uint8_t addr, uint8_t *buffer, uint8_t size );
  
  /*!
   * Radio hardware and global parameters
   */
  extern SX1276_t SX1276;
  
  #endif // __SX1276_BOARD_H__
  