f

Committer:
Helmut Tschemernjak
Date:
Thu May 25 21:56:39 2017 +0200
Revision:
58:113d2ef978d2
Parent:
55:00c1f5b83920
Child:
59:38e56c85fa44
Removed duplicate timer definitions (left over from previous cleanup)
zapping the receive buffer makes no sense, keeping the content is better
and allows coping the data while we are receiving the next packet.
The State = RF_IDLE is already done in the sx1276 constructor,
no need to do it in the HAL layer.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GregCr 0:e6ceb13d2d05 1 /*
GregCr 0:e6ceb13d2d05 2 / _____) _ | |
GregCr 0:e6ceb13d2d05 3 ( (____ _____ ____ _| |_ _____ ____| |__
GregCr 0:e6ceb13d2d05 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
GregCr 0:e6ceb13d2d05 5 _____) ) ____| | | || |_| ____( (___| | | |
GregCr 0:e6ceb13d2d05 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
mluis 22:7f3aab69cca9 7 (C) 2014 Semtech
GregCr 0:e6ceb13d2d05 8
GregCr 0:e6ceb13d2d05 9 Description: Actual implementation of a SX1276 radio, inherits Radio
GregCr 0:e6ceb13d2d05 10
GregCr 0:e6ceb13d2d05 11 License: Revised BSD License, see LICENSE.TXT file include in the project
GregCr 0:e6ceb13d2d05 12
GregCr 0:e6ceb13d2d05 13 Maintainers: Miguel Luis, Gregory Cristian and Nicolas Huguenin
GregCr 0:e6ceb13d2d05 14 */
Helmut Tschemernjak 34:07e89f23c734 15
Helmut Tschemernjak 34:07e89f23c734 16 /*
Helmut Tschemernjak 38:d9189d958db8 17 * additional development to make it more generic across multiple OS versions
Helmut Tschemernjak 34:07e89f23c734 18 * (c) 2017 Helmut Tschemernjak
Helmut Tschemernjak 34:07e89f23c734 19 * 30826 Garbsen (Hannover) Germany
Helmut Tschemernjak 34:07e89f23c734 20 */
Helmut Tschemernjak 34:07e89f23c734 21
GregCr 0:e6ceb13d2d05 22 #ifndef __SX1276_H__
GregCr 0:e6ceb13d2d05 23 #define __SX1276_H__
GregCr 0:e6ceb13d2d05 24
GregCr 0:e6ceb13d2d05 25 #include "radio.h"
GregCr 0:e6ceb13d2d05 26 #include "./registers/sx1276Regs-Fsk.h"
GregCr 0:e6ceb13d2d05 27 #include "./registers/sx1276Regs-LoRa.h"
Helmut Tschemernjak 38:d9189d958db8 28
Helmut Tschemernjak 38:d9189d958db8 29
GregCr 0:e6ceb13d2d05 30
mluis 16:d447f8d2d2d6 31 /*!
Helmut Tschemernjak 31:e50929bd3f32 32 * Radio wake-up time from sleep
Helmut Tschemernjak 31:e50929bd3f32 33 */
Helmut Tschemernjak 32:f6f0bff38543 34 #define RADIO_WAKEUP_TIME 1 // [ms]
Helmut Tschemernjak 31:e50929bd3f32 35
Helmut Tschemernjak 31:e50929bd3f32 36 /*!
Helmut Tschemernjak 31:e50929bd3f32 37 * Sync word for Private LoRa networks
mluis 16:d447f8d2d2d6 38 */
Helmut Tschemernjak 31:e50929bd3f32 39 #define LORA_MAC_PRIVATE_SYNCWORD 0x12
Helmut Tschemernjak 31:e50929bd3f32 40
Helmut Tschemernjak 31:e50929bd3f32 41 /*!
Helmut Tschemernjak 31:e50929bd3f32 42 * Sync word for Public LoRa networks
Helmut Tschemernjak 31:e50929bd3f32 43 */
Helmut Tschemernjak 31:e50929bd3f32 44 #define LORA_MAC_PUBLIC_SYNCWORD 0x34
Helmut Tschemernjak 31:e50929bd3f32 45
mluis 25:3778e6204cc1 46
mluis 25:3778e6204cc1 47 /*!
mluis 16:d447f8d2d2d6 48 * SX1276 definitions
mluis 16:d447f8d2d2d6 49 */
GregCr 0:e6ceb13d2d05 50 #define XTAL_FREQ 32000000
GregCr 0:e6ceb13d2d05 51 #define FREQ_STEP 61.03515625
GregCr 0:e6ceb13d2d05 52
GregCr 0:e6ceb13d2d05 53 #define RX_BUFFER_SIZE 256
GregCr 0:e6ceb13d2d05 54
GregCr 0:e6ceb13d2d05 55 /*!
GregCr 0:e6ceb13d2d05 56 * Constant values need to compute the RSSI value
GregCr 0:e6ceb13d2d05 57 */
GregCr 0:e6ceb13d2d05 58 #define RSSI_OFFSET_LF -164.0
GregCr 0:e6ceb13d2d05 59 #define RSSI_OFFSET_HF -157.0
GregCr 0:e6ceb13d2d05 60
GregCr 0:e6ceb13d2d05 61 #define RF_MID_BAND_THRESH 525000000
GregCr 0:e6ceb13d2d05 62
Helmut Tschemernjak 34:07e89f23c734 63
Helmut64 26:87796ee62589 64
Helmut Tschemernjak 39:706c32eda7e7 65
Helmut Tschemernjak 38:d9189d958db8 66 /*!
Helmut Tschemernjak 39:706c32eda7e7 67 * Type of the supported board. [SX1276MB1MAS / SX1276MB1LAS]
Helmut Tschemernjak 38:d9189d958db8 68 */
Helmut Tschemernjak 39:706c32eda7e7 69 typedef enum BoardType
Helmut Tschemernjak 39:706c32eda7e7 70 {
Helmut Tschemernjak 39:706c32eda7e7 71 SX1276MB1MAS = 0,
Helmut Tschemernjak 39:706c32eda7e7 72 SX1276MB1LAS,
Helmut Tschemernjak 39:706c32eda7e7 73 RFM95_SX1276,
Helmut Tschemernjak 39:706c32eda7e7 74 MURATA_SX1276,
Helmut Tschemernjak 39:706c32eda7e7 75 UNKNOWN
Helmut Tschemernjak 39:706c32eda7e7 76 }BoardType_t;
Helmut Tschemernjak 39:706c32eda7e7 77
Helmut Tschemernjak 38:d9189d958db8 78
Helmut Tschemernjak 33:5db0d1e716b1 79 typedef enum {
Helmut Tschemernjak 33:5db0d1e716b1 80 LORA_SF6 = 6, // 64 chips/symbol, SF6 requires an TCXO!
Helmut Tschemernjak 33:5db0d1e716b1 81 LORA_SF7 = 7, // 128 chips/symbol
Helmut Tschemernjak 33:5db0d1e716b1 82 LORA_SF8 = 8, // 256 chips/symbol
Helmut Tschemernjak 33:5db0d1e716b1 83 LORA_SF9 = 9, // 512 chips/symbol
Helmut Tschemernjak 33:5db0d1e716b1 84 LORA_SF10 = 10, // 1024 chips/symbol
Helmut Tschemernjak 33:5db0d1e716b1 85 LORA_SF11 = 11, // 2048 chips/symbol
Helmut Tschemernjak 33:5db0d1e716b1 86 LORA_SF12 = 12, // 4096 chips/symbol
Helmut Tschemernjak 33:5db0d1e716b1 87 } lora_spreading_factor_t;
Helmut Tschemernjak 33:5db0d1e716b1 88
Helmut Tschemernjak 33:5db0d1e716b1 89
Helmut Tschemernjak 33:5db0d1e716b1 90 typedef enum { // cyclic error coding to perform forward error detection and correction
Helmut Tschemernjak 33:5db0d1e716b1 91 LORA_ERROR_CODING_RATE_4_5 = 1, // 1.25x overhead
Helmut Tschemernjak 33:5db0d1e716b1 92 LORA_ERROR_CODING_RATE_4_6 = 2, // 1.50x overhead
Helmut Tschemernjak 33:5db0d1e716b1 93 LORA_ERROR_CODING_RATE_4_7 = 3, // 1.75x overhead
Helmut Tschemernjak 33:5db0d1e716b1 94 LORA_ERROR_CODING_RATE_4_8 = 4, // 2.00x overhead
Helmut Tschemernjak 33:5db0d1e716b1 95 } lora_coding_rate_t;
Helmut Tschemernjak 33:5db0d1e716b1 96
Helmut Tschemernjak 33:5db0d1e716b1 97
Helmut Tschemernjak 33:5db0d1e716b1 98 typedef enum {
Helmut Tschemernjak 33:5db0d1e716b1 99 RF_FREQUENCY_868_0 = 868000000, // Hz
Helmut Tschemernjak 33:5db0d1e716b1 100 RF_FREQUENCY_868_1 = 868100000, // Hz
Helmut Tschemernjak 33:5db0d1e716b1 101 RF_FREQUENCY_868_3 = 868300000, // Hz
Helmut Tschemernjak 33:5db0d1e716b1 102 RF_FREQUENCY_868_5 = 868500000, // Hz
Helmut Tschemernjak 33:5db0d1e716b1 103 } rf_frequency_t;
Helmut Tschemernjak 33:5db0d1e716b1 104
Helmut Tschemernjak 33:5db0d1e716b1 105
Helmut Tschemernjak 33:5db0d1e716b1 106
Helmut Tschemernjak 33:5db0d1e716b1 107 /*!
GregCr 0:e6ceb13d2d05 108 * Actual implementation of a SX1276 radio, inherits Radio
GregCr 0:e6ceb13d2d05 109 */
GregCr 0:e6ceb13d2d05 110 class SX1276 : public Radio
GregCr 0:e6ceb13d2d05 111 {
GregCr 0:e6ceb13d2d05 112 protected:
mluis 25:3778e6204cc1 113
mluis 13:618826a997e2 114 bool isRadioActive;
mluis 25:3778e6204cc1 115
Helmut Tschemernjak 34:07e89f23c734 116 BoardType_t boardConnected; //1 = SX1276MB1LAS; 0 = SX1276MB1MAS
mluis 25:3778e6204cc1 117
GregCr 23:1e143575df0f 118 uint8_t *rxtxBuffer;
mluis 13:618826a997e2 119
mluis 13:618826a997e2 120 /*!
Helmut Tschemernjak 39:706c32eda7e7 121 * Hardware IO IRQ callback function definition
Helmut Tschemernjak 39:706c32eda7e7 122 */
Helmut Tschemernjak 39:706c32eda7e7 123 typedef void ( SX1276::*DioIrqHandler )( void );
Helmut Tschemernjak 39:706c32eda7e7 124
Helmut Tschemernjak 39:706c32eda7e7 125 /*!
mluis 13:618826a997e2 126 * Hardware DIO IRQ functions
mluis 13:618826a997e2 127 */
mluis 13:618826a997e2 128 DioIrqHandler *dioIrq;
mluis 25:3778e6204cc1 129
Helmut Tschemernjak 39:706c32eda7e7 130
mluis 25:3778e6204cc1 131
mluis 13:618826a997e2 132 RadioSettings_t settings;
mluis 25:3778e6204cc1 133
Helmut Tschemernjak 55:00c1f5b83920 134 /*!
Helmut Tschemernjak 55:00c1f5b83920 135 * FSK bandwidth definition
Helmut Tschemernjak 55:00c1f5b83920 136 */
Helmut Tschemernjak 55:00c1f5b83920 137 struct BandwidthMap {
Helmut Tschemernjak 55:00c1f5b83920 138 uint32_t bandwidth;
Helmut Tschemernjak 55:00c1f5b83920 139 uint8_t RegValue;
Helmut Tschemernjak 55:00c1f5b83920 140 };
Helmut Tschemernjak 55:00c1f5b83920 141 static const struct BandwidthMap FskBandwidths[];
Helmut Tschemernjak 55:00c1f5b83920 142 static const struct BandwidthMap LoRaBandwidths[];
Helmut Tschemernjak 38:d9189d958db8 143
GregCr 0:e6ceb13d2d05 144 protected:
GregCr 0:e6ceb13d2d05 145
mluis 13:618826a997e2 146 /*!
mluis 13:618826a997e2 147 * Performs the Rx chain calibration for LF and HF bands
mluis 13:618826a997e2 148 * \remark Must be called just after the reset so all registers are at their
mluis 13:618826a997e2 149 * default values
mluis 13:618826a997e2 150 */
mluis 13:618826a997e2 151 void RxChainCalibration( void );
GregCr 0:e6ceb13d2d05 152
GregCr 0:e6ceb13d2d05 153 public:
Helmut Tschemernjak 34:07e89f23c734 154 SX1276( RadioEvents_t *events);
mluis 13:618826a997e2 155 virtual ~SX1276( );
mluis 13:618826a997e2 156
Helmut Tschemernjak 55:00c1f5b83920 157
Helmut Tschemernjak 55:00c1f5b83920 158
Helmut Tschemernjak 55:00c1f5b83920 159
mluis 13:618826a997e2 160 //-------------------------------------------------------------------------
mluis 13:618826a997e2 161 // Redefined Radio functions
mluis 13:618826a997e2 162 //-------------------------------------------------------------------------
mluis 13:618826a997e2 163 /*!
Helmut Tschemernjak 54:0d8ea87fbab9 164 * @brief Return current radio status, returns true if a radios has been found.
mluis 21:2e496deb7858 165 *
mluis 21:2e496deb7858 166 * @param [IN] events Structure containing the driver callback functions
mluis 21:2e496deb7858 167 */
Helmut Tschemernjak 54:0d8ea87fbab9 168 virtual bool Init( RadioEvents_t *events );
Helmut Tschemernjak 38:d9189d958db8 169
Helmut Tschemernjak 38:d9189d958db8 170 /*!
Helmut Tschemernjak 38:d9189d958db8 171 * @brief Initializes the radio registers
Helmut Tschemernjak 38:d9189d958db8 172 */
Helmut Tschemernjak 38:d9189d958db8 173 virtual void RadioRegistersInit(void);
Helmut Tschemernjak 38:d9189d958db8 174
mluis 21:2e496deb7858 175 /*!
GregCr 0:e6ceb13d2d05 176 * Return current radio status
GregCr 0:e6ceb13d2d05 177 *
Helmut Tschemernjak 50:43f7160e869c 178 * @param status Radio status. [RF_IDLE, RX_RUNNING, TX_RUNNING, CAD_RUNNING]
GregCr 0:e6ceb13d2d05 179 */
GregCr 19:71a47bb03fbb 180 virtual RadioState GetStatus( void );
mluis 25:3778e6204cc1 181
mluis 13:618826a997e2 182 /*!
mluis 13:618826a997e2 183 * @brief Configures the SX1276 with the given modem
mluis 13:618826a997e2 184 *
mluis 13:618826a997e2 185 * @param [IN] modem Modem to be used [0: FSK, 1: LoRa]
mluis 13:618826a997e2 186 */
mluis 22:7f3aab69cca9 187 virtual void SetModem( RadioModems_t modem );
mluis 13:618826a997e2 188
mluis 13:618826a997e2 189 /*!
GregCr 0:e6ceb13d2d05 190 * @brief Sets the channel frequency
GregCr 0:e6ceb13d2d05 191 *
GregCr 0:e6ceb13d2d05 192 * @param [IN] freq Channel RF frequency
GregCr 0:e6ceb13d2d05 193 */
GregCr 0:e6ceb13d2d05 194 virtual void SetChannel( uint32_t freq );
mluis 25:3778e6204cc1 195
mluis 13:618826a997e2 196 /*!
GregCr 0:e6ceb13d2d05 197 * @brief Sets the channels configuration
GregCr 0:e6ceb13d2d05 198 *
GregCr 0:e6ceb13d2d05 199 * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
GregCr 0:e6ceb13d2d05 200 * @param [IN] freq Channel RF frequency
GregCr 0:e6ceb13d2d05 201 * @param [IN] rssiThresh RSSI threshold
GregCr 0:e6ceb13d2d05 202 *
GregCr 0:e6ceb13d2d05 203 * @retval isFree [true: Channel is free, false: Channel is not free]
GregCr 0:e6ceb13d2d05 204 */
mluis 22:7f3aab69cca9 205 virtual bool IsChannelFree( RadioModems_t modem, uint32_t freq, int16_t rssiThresh );
mluis 25:3778e6204cc1 206
mluis 13:618826a997e2 207 /*!
GregCr 0:e6ceb13d2d05 208 * @brief Generates a 32 bits random value based on the RSSI readings
GregCr 0:e6ceb13d2d05 209 *
GregCr 0:e6ceb13d2d05 210 * \remark This function sets the radio in LoRa modem mode and disables
GregCr 0:e6ceb13d2d05 211 * all interrupts.
GregCr 0:e6ceb13d2d05 212 * After calling this function either Radio.SetRxConfig or
GregCr 0:e6ceb13d2d05 213 * Radio.SetTxConfig functions must be called.
GregCr 0:e6ceb13d2d05 214 *
GregCr 0:e6ceb13d2d05 215 * @retval randomValue 32 bits random value
GregCr 0:e6ceb13d2d05 216 */
GregCr 0:e6ceb13d2d05 217 virtual uint32_t Random( void );
mluis 25:3778e6204cc1 218
mluis 13:618826a997e2 219 /*!
GregCr 0:e6ceb13d2d05 220 * @brief Sets the reception parameters
GregCr 0:e6ceb13d2d05 221 *
GregCr 0:e6ceb13d2d05 222 * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
GregCr 0:e6ceb13d2d05 223 * @param [IN] bandwidth Sets the bandwidth
GregCr 0:e6ceb13d2d05 224 * FSK : >= 2600 and <= 250000 Hz
GregCr 0:e6ceb13d2d05 225 * LoRa: [0: 125 kHz, 1: 250 kHz,
GregCr 0:e6ceb13d2d05 226 * 2: 500 kHz, 3: Reserved]
GregCr 0:e6ceb13d2d05 227 * @param [IN] datarate Sets the Datarate
GregCr 0:e6ceb13d2d05 228 * FSK : 600..300000 bits/s
GregCr 0:e6ceb13d2d05 229 * LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
GregCr 0:e6ceb13d2d05 230 * 10: 1024, 11: 2048, 12: 4096 chips]
GregCr 0:e6ceb13d2d05 231 * @param [IN] coderate Sets the coding rate ( LoRa only )
GregCr 0:e6ceb13d2d05 232 * FSK : N/A ( set to 0 )
GregCr 0:e6ceb13d2d05 233 * LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
GregCr 0:e6ceb13d2d05 234 * @param [IN] bandwidthAfc Sets the AFC Bandwidth ( FSK only )
GregCr 0:e6ceb13d2d05 235 * FSK : >= 2600 and <= 250000 Hz
GregCr 0:e6ceb13d2d05 236 * LoRa: N/A ( set to 0 )
GregCr 0:e6ceb13d2d05 237 * @param [IN] preambleLen Sets the Preamble length ( LoRa only )
GregCr 0:e6ceb13d2d05 238 * FSK : N/A ( set to 0 )
GregCr 0:e6ceb13d2d05 239 * LoRa: Length in symbols ( the hardware adds 4 more symbols )
Helmut Tschemernjak 31:e50929bd3f32 240 * @param [IN] symbTimeout Sets the RxSingle timeout value
Helmut Tschemernjak 31:e50929bd3f32 241 * FSK : timeout number of bytes
GregCr 0:e6ceb13d2d05 242 * LoRa: timeout in symbols
GregCr 0:e6ceb13d2d05 243 * @param [IN] fixLen Fixed length packets [0: variable, 1: fixed]
mluis 13:618826a997e2 244 * @param [IN] payloadLen Sets payload length when fixed lenght is used
GregCr 0:e6ceb13d2d05 245 * @param [IN] crcOn Enables/Disables the CRC [0: OFF, 1: ON]
mluis 13:618826a997e2 246 * @param [IN] freqHopOn Enables disables the intra-packet frequency hopping [0: OFF, 1: ON] (LoRa only)
mluis 13:618826a997e2 247 * @param [IN] hopPeriod Number of symbols bewteen each hop (LoRa only)
GregCr 0:e6ceb13d2d05 248 * @param [IN] iqInverted Inverts IQ signals ( LoRa only )
GregCr 0:e6ceb13d2d05 249 * FSK : N/A ( set to 0 )
GregCr 0:e6ceb13d2d05 250 * LoRa: [0: not inverted, 1: inverted]
GregCr 0:e6ceb13d2d05 251 * @param [IN] rxContinuous Sets the reception in continuous mode
GregCr 0:e6ceb13d2d05 252 * [false: single mode, true: continuous mode]
GregCr 0:e6ceb13d2d05 253 */
mluis 22:7f3aab69cca9 254 virtual void SetRxConfig ( RadioModems_t modem, uint32_t bandwidth,
GregCr 0:e6ceb13d2d05 255 uint32_t datarate, uint8_t coderate,
GregCr 0:e6ceb13d2d05 256 uint32_t bandwidthAfc, uint16_t preambleLen,
GregCr 0:e6ceb13d2d05 257 uint16_t symbTimeout, bool fixLen,
mluis 13:618826a997e2 258 uint8_t payloadLen,
mluis 13:618826a997e2 259 bool crcOn, bool freqHopOn, uint8_t hopPeriod,
GregCr 6:e7f02929cd3d 260 bool iqInverted, bool rxContinuous );
mluis 25:3778e6204cc1 261
mluis 13:618826a997e2 262 /*!
GregCr 0:e6ceb13d2d05 263 * @brief Sets the transmission parameters
GregCr 0:e6ceb13d2d05 264 *
GregCr 0:e6ceb13d2d05 265 * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
GregCr 0:e6ceb13d2d05 266 * @param [IN] power Sets the output power [dBm]
GregCr 0:e6ceb13d2d05 267 * @param [IN] fdev Sets the frequency deviation ( FSK only )
GregCr 0:e6ceb13d2d05 268 * FSK : [Hz]
GregCr 0:e6ceb13d2d05 269 * LoRa: 0
GregCr 0:e6ceb13d2d05 270 * @param [IN] bandwidth Sets the bandwidth ( LoRa only )
GregCr 0:e6ceb13d2d05 271 * FSK : 0
GregCr 0:e6ceb13d2d05 272 * LoRa: [0: 125 kHz, 1: 250 kHz,
GregCr 0:e6ceb13d2d05 273 * 2: 500 kHz, 3: Reserved]
GregCr 0:e6ceb13d2d05 274 * @param [IN] datarate Sets the Datarate
GregCr 0:e6ceb13d2d05 275 * FSK : 600..300000 bits/s
GregCr 0:e6ceb13d2d05 276 * LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
GregCr 0:e6ceb13d2d05 277 * 10: 1024, 11: 2048, 12: 4096 chips]
GregCr 0:e6ceb13d2d05 278 * @param [IN] coderate Sets the coding rate ( LoRa only )
GregCr 0:e6ceb13d2d05 279 * FSK : N/A ( set to 0 )
GregCr 0:e6ceb13d2d05 280 * LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
GregCr 0:e6ceb13d2d05 281 * @param [IN] preambleLen Sets the preamble length
GregCr 0:e6ceb13d2d05 282 * @param [IN] fixLen Fixed length packets [0: variable, 1: fixed]
GregCr 0:e6ceb13d2d05 283 * @param [IN] crcOn Enables disables the CRC [0: OFF, 1: ON]
mluis 13:618826a997e2 284 * @param [IN] freqHopOn Enables disables the intra-packet frequency hopping [0: OFF, 1: ON] (LoRa only)
mluis 13:618826a997e2 285 * @param [IN] hopPeriod Number of symbols bewteen each hop (LoRa only)
GregCr 0:e6ceb13d2d05 286 * @param [IN] iqInverted Inverts IQ signals ( LoRa only )
GregCr 0:e6ceb13d2d05 287 * FSK : N/A ( set to 0 )
GregCr 0:e6ceb13d2d05 288 * LoRa: [0: not inverted, 1: inverted]
Helmut Tschemernjak 31:e50929bd3f32 289 * @param [IN] timeout Transmission timeout [ms]
GregCr 0:e6ceb13d2d05 290 */
mluis 22:7f3aab69cca9 291 virtual void SetTxConfig( RadioModems_t modem, int8_t power, uint32_t fdev,
GregCr 0:e6ceb13d2d05 292 uint32_t bandwidth, uint32_t datarate,
GregCr 0:e6ceb13d2d05 293 uint8_t coderate, uint16_t preambleLen,
mluis 13:618826a997e2 294 bool fixLen, bool crcOn, bool freqHopOn,
mluis 13:618826a997e2 295 uint8_t hopPeriod, bool iqInverted, uint32_t timeout );
mluis 25:3778e6204cc1 296
Helmut Tschemernjak 38:d9189d958db8 297
mluis 13:618826a997e2 298 /*!
Helmut Tschemernjak 31:e50929bd3f32 299 * @brief Checks if the given RF frequency is supported by the hardware
Helmut Tschemernjak 31:e50929bd3f32 300 *
Helmut Tschemernjak 31:e50929bd3f32 301 * @param [IN] frequency RF frequency to be checked
Helmut Tschemernjak 31:e50929bd3f32 302 * @retval isSupported [true: supported, false: unsupported]
Helmut Tschemernjak 31:e50929bd3f32 303 */
Helmut Tschemernjak 31:e50929bd3f32 304 virtual bool CheckRfFrequency( uint32_t frequency ) = 0;
Helmut Tschemernjak 31:e50929bd3f32 305
Helmut Tschemernjak 31:e50929bd3f32 306 /*!
GregCr 0:e6ceb13d2d05 307 * @brief Computes the packet time on air for the given payload
GregCr 0:e6ceb13d2d05 308 *
GregCr 0:e6ceb13d2d05 309 * \Remark Can only be called once SetRxConfig or SetTxConfig have been called
GregCr 0:e6ceb13d2d05 310 *
GregCr 0:e6ceb13d2d05 311 * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
GregCr 0:e6ceb13d2d05 312 * @param [IN] pktLen Packet payload length
GregCr 0:e6ceb13d2d05 313 *
GregCr 0:e6ceb13d2d05 314 * @retval airTime Computed airTime for the given packet payload length
GregCr 0:e6ceb13d2d05 315 */
Helmut Tschemernjak 31:e50929bd3f32 316 virtual uint32_t TimeOnAir ( RadioModems_t modem, uint8_t pktLen );
mluis 25:3778e6204cc1 317
mluis 13:618826a997e2 318 /*!
GregCr 0:e6ceb13d2d05 319 * @brief Sends the buffer of size. Prepares the packet to be sent and sets
GregCr 0:e6ceb13d2d05 320 * the radio in transmission
GregCr 0:e6ceb13d2d05 321 *
GregCr 0:e6ceb13d2d05 322 * @param [IN]: buffer Buffer pointer
GregCr 0:e6ceb13d2d05 323 * @param [IN]: size Buffer size
Helmut Tschemernjak 50:43f7160e869c 324 * @param [IN]: buffer Header pointer
Helmut Tschemernjak 50:43f7160e869c 325 * @param [IN]: size Header size
GregCr 0:e6ceb13d2d05 326 */
Helmut Tschemernjak 51:aef3234bcb71 327 virtual void Send(void *buffer, int16_t size, void *header = NULL, int16_t hsize = 0);
mluis 25:3778e6204cc1 328
mluis 13:618826a997e2 329 /*!
GregCr 0:e6ceb13d2d05 330 * @brief Sets the radio in sleep mode
GregCr 0:e6ceb13d2d05 331 */
GregCr 0:e6ceb13d2d05 332 virtual void Sleep( void );
GregCr 0:e6ceb13d2d05 333
mluis 13:618826a997e2 334 /*!
GregCr 0:e6ceb13d2d05 335 * @brief Sets the radio in standby mode
GregCr 0:e6ceb13d2d05 336 */
GregCr 0:e6ceb13d2d05 337 virtual void Standby( void );
Helmut Tschemernjak 31:e50929bd3f32 338
Helmut Tschemernjak 31:e50929bd3f32 339 /*!
Helmut Tschemernjak 31:e50929bd3f32 340 * @brief Sets the radio in CAD mode
Helmut Tschemernjak 31:e50929bd3f32 341 */
Helmut Tschemernjak 31:e50929bd3f32 342 virtual void StartCad( void );
mluis 25:3778e6204cc1 343
mluis 13:618826a997e2 344 /*!
GregCr 0:e6ceb13d2d05 345 * @brief Sets the radio in reception mode for the given time
Helmut Tschemernjak 31:e50929bd3f32 346 * @param [IN] timeout Reception timeout [ms]
GregCr 0:e6ceb13d2d05 347 * [0: continuous, others timeout]
GregCr 0:e6ceb13d2d05 348 */
GregCr 0:e6ceb13d2d05 349 virtual void Rx( uint32_t timeout );
Helmut Tschemernjak 54:0d8ea87fbab9 350
Helmut Tschemernjak 54:0d8ea87fbab9 351 /*!
Helmut Tschemernjak 54:0d8ea87fbab9 352 * @brief Check is radio receives a signal
Helmut Tschemernjak 54:0d8ea87fbab9 353 */
Helmut Tschemernjak 54:0d8ea87fbab9 354 virtual bool RxSignalPending();
Helmut Tschemernjak 54:0d8ea87fbab9 355
mluis 25:3778e6204cc1 356
mluis 13:618826a997e2 357 /*!
GregCr 0:e6ceb13d2d05 358 * @brief Sets the radio in transmission mode for the given time
Helmut Tschemernjak 31:e50929bd3f32 359 * @param [IN] timeout Transmission timeout [ms]
GregCr 0:e6ceb13d2d05 360 * [0: continuous, others timeout]
GregCr 0:e6ceb13d2d05 361 */
GregCr 0:e6ceb13d2d05 362 virtual void Tx( uint32_t timeout );
mluis 25:3778e6204cc1 363
mluis 13:618826a997e2 364 /*!
Helmut Tschemernjak 31:e50929bd3f32 365 * @brief Sets the radio in continuous wave transmission mode
Helmut Tschemernjak 31:e50929bd3f32 366 *
Helmut Tschemernjak 31:e50929bd3f32 367 * @param [IN]: freq Channel RF frequency
Helmut Tschemernjak 31:e50929bd3f32 368 * @param [IN]: power Sets the output power [dBm]
Helmut Tschemernjak 31:e50929bd3f32 369 * @param [IN]: time Transmission mode timeout [s]
GregCr 7:2b555111463f 370 */
Helmut Tschemernjak 31:e50929bd3f32 371
Helmut Tschemernjak 31:e50929bd3f32 372 virtual void SetTxContinuousWave( uint32_t freq, int8_t power, uint16_t time );
mluis 25:3778e6204cc1 373
mluis 13:618826a997e2 374 /*!
Helmut Tschemernjak 50:43f7160e869c 375 * @brief Returns the maximal transfer unit for a given modem
Helmut Tschemernjak 50:43f7160e869c 376 *
Helmut Tschemernjak 50:43f7160e869c 377 * @retval MTU size in bytes
Helmut Tschemernjak 50:43f7160e869c 378 */
Helmut Tschemernjak 50:43f7160e869c 379 virtual int16_t MaxMTUSize( RadioModems_t modem );
Helmut Tschemernjak 50:43f7160e869c 380
Helmut Tschemernjak 50:43f7160e869c 381 /*!
GregCr 0:e6ceb13d2d05 382 * @brief Reads the current RSSI value
GregCr 0:e6ceb13d2d05 383 *
GregCr 0:e6ceb13d2d05 384 * @retval rssiValue Current RSSI value in [dBm]
GregCr 0:e6ceb13d2d05 385 */
mluis 22:7f3aab69cca9 386 virtual int16_t GetRssi ( RadioModems_t modem );
mluis 25:3778e6204cc1 387
mluis 13:618826a997e2 388 /*!
GregCr 0:e6ceb13d2d05 389 * @brief Writes the radio register at the specified address
GregCr 0:e6ceb13d2d05 390 *
GregCr 0:e6ceb13d2d05 391 * @param [IN]: addr Register address
GregCr 0:e6ceb13d2d05 392 * @param [IN]: data New register value
GregCr 0:e6ceb13d2d05 393 */
GregCr 0:e6ceb13d2d05 394 virtual void Write ( uint8_t addr, uint8_t data ) = 0;
mluis 25:3778e6204cc1 395
mluis 13:618826a997e2 396 /*!
GregCr 0:e6ceb13d2d05 397 * @brief Reads the radio register at the specified address
GregCr 0:e6ceb13d2d05 398 *
GregCr 0:e6ceb13d2d05 399 * @param [IN]: addr Register address
GregCr 0:e6ceb13d2d05 400 * @retval data Register value
GregCr 0:e6ceb13d2d05 401 */
GregCr 0:e6ceb13d2d05 402 virtual uint8_t Read ( uint8_t addr ) = 0;
mluis 25:3778e6204cc1 403
mluis 13:618826a997e2 404 /*!
GregCr 0:e6ceb13d2d05 405 * @brief Writes multiple radio registers starting at address
GregCr 0:e6ceb13d2d05 406 *
GregCr 0:e6ceb13d2d05 407 * @param [IN] addr First Radio register address
GregCr 0:e6ceb13d2d05 408 * @param [IN] buffer Buffer containing the new register's values
GregCr 0:e6ceb13d2d05 409 * @param [IN] size Number of registers to be written
GregCr 0:e6ceb13d2d05 410 */
Helmut Tschemernjak 51:aef3234bcb71 411 virtual void Write( uint8_t addr, void *buffer, uint8_t size ) = 0;
mluis 25:3778e6204cc1 412
mluis 13:618826a997e2 413 /*!
GregCr 0:e6ceb13d2d05 414 * @brief Reads multiple radio registers starting at address
GregCr 0:e6ceb13d2d05 415 *
GregCr 0:e6ceb13d2d05 416 * @param [IN] addr First Radio register address
GregCr 0:e6ceb13d2d05 417 * @param [OUT] buffer Buffer where to copy the registers data
GregCr 0:e6ceb13d2d05 418 * @param [IN] size Number of registers to be read
GregCr 0:e6ceb13d2d05 419 */
Helmut Tschemernjak 51:aef3234bcb71 420 virtual void Read ( uint8_t addr, void *buffer, uint8_t size ) = 0;
mluis 25:3778e6204cc1 421
mluis 13:618826a997e2 422 /*!
mluis 13:618826a997e2 423 * @brief Writes the buffer contents to the SX1276 FIFO
mluis 13:618826a997e2 424 *
mluis 13:618826a997e2 425 * @param [IN] buffer Buffer containing data to be put on the FIFO.
mluis 13:618826a997e2 426 * @param [IN] size Number of bytes to be written to the FIFO
mluis 13:618826a997e2 427 */
Helmut Tschemernjak 51:aef3234bcb71 428 virtual void WriteFifo( void *buffer, uint8_t size ) = 0;
GregCr 0:e6ceb13d2d05 429
mluis 13:618826a997e2 430 /*!
mluis 13:618826a997e2 431 * @brief Reads the contents of the SX1276 FIFO
mluis 13:618826a997e2 432 *
mluis 13:618826a997e2 433 * @param [OUT] buffer Buffer where to copy the FIFO read data.
mluis 13:618826a997e2 434 * @param [IN] size Number of bytes to be read from the FIFO
mluis 13:618826a997e2 435 */
Helmut Tschemernjak 51:aef3234bcb71 436 virtual void ReadFifo( void *buffer, uint8_t size ) = 0;
mluis 13:618826a997e2 437 /*!
mluis 13:618826a997e2 438 * @brief Resets the SX1276
mluis 13:618826a997e2 439 */
mluis 13:618826a997e2 440 virtual void Reset( void ) = 0;
mluis 25:3778e6204cc1 441
mluis 20:e05596ba4166 442 /*!
mluis 20:e05596ba4166 443 * @brief Sets the maximum payload length.
mluis 20:e05596ba4166 444 *
mluis 20:e05596ba4166 445 * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
mluis 20:e05596ba4166 446 * @param [IN] max Maximum payload length in bytes
mluis 20:e05596ba4166 447 */
mluis 22:7f3aab69cca9 448 virtual void SetMaxPayloadLength( RadioModems_t modem, uint8_t max );
mluis 25:3778e6204cc1 449
Helmut Tschemernjak 31:e50929bd3f32 450 /*!
Helmut Tschemernjak 31:e50929bd3f32 451 * \brief Sets the network to public or private. Updates the sync byte.
Helmut Tschemernjak 31:e50929bd3f32 452 *
Helmut Tschemernjak 31:e50929bd3f32 453 * \remark Applies to LoRa modem only
Helmut Tschemernjak 31:e50929bd3f32 454 *
Helmut Tschemernjak 31:e50929bd3f32 455 * \param [IN] enable if true, it enables a public network
Helmut Tschemernjak 31:e50929bd3f32 456 */
Helmut Tschemernjak 31:e50929bd3f32 457 virtual void SetPublicNetwork( bool enable );
Helmut Tschemernjak 31:e50929bd3f32 458
Helmut Tschemernjak 31:e50929bd3f32 459
mluis 13:618826a997e2 460 //-------------------------------------------------------------------------
mluis 13:618826a997e2 461 // Board relative functions
mluis 13:618826a997e2 462 //-------------------------------------------------------------------------
Helmut Tschemernjak 55:00c1f5b83920 463 /*!
Helmut Tschemernjak 55:00c1f5b83920 464 * Radio registers definition
Helmut Tschemernjak 55:00c1f5b83920 465 */
Helmut Tschemernjak 55:00c1f5b83920 466 struct RadioRegisters {
Helmut Tschemernjak 55:00c1f5b83920 467 ModemType Modem;
Helmut Tschemernjak 55:00c1f5b83920 468 uint8_t Addr;
Helmut Tschemernjak 55:00c1f5b83920 469 uint8_t Value;
Helmut Tschemernjak 55:00c1f5b83920 470 };
Helmut Tschemernjak 55:00c1f5b83920 471
Helmut Tschemernjak 55:00c1f5b83920 472
Helmut Tschemernjak 55:00c1f5b83920 473 static const struct RadioRegisters RadioRegsInit[];
Helmut Tschemernjak 42:72deced1a4c4 474
Helmut Tschemernjak 42:72deced1a4c4 475 typedef enum {
Helmut Tschemernjak 42:72deced1a4c4 476 RXTimeoutTimer,
Helmut Tschemernjak 42:72deced1a4c4 477 TXTimeoutTimer,
Helmut Tschemernjak 53:6d3adad59633 478 RXTimeoutSyncWordTimer
Helmut Tschemernjak 42:72deced1a4c4 479 } TimeoutTimer_t;
Helmut Tschemernjak 42:72deced1a4c4 480
Helmut Tschemernjak 42:72deced1a4c4 481
GregCr 0:e6ceb13d2d05 482 protected:
mluis 13:618826a997e2 483 /*!
mluis 13:618826a997e2 484 * @brief Initializes the radio I/Os pins interface
mluis 13:618826a997e2 485 */
mluis 13:618826a997e2 486 virtual void IoInit( void ) = 0;
mluis 13:618826a997e2 487
mluis 13:618826a997e2 488 /*!
mluis 13:618826a997e2 489 * @brief Initializes the radio SPI
mluis 13:618826a997e2 490 */
mluis 13:618826a997e2 491 virtual void SpiInit( void ) = 0;
mluis 25:3778e6204cc1 492
mluis 13:618826a997e2 493 /*!
mluis 13:618826a997e2 494 * @brief Initializes DIO IRQ handlers
mluis 13:618826a997e2 495 *
mluis 13:618826a997e2 496 * @param [IN] irqHandlers Array containing the IRQ callback functions
mluis 13:618826a997e2 497 */
mluis 13:618826a997e2 498 virtual void IoIrqInit( DioIrqHandler *irqHandlers ) = 0;
GregCr 0:e6ceb13d2d05 499
mluis 13:618826a997e2 500 /*!
mluis 13:618826a997e2 501 * @brief De-initializes the radio I/Os pins interface.
mluis 13:618826a997e2 502 *
mluis 13:618826a997e2 503 * \remark Useful when going in MCU lowpower modes
mluis 13:618826a997e2 504 */
mluis 13:618826a997e2 505 virtual void IoDeInit( void ) = 0;
GregCr 0:e6ceb13d2d05 506
mluis 13:618826a997e2 507 /*!
Helmut Tschemernjak 31:e50929bd3f32 508 * @brief Sets the radio output power.
Helmut Tschemernjak 31:e50929bd3f32 509 *
Helmut Tschemernjak 31:e50929bd3f32 510 * @param [IN] power Sets the RF output power
Helmut Tschemernjak 31:e50929bd3f32 511 */
Helmut Tschemernjak 31:e50929bd3f32 512 virtual void SetRfTxPower( int8_t power ) = 0;
Helmut Tschemernjak 31:e50929bd3f32 513
Helmut Tschemernjak 31:e50929bd3f32 514 /*!
mluis 13:618826a997e2 515 * @brief Gets the board PA selection configuration
mluis 13:618826a997e2 516 *
mluis 13:618826a997e2 517 * @param [IN] channel Channel frequency in Hz
mluis 13:618826a997e2 518 * @retval PaSelect RegPaConfig PaSelect value
mluis 13:618826a997e2 519 */
mluis 13:618826a997e2 520 virtual uint8_t GetPaSelect( uint32_t channel ) = 0;
GregCr 0:e6ceb13d2d05 521
mluis 13:618826a997e2 522 /*!
mluis 13:618826a997e2 523 * @brief Set the RF Switch I/Os pins in Low Power mode
mluis 13:618826a997e2 524 *
mluis 13:618826a997e2 525 * @param [IN] status enable or disable
mluis 13:618826a997e2 526 */
mluis 13:618826a997e2 527 virtual void SetAntSwLowPower( bool status ) = 0;
GregCr 0:e6ceb13d2d05 528
mluis 13:618826a997e2 529 /*!
mluis 13:618826a997e2 530 * @brief Initializes the RF Switch I/Os pins interface
mluis 13:618826a997e2 531 */
mluis 13:618826a997e2 532 virtual void AntSwInit( void ) = 0;
GregCr 0:e6ceb13d2d05 533
mluis 13:618826a997e2 534 /*!
mluis 13:618826a997e2 535 * @brief De-initializes the RF Switch I/Os pins interface
mluis 13:618826a997e2 536 *
mluis 13:618826a997e2 537 * \remark Needed to decrease the power consumption in MCU lowpower modes
mluis 13:618826a997e2 538 */
mluis 13:618826a997e2 539 virtual void AntSwDeInit( void ) = 0;
GregCr 0:e6ceb13d2d05 540
mluis 13:618826a997e2 541 /*!
Helmut Tschemernjak 31:e50929bd3f32 542 * @brief Controls the antenna switch if necessary.
mluis 13:618826a997e2 543 *
mluis 13:618826a997e2 544 * \remark see errata note
mluis 13:618826a997e2 545 *
Helmut Tschemernjak 31:e50929bd3f32 546 * @param [IN] opMode Current radio operating mode
mluis 13:618826a997e2 547 */
Helmut Tschemernjak 31:e50929bd3f32 548 virtual void SetAntSw( uint8_t opMode ) = 0;
Helmut Tschemernjak 31:e50929bd3f32 549
Helmut Tschemernjak 44:544add59b26d 550 typedef void ( SX1276::*timeoutFuncPtr)( void );
Helmut Tschemernjak 44:544add59b26d 551
Helmut Tschemernjak 44:544add59b26d 552
Helmut Tschemernjak 38:d9189d958db8 553 /*
Helmut Tschemernjak 38:d9189d958db8 554 * The the Timeout for a given Timer.
Helmut Tschemernjak 38:d9189d958db8 555 */
Helmut Tschemernjak 44:544add59b26d 556 virtual void SetTimeout(TimeoutTimer_t timer, timeoutFuncPtr, int timeout_ms = 0) = 0;
Helmut Tschemernjak 42:72deced1a4c4 557
GregCr 0:e6ceb13d2d05 558 protected:
GregCr 0:e6ceb13d2d05 559
mluis 13:618826a997e2 560 /*!
mluis 13:618826a997e2 561 * @brief Sets the SX1276 operating mode
mluis 13:618826a997e2 562 *
mluis 13:618826a997e2 563 * @param [IN] opMode New operating mode
mluis 13:618826a997e2 564 */
mluis 13:618826a997e2 565 virtual void SetOpMode( uint8_t opMode );
GregCr 0:e6ceb13d2d05 566
mluis 13:618826a997e2 567 /*
mluis 13:618826a997e2 568 * SX1276 DIO IRQ callback functions prototype
mluis 13:618826a997e2 569 */
GregCr 0:e6ceb13d2d05 570
mluis 13:618826a997e2 571 /*!
mluis 13:618826a997e2 572 * @brief DIO 0 IRQ callback
mluis 13:618826a997e2 573 */
mluis 13:618826a997e2 574 virtual void OnDio0Irq( void );
GregCr 0:e6ceb13d2d05 575
mluis 13:618826a997e2 576 /*!
mluis 13:618826a997e2 577 * @brief DIO 1 IRQ callback
mluis 13:618826a997e2 578 */
mluis 13:618826a997e2 579 virtual void OnDio1Irq( void );
GregCr 0:e6ceb13d2d05 580
mluis 13:618826a997e2 581 /*!
mluis 13:618826a997e2 582 * @brief DIO 2 IRQ callback
mluis 13:618826a997e2 583 */
mluis 13:618826a997e2 584 virtual void OnDio2Irq( void );
GregCr 0:e6ceb13d2d05 585
mluis 13:618826a997e2 586 /*!
mluis 13:618826a997e2 587 * @brief DIO 3 IRQ callback
mluis 13:618826a997e2 588 */
mluis 13:618826a997e2 589 virtual void OnDio3Irq( void );
GregCr 0:e6ceb13d2d05 590
mluis 13:618826a997e2 591 /*!
mluis 13:618826a997e2 592 * @brief DIO 4 IRQ callback
mluis 13:618826a997e2 593 */
mluis 13:618826a997e2 594 virtual void OnDio4Irq( void );
GregCr 0:e6ceb13d2d05 595
mluis 13:618826a997e2 596 /*!
mluis 13:618826a997e2 597 * @brief DIO 5 IRQ callback
mluis 13:618826a997e2 598 */
mluis 13:618826a997e2 599 virtual void OnDio5Irq( void );
GregCr 0:e6ceb13d2d05 600
mluis 13:618826a997e2 601 /*!
Helmut Tschemernjak 44:544add59b26d 602 * @brief Tx & Rx timeout timer callback
Helmut Tschemernjak 44:544add59b26d 603 */
Helmut Tschemernjak 44:544add59b26d 604 virtual void OnTimeoutIrq( void );
Helmut Tschemernjak 44:544add59b26d 605
Helmut Tschemernjak 44:544add59b26d 606 /*!
mluis 13:618826a997e2 607 * Returns the known FSK bandwidth registers value
mluis 13:618826a997e2 608 *
mluis 13:618826a997e2 609 * \param [IN] bandwidth Bandwidth value in Hz
mluis 13:618826a997e2 610 * \retval regValue Bandwidth register value.
mluis 13:618826a997e2 611 */
mluis 13:618826a997e2 612 static uint8_t GetFskBandwidthRegValue( uint32_t bandwidth );
Helmut Tschemernjak 55:00c1f5b83920 613
Helmut Tschemernjak 55:00c1f5b83920 614 static uint8_t GetLoRaBandwidthRegValue( uint32_t bandwidth );
Helmut Tschemernjak 55:00c1f5b83920 615
Helmut Tschemernjak 55:00c1f5b83920 616 enum {
Helmut Tschemernjak 55:00c1f5b83920 617 LORA_BANKWIDTH_7kHz = 0, // 7.8 kHz requires TCXO
Helmut Tschemernjak 55:00c1f5b83920 618 LORA_BANKWIDTH_10kHz = 1, // 10.4 kHz requires TCXO
Helmut Tschemernjak 55:00c1f5b83920 619 LORA_BANKWIDTH_15kHz = 2, // 15.6 kHz requires TCXO
Helmut Tschemernjak 55:00c1f5b83920 620 LORA_BANKWIDTH_20kHz = 3, // 20.8 kHz requires TCXO
Helmut Tschemernjak 55:00c1f5b83920 621 LORA_BANKWIDTH_31kHz = 4, // 31.2 kHz requires TCXO
Helmut Tschemernjak 55:00c1f5b83920 622 LORA_BANKWIDTH_41kHz = 5, // 41.4 kHz requires TCXO
Helmut Tschemernjak 55:00c1f5b83920 623 LORA_BANKWIDTH_62kHz = 6, // 62.5 kHz requires TCXO
Helmut Tschemernjak 55:00c1f5b83920 624 LORA_BANKWIDTH_125kHz = 7,
Helmut Tschemernjak 55:00c1f5b83920 625 LORA_BANKWIDTH_250kHz = 8,
Helmut Tschemernjak 55:00c1f5b83920 626 LORA_BANKWIDTH_500kHz = 9,
Helmut Tschemernjak 55:00c1f5b83920 627 LORA_BANKWIDTH_RESERVED = 10,
Helmut Tschemernjak 55:00c1f5b83920 628 };
GregCr 0:e6ceb13d2d05 629 };
GregCr 0:e6ceb13d2d05 630
mluis 22:7f3aab69cca9 631 #endif // __SX1276_H__