SX1276GenericLib to support sx1276 bassed LoRa modules, including HopeRF RFM95, Murata CMWX1ZZABZ and Semtech SX1276MB1MAS/SX1276MB1LAS modules

Dependents:   DISCO-L072CZ-LRWAN1_LoRa_PingPong DISCO-L072CZ-LRWAN1_LoRa_PingPong DISCO-L072CZ-LRWAN1_LoRa_PingPong DISCO-L072CZ-LRWAN1_LoRa_USB_Rx ... more

Fork of SX1276Lib by Semtech

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers sx1276-mbed-hal.h Source File

sx1276-mbed-hal.h

00001 /*
00002  / _____)             _              | |
00003 ( (____  _____ ____ _| |_ _____  ____| |__
00004  \____ \| ___ |    (_   _) ___ |/ ___)  _ \
00005  _____) ) ____| | | || |_| ____( (___| | | |
00006 (______/|_____)_|_|_| \__)_____)\____)_| |_|
00007     (C) 2014 Semtech
00008 
00009 Description: -
00010 
00011 License: Revised BSD License, see LICENSE.TXT file include in the project
00012 
00013 Maintainers: Miguel Luis, Gregory Cristian and Nicolas Huguenin
00014 */
00015 
00016 /*
00017  * additional development to make it more generic across multiple OS versions
00018  * (c) 2017 Helmut Tschemernjak
00019  * 30826 Garbsen (Hannover) Germany
00020  */
00021 
00022 #ifndef __SX1276_MBED_HAL_H__
00023 #define __SX1276_MBED_HAL_H__
00024 
00025 
00026 #include "sx1276.h"
00027 
00028 
00029 #ifdef __MBED__
00030 #define XSPI    SPI
00031 #endif
00032 
00033 #if defined(DEVICE_LPTICKER) || defined(DEVICE_LOWPOWERTIMER) // LOWPOWERTIMER in older mbed versions
00034  #define MyTimeout LowPowerTimeout
00035 #else
00036  #define MyTimeout Timeout
00037 #endif
00038 
00039 /*!
00040  * Actual implementation of a SX1276 radio, includes some modifications to make it
00041  * compatible with the MB1 LAS board
00042  */
00043 class SX1276Generic  : public SX1276 
00044 {
00045 protected:
00046     /*!
00047      * Antenna switch GPIO pins objects
00048      */
00049     DigitalOut *_antSwitchPwr ;
00050     DigitalOut *_antSwitch;
00051     DigitalOut *_antSwitchTX;
00052     DigitalOut *_antSwitchTXBoost;
00053 
00054     /*!
00055      * SX1276 Reset pin
00056      */
00057     DigitalInOut *_reset ;
00058     
00059     /*!
00060      * TCXO being used with the Murata Module
00061      */
00062     DigitalOut *_tcxo ;
00063 
00064     /*!
00065      * SPI Interface
00066      */
00067     XSPI *_spi ; // mosi, miso, sclk
00068     DigitalOut *_nss;
00069     
00070     /*!
00071      * SX1276 DIO pins
00072      */
00073     InterruptIn *_dio0 ;
00074     InterruptIn *_dio1;
00075     InterruptIn *_dio2;
00076     InterruptIn *_dio3;
00077     InterruptIn *_dio4;
00078     DigitalIn *_dio5;
00079     
00080     /*!
00081      * Tx and Rx timers
00082      */
00083     MyTimeout txTimeoutTimer ;
00084     MyTimeout rxTimeoutTimer;
00085     MyTimeout rxTimeoutSyncWord;
00086     
00087     
00088 private:
00089     /*!
00090      * triggers definition
00091      */
00092     typedef void (SX1276Generic ::*Trigger)(void);
00093     static const int PWR_OFF = 1;
00094     static const int PWR_ON = 0;
00095     
00096 
00097 public:
00098     SX1276Generic ( RadioEvents_t *events, BoardType_t board,
00099             PinName mosi, PinName miso, PinName sclk, PinName nss, PinName reset,
00100             PinName dio0, PinName dio1, PinName dio2, PinName dio3, PinName dio4, PinName dio5,
00101             PinName antSwitch = NC, PinName antSwitchTX = NC, PinName antSwitchTXBoost = NC, PinName tcxo = NC);
00102 
00103     
00104     SX1276Generic ( RadioEvents_t *events );
00105 
00106     virtual ~SX1276Generic ();
00107 
00108 protected:
00109     /*!
00110      * @brief Initializes the radio I/Os pins interface
00111      */
00112     virtual void IoInit( void );
00113 
00114     /*!
00115      * @brief Initializes the radio SPI
00116      */
00117     virtual void SpiInit( void );
00118 
00119     /*!
00120      * @brief Initializes DIO IRQ handlers
00121      *
00122      * @param [IN] irqHandlers Array containing the IRQ callback functions
00123      */
00124     virtual void IoIrqInit( DioIrqHandler  *irqHandlers );
00125 
00126     /*!
00127      * @brief De-initializes the radio I/Os pins interface. 
00128      *
00129      * \remark Useful when going in MCU lowpower modes
00130      */
00131     virtual void IoDeInit( void );
00132 
00133     /*!
00134      * @brief Gets the board PA selection configuration
00135      *
00136      * @param [IN] channel Channel frequency in Hz
00137      * @retval PaSelect RegPaConfig PaSelect value
00138      */
00139     virtual uint8_t GetPaSelect( uint32_t channel );
00140 
00141     /*!
00142      * @brief Set the RF Switch I/Os pins in Low Power mode
00143      *
00144      * @param [IN] status enable or disable
00145      */
00146     virtual void SetAntSwLowPower( bool status );
00147 
00148     /*!
00149      * @brief Initializes the RF Switch I/Os pins interface
00150      */
00151     virtual void AntSwInit( void );
00152 
00153     /*!
00154      * @brief De-initializes the RF Switch I/Os pins interface 
00155      *
00156      * @remark Needed to decrease the power consumption in MCU lowpower modes
00157      */
00158     virtual void AntSwDeInit( void );
00159 
00160     /*!
00161      * @brief Controls the antena switch if necessary.
00162      *
00163      * @remark see errata note
00164      *
00165      * @param [IN] opMode Current radio operating mode
00166      */
00167     virtual void SetAntSw( uint8_t opMode );
00168     
00169     /*
00170      * The the Timeout for a given Timer.
00171      */
00172     virtual void SetTimeout(TimeoutTimer_t timer, timeoutFuncPtr, int timeout_ms = 0);
00173 
00174     /*
00175      * A simple ms sleep
00176      */
00177     virtual void Sleep_ms(int ms);
00178 
00179 
00180 public:
00181     
00182     /*!
00183      * @brief Detect the board connected by reading the value of the antenna switch pin
00184      */
00185     virtual uint8_t DetectBoardType( void );
00186 
00187     /*!
00188      * @brief Checks if the given RF frequency is supported by the hardware
00189      *
00190      * @param [IN] frequency RF frequency to be checked
00191      * @retval isSupported [true: supported, false: unsupported]
00192      */
00193     virtual bool CheckRfFrequency( uint32_t frequency );
00194 
00195     /*!
00196      * @brief Writes the radio register at the specified address
00197      *
00198      * @param [IN]: addr Register address
00199      * @param [IN]: data New register value
00200      */
00201     virtual void Write ( uint8_t addr, uint8_t data ) ;
00202 
00203     /*!
00204      * @brief Reads the radio register at the specified address
00205      *
00206      * @param [IN]: addr Register address
00207      * @retval data Register value
00208      */
00209     virtual uint8_t Read ( uint8_t addr ) ;
00210 
00211     /*!
00212      * @brief Writes multiple radio registers starting at address
00213      *
00214      * @param [IN] addr   First Radio register address
00215      * @param [IN] buffer Buffer containing the new register's values
00216      * @param [IN] size   Number of registers to be written
00217      */
00218     virtual void Write( uint8_t addr, void *buffer, uint8_t size ) ;
00219 
00220     /*!
00221      * @brief Reads multiple radio registers starting at address
00222      *
00223      * @param [IN] addr First Radio register address
00224      * @param [OUT] buffer Buffer where to copy the registers data
00225      * @param [IN] size Number of registers to be read
00226      */
00227     virtual void Read ( uint8_t addr, void *buffer, uint8_t size ) ;
00228 
00229     /*!
00230      * @brief Writes the buffer contents to the SX1276 FIFO
00231      *
00232      * @param [IN] buffer Buffer containing data to be put on the FIFO.
00233      * @param [IN] size Number of bytes to be written to the FIFO
00234      */
00235     virtual void WriteFifo( void *buffer, uint8_t size ) ;
00236 
00237     /*!
00238      * @brief Reads the contents of the SX1276 FIFO
00239      *
00240      * @param [OUT] buffer Buffer where to copy the FIFO read data.
00241      * @param [IN] size Number of bytes to be read from the FIFO
00242      */
00243     virtual void ReadFifo( void *buffer, uint8_t size ) ;
00244 
00245     /*!
00246      * @brief Reset the SX1276
00247      */
00248     virtual void Reset( void );
00249     
00250     /*!
00251      * \brief Sets the radio output power.
00252      *
00253      * @param [IN] power Sets the RF output power
00254      */
00255     virtual void SetRfTxPower( int8_t power );
00256     
00257 };
00258 
00259 #endif // __SX1276_MBED_HAL_H__