LoRaWAN-hello-world- code

Dependencies:   mbed LoRaWAN-lib

Committer:
amirchaudhary
Date:
Fri Mar 22 16:24:25 2019 +0000
Revision:
12:813e9e5f5ff6
Updated the code to Class C Lorawan.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
amirchaudhary 12:813e9e5f5ff6 1 /*
amirchaudhary 12:813e9e5f5ff6 2 / _____) _ | |
amirchaudhary 12:813e9e5f5ff6 3 ( (____ _____ ____ _| |_ _____ ____| |__
amirchaudhary 12:813e9e5f5ff6 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
amirchaudhary 12:813e9e5f5ff6 5 _____) ) ____| | | || |_| ____( (___| | | |
amirchaudhary 12:813e9e5f5ff6 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
amirchaudhary 12:813e9e5f5ff6 7 (C) 2014 Semtech
amirchaudhary 12:813e9e5f5ff6 8
amirchaudhary 12:813e9e5f5ff6 9 Description: -
amirchaudhary 12:813e9e5f5ff6 10
amirchaudhary 12:813e9e5f5ff6 11 License: Revised BSD License, see LICENSE.TXT file include in the project
amirchaudhary 12:813e9e5f5ff6 12
amirchaudhary 12:813e9e5f5ff6 13 Maintainers: Miguel Luis, Gregory Cristian and Nicolas Huguenin
amirchaudhary 12:813e9e5f5ff6 14 */
amirchaudhary 12:813e9e5f5ff6 15 #ifndef __SX1276_HAL_H__
amirchaudhary 12:813e9e5f5ff6 16 #define __SX1276_HAL_H__
amirchaudhary 12:813e9e5f5ff6 17 #include "sx1276.h"
amirchaudhary 12:813e9e5f5ff6 18
amirchaudhary 12:813e9e5f5ff6 19 /*!
amirchaudhary 12:813e9e5f5ff6 20 * @brief Radio hardware registers initialization definition
amirchaudhary 12:813e9e5f5ff6 21 *
amirchaudhary 12:813e9e5f5ff6 22 * @remark Can be automatically generated by the SX1276 GUI (not yet implemented)
amirchaudhary 12:813e9e5f5ff6 23 */
amirchaudhary 12:813e9e5f5ff6 24 #define RADIO_INIT_REGISTERS_VALUE \
amirchaudhary 12:813e9e5f5ff6 25 { \
amirchaudhary 12:813e9e5f5ff6 26 { MODEM_FSK , REG_LNA , 0x23 },\
amirchaudhary 12:813e9e5f5ff6 27 { MODEM_FSK , REG_RXCONFIG , 0x1E },\
amirchaudhary 12:813e9e5f5ff6 28 { MODEM_FSK , REG_RSSICONFIG , 0xD2 },\
amirchaudhary 12:813e9e5f5ff6 29 { MODEM_FSK , REG_AFCFEI , 0x01 },\
amirchaudhary 12:813e9e5f5ff6 30 { MODEM_FSK , REG_PREAMBLEDETECT , 0xAA },\
amirchaudhary 12:813e9e5f5ff6 31 { MODEM_FSK , REG_OSC , 0x07 },\
amirchaudhary 12:813e9e5f5ff6 32 { MODEM_FSK , REG_SYNCCONFIG , 0x12 },\
amirchaudhary 12:813e9e5f5ff6 33 { MODEM_FSK , REG_SYNCVALUE1 , 0xC1 },\
amirchaudhary 12:813e9e5f5ff6 34 { MODEM_FSK , REG_SYNCVALUE2 , 0x94 },\
amirchaudhary 12:813e9e5f5ff6 35 { MODEM_FSK , REG_SYNCVALUE3 , 0xC1 },\
amirchaudhary 12:813e9e5f5ff6 36 { MODEM_FSK , REG_PACKETCONFIG1 , 0xD8 },\
amirchaudhary 12:813e9e5f5ff6 37 { MODEM_FSK , REG_FIFOTHRESH , 0x8F },\
amirchaudhary 12:813e9e5f5ff6 38 { MODEM_FSK , REG_IMAGECAL , 0x02 },\
amirchaudhary 12:813e9e5f5ff6 39 { MODEM_FSK , REG_DIOMAPPING1 , 0x00 },\
amirchaudhary 12:813e9e5f5ff6 40 { MODEM_FSK , REG_DIOMAPPING2 , 0x30 },\
amirchaudhary 12:813e9e5f5ff6 41 { MODEM_LORA, REG_LR_PAYLOADMAXLENGTH, 0x40 },\
amirchaudhary 12:813e9e5f5ff6 42 } \
amirchaudhary 12:813e9e5f5ff6 43
amirchaudhary 12:813e9e5f5ff6 44 /*!
amirchaudhary 12:813e9e5f5ff6 45 * Actual implementation of a SX1276 radio, includes some modifications to make it compatible with the MB1 LAS board
amirchaudhary 12:813e9e5f5ff6 46 */
amirchaudhary 12:813e9e5f5ff6 47 class SX1276MB1xAS : public SX1276
amirchaudhary 12:813e9e5f5ff6 48 {
amirchaudhary 12:813e9e5f5ff6 49 protected:
amirchaudhary 12:813e9e5f5ff6 50 /*!
amirchaudhary 12:813e9e5f5ff6 51 * Antenna switch GPIO pins objects
amirchaudhary 12:813e9e5f5ff6 52 */
amirchaudhary 12:813e9e5f5ff6 53 DigitalInOut AntSwitch;
amirchaudhary 12:813e9e5f5ff6 54 DigitalIn Fake;
amirchaudhary 12:813e9e5f5ff6 55
amirchaudhary 12:813e9e5f5ff6 56 private:
amirchaudhary 12:813e9e5f5ff6 57 static const RadioRegisters_t RadioRegsInit[];
amirchaudhary 12:813e9e5f5ff6 58
amirchaudhary 12:813e9e5f5ff6 59 public:
amirchaudhary 12:813e9e5f5ff6 60 SX1276MB1xAS( RadioEvents_t *events,
amirchaudhary 12:813e9e5f5ff6 61 PinName mosi, PinName miso, PinName sclk, PinName nss, PinName reset,
amirchaudhary 12:813e9e5f5ff6 62 PinName dio0, PinName dio1, PinName dio2, PinName dio3, PinName dio4, PinName dio5,
amirchaudhary 12:813e9e5f5ff6 63 PinName antSwitch );
amirchaudhary 12:813e9e5f5ff6 64
amirchaudhary 12:813e9e5f5ff6 65 SX1276MB1xAS( RadioEvents_t *events );
amirchaudhary 12:813e9e5f5ff6 66
amirchaudhary 12:813e9e5f5ff6 67 virtual ~SX1276MB1xAS( ) { };
amirchaudhary 12:813e9e5f5ff6 68
amirchaudhary 12:813e9e5f5ff6 69 protected:
amirchaudhary 12:813e9e5f5ff6 70 /*!
amirchaudhary 12:813e9e5f5ff6 71 * @brief Initializes the radio I/Os pins interface
amirchaudhary 12:813e9e5f5ff6 72 */
amirchaudhary 12:813e9e5f5ff6 73 virtual void IoInit( void );
amirchaudhary 12:813e9e5f5ff6 74
amirchaudhary 12:813e9e5f5ff6 75 /*!
amirchaudhary 12:813e9e5f5ff6 76 * @brief Initializes the radio registers
amirchaudhary 12:813e9e5f5ff6 77 */
amirchaudhary 12:813e9e5f5ff6 78 virtual void RadioRegistersInit( );
amirchaudhary 12:813e9e5f5ff6 79
amirchaudhary 12:813e9e5f5ff6 80 /*!
amirchaudhary 12:813e9e5f5ff6 81 * @brief Initializes the radio SPI
amirchaudhary 12:813e9e5f5ff6 82 */
amirchaudhary 12:813e9e5f5ff6 83 virtual void SpiInit( void );
amirchaudhary 12:813e9e5f5ff6 84
amirchaudhary 12:813e9e5f5ff6 85 /*!
amirchaudhary 12:813e9e5f5ff6 86 * @brief Initializes DIO IRQ handlers
amirchaudhary 12:813e9e5f5ff6 87 *
amirchaudhary 12:813e9e5f5ff6 88 * @param [IN] irqHandlers Array containing the IRQ callback functions
amirchaudhary 12:813e9e5f5ff6 89 */
amirchaudhary 12:813e9e5f5ff6 90 virtual void IoIrqInit( DioIrqHandler *irqHandlers );
amirchaudhary 12:813e9e5f5ff6 91
amirchaudhary 12:813e9e5f5ff6 92 /*!
amirchaudhary 12:813e9e5f5ff6 93 * @brief De-initializes the radio I/Os pins interface.
amirchaudhary 12:813e9e5f5ff6 94 *
amirchaudhary 12:813e9e5f5ff6 95 * \remark Useful when going in MCU lowpower modes
amirchaudhary 12:813e9e5f5ff6 96 */
amirchaudhary 12:813e9e5f5ff6 97 virtual void IoDeInit( void );
amirchaudhary 12:813e9e5f5ff6 98
amirchaudhary 12:813e9e5f5ff6 99 /*!
amirchaudhary 12:813e9e5f5ff6 100 * \brief Sets the radio output power.
amirchaudhary 12:813e9e5f5ff6 101 *
amirchaudhary 12:813e9e5f5ff6 102 * @param [IN] power Sets the RF output power
amirchaudhary 12:813e9e5f5ff6 103 */
amirchaudhary 12:813e9e5f5ff6 104 virtual void SetRfTxPower( int8_t power );
amirchaudhary 12:813e9e5f5ff6 105
amirchaudhary 12:813e9e5f5ff6 106 /*!
amirchaudhary 12:813e9e5f5ff6 107 * @brief Gets the board PA selection configuration
amirchaudhary 12:813e9e5f5ff6 108 *
amirchaudhary 12:813e9e5f5ff6 109 * @param [IN] channel Channel frequency in Hz
amirchaudhary 12:813e9e5f5ff6 110 * @retval PaSelect RegPaConfig PaSelect value
amirchaudhary 12:813e9e5f5ff6 111 */
amirchaudhary 12:813e9e5f5ff6 112 virtual uint8_t GetPaSelect( uint32_t channel );
amirchaudhary 12:813e9e5f5ff6 113
amirchaudhary 12:813e9e5f5ff6 114 /*!
amirchaudhary 12:813e9e5f5ff6 115 * @brief Set the RF Switch I/Os pins in Low Power mode
amirchaudhary 12:813e9e5f5ff6 116 *
amirchaudhary 12:813e9e5f5ff6 117 * @param [IN] status enable or disable
amirchaudhary 12:813e9e5f5ff6 118 */
amirchaudhary 12:813e9e5f5ff6 119 virtual void SetAntSwLowPower( bool status );
amirchaudhary 12:813e9e5f5ff6 120
amirchaudhary 12:813e9e5f5ff6 121 /*!
amirchaudhary 12:813e9e5f5ff6 122 * @brief Initializes the RF Switch I/Os pins interface
amirchaudhary 12:813e9e5f5ff6 123 */
amirchaudhary 12:813e9e5f5ff6 124 virtual void AntSwInit( void );
amirchaudhary 12:813e9e5f5ff6 125
amirchaudhary 12:813e9e5f5ff6 126 /*!
amirchaudhary 12:813e9e5f5ff6 127 * @brief De-initializes the RF Switch I/Os pins interface
amirchaudhary 12:813e9e5f5ff6 128 *
amirchaudhary 12:813e9e5f5ff6 129 * @remark Needed to decrease the power consumption in MCU lowpower modes
amirchaudhary 12:813e9e5f5ff6 130 */
amirchaudhary 12:813e9e5f5ff6 131 virtual void AntSwDeInit( void );
amirchaudhary 12:813e9e5f5ff6 132
amirchaudhary 12:813e9e5f5ff6 133 /*!
amirchaudhary 12:813e9e5f5ff6 134 * @brief Controls the antena switch if necessary.
amirchaudhary 12:813e9e5f5ff6 135 *
amirchaudhary 12:813e9e5f5ff6 136 * @remark see errata note
amirchaudhary 12:813e9e5f5ff6 137 *
amirchaudhary 12:813e9e5f5ff6 138 * @param [IN] opMode Current radio operating mode
amirchaudhary 12:813e9e5f5ff6 139 */
amirchaudhary 12:813e9e5f5ff6 140 virtual void SetAntSw( uint8_t opMode );
amirchaudhary 12:813e9e5f5ff6 141
amirchaudhary 12:813e9e5f5ff6 142 public:
amirchaudhary 12:813e9e5f5ff6 143 /*!
amirchaudhary 12:813e9e5f5ff6 144 * @brief Detect the board connected by reading the value of the antenna switch pin
amirchaudhary 12:813e9e5f5ff6 145 */
amirchaudhary 12:813e9e5f5ff6 146 virtual uint8_t DetectBoardType( void );
amirchaudhary 12:813e9e5f5ff6 147
amirchaudhary 12:813e9e5f5ff6 148 /*!
amirchaudhary 12:813e9e5f5ff6 149 * @brief Checks if the given RF frequency is supported by the hardware
amirchaudhary 12:813e9e5f5ff6 150 *
amirchaudhary 12:813e9e5f5ff6 151 * @param [IN] frequency RF frequency to be checked
amirchaudhary 12:813e9e5f5ff6 152 * @retval isSupported [true: supported, false: unsupported]
amirchaudhary 12:813e9e5f5ff6 153 */
amirchaudhary 12:813e9e5f5ff6 154 virtual bool CheckRfFrequency( uint32_t frequency );
amirchaudhary 12:813e9e5f5ff6 155
amirchaudhary 12:813e9e5f5ff6 156 /*!
amirchaudhary 12:813e9e5f5ff6 157 * @brief Writes the radio register at the specified address
amirchaudhary 12:813e9e5f5ff6 158 *
amirchaudhary 12:813e9e5f5ff6 159 * @param [IN]: addr Register address
amirchaudhary 12:813e9e5f5ff6 160 * @param [IN]: data New register value
amirchaudhary 12:813e9e5f5ff6 161 */
amirchaudhary 12:813e9e5f5ff6 162 virtual void Write ( uint8_t addr, uint8_t data ) ;
amirchaudhary 12:813e9e5f5ff6 163
amirchaudhary 12:813e9e5f5ff6 164 /*!
amirchaudhary 12:813e9e5f5ff6 165 * @brief Reads the radio register at the specified address
amirchaudhary 12:813e9e5f5ff6 166 *
amirchaudhary 12:813e9e5f5ff6 167 * @param [IN]: addr Register address
amirchaudhary 12:813e9e5f5ff6 168 * @retval data Register value
amirchaudhary 12:813e9e5f5ff6 169 */
amirchaudhary 12:813e9e5f5ff6 170 virtual uint8_t Read ( uint8_t addr ) ;
amirchaudhary 12:813e9e5f5ff6 171
amirchaudhary 12:813e9e5f5ff6 172 /*!
amirchaudhary 12:813e9e5f5ff6 173 * @brief Writes multiple radio registers starting at address
amirchaudhary 12:813e9e5f5ff6 174 *
amirchaudhary 12:813e9e5f5ff6 175 * @param [IN] addr First Radio register address
amirchaudhary 12:813e9e5f5ff6 176 * @param [IN] buffer Buffer containing the new register's values
amirchaudhary 12:813e9e5f5ff6 177 * @param [IN] size Number of registers to be written
amirchaudhary 12:813e9e5f5ff6 178 */
amirchaudhary 12:813e9e5f5ff6 179 virtual void Write( uint8_t addr, uint8_t *buffer, uint8_t size ) ;
amirchaudhary 12:813e9e5f5ff6 180
amirchaudhary 12:813e9e5f5ff6 181 /*!
amirchaudhary 12:813e9e5f5ff6 182 * @brief Reads multiple radio registers starting at address
amirchaudhary 12:813e9e5f5ff6 183 *
amirchaudhary 12:813e9e5f5ff6 184 * @param [IN] addr First Radio register address
amirchaudhary 12:813e9e5f5ff6 185 * @param [OUT] buffer Buffer where to copy the registers data
amirchaudhary 12:813e9e5f5ff6 186 * @param [IN] size Number of registers to be read
amirchaudhary 12:813e9e5f5ff6 187 */
amirchaudhary 12:813e9e5f5ff6 188 virtual void Read ( uint8_t addr, uint8_t *buffer, uint8_t size ) ;
amirchaudhary 12:813e9e5f5ff6 189
amirchaudhary 12:813e9e5f5ff6 190 /*!
amirchaudhary 12:813e9e5f5ff6 191 * @brief Writes the buffer contents to the SX1276 FIFO
amirchaudhary 12:813e9e5f5ff6 192 *
amirchaudhary 12:813e9e5f5ff6 193 * @param [IN] buffer Buffer containing data to be put on the FIFO.
amirchaudhary 12:813e9e5f5ff6 194 * @param [IN] size Number of bytes to be written to the FIFO
amirchaudhary 12:813e9e5f5ff6 195 */
amirchaudhary 12:813e9e5f5ff6 196 virtual void WriteFifo( uint8_t *buffer, uint8_t size ) ;
amirchaudhary 12:813e9e5f5ff6 197
amirchaudhary 12:813e9e5f5ff6 198 /*!
amirchaudhary 12:813e9e5f5ff6 199 * @brief Reads the contents of the SX1276 FIFO
amirchaudhary 12:813e9e5f5ff6 200 *
amirchaudhary 12:813e9e5f5ff6 201 * @param [OUT] buffer Buffer where to copy the FIFO read data.
amirchaudhary 12:813e9e5f5ff6 202 * @param [IN] size Number of bytes to be read from the FIFO
amirchaudhary 12:813e9e5f5ff6 203 */
amirchaudhary 12:813e9e5f5ff6 204 virtual void ReadFifo( uint8_t *buffer, uint8_t size ) ;
amirchaudhary 12:813e9e5f5ff6 205
amirchaudhary 12:813e9e5f5ff6 206 /*!
amirchaudhary 12:813e9e5f5ff6 207 * @brief Reset the SX1276
amirchaudhary 12:813e9e5f5ff6 208 */
amirchaudhary 12:813e9e5f5ff6 209 virtual void Reset( void );
amirchaudhary 12:813e9e5f5ff6 210 };
amirchaudhary 12:813e9e5f5ff6 211
amirchaudhary 12:813e9e5f5ff6 212 #endif // __SX1276_HAL_H__