fota lib for mdot
mdot/Lora/Radio/SxRadio1272.h@3:63d10f2375ea, 2018-09-14 (annotated)
- 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?
User | Revision | Line number | New 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__ |