f

Committer:
Helmut Tschemernjak
Date:
Wed May 31 14:07:40 2017 +0200
Revision:
61:08b50780eb91
Parent:
52:4d304485eda0
Made SetRfTxPower public to allow easily power TX changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Helmut Tschemernjak 40:0165543c0986 1
Helmut Tschemernjak 40:0165543c0986 2 /*
Helmut Tschemernjak 40:0165543c0986 3 * This file contains a copy of the master content sx1276-mbed-hal.h
Helmut Tschemernjak 40:0165543c0986 4 * with adaption for the Arduino environment
Helmut Tschemernjak 40:0165543c0986 5 * (c) 2017 Helmut Tschemernjak
Helmut Tschemernjak 40:0165543c0986 6 * 30826 Garbsen (Hannover) Germany
Helmut Tschemernjak 40:0165543c0986 7 */
Helmut Tschemernjak 40:0165543c0986 8 #ifdef ARDUINO
Helmut Tschemernjak 40:0165543c0986 9
Helmut Tschemernjak 46:e78a1d0391ac 10 /*
Helmut Tschemernjak 46:e78a1d0391ac 11 (C) 2014 Semtech
Helmut Tschemernjak 46:e78a1d0391ac 12 Description: -
Helmut Tschemernjak 46:e78a1d0391ac 13 License: Revised BSD License, see LICENSE.TXT file include in the project
Helmut Tschemernjak 46:e78a1d0391ac 14 Maintainers: Miguel Luis, Gregory Cristian and Nicolas Huguenin
Helmut Tschemernjak 46:e78a1d0391ac 15 */
Helmut Tschemernjak 40:0165543c0986 16
Helmut Tschemernjak 46:e78a1d0391ac 17 /*
Helmut Tschemernjak 46:e78a1d0391ac 18 * additional development to make it more generic across multiple OS versions
Helmut Tschemernjak 46:e78a1d0391ac 19 * (c) 2017 Helmut Tschemernjak
Helmut Tschemernjak 46:e78a1d0391ac 20 * 30826 Garbsen (Hannover) Germany
Helmut Tschemernjak 46:e78a1d0391ac 21 */
Helmut Tschemernjak 40:0165543c0986 22
Helmut Tschemernjak 46:e78a1d0391ac 23 #ifndef __SX1276_ARDUINO_HAL_H__
Helmut Tschemernjak 46:e78a1d0391ac 24 #define __SX1276_ARDUINO_HAL_H__
Helmut Tschemernjak 46:e78a1d0391ac 25 #include "sx1276.h"
Helmut Tschemernjak 40:0165543c0986 26
Helmut Tschemernjak 40:0165543c0986 27
Helmut Tschemernjak 40:0165543c0986 28
Helmut Tschemernjak 46:e78a1d0391ac 29 /*!
Helmut Tschemernjak 46:e78a1d0391ac 30 * Actual implementation of a SX1276 radio, includes some modifications to make it compatible with the MB1 LAS board
Helmut Tschemernjak 46:e78a1d0391ac 31 */
Helmut Tschemernjak 46:e78a1d0391ac 32 class SX1276Generic : public SX1276
Helmut Tschemernjak 46:e78a1d0391ac 33 {
Helmut Tschemernjak 46:e78a1d0391ac 34 protected:
Helmut Tschemernjak 46:e78a1d0391ac 35 /*!
Helmut Tschemernjak 46:e78a1d0391ac 36 * Antenna switch GPIO pins objects
Helmut Tschemernjak 46:e78a1d0391ac 37 */
Helmut Tschemernjak 46:e78a1d0391ac 38 DigitalOut *_antSwitch;
Helmut Tschemernjak 46:e78a1d0391ac 39 DigitalOut *_antSwitchTX;
Helmut Tschemernjak 46:e78a1d0391ac 40 DigitalOut *_antSwitchTXBoost;
Helmut Tschemernjak 46:e78a1d0391ac 41
Helmut Tschemernjak 46:e78a1d0391ac 42 /*!
Helmut Tschemernjak 46:e78a1d0391ac 43 * SX1276 Reset pin
Helmut Tschemernjak 46:e78a1d0391ac 44 */
Helmut Tschemernjak 46:e78a1d0391ac 45 DigitalInOut *_reset;
Helmut Tschemernjak 46:e78a1d0391ac 46
Helmut Tschemernjak 46:e78a1d0391ac 47 /*!
Helmut Tschemernjak 46:e78a1d0391ac 48 * TCXO being used with the Murata Module
Helmut Tschemernjak 46:e78a1d0391ac 49 */
Helmut Tschemernjak 46:e78a1d0391ac 50 DigitalOut *_tcxo;
Helmut Tschemernjak 46:e78a1d0391ac 51
Helmut Tschemernjak 46:e78a1d0391ac 52 /*!
Helmut Tschemernjak 46:e78a1d0391ac 53 * SPI Interface
Helmut Tschemernjak 46:e78a1d0391ac 54 */
Helmut Tschemernjak 46:e78a1d0391ac 55 SPI *_spi; // mosi, miso, sclk
Helmut Tschemernjak 46:e78a1d0391ac 56 DigitalOut *_nss;
Helmut Tschemernjak 46:e78a1d0391ac 57
Helmut Tschemernjak 46:e78a1d0391ac 58 /*!
Helmut Tschemernjak 46:e78a1d0391ac 59 * SX1276 DIO pins
Helmut Tschemernjak 46:e78a1d0391ac 60 */
Helmut Tschemernjak 46:e78a1d0391ac 61 InterruptIn *_dio0;
Helmut Tschemernjak 46:e78a1d0391ac 62 InterruptIn *_dio1;
Helmut Tschemernjak 46:e78a1d0391ac 63 InterruptIn *_dio2;
Helmut Tschemernjak 46:e78a1d0391ac 64 InterruptIn *_dio3;
Helmut Tschemernjak 46:e78a1d0391ac 65 InterruptIn *_dio4;
Helmut Tschemernjak 46:e78a1d0391ac 66 DigitalIn *_dio5;
Helmut Tschemernjak 46:e78a1d0391ac 67
Helmut Tschemernjak 46:e78a1d0391ac 68 /*!
Helmut Tschemernjak 46:e78a1d0391ac 69 * Tx and Rx timers
Helmut Tschemernjak 46:e78a1d0391ac 70 */
Helmut Tschemernjak 46:e78a1d0391ac 71 Timeout txTimeoutTimer;
Helmut Tschemernjak 46:e78a1d0391ac 72 Timeout rxTimeoutTimer;
Helmut Tschemernjak 46:e78a1d0391ac 73 Timeout rxTimeoutSyncWord;
Helmut Tschemernjak 46:e78a1d0391ac 74
Helmut Tschemernjak 46:e78a1d0391ac 75
Helmut Tschemernjak 46:e78a1d0391ac 76 private:
Helmut Tschemernjak 46:e78a1d0391ac 77 /*!
Helmut Tschemernjak 46:e78a1d0391ac 78 * triggers definition
Helmut Tschemernjak 46:e78a1d0391ac 79 */
Helmut Tschemernjak 46:e78a1d0391ac 80 typedef void (SX1276Generic::*Trigger)(void);
Helmut Tschemernjak 46:e78a1d0391ac 81
Helmut Tschemernjak 46:e78a1d0391ac 82
Helmut Tschemernjak 52:4d304485eda0 83 public:
Helmut Tschemernjak 46:e78a1d0391ac 84 SX1276Generic( RadioEvents_t *events, BoardType_t board,
Helmut Tschemernjak 46:e78a1d0391ac 85 PinName mosi, PinName miso, PinName sclk, PinName nss, PinName reset,
Helmut Tschemernjak 46:e78a1d0391ac 86 PinName dio0, PinName dio1, PinName dio2, PinName dio3, PinName dio4, PinName dio5,
Helmut Tschemernjak 46:e78a1d0391ac 87 PinName antSwitch = NC, PinName antSwitchTX= NC, PinName antSwitchTXBoost = NC, PinName tcxo = NC);
Helmut Tschemernjak 46:e78a1d0391ac 88
Helmut Tschemernjak 46:e78a1d0391ac 89
Helmut Tschemernjak 46:e78a1d0391ac 90 SX1276Generic( RadioEvents_t *events );
Helmut Tschemernjak 46:e78a1d0391ac 91
Helmut Tschemernjak 46:e78a1d0391ac 92 virtual ~SX1276Generic();
Helmut Tschemernjak 46:e78a1d0391ac 93
Helmut Tschemernjak 46:e78a1d0391ac 94 protected:
Helmut Tschemernjak 46:e78a1d0391ac 95 /*!
Helmut Tschemernjak 46:e78a1d0391ac 96 * @brief Initializes the radio I/Os pins interface
Helmut Tschemernjak 46:e78a1d0391ac 97 */
Helmut Tschemernjak 46:e78a1d0391ac 98 virtual void IoInit( void );
Helmut Tschemernjak 46:e78a1d0391ac 99
Helmut Tschemernjak 46:e78a1d0391ac 100 /*!
Helmut Tschemernjak 46:e78a1d0391ac 101 * @brief Initializes the radio SPI
Helmut Tschemernjak 46:e78a1d0391ac 102 */
Helmut Tschemernjak 46:e78a1d0391ac 103 virtual void SpiInit( void );
Helmut Tschemernjak 46:e78a1d0391ac 104
Helmut Tschemernjak 46:e78a1d0391ac 105 /*!
Helmut Tschemernjak 46:e78a1d0391ac 106 * @brief Initializes DIO IRQ handlers
Helmut Tschemernjak 46:e78a1d0391ac 107 *
Helmut Tschemernjak 46:e78a1d0391ac 108 * @param [IN] irqHandlers Array containing the IRQ callback functions
Helmut Tschemernjak 46:e78a1d0391ac 109 */
Helmut Tschemernjak 46:e78a1d0391ac 110 virtual void IoIrqInit( DioIrqHandler *irqHandlers );
Helmut Tschemernjak 46:e78a1d0391ac 111
Helmut Tschemernjak 46:e78a1d0391ac 112 /*!
Helmut Tschemernjak 46:e78a1d0391ac 113 * @brief De-initializes the radio I/Os pins interface.
Helmut Tschemernjak 46:e78a1d0391ac 114 *
Helmut Tschemernjak 46:e78a1d0391ac 115 * \remark Useful when going in MCU lowpower modes
Helmut Tschemernjak 46:e78a1d0391ac 116 */
Helmut Tschemernjak 46:e78a1d0391ac 117 virtual void IoDeInit( void );
Helmut Tschemernjak 61:08b50780eb91 118
Helmut Tschemernjak 46:e78a1d0391ac 119 /*!
Helmut Tschemernjak 46:e78a1d0391ac 120 * @brief Gets the board PA selection configuration
Helmut Tschemernjak 46:e78a1d0391ac 121 *
Helmut Tschemernjak 46:e78a1d0391ac 122 * @param [IN] channel Channel frequency in Hz
Helmut Tschemernjak 46:e78a1d0391ac 123 * @retval PaSelect RegPaConfig PaSelect value
Helmut Tschemernjak 46:e78a1d0391ac 124 */
Helmut Tschemernjak 46:e78a1d0391ac 125 virtual uint8_t GetPaSelect( uint32_t channel );
Helmut Tschemernjak 46:e78a1d0391ac 126
Helmut Tschemernjak 46:e78a1d0391ac 127 /*!
Helmut Tschemernjak 46:e78a1d0391ac 128 * @brief Set the RF Switch I/Os pins in Low Power mode
Helmut Tschemernjak 46:e78a1d0391ac 129 *
Helmut Tschemernjak 46:e78a1d0391ac 130 * @param [IN] status enable or disable
Helmut Tschemernjak 46:e78a1d0391ac 131 */
Helmut Tschemernjak 46:e78a1d0391ac 132 virtual void SetAntSwLowPower( bool status );
Helmut Tschemernjak 46:e78a1d0391ac 133
Helmut Tschemernjak 46:e78a1d0391ac 134 /*!
Helmut Tschemernjak 46:e78a1d0391ac 135 * @brief Initializes the RF Switch I/Os pins interface
Helmut Tschemernjak 46:e78a1d0391ac 136 */
Helmut Tschemernjak 46:e78a1d0391ac 137 virtual void AntSwInit( void );
Helmut Tschemernjak 46:e78a1d0391ac 138
Helmut Tschemernjak 46:e78a1d0391ac 139 /*!
Helmut Tschemernjak 46:e78a1d0391ac 140 * @brief De-initializes the RF Switch I/Os pins interface
Helmut Tschemernjak 46:e78a1d0391ac 141 *
Helmut Tschemernjak 46:e78a1d0391ac 142 * @remark Needed to decrease the power consumption in MCU lowpower modes
Helmut Tschemernjak 46:e78a1d0391ac 143 */
Helmut Tschemernjak 46:e78a1d0391ac 144 virtual void AntSwDeInit( void );
Helmut Tschemernjak 46:e78a1d0391ac 145
Helmut Tschemernjak 46:e78a1d0391ac 146 /*!
Helmut Tschemernjak 46:e78a1d0391ac 147 * @brief Controls the antena switch if necessary.
Helmut Tschemernjak 46:e78a1d0391ac 148 *
Helmut Tschemernjak 46:e78a1d0391ac 149 * @remark see errata note
Helmut Tschemernjak 46:e78a1d0391ac 150 *
Helmut Tschemernjak 46:e78a1d0391ac 151 * @param [IN] opMode Current radio operating mode
Helmut Tschemernjak 46:e78a1d0391ac 152 */
Helmut Tschemernjak 46:e78a1d0391ac 153 virtual void SetAntSw( uint8_t opMode );
Helmut Tschemernjak 46:e78a1d0391ac 154
Helmut Tschemernjak 46:e78a1d0391ac 155 /*
Helmut Tschemernjak 46:e78a1d0391ac 156 * The the Timeout for a given Timer.
Helmut Tschemernjak 46:e78a1d0391ac 157 */
Helmut Tschemernjak 46:e78a1d0391ac 158 virtual void SetTimeout(TimeoutTimer_t timer, timeoutFuncPtr, int timeout_ms = 0);
Helmut Tschemernjak 46:e78a1d0391ac 159
Helmut Tschemernjak 52:4d304485eda0 160 public:
Helmut Tschemernjak 46:e78a1d0391ac 161
Helmut Tschemernjak 46:e78a1d0391ac 162 /*!
Helmut Tschemernjak 46:e78a1d0391ac 163 * @brief Detect the board connected by reading the value of the antenna switch pin
Helmut Tschemernjak 46:e78a1d0391ac 164 */
Helmut Tschemernjak 46:e78a1d0391ac 165 virtual uint8_t DetectBoardType( void );
Helmut Tschemernjak 46:e78a1d0391ac 166
Helmut Tschemernjak 46:e78a1d0391ac 167 /*!
Helmut Tschemernjak 46:e78a1d0391ac 168 * @brief Checks if the given RF frequency is supported by the hardware
Helmut Tschemernjak 46:e78a1d0391ac 169 *
Helmut Tschemernjak 46:e78a1d0391ac 170 * @param [IN] frequency RF frequency to be checked
Helmut Tschemernjak 46:e78a1d0391ac 171 * @retval isSupported [true: supported, false: unsupported]
Helmut Tschemernjak 46:e78a1d0391ac 172 */
Helmut Tschemernjak 46:e78a1d0391ac 173 virtual bool CheckRfFrequency( uint32_t frequency );
Helmut Tschemernjak 46:e78a1d0391ac 174
Helmut Tschemernjak 46:e78a1d0391ac 175 /*!
Helmut Tschemernjak 46:e78a1d0391ac 176 * @brief Writes the radio register at the specified address
Helmut Tschemernjak 46:e78a1d0391ac 177 *
Helmut Tschemernjak 46:e78a1d0391ac 178 * @param [IN]: addr Register address
Helmut Tschemernjak 46:e78a1d0391ac 179 * @param [IN]: data New register value
Helmut Tschemernjak 46:e78a1d0391ac 180 */
Helmut Tschemernjak 46:e78a1d0391ac 181 virtual void Write ( uint8_t addr, uint8_t data ) ;
Helmut Tschemernjak 46:e78a1d0391ac 182
Helmut Tschemernjak 46:e78a1d0391ac 183 /*!
Helmut Tschemernjak 46:e78a1d0391ac 184 * @brief Reads the radio register at the specified address
Helmut Tschemernjak 46:e78a1d0391ac 185 *
Helmut Tschemernjak 46:e78a1d0391ac 186 * @param [IN]: addr Register address
Helmut Tschemernjak 46:e78a1d0391ac 187 * @retval data Register value
Helmut Tschemernjak 46:e78a1d0391ac 188 */
Helmut Tschemernjak 46:e78a1d0391ac 189 virtual uint8_t Read ( uint8_t addr ) ;
Helmut Tschemernjak 46:e78a1d0391ac 190
Helmut Tschemernjak 46:e78a1d0391ac 191 /*!
Helmut Tschemernjak 46:e78a1d0391ac 192 * @brief Writes multiple radio registers starting at address
Helmut Tschemernjak 46:e78a1d0391ac 193 *
Helmut Tschemernjak 46:e78a1d0391ac 194 * @param [IN] addr First Radio register address
Helmut Tschemernjak 46:e78a1d0391ac 195 * @param [IN] buffer Buffer containing the new register's values
Helmut Tschemernjak 46:e78a1d0391ac 196 * @param [IN] size Number of registers to be written
Helmut Tschemernjak 46:e78a1d0391ac 197 */
Helmut Tschemernjak 52:4d304485eda0 198 virtual void Write( uint8_t addr, void *buffer, uint8_t size ) ;
Helmut Tschemernjak 46:e78a1d0391ac 199
Helmut Tschemernjak 46:e78a1d0391ac 200 /*!
Helmut Tschemernjak 46:e78a1d0391ac 201 * @brief Reads multiple radio registers starting at address
Helmut Tschemernjak 46:e78a1d0391ac 202 *
Helmut Tschemernjak 46:e78a1d0391ac 203 * @param [IN] addr First Radio register address
Helmut Tschemernjak 46:e78a1d0391ac 204 * @param [OUT] buffer Buffer where to copy the registers data
Helmut Tschemernjak 46:e78a1d0391ac 205 * @param [IN] size Number of registers to be read
Helmut Tschemernjak 46:e78a1d0391ac 206 */
Helmut Tschemernjak 52:4d304485eda0 207 virtual void Read ( uint8_t addr, void *buffer, uint8_t size ) ;
Helmut Tschemernjak 46:e78a1d0391ac 208
Helmut Tschemernjak 46:e78a1d0391ac 209 /*!
Helmut Tschemernjak 46:e78a1d0391ac 210 * @brief Writes the buffer contents to the SX1276 FIFO
Helmut Tschemernjak 46:e78a1d0391ac 211 *
Helmut Tschemernjak 46:e78a1d0391ac 212 * @param [IN] buffer Buffer containing data to be put on the FIFO.
Helmut Tschemernjak 46:e78a1d0391ac 213 * @param [IN] size Number of bytes to be written to the FIFO
Helmut Tschemernjak 46:e78a1d0391ac 214 */
Helmut Tschemernjak 52:4d304485eda0 215 virtual void WriteFifo( void *buffer, uint8_t size ) ;
Helmut Tschemernjak 46:e78a1d0391ac 216
Helmut Tschemernjak 46:e78a1d0391ac 217 /*!
Helmut Tschemernjak 46:e78a1d0391ac 218 * @brief Reads the contents of the SX1276 FIFO
Helmut Tschemernjak 46:e78a1d0391ac 219 *
Helmut Tschemernjak 46:e78a1d0391ac 220 * @param [OUT] buffer Buffer where to copy the FIFO read data.
Helmut Tschemernjak 46:e78a1d0391ac 221 * @param [IN] size Number of bytes to be read from the FIFO
Helmut Tschemernjak 46:e78a1d0391ac 222 */
Helmut Tschemernjak 52:4d304485eda0 223 virtual void ReadFifo( void *buffer, uint8_t size ) ;
Helmut Tschemernjak 46:e78a1d0391ac 224
Helmut Tschemernjak 46:e78a1d0391ac 225 /*!
Helmut Tschemernjak 46:e78a1d0391ac 226 * @brief Reset the SX1276
Helmut Tschemernjak 46:e78a1d0391ac 227 */
Helmut Tschemernjak 46:e78a1d0391ac 228 virtual void Reset( void );
Helmut Tschemernjak 61:08b50780eb91 229
Helmut Tschemernjak 61:08b50780eb91 230 /*!
Helmut Tschemernjak 61:08b50780eb91 231 * \brief Sets the radio output power.
Helmut Tschemernjak 61:08b50780eb91 232 *
Helmut Tschemernjak 61:08b50780eb91 233 * @param [IN] power Sets the RF output power
Helmut Tschemernjak 61:08b50780eb91 234 */
Helmut Tschemernjak 61:08b50780eb91 235 virtual void SetRfTxPower( int8_t power );
Helmut Tschemernjak 61:08b50780eb91 236
Helmut Tschemernjak 46:e78a1d0391ac 237 };
Helmut Tschemernjak 40:0165543c0986 238
Helmut Tschemernjak 46:e78a1d0391ac 239 #endif // __SX1276_ARDUINO_HAL_H__
Helmut Tschemernjak 40:0165543c0986 240 #endif // ARDUINO