fota lib for mdot

Dependents:   UQ_LoraWAN

Committer:
Jenkins@KEILDM1.dc.multitech.prv
Date:
Fri Sep 14 15:39:09 2018 -0500
Revision:
3:63d10f2375ea
fota lib updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 1 /*
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 2 / _____) _ | |
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 3 ( (____ _____ ____ _| |_ _____ ____| |__
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 5 _____) ) ____| | | || |_| ____( (___| | | |
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 7 (C)2013 Semtech
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 8
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 9 Description: Generic SX1272 driver implementation
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 10
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 11 License: Revised BSD License, see LICENSE.TXT file include in the project
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 12
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 13 Maintainer: Miguel Luis and Gregory Cristian
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 14 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 15 #ifndef __SXRADIO1272_H__
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 16 #define __SXRADIO1272_H__
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 17
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 18 #include "SxRadio.h"
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 19 #include "SxRadio1272Regs-Fsk.h"
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 20 #include "SxRadio1272Regs-LoRa.h"
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 21
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 22 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 23 * Radio wakeup time from SLEEP mode
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 24 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 25 #if defined(TARGET_XDOT_L151CC)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 26 #define RADIO_WAKEUP_TIME 4 // [ms]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 27 #else
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 28 #define RADIO_WAKEUP_TIME 2 // [ms]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 29 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 30
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 31 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 32 * SX1272 definitions
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 33 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 34 #define XTAL_FREQ 32000000
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 35 #define FREQ_STEP 61.03515625
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 36
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 37 #define RX_BUFFER_SIZE 256
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 38
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 39 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 40 * ============================================================================
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 41 * Public functions prototypes
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 42 * ============================================================================
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 43 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 44
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 45 class SxRadio1272 : public SxRadio
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 46 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 47 public:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 48 enum Bandwidth {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 49 BW_125, BW_250, BW_500
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 50 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 51
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 52 SxRadio1272(PinName reset, PinName DIO0, PinName DIO1, PinName DIO2,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 53 PinName DIO3, PinName DIO4, PinName mosi, PinName miso,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 54 PinName sclk, PinName nss, osPriority priority = osPriorityAboveNormal);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 55 virtual ~SxRadio1272() {}
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 56
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 57 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 58 * \brief Initializes the radio
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 59 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 60 * \param [IN] events Structure containing the driver callback functions
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 61 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 62 virtual void Init( SxRadioEvents *events );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 63 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 64 * \brief Prepares the radio for destruction
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 65 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 66 virtual void Terminate( void );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 67 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 68 * \brief Configures the radio with the given modem
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 69 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 70 * \param [IN] modem Modem to be used [0: FSK, 1: LoRa]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 71 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 72 virtual void SetModem( RadioModems_t modem );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 73 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 74 * \brief Sets the channel frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 75 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 76 * \param [IN] freq Channel RF frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 77 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 78 virtual void SetChannel( uint32_t freq );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 79 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 80 * \brief Detect channel free using CAD
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 81 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 82 * \param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 83 * \param [IN] freq Channel RF frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 84 * \param [IN] rssiThresh RSSI threshold
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 85 * \param [IN] bandwidth 0:125k, 1:250k, 2:500k
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 86 * \param [IN] rssiVal pointer to variable to hold RSSI value if desired - ignored if NULL
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 87 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 88 * \retval isFree [true: Channel is free, false: Channel is not free]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 89 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 90 virtual bool IsChannelFree( RadioModems_t modem, uint32_t freq, uint8_t datarate, int16_t rssiThresh, uint8_t bandwidth, uint32_t timeout = 5000, int16_t *rssiVal = NULL );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 91 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 92 * \brief Generates a 32 bits random value based on the RSSI readings
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 93 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 94 * \remark This function sets the radio in LoRa modem mode and disables
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 95 * all interrupts.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 96 * After calling this function either Radio.SetRxConfig or
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 97 * Radio.SetTxConfig functions must be called.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 98 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 99 * \retval randomValue 32 bits random value
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 100 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 101 virtual uint32_t Random( void );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 102 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 103 * \brief Sets the reception parameters
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 104 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 105 * \param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 106 * \param [IN] bandwidth Sets the bandwidth
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 107 * FSK : >= 2600 and <= 250000 Hz
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 108 * LoRa: [0: 125 kHz, 1: 250 kHz,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 109 * 2: 500 kHz, 3: Reserved]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 110 * \param [IN] datarate Sets the Datarate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 111 * FSK : 600..300000 bits/s
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 112 * LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 113 * 10: 1024, 11: 2048, 12: 4096 chips]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 114 * \param [IN] coderate Sets the coding rate (LoRa only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 115 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 116 * LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 117 * \param [IN] bandwidthAfc Sets the AFC Bandwidth (FSK only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 118 * FSK : >= 2600 and <= 250000 Hz
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 119 * LoRa: N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 120 * \param [IN] preambleLen Sets the Preamble length
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 121 * FSK : Number of bytes
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 122 * LoRa: Length in symbols (the hardware adds 4 more symbols)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 123 * \param [IN] symbTimeout Sets the RxSingle timeout value (LoRa only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 124 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 125 * LoRa: timeout in symbols
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 126 * \param [IN] fixLen Fixed length packets [0: variable, 1: fixed]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 127 * \param [IN] payloadLen Sets payload length when fixed length is used
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 128 * \param [IN] crcOn Enables/Disables the CRC [0: OFF, 1: ON]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 129 * \param [IN] FreqHopOn Enables disables the intra-packet frequency hopping
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 130 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 131 * LoRa: [0: OFF, 1: ON]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 132 * \param [IN] HopPeriod Number of symbols bewteen each hop
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 133 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 134 * LoRa: Number of symbols
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 135 * \param [IN] iqInverted Inverts IQ signals (LoRa only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 136 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 137 * LoRa: [0: not inverted, 1: inverted]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 138 * \param [IN] rxContinuous Sets the reception in continuous mode
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 139 * [false: single mode, true: continuous mode]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 140 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 141 virtual void SetRxConfig( RadioModems_t modem, uint32_t bandwidth,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 142 uint32_t datarate, uint8_t coderate,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 143 uint32_t bandwidthAfc, uint16_t preambleLen,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 144 uint16_t symbTimeout, bool fixLen,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 145 uint8_t payloadLen,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 146 bool crcOn, bool FreqHopOn, uint8_t HopPeriod,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 147 bool iqInverted, bool rxContinuous );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 148 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 149 * \brief Sets the transmission parameters
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 150 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 151 * \param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 152 * \param [IN] power Sets the output power [dBm]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 153 * \param [IN] fdev Sets the frequency deviation (FSK only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 154 * FSK : [Hz]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 155 * LoRa: 0
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 156 * \param [IN] bandwidth Sets the bandwidth (LoRa only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 157 * FSK : 0
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 158 * LoRa: [0: 125 kHz, 1: 250 kHz,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 159 * 2: 500 kHz, 3: Reserved]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 160 * \param [IN] datarate Sets the Datarate
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 161 * FSK : 600..300000 bits/s
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 162 * LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 163 * 10: 1024, 11: 2048, 12: 4096 chips]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 164 * \param [IN] coderate Sets the coding rate (LoRa only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 165 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 166 * LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 167 * \param [IN] preambleLen Sets the preamble length
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 168 * FSK : Number of bytes
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 169 * LoRa: Length in symbols (the hardware adds 4 more symbols)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 170 * \param [IN] fixLen Fixed length packets [0: variable, 1: fixed]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 171 * \param [IN] crcOn Enables disables the CRC [0: OFF, 1: ON]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 172 * \param [IN] FreqHopOn Enables disables the intra-packet frequency hopping
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 173 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 174 * LoRa: [0: OFF, 1: ON]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 175 * \param [IN] HopPeriod Number of symbols bewteen each hop
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 176 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 177 * LoRa: Number of symbols
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 178 * \param [IN] iqInverted Inverts IQ signals (LoRa only)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 179 * FSK : N/A ( set to 0 )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 180 * LoRa: [0: not inverted, 1: inverted]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 181 * \param [IN] timeout Transmission timeout [us]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 182 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 183 virtual void SetTxConfig( RadioModems_t modem, int8_t power, uint32_t fdev,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 184 uint32_t bandwidth, uint32_t datarate,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 185 uint8_t coderate, uint16_t preambleLen,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 186 bool fixLen, bool crcOn, bool FreqHopOn,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 187 uint8_t HopPeriod, bool iqInverted, uint32_t timeout );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 188
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 189 /**
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 190 * Generate CW with current TX config
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 191 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 192 virtual void SetTxContinuous(bool enable);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 193
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 194 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 195 * \brief Computes the packet time on air for the given payload
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 196 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 197 * \Remark Can only be called once SetRxConfig or SetTxConfig have been called
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 198 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 199 * \param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 200 * \param [IN] pktLen Packet payload length
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 201 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 202 * \retval airTime Computed airTime for the given packet payload length
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 203 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 204 virtual double TimeOnAir( RadioModems_t modem, uint8_t pktLen );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 205 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 206 * \brief Sends the buffer of size. Prepares the packet to be sent and sets
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 207 * the radio in transmission
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 208 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 209 * \param [IN]: buffer Buffer pointer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 210 * \param [IN]: size Buffer size
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 211 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 212 virtual void Send( const uint8_t *buffer, uint8_t size );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 213 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 214 * \brief Sets the radio in sleep mode
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 215 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 216 virtual void Sleep( void );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 217 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 218 * \brief Sets the radio in standby mode
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 219 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 220 virtual void Standby( void );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 221 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 222 * \brief Sets the radio in reception mode for the given time
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 223 * \param [IN] timeout Reception timeout [ms]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 224 * [0: continuous, others timeout]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 225 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 226 virtual void Rx( uint32_t timeout );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 227 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 228 * \brief Start a Channel Activity Detection
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 229 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 230 virtual void StartCad( void );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 231 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 232 * \brief Reads the current RSSI value
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 233 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 234 * \retval rssiValue Current RSSI value in [dBm]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 235 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 236 virtual int16_t Rssi( RadioModems_t modem );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 237 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 238 * \brief Writes the radio register at the specified address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 239 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 240 * \param [IN]: addr Register address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 241 * \param [IN]: data New register value
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 242 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 243 virtual void Write( uint8_t addr, uint8_t data );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 244 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 245 * \brief Reads the radio register at the specified address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 246 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 247 * \param [IN]: addr Register address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 248 * \retval data Register value
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 249 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 250 virtual uint8_t Read ( uint8_t addr );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 251 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 252 * \brief Writes multiple radio registers starting at address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 253 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 254 * \param [IN] addr First Radio register address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 255 * \param [IN] buffer Buffer containing the new register's values
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 256 * \param [IN] size Number of registers to be written
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 257 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 258 virtual void WriteBuffer( uint8_t addr, const uint8_t *buffer, uint8_t size );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 259 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 260 * \brief Reads multiple radio registers starting at address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 261 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 262 * \param [IN] addr First Radio register address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 263 * \param [OUT] buffer Buffer where to copy the registers data
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 264 * \param [IN] size Number of registers to be read
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 265 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 266 virtual void ReadBuffer( uint8_t addr, uint8_t *buffer, uint8_t size );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 267
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 268 virtual void SignalMacEvent(void);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 269
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 270 virtual void CheckForReset(void);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 271
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 272 virtual void ResetRadio();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 273
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 274 virtual uint32_t GetTimeOnAir();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 275 protected:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 276 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 277 * \brief Set antenna switch to low power
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 278 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 279 * \param [IN] status [true: Antenna in low power, false: Antenna active]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 280 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 281 virtual void SetAntSwLowPower( bool status ) { }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 282
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 283 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 284 * \brief Set antenna direction
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 285 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 286 * \param [IN] rxTx [1: transmitter, 0: receiver]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 287 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 288 virtual void SetAntSw( uint8_t rxTx ) { }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 289
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 290 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 291 * \brief Get power amp setting
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 292 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 293 * \param [IN] channel Channel RF frequency
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 294 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 295 * \retval Power amp setting
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 296 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 297 virtual uint8_t GetPaSelect( uint32_t channel )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 298 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 299 return RF_PACONFIG_PASELECT_PABOOST;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 300 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 301
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 302 private:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 303 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 304 * Radio registers definition
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 305 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 306 typedef struct
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 307 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 308 RadioModems_t Modem;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 309 uint8_t Addr;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 310 uint8_t Value;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 311 }RadioRegisters_t;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 312
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 313 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 314 * Radio FSK modem parameters
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 315 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 316 typedef struct
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 317 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 318 int8_t Power;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 319 uint32_t Fdev;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 320 uint32_t Bandwidth;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 321 uint32_t BandwidthAfc;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 322 uint32_t Datarate;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 323 uint16_t PreambleLen;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 324 bool FixLen;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 325 uint8_t PayloadLen;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 326 bool CrcOn;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 327 bool IqInverted;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 328 bool RxContinuous;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 329 uint32_t TxTimeout;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 330 }RadioFskSettings_t;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 331
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 332 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 333 * Radio FSK packet handler state
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 334 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 335 typedef struct
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 336 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 337 bool SyncWordDetected;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 338 int8_t RssiValue;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 339 int32_t AfcValue;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 340 uint8_t RxGain;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 341 uint16_t Size;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 342 uint16_t NbBytes;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 343 uint8_t FifoThresh;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 344 uint8_t ChunkSize;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 345 }RadioFskPacketHandler_t;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 346
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 347 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 348 * Radio LoRa modem parameters
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 349 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 350 typedef struct
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 351 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 352 int8_t Power;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 353 uint32_t Bandwidth;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 354 uint32_t Datarate;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 355 bool LowDatarateOptimize;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 356 uint8_t Coderate;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 357 uint16_t PreambleLen;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 358 bool FixLen;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 359 uint8_t PayloadLen;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 360 bool CrcOn;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 361 bool FreqHopOn;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 362 uint8_t HopPeriod;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 363 bool IqInverted;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 364 bool RxContinuous;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 365 uint32_t TxTimeout;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 366 }RadioLoRaSettings_t;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 367
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 368 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 369 * Radio LoRa packet handler state
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 370 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 371 typedef struct
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 372 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 373 int8_t SnrValue;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 374 int16_t RssiValue;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 375 uint8_t Size;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 376 }RadioLoRaPacketHandler_t;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 377
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 378 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 379 * Radio Settings
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 380 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 381 typedef struct
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 382 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 383 uint32_t Channel;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 384 RadioFskSettings_t Fsk;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 385 RadioFskPacketHandler_t FskPacketHandler;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 386 RadioLoRaSettings_t LoRa;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 387 RadioLoRaPacketHandler_t LoRaPacketHandler;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 388 }RadioSettings_t;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 389
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 390 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 391 * \brief Resets the SX1272
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 392 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 393 void Reset( void );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 394
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 395 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 396 * \brief Sets the SX1272 operating mode
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 397 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 398 * \param [IN] opMode New operating mode
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 399 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 400 void SetOpMode( uint8_t opMode );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 401
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 402 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 403 * \brief Sets the SX1272 in transmission mode for the given time
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 404 * \param [IN] timeout Transmission timeout [ms] [0: continuous, others timeout]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 405 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 406 void SetTx( uint32_t timeout );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 407
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 408 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 409 * \brief Writes the buffer contents to the SX1272 FIFO
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 410 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 411 * \param [IN] buffer Buffer containing data to be put on the FIFO.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 412 * \param [IN] size Number of bytes to be written to the FIFO
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 413 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 414 void WriteFifo( const uint8_t *buffer, uint8_t size );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 415
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 416 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 417 * \brief Reads the contents of the SX1272 FIFO
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 418 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 419 * \param [OUT] buffer Buffer where to copy the FIFO read data.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 420 * \param [IN] size Number of bytes to be read from the FIFO
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 421 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 422 void ReadFifo( uint8_t *buffer, uint8_t size );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 423
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 424 static void OnRxTxTimeoutIrq( void const *arg );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 425 static void OnSyncTimeoutIrq( void const *arg );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 426 void OnTimeoutIrqBottom( void );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 427 void SX1272OnDioIrq( void );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 428 void SX1272OnDio3Irq( void );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 429 void SX1272OnDio1Irq( void );
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 430
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 431 void SX1272IrqTxDone();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 432 void SX1272IrqFskRxDone(uint8_t irqFlags2);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 433 void SX1272IrqFskFifoLevel(void);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 434 void SX1272IrqFskFifoEmpty(void);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 435 void SX1272IrqFskSyncMatch(void);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 436 void SX1272IrqFsk(void);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 437 void SX1272IrqLoraRxDone(uint8_t irqFlags);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 438 void SX1272IrqLoraRxTimeout();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 439 void SX1272IrqLoraCadDone(uint8_t irqFlags);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 440 void SX1272IrqLoraFhss(void);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 441 void SX1272IrqLora(void);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 442 void SX1272Irq(void);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 443
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 444 static void RadioThread(void const *args);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 445
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 446 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 447 * Interrupt thread
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 448 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 449 Thread thread;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 450 uint64_t Stack[2560/8]; // 2.5kB stack for the radio thread
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 451 //align stack fix for ARM mbed 5.5.* custom stack error
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 452
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 453 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 454 * Reset IO line
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 455 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 456 DigitalInOut reset;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 457
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 458 InterruptIn DIO3;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 459 InterruptIn DIO4;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 460 InterruptIn DIO0;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 461 InterruptIn DIO1;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 462 InterruptIn DIO2;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 463
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 464
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 465 SPI spi;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 466 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 467 * SPI slave select
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 468 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 469 DigitalOut nss;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 470
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 471 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 472 * Event callback handler
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 473 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 474 SxRadioEvents *RadioEvents;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 475
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 476 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 477 * Reception buffer
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 478 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 479 uint8_t RxTxBuffer[RX_BUFFER_SIZE];
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 480
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 481 /*!
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 482 * Radio hardware and global parameters
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 483 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 484 RadioSettings_t settings;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 485
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 486 RtosTimer TxTimeoutTimer;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 487 RtosTimer RxTimeoutTimer;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 488 RtosTimer RxTimeoutSyncWord;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 489
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 490 bool RxTxTimeoutPending;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 491 bool SyncTimeoutPending;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 492
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 493 uint8_t opMode;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 494 uint32_t timeOnAir;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 495
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 496 static const RadioRegisters_t RadioRegsInit[];
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 497 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 498
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 499 #endif // __SXRADIO1272_H__