Based on SX1276Lib. Simplified and targeted for Modtronix inAir modules. All pins can now be specified to use interrupts or general purpose I/O pins.
radio.h@9:9a77e2c7c5e8, 2016-08-19 (annotated)
- Committer:
- modtronix-com
- Date:
- Fri Aug 19 15:50:01 2016 +1000
- Revision:
- 9:9a77e2c7c5e8
- Parent:
- 5:1a255cc8d54a
Cleaned up includes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
modtronix | 0:4041fad070ec | 1 | /* |
modtronix | 0:4041fad070ec | 2 | / _____) _ | | |
modtronix | 0:4041fad070ec | 3 | ( (____ _____ ____ _| |_ _____ ____| |__ |
modtronix | 0:4041fad070ec | 4 | \____ \| ___ | (_ _) ___ |/ ___) _ \ |
modtronix | 0:4041fad070ec | 5 | _____) ) ____| | | || |_| ____( (___| | | | |
modtronix | 0:4041fad070ec | 6 | (______/|_____)_|_|_| \__)_____)\____)_| |_| |
modtronix | 0:4041fad070ec | 7 | ( C )2014 Semtech |
modtronix | 0:4041fad070ec | 8 | |
modtronix | 0:4041fad070ec | 9 | Description: Interface for the radios, contains the main functions that a radio needs, and 5 callback functions |
modtronix | 0:4041fad070ec | 10 | |
modtronix | 0:4041fad070ec | 11 | License: Revised BSD License, see LICENSE.TXT file include in the project |
modtronix | 0:4041fad070ec | 12 | |
modtronix | 0:4041fad070ec | 13 | Maintainers: Miguel Luis, Gregory Cristian and Nicolas Huguenin |
modtronix | 0:4041fad070ec | 14 | */ |
modtronix | 0:4041fad070ec | 15 | #ifndef __RADIO_H__ |
modtronix | 0:4041fad070ec | 16 | #define __RADIO_H__ |
modtronix | 0:4041fad070ec | 17 | |
modtronix | 0:4041fad070ec | 18 | |
modtronix | 0:4041fad070ec | 19 | /*! |
modtronix | 0:4041fad070ec | 20 | * State of the radio: |
modtronix | 0:4041fad070ec | 21 | * [IDLE, |
modtronix | 0:4041fad070ec | 22 | * RX_RUNNING, RX_TIMEOUT, RX_ERROR, |
modtronix | 0:4041fad070ec | 23 | * TX_RUNNING, TX_TIMEOUT, CAD] |
modtronix | 0:4041fad070ec | 24 | */ |
modtronix | 0:4041fad070ec | 25 | enum RadioState |
modtronix | 0:4041fad070ec | 26 | { |
modtronix-com |
3:8a08d9633b93 | 27 | IDLE, |
modtronix | 0:4041fad070ec | 28 | LOWPOWER, |
modtronix | 0:4041fad070ec | 29 | |
modtronix | 0:4041fad070ec | 30 | TX_DONE, |
modtronix | 0:4041fad070ec | 31 | TX_TIMEOUT, |
modtronix | 0:4041fad070ec | 32 | |
modtronix-com |
3:8a08d9633b93 | 33 | RX_DONE, |
modtronix-com |
3:8a08d9633b93 | 34 | RX_TIMEOUT, |
modtronix-com |
3:8a08d9633b93 | 35 | RX_ERROR, |
modtronix-com |
3:8a08d9633b93 | 36 | |
modtronix | 0:4041fad070ec | 37 | CAD, |
modtronix | 0:4041fad070ec | 38 | CAD_DONE |
modtronix | 0:4041fad070ec | 39 | }; |
modtronix | 0:4041fad070ec | 40 | |
modtronix | 0:4041fad070ec | 41 | /*! |
modtronix | 0:4041fad070ec | 42 | * Type of the modem. [LORA / FSK] |
modtronix | 0:4041fad070ec | 43 | */ |
modtronix | 0:4041fad070ec | 44 | enum ModemType |
modtronix | 0:4041fad070ec | 45 | { |
modtronix | 0:4041fad070ec | 46 | MODEM_FSK = 0, |
modtronix | 0:4041fad070ec | 47 | MODEM_LORA |
modtronix | 0:4041fad070ec | 48 | }; |
modtronix | 0:4041fad070ec | 49 | |
modtronix | 0:4041fad070ec | 50 | /*! |
modtronix | 0:4041fad070ec | 51 | * Type of the supported board. [SX1276MB1MAS / SX1276MB1LAS] |
modtronix | 0:4041fad070ec | 52 | */ |
modtronix | 0:4041fad070ec | 53 | enum BoardType |
modtronix | 0:4041fad070ec | 54 | { |
modtronix | 0:4041fad070ec | 55 | SX1276MB1MAS = 0, |
modtronix | 0:4041fad070ec | 56 | SX1276MB1LAS, |
modtronix | 0:4041fad070ec | 57 | UNKNOWN |
modtronix | 0:4041fad070ec | 58 | }; |
modtronix | 0:4041fad070ec | 59 | |
modtronix | 0:4041fad070ec | 60 | /*! |
modtronix | 0:4041fad070ec | 61 | * Type of the supported board. [BOARD_INAIR4 / BOARD_INAIR9] |
modtronix | 0:4041fad070ec | 62 | */ |
modtronix | 0:4041fad070ec | 63 | enum BoardTypeInAir |
modtronix | 0:4041fad070ec | 64 | { |
modtronix | 0:4041fad070ec | 65 | BOARD_INAIR4 = 0, |
modtronix | 0:4041fad070ec | 66 | BOARD_INAIR9, |
modtronix | 0:4041fad070ec | 67 | BOARD_INAIR9B, |
modtronix | 0:4041fad070ec | 68 | BOARD_UNKNOWN |
modtronix | 0:4041fad070ec | 69 | }; |
modtronix | 0:4041fad070ec | 70 | /*! |
modtronix | 0:4041fad070ec | 71 | * Radio FSK modem parameters |
modtronix | 0:4041fad070ec | 72 | */ |
modtronix | 0:4041fad070ec | 73 | typedef struct |
modtronix | 0:4041fad070ec | 74 | { |
modtronix | 0:4041fad070ec | 75 | int8_t Power; |
modtronix | 0:4041fad070ec | 76 | uint32_t Fdev; |
modtronix | 0:4041fad070ec | 77 | uint32_t Bandwidth; |
modtronix | 0:4041fad070ec | 78 | uint32_t BandwidthAfc; |
modtronix | 0:4041fad070ec | 79 | uint32_t Datarate; |
modtronix | 0:4041fad070ec | 80 | uint16_t PreambleLen; |
modtronix | 0:4041fad070ec | 81 | bool FixLen; |
modtronix | 0:4041fad070ec | 82 | uint8_t PayloadLen; |
modtronix | 0:4041fad070ec | 83 | bool CrcOn; |
modtronix | 0:4041fad070ec | 84 | bool IqInverted; |
modtronix | 0:4041fad070ec | 85 | bool RxContinuous; |
modtronix | 0:4041fad070ec | 86 | uint32_t TxTimeout; |
modtronix | 0:4041fad070ec | 87 | }RadioFskSettings_t; |
modtronix | 0:4041fad070ec | 88 | |
modtronix | 0:4041fad070ec | 89 | /*! |
modtronix | 0:4041fad070ec | 90 | * Radio FSK packet handler state |
modtronix | 0:4041fad070ec | 91 | */ |
modtronix | 0:4041fad070ec | 92 | typedef struct |
modtronix | 0:4041fad070ec | 93 | { |
modtronix | 0:4041fad070ec | 94 | uint8_t PreambleDetected; |
modtronix | 0:4041fad070ec | 95 | uint8_t SyncWordDetected; |
modtronix | 0:4041fad070ec | 96 | int8_t RssiValue; |
modtronix | 0:4041fad070ec | 97 | int32_t AfcValue; |
modtronix | 0:4041fad070ec | 98 | uint8_t RxGain; |
modtronix | 0:4041fad070ec | 99 | uint16_t Size; |
modtronix | 0:4041fad070ec | 100 | uint16_t NbBytes; |
modtronix | 0:4041fad070ec | 101 | uint8_t FifoThresh; |
modtronix | 0:4041fad070ec | 102 | uint8_t ChunkSize; |
modtronix | 0:4041fad070ec | 103 | }RadioFskPacketHandler_t; |
modtronix | 0:4041fad070ec | 104 | |
modtronix | 0:4041fad070ec | 105 | /*! |
modtronix | 0:4041fad070ec | 106 | * Radio LoRa modem parameters |
modtronix | 0:4041fad070ec | 107 | */ |
modtronix | 0:4041fad070ec | 108 | typedef struct |
modtronix | 0:4041fad070ec | 109 | { |
modtronix | 0:4041fad070ec | 110 | int8_t Power; |
modtronix | 0:4041fad070ec | 111 | uint32_t Bandwidth; |
modtronix | 0:4041fad070ec | 112 | uint32_t Datarate; |
modtronix | 0:4041fad070ec | 113 | bool LowDatarateOptimize; |
modtronix | 0:4041fad070ec | 114 | uint8_t Coderate; |
modtronix | 0:4041fad070ec | 115 | uint16_t PreambleLen; |
modtronix | 0:4041fad070ec | 116 | bool FixLen; |
modtronix | 0:4041fad070ec | 117 | uint8_t PayloadLen; |
modtronix | 0:4041fad070ec | 118 | bool CrcOn; |
modtronix | 0:4041fad070ec | 119 | bool FreqHopOn; |
modtronix | 0:4041fad070ec | 120 | uint8_t HopPeriod; |
modtronix | 0:4041fad070ec | 121 | bool IqInverted; |
modtronix | 0:4041fad070ec | 122 | bool RxContinuous; |
modtronix | 0:4041fad070ec | 123 | uint32_t TxTimeout; |
modtronix | 0:4041fad070ec | 124 | }RadioLoRaSettings_t; |
modtronix | 0:4041fad070ec | 125 | |
modtronix | 0:4041fad070ec | 126 | /*! |
modtronix | 0:4041fad070ec | 127 | * Radio LoRa packet handler state |
modtronix | 0:4041fad070ec | 128 | */ |
modtronix | 0:4041fad070ec | 129 | typedef struct |
modtronix | 0:4041fad070ec | 130 | { |
modtronix | 0:4041fad070ec | 131 | int8_t SnrValue; |
modtronix-com |
5:1a255cc8d54a | 132 | int16_t RssiValue; |
modtronix | 0:4041fad070ec | 133 | uint8_t Size; |
modtronix | 0:4041fad070ec | 134 | }RadioLoRaPacketHandler_t; |
modtronix | 0:4041fad070ec | 135 | |
modtronix | 0:4041fad070ec | 136 | /*! |
modtronix | 0:4041fad070ec | 137 | * Radio Settings |
modtronix | 0:4041fad070ec | 138 | */ |
modtronix | 0:4041fad070ec | 139 | typedef struct |
modtronix | 0:4041fad070ec | 140 | { |
modtronix | 0:4041fad070ec | 141 | RadioState State; |
modtronix | 0:4041fad070ec | 142 | ModemType Modem; |
modtronix | 0:4041fad070ec | 143 | uint32_t Channel; |
modtronix | 0:4041fad070ec | 144 | RadioFskSettings_t Fsk; |
modtronix | 0:4041fad070ec | 145 | RadioFskPacketHandler_t FskPacketHandler; |
modtronix | 0:4041fad070ec | 146 | RadioLoRaSettings_t LoRa; |
modtronix | 0:4041fad070ec | 147 | RadioLoRaPacketHandler_t LoRaPacketHandler; |
modtronix | 0:4041fad070ec | 148 | }RadioSettings_t; |
modtronix | 0:4041fad070ec | 149 | |
modtronix | 0:4041fad070ec | 150 | |
modtronix | 0:4041fad070ec | 151 | |
modtronix | 0:4041fad070ec | 152 | /*! |
modtronix | 0:4041fad070ec | 153 | * Interface for the radios, contains the main functions that a radio needs, and 5 callback functions |
modtronix | 0:4041fad070ec | 154 | */ |
modtronix | 0:4041fad070ec | 155 | class Radio |
modtronix | 0:4041fad070ec | 156 | { |
modtronix | 0:4041fad070ec | 157 | protected: |
modtronix | 0:4041fad070ec | 158 | |
modtronix | 0:4041fad070ec | 159 | //------------------------------------------------------------------------- |
modtronix | 0:4041fad070ec | 160 | // Callback functions pointers |
modtronix | 0:4041fad070ec | 161 | //------------------------------------------------------------------------- |
modtronix | 0:4041fad070ec | 162 | |
modtronix | 0:4041fad070ec | 163 | /*! |
modtronix | 0:4041fad070ec | 164 | * @brief Tx Done callback prototype. |
modtronix | 0:4041fad070ec | 165 | */ |
modtronix | 0:4041fad070ec | 166 | void ( *txDone )( ); |
modtronix | 0:4041fad070ec | 167 | |
modtronix | 0:4041fad070ec | 168 | /*! |
modtronix | 0:4041fad070ec | 169 | * @brief Tx Timeout callback prototype. |
modtronix | 0:4041fad070ec | 170 | */ |
modtronix | 0:4041fad070ec | 171 | void ( *txTimeout ) ( ); |
modtronix | 0:4041fad070ec | 172 | |
modtronix | 0:4041fad070ec | 173 | /*! |
modtronix | 0:4041fad070ec | 174 | * @brief Rx Done callback prototype. |
modtronix | 0:4041fad070ec | 175 | * |
modtronix | 0:4041fad070ec | 176 | * @param [IN] payload Received buffer pointer |
modtronix | 0:4041fad070ec | 177 | * @param [IN] size Received buffer size |
modtronix | 0:4041fad070ec | 178 | * @param [IN] rssi RSSI value computed while receiving the frame [dBm] |
modtronix | 0:4041fad070ec | 179 | * @param [IN] snr Raw SNR value given by the radio hardware |
modtronix | 0:4041fad070ec | 180 | * FSK : N/A ( set to 0 ) |
modtronix | 0:4041fad070ec | 181 | * LoRa: SNR value in dB |
modtronix | 0:4041fad070ec | 182 | */ |
modtronix | 0:4041fad070ec | 183 | void ( *rxDone ) ( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ); |
modtronix | 0:4041fad070ec | 184 | |
modtronix | 0:4041fad070ec | 185 | /*! |
modtronix | 0:4041fad070ec | 186 | * @brief Rx Timeout callback prototype. |
modtronix | 0:4041fad070ec | 187 | */ |
modtronix | 0:4041fad070ec | 188 | void ( *rxTimeout ) ( ); |
modtronix | 0:4041fad070ec | 189 | |
modtronix | 0:4041fad070ec | 190 | /*! |
modtronix | 0:4041fad070ec | 191 | * @brief Rx Error callback prototype. |
modtronix | 0:4041fad070ec | 192 | */ |
modtronix | 0:4041fad070ec | 193 | void ( *rxError ) ( ); |
modtronix | 0:4041fad070ec | 194 | |
modtronix | 0:4041fad070ec | 195 | /*! |
modtronix | 0:4041fad070ec | 196 | * \brief FHSS Change Channel callback prototype. |
modtronix | 0:4041fad070ec | 197 | * |
modtronix | 0:4041fad070ec | 198 | * \param [IN] CurrentChannel Index number of the current channel |
modtronix | 0:4041fad070ec | 199 | */ |
modtronix | 0:4041fad070ec | 200 | void ( *fhssChangeChannel )( uint8_t CurrentChannel ); |
modtronix | 0:4041fad070ec | 201 | |
modtronix | 0:4041fad070ec | 202 | /*! |
modtronix | 0:4041fad070ec | 203 | * @brief CAD Done callback prototype. |
modtronix | 0:4041fad070ec | 204 | * |
modtronix | 0:4041fad070ec | 205 | * @param [IN] ChannelDetected Channel Activity detected during the CAD |
modtronix | 0:4041fad070ec | 206 | */ |
modtronix | 0:4041fad070ec | 207 | void ( *cadDone ) ( bool channelActivityDetected ); |
modtronix | 0:4041fad070ec | 208 | |
modtronix | 0:4041fad070ec | 209 | public: |
modtronix | 0:4041fad070ec | 210 | //------------------------------------------------------------------------- |
modtronix | 0:4041fad070ec | 211 | // Constructor |
modtronix | 0:4041fad070ec | 212 | //------------------------------------------------------------------------- |
modtronix | 0:4041fad070ec | 213 | /*! |
modtronix | 0:4041fad070ec | 214 | * @brief Constructor of the radio object, the parameters are the callback functions described in the header. |
modtronix | 0:4041fad070ec | 215 | * @param [IN] txDone |
modtronix | 0:4041fad070ec | 216 | * @param [IN] txTimeout |
modtronix | 0:4041fad070ec | 217 | * @param [IN] rxDone |
modtronix | 0:4041fad070ec | 218 | * @param [IN] rxTimeout |
modtronix | 0:4041fad070ec | 219 | * @param [IN] rxError |
modtronix | 0:4041fad070ec | 220 | */ |
modtronix | 0:4041fad070ec | 221 | Radio( void ( *txDone )( ), void ( *txTimeout ) ( ), void ( *rxDone ) ( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ), |
modtronix | 0:4041fad070ec | 222 | void ( *rxTimeout ) ( ), void ( *rxError ) ( ), void ( *fhssChangeChannel ) ( uint8_t channelIndex ), void ( *cadDone ) ( bool channelActivityDetected ) ); |
modtronix | 0:4041fad070ec | 223 | virtual ~Radio( ) {}; |
modtronix | 0:4041fad070ec | 224 | |
modtronix | 0:4041fad070ec | 225 | //------------------------------------------------------------------------- |
modtronix | 0:4041fad070ec | 226 | // Pure virtual functions |
modtronix | 0:4041fad070ec | 227 | //------------------------------------------------------------------------- |
modtronix | 0:4041fad070ec | 228 | |
modtronix | 0:4041fad070ec | 229 | |
modtronix | 0:4041fad070ec | 230 | /*! |
modtronix | 0:4041fad070ec | 231 | * Return board type |
modtronix | 0:4041fad070ec | 232 | * |
modtronix | 0:4041fad070ec | 233 | * @return Returns a BOARD_XXX define |
modtronix | 0:4041fad070ec | 234 | */ |
modtronix | 0:4041fad070ec | 235 | virtual uint8_t GetBoardType( void ) = 0; |
modtronix | 0:4041fad070ec | 236 | |
modtronix | 0:4041fad070ec | 237 | /*! |
modtronix | 0:4041fad070ec | 238 | * Sets the board type, is a BOARD_XXX define |
modtronix | 0:4041fad070ec | 239 | * |
modtronix | 0:4041fad070ec | 240 | * @param boardType The board type, is a BOARD_XXX define |
modtronix | 0:4041fad070ec | 241 | */ |
modtronix | 0:4041fad070ec | 242 | virtual void SetBoardType( uint8_t boardType) = 0; |
modtronix | 0:4041fad070ec | 243 | |
modtronix | 0:4041fad070ec | 244 | /*! |
modtronix | 0:4041fad070ec | 245 | * Return current radio status |
modtronix | 0:4041fad070ec | 246 | * |
modtronix | 0:4041fad070ec | 247 | * @param status Radio status.[RF_IDLE, RF_RX_RUNNING, RF_TX_RUNNING] |
modtronix | 0:4041fad070ec | 248 | */ |
modtronix-com |
2:93cf5cb235ee | 249 | virtual RadioState GetStatus( void ) = 0; |
modtronix | 0:4041fad070ec | 250 | |
modtronix | 0:4041fad070ec | 251 | /*! |
modtronix | 0:4041fad070ec | 252 | * \brief Configures the radio with the given modem |
modtronix | 0:4041fad070ec | 253 | * |
modtronix | 0:4041fad070ec | 254 | * \param [IN] modem Modem to be used [0: FSK, 1: LoRa] |
modtronix | 0:4041fad070ec | 255 | */ |
modtronix | 0:4041fad070ec | 256 | virtual void SetModem( ModemType modem ) = 0; |
modtronix | 0:4041fad070ec | 257 | |
modtronix | 0:4041fad070ec | 258 | /*! |
modtronix | 0:4041fad070ec | 259 | * @brief Sets the channel frequency |
modtronix | 0:4041fad070ec | 260 | * |
modtronix | 0:4041fad070ec | 261 | * @param [IN] freq Channel RF frequency |
modtronix | 0:4041fad070ec | 262 | */ |
modtronix | 0:4041fad070ec | 263 | virtual void SetChannel( uint32_t freq ) = 0; |
modtronix | 0:4041fad070ec | 264 | |
modtronix | 0:4041fad070ec | 265 | /*! |
modtronix | 0:4041fad070ec | 266 | * @brief Sets the channels configuration |
modtronix | 0:4041fad070ec | 267 | * |
modtronix | 0:4041fad070ec | 268 | * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa] |
modtronix | 0:4041fad070ec | 269 | * @param [IN] freq Channel RF frequency |
modtronix | 0:4041fad070ec | 270 | * @param [IN] rssiThresh RSSI threshold |
modtronix | 0:4041fad070ec | 271 | * |
modtronix | 0:4041fad070ec | 272 | * @retval isFree [true: Channel is free, false: Channel is not free] |
modtronix | 0:4041fad070ec | 273 | */ |
modtronix | 0:4041fad070ec | 274 | virtual bool IsChannelFree( ModemType modem, uint32_t freq, int8_t rssiThresh ) = 0; |
modtronix | 0:4041fad070ec | 275 | |
modtronix | 0:4041fad070ec | 276 | /*! |
modtronix | 0:4041fad070ec | 277 | * @brief Generates a 32 bits random value based on the RSSI readings |
modtronix | 0:4041fad070ec | 278 | * |
modtronix | 0:4041fad070ec | 279 | * \remark This function sets the radio in LoRa modem mode and disables |
modtronix | 0:4041fad070ec | 280 | * all interrupts. |
modtronix | 0:4041fad070ec | 281 | * After calling this function either Radio.SetRxConfig or |
modtronix | 0:4041fad070ec | 282 | * Radio.SetTxConfig functions must be called. |
modtronix | 0:4041fad070ec | 283 | * |
modtronix | 0:4041fad070ec | 284 | * @retval randomValue 32 bits random value |
modtronix | 0:4041fad070ec | 285 | */ |
modtronix | 0:4041fad070ec | 286 | virtual uint32_t Random( void )= 0; |
modtronix | 0:4041fad070ec | 287 | |
modtronix | 0:4041fad070ec | 288 | /*! |
modtronix | 0:4041fad070ec | 289 | * @brief Sets the reception parameters |
modtronix | 0:4041fad070ec | 290 | * |
modtronix | 0:4041fad070ec | 291 | * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa] |
modtronix | 0:4041fad070ec | 292 | * @param [IN] bandwidth Sets the bandwidth |
modtronix | 0:4041fad070ec | 293 | * FSK : >= 2600 and <= 250000 Hz |
modtronix | 0:4041fad070ec | 294 | * LoRa: [0: 125 kHz, 1: 250 kHz, |
modtronix | 0:4041fad070ec | 295 | * 2: 500 kHz, 3: Reserved] |
modtronix | 0:4041fad070ec | 296 | * @param [IN] datarate Sets the Datarate |
modtronix | 0:4041fad070ec | 297 | * FSK : 600..300000 bits/s |
modtronix | 0:4041fad070ec | 298 | * LoRa: [6: 64, 7: 128, 8: 256, 9: 512, |
modtronix | 0:4041fad070ec | 299 | * 10: 1024, 11: 2048, 12: 4096 chips] |
modtronix | 0:4041fad070ec | 300 | * @param [IN] coderate Sets the coding rate ( LoRa only ) |
modtronix | 0:4041fad070ec | 301 | * FSK : N/A ( set to 0 ) |
modtronix | 0:4041fad070ec | 302 | * LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8] |
modtronix | 0:4041fad070ec | 303 | * @param [IN] bandwidthAfc Sets the AFC Bandwidth ( FSK only ) |
modtronix | 0:4041fad070ec | 304 | * FSK : >= 2600 and <= 250000 Hz |
modtronix | 0:4041fad070ec | 305 | * LoRa: N/A ( set to 0 ) |
modtronix | 0:4041fad070ec | 306 | * @param [IN] preambleLen Sets the Preamble length ( LoRa only ) |
modtronix | 0:4041fad070ec | 307 | * FSK : N/A ( set to 0 ) |
modtronix | 0:4041fad070ec | 308 | * LoRa: Length in symbols ( the hardware adds 4 more symbols ) |
modtronix | 0:4041fad070ec | 309 | * @param [IN] symbTimeout Sets the RxSingle timeout value ( LoRa only ) |
modtronix | 0:4041fad070ec | 310 | * FSK : N/A ( set to 0 ) |
modtronix | 0:4041fad070ec | 311 | * LoRa: timeout in symbols |
modtronix | 0:4041fad070ec | 312 | * @param [IN] fixLen Fixed length packets [0: variable, 1: fixed] |
modtronix | 0:4041fad070ec | 313 | * @param [IN] payloadLen Sets payload length when fixed lenght is used |
modtronix | 0:4041fad070ec | 314 | * @param [IN] crcOn Enables/Disables the CRC [0: OFF, 1: ON] |
modtronix | 0:4041fad070ec | 315 | * @param [IN] freqHopOn Enables disables the intra-packet frequency hopping [0: OFF, 1: ON] (LoRa only) |
modtronix | 0:4041fad070ec | 316 | * @param [IN] hopPeriod Number of symbols bewteen each hop (LoRa only) |
modtronix | 0:4041fad070ec | 317 | * @param [IN] iqInverted Inverts IQ signals ( LoRa only ) |
modtronix | 0:4041fad070ec | 318 | * FSK : N/A ( set to 0 ) |
modtronix | 0:4041fad070ec | 319 | * LoRa: [0: not inverted, 1: inverted] |
modtronix | 0:4041fad070ec | 320 | * @param [IN] rxContinuous Sets the reception in continuous mode |
modtronix | 0:4041fad070ec | 321 | * [false: single mode, true: continuous mode] |
modtronix | 0:4041fad070ec | 322 | */ |
modtronix | 0:4041fad070ec | 323 | virtual void SetRxConfig ( ModemType modem, uint32_t bandwidth, |
modtronix | 0:4041fad070ec | 324 | uint32_t datarate, uint8_t coderate, |
modtronix | 0:4041fad070ec | 325 | uint32_t bandwidthAfc, uint16_t preambleLen, |
modtronix | 0:4041fad070ec | 326 | uint16_t symbTimeout, bool fixLen, |
modtronix | 0:4041fad070ec | 327 | uint8_t payloadLen, |
modtronix | 0:4041fad070ec | 328 | bool crcOn, bool freqHopOn, uint8_t hopPeriod, |
modtronix | 0:4041fad070ec | 329 | bool iqInverted, bool rxContinuous ) = 0; |
modtronix | 0:4041fad070ec | 330 | |
modtronix | 0:4041fad070ec | 331 | /*! |
modtronix | 0:4041fad070ec | 332 | * @brief Sets the transmission parameters |
modtronix | 0:4041fad070ec | 333 | * |
modtronix | 0:4041fad070ec | 334 | * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa] |
modtronix | 0:4041fad070ec | 335 | * @param [IN] power Sets the output power [dBm] |
modtronix | 0:4041fad070ec | 336 | * @param [IN] fdev Sets the frequency deviation ( FSK only ) |
modtronix | 0:4041fad070ec | 337 | * FSK : [Hz] |
modtronix | 0:4041fad070ec | 338 | * LoRa: 0 |
modtronix | 0:4041fad070ec | 339 | * @param [IN] bandwidth Sets the bandwidth ( LoRa only ) |
modtronix | 0:4041fad070ec | 340 | * FSK : 0 |
modtronix | 0:4041fad070ec | 341 | * LoRa: [0: 125 kHz, 1: 250 kHz, |
modtronix | 0:4041fad070ec | 342 | * 2: 500 kHz, 3: Reserved] |
modtronix | 0:4041fad070ec | 343 | * @param [IN] datarate Sets the Datarate |
modtronix | 0:4041fad070ec | 344 | * FSK : 600..300000 bits/s |
modtronix | 0:4041fad070ec | 345 | * LoRa: [6: 64, 7: 128, 8: 256, 9: 512, |
modtronix | 0:4041fad070ec | 346 | * 10: 1024, 11: 2048, 12: 4096 chips] |
modtronix | 0:4041fad070ec | 347 | * @param [IN] coderate Sets the coding rate ( LoRa only ) |
modtronix | 0:4041fad070ec | 348 | * FSK : N/A ( set to 0 ) |
modtronix | 0:4041fad070ec | 349 | * LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8] |
modtronix | 0:4041fad070ec | 350 | * @param [IN] preambleLen Sets the preamble length |
modtronix | 0:4041fad070ec | 351 | * @param [IN] fixLen Fixed length packets [0: variable, 1: fixed] |
modtronix | 0:4041fad070ec | 352 | * @param [IN] crcOn Enables disables the CRC [0: OFF, 1: ON] |
modtronix | 0:4041fad070ec | 353 | * @param [IN] freqHopOn Enables disables the intra-packet frequency hopping [0: OFF, 1: ON] (LoRa only) |
modtronix | 0:4041fad070ec | 354 | * @param [IN] hopPeriod Number of symbols bewteen each hop (LoRa only) |
modtronix | 0:4041fad070ec | 355 | * @param [IN] iqInverted Inverts IQ signals ( LoRa only ) |
modtronix | 0:4041fad070ec | 356 | * FSK : N/A ( set to 0 ) |
modtronix | 0:4041fad070ec | 357 | * LoRa: [0: not inverted, 1: inverted] |
modtronix | 0:4041fad070ec | 358 | * @param [IN] timeout Transmission timeout [us] |
modtronix | 0:4041fad070ec | 359 | */ |
modtronix | 0:4041fad070ec | 360 | virtual void SetTxConfig( ModemType modem, int8_t power, uint32_t fdev, |
modtronix | 0:4041fad070ec | 361 | uint32_t bandwidth, uint32_t datarate, |
modtronix | 0:4041fad070ec | 362 | uint8_t coderate, uint16_t preambleLen, |
modtronix | 0:4041fad070ec | 363 | bool fixLen, bool crcOn, bool freqHopOn, |
modtronix | 0:4041fad070ec | 364 | uint8_t hopPeriod, bool iqInverted, uint32_t timeout ) = 0; |
modtronix | 0:4041fad070ec | 365 | |
modtronix | 0:4041fad070ec | 366 | /*! |
modtronix | 0:4041fad070ec | 367 | * @brief Checks if the given RF frequency is supported by the hardware |
modtronix | 0:4041fad070ec | 368 | * |
modtronix | 0:4041fad070ec | 369 | * @param [IN] frequency RF frequency to be checked |
modtronix | 0:4041fad070ec | 370 | * @retval isSupported [true: supported, false: unsupported] |
modtronix | 0:4041fad070ec | 371 | */ |
modtronix | 0:4041fad070ec | 372 | virtual bool CheckRfFrequency( uint32_t frequency ) = 0; |
modtronix | 0:4041fad070ec | 373 | |
modtronix | 0:4041fad070ec | 374 | /*! |
modtronix | 0:4041fad070ec | 375 | * @brief Computes the packet time on air for the given payload |
modtronix | 0:4041fad070ec | 376 | * |
modtronix | 0:4041fad070ec | 377 | * \Remark Can only be called once SetRxConfig or SetTxConfig have been called |
modtronix | 0:4041fad070ec | 378 | * |
modtronix | 0:4041fad070ec | 379 | * @param [IN] modem Radio modem to be used [0: FSK, 1: LoRa] |
modtronix | 0:4041fad070ec | 380 | * @param [IN] pktLen Packet payload length |
modtronix | 0:4041fad070ec | 381 | * |
modtronix | 0:4041fad070ec | 382 | * @retval airTime Computed airTime for the given packet payload length |
modtronix | 0:4041fad070ec | 383 | */ |
modtronix | 0:4041fad070ec | 384 | virtual double TimeOnAir ( ModemType modem, uint8_t pktLen ) = 0; |
modtronix | 0:4041fad070ec | 385 | |
modtronix | 0:4041fad070ec | 386 | /*! |
modtronix | 0:4041fad070ec | 387 | * @brief Sends the buffer of size. Prepares the packet to be sent and sets |
modtronix | 0:4041fad070ec | 388 | * the radio in transmission |
modtronix | 0:4041fad070ec | 389 | * |
modtronix | 0:4041fad070ec | 390 | * @param [IN]: buffer Buffer pointer |
modtronix | 0:4041fad070ec | 391 | * @param [IN]: size Buffer size |
modtronix | 0:4041fad070ec | 392 | */ |
modtronix | 0:4041fad070ec | 393 | virtual void Send( uint8_t *buffer, uint8_t size ) = 0; |
modtronix | 0:4041fad070ec | 394 | |
modtronix | 0:4041fad070ec | 395 | /*! |
modtronix | 0:4041fad070ec | 396 | * @brief Sets the radio in sleep mode |
modtronix | 0:4041fad070ec | 397 | */ |
modtronix | 0:4041fad070ec | 398 | virtual void Sleep( void ) = 0; |
modtronix | 0:4041fad070ec | 399 | |
modtronix | 0:4041fad070ec | 400 | /*! |
modtronix | 0:4041fad070ec | 401 | * @brief Sets the radio in standby mode |
modtronix | 0:4041fad070ec | 402 | */ |
modtronix | 0:4041fad070ec | 403 | virtual void Standby( void ) = 0; |
modtronix | 0:4041fad070ec | 404 | |
modtronix | 0:4041fad070ec | 405 | /*! |
modtronix | 0:4041fad070ec | 406 | * @brief Sets the radio in CAD mode |
modtronix | 0:4041fad070ec | 407 | */ |
modtronix | 0:4041fad070ec | 408 | virtual void StartCad( void ) = 0; |
modtronix | 0:4041fad070ec | 409 | |
modtronix | 0:4041fad070ec | 410 | /*! |
modtronix | 0:4041fad070ec | 411 | * @brief Sets the radio in reception mode for the given time |
modtronix | 0:4041fad070ec | 412 | * @param [IN] timeout Reception timeout [us] |
modtronix | 0:4041fad070ec | 413 | * [0: continuous, others timeout] |
modtronix | 0:4041fad070ec | 414 | */ |
modtronix | 0:4041fad070ec | 415 | virtual void Rx( uint32_t timeout ) = 0; |
modtronix | 0:4041fad070ec | 416 | |
modtronix | 0:4041fad070ec | 417 | /*! |
modtronix | 0:4041fad070ec | 418 | * @brief Sets the radio in transmission mode for the given time |
modtronix | 0:4041fad070ec | 419 | * @param [IN] timeout Transmission timeout [us] |
modtronix | 0:4041fad070ec | 420 | * [0: continuous, others timeout] |
modtronix | 0:4041fad070ec | 421 | */ |
modtronix | 0:4041fad070ec | 422 | virtual void Tx( uint32_t timeout ) = 0; |
modtronix | 0:4041fad070ec | 423 | |
modtronix | 0:4041fad070ec | 424 | /*! |
modtronix | 0:4041fad070ec | 425 | * @brief Reads the current RSSI value |
modtronix | 0:4041fad070ec | 426 | * |
modtronix | 0:4041fad070ec | 427 | * @retval rssiValue Current RSSI value in [dBm] |
modtronix | 0:4041fad070ec | 428 | */ |
modtronix | 0:4041fad070ec | 429 | virtual int16_t GetRssi ( ModemType modem ) = 0; |
modtronix | 0:4041fad070ec | 430 | |
modtronix | 0:4041fad070ec | 431 | /*! |
modtronix | 0:4041fad070ec | 432 | * @brief Writes the radio register at the specified address |
modtronix | 0:4041fad070ec | 433 | * |
modtronix | 0:4041fad070ec | 434 | * @param [IN]: addr Register address |
modtronix | 0:4041fad070ec | 435 | * @param [IN]: data New register value |
modtronix | 0:4041fad070ec | 436 | */ |
modtronix | 0:4041fad070ec | 437 | virtual void Write ( uint8_t addr, uint8_t data ) = 0; |
modtronix | 0:4041fad070ec | 438 | |
modtronix | 0:4041fad070ec | 439 | /*! |
modtronix | 0:4041fad070ec | 440 | * @brief Reads the radio register at the specified address |
modtronix | 0:4041fad070ec | 441 | * |
modtronix | 0:4041fad070ec | 442 | * @param [IN]: addr Register address |
modtronix | 0:4041fad070ec | 443 | * @retval data Register value |
modtronix | 0:4041fad070ec | 444 | */ |
modtronix | 0:4041fad070ec | 445 | virtual uint8_t Read ( uint8_t addr ) = 0; |
modtronix | 0:4041fad070ec | 446 | |
modtronix | 0:4041fad070ec | 447 | /*! |
modtronix | 0:4041fad070ec | 448 | * @brief Writes multiple radio registers starting at address |
modtronix | 0:4041fad070ec | 449 | * |
modtronix | 0:4041fad070ec | 450 | * @param [IN] addr First Radio register address |
modtronix | 0:4041fad070ec | 451 | * @param [IN] buffer Buffer containing the new register's values |
modtronix | 0:4041fad070ec | 452 | * @param [IN] size Number of registers to be written |
modtronix | 0:4041fad070ec | 453 | */ |
modtronix | 0:4041fad070ec | 454 | virtual void Write( uint8_t addr, uint8_t *buffer, uint8_t size ) = 0; |
modtronix | 0:4041fad070ec | 455 | |
modtronix | 0:4041fad070ec | 456 | /*! |
modtronix | 0:4041fad070ec | 457 | * @brief Reads multiple radio registers starting at address |
modtronix | 0:4041fad070ec | 458 | * |
modtronix | 0:4041fad070ec | 459 | * @param [IN] addr First Radio register address |
modtronix | 0:4041fad070ec | 460 | * @param [OUT] buffer Buffer where to copy the registers data |
modtronix | 0:4041fad070ec | 461 | * @param [IN] size Number of registers to be read |
modtronix | 0:4041fad070ec | 462 | */ |
modtronix | 0:4041fad070ec | 463 | virtual void Read ( uint8_t addr, uint8_t *buffer, uint8_t size ) = 0; |
modtronix | 0:4041fad070ec | 464 | |
modtronix | 0:4041fad070ec | 465 | /*! |
modtronix | 0:4041fad070ec | 466 | * @brief Writes the buffer contents to the SX1276 FIFO |
modtronix | 0:4041fad070ec | 467 | * |
modtronix | 0:4041fad070ec | 468 | * @param [IN] buffer Buffer containing data to be put on the FIFO. |
modtronix | 0:4041fad070ec | 469 | * @param [IN] size Number of bytes to be written to the FIFO |
modtronix | 0:4041fad070ec | 470 | */ |
modtronix | 0:4041fad070ec | 471 | virtual void WriteFifo( uint8_t *buffer, uint8_t size ) = 0; |
modtronix | 0:4041fad070ec | 472 | |
modtronix | 0:4041fad070ec | 473 | /*! |
modtronix | 0:4041fad070ec | 474 | * @brief Reads the contents of the SX1276 FIFO |
modtronix | 0:4041fad070ec | 475 | * |
modtronix | 0:4041fad070ec | 476 | * @param [OUT] buffer Buffer where to copy the FIFO read data. |
modtronix | 0:4041fad070ec | 477 | * @param [IN] size Number of bytes to be read from the FIFO |
modtronix | 0:4041fad070ec | 478 | */ |
modtronix | 0:4041fad070ec | 479 | virtual void ReadFifo( uint8_t *buffer, uint8_t size ) = 0; |
modtronix | 0:4041fad070ec | 480 | }; |
modtronix | 0:4041fad070ec | 481 | |
modtronix | 0:4041fad070ec | 482 | #endif // __RADIO_H__ |
modtronix | 1:64a9c4a03244 | 483 |