use function parameter "offset" instead of default 0x00 offset in WriteBuffer
Fork of SX1280Lib by
radio.h@0:03ec2f3bde8c, 2017-03-13 (annotated)
- Committer:
- GregCr
- Date:
- Mon Mar 13 14:16:00 2017 +0000
- Revision:
- 0:03ec2f3bde8c
alpha version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GregCr | 0:03ec2f3bde8c | 1 | /* |
GregCr | 0:03ec2f3bde8c | 2 | ______ _ |
GregCr | 0:03ec2f3bde8c | 3 | / _____) _ | | |
GregCr | 0:03ec2f3bde8c | 4 | ( (____ _____ ____ _| |_ _____ ____| |__ |
GregCr | 0:03ec2f3bde8c | 5 | \____ \| ___ | (_ _) ___ |/ ___) _ \ |
GregCr | 0:03ec2f3bde8c | 6 | _____) ) ____| | | || |_| ____( (___| | | | |
GregCr | 0:03ec2f3bde8c | 7 | (______/|_____)_|_|_| \__)_____)\____)_| |_| |
GregCr | 0:03ec2f3bde8c | 8 | (C)2016 Semtech |
GregCr | 0:03ec2f3bde8c | 9 | |
GregCr | 0:03ec2f3bde8c | 10 | Description: Handling of the node configuration protocol |
GregCr | 0:03ec2f3bde8c | 11 | |
GregCr | 0:03ec2f3bde8c | 12 | License: Revised BSD License, see LICENSE.TXT file include in the project |
GregCr | 0:03ec2f3bde8c | 13 | |
GregCr | 0:03ec2f3bde8c | 14 | Maintainer: Miguel Luis, Gregory Cristian and Matthieu Verdy |
GregCr | 0:03ec2f3bde8c | 15 | */ |
GregCr | 0:03ec2f3bde8c | 16 | #ifndef __RADIO_H__ |
GregCr | 0:03ec2f3bde8c | 17 | #define __RADIO_H__ |
GregCr | 0:03ec2f3bde8c | 18 | |
GregCr | 0:03ec2f3bde8c | 19 | #include "mbed.h" |
GregCr | 0:03ec2f3bde8c | 20 | |
GregCr | 0:03ec2f3bde8c | 21 | /*! |
GregCr | 0:03ec2f3bde8c | 22 | * \brief Structure describing the radio status |
GregCr | 0:03ec2f3bde8c | 23 | */ |
GregCr | 0:03ec2f3bde8c | 24 | typedef union |
GregCr | 0:03ec2f3bde8c | 25 | { |
GregCr | 0:03ec2f3bde8c | 26 | /*! |
GregCr | 0:03ec2f3bde8c | 27 | * \brief Structure of the radio status |
GregCr | 0:03ec2f3bde8c | 28 | */ |
GregCr | 0:03ec2f3bde8c | 29 | struct |
GregCr | 0:03ec2f3bde8c | 30 | { |
GregCr | 0:03ec2f3bde8c | 31 | uint8_t CpuBusy : 1; //!< Flag for CPU radio busy |
GregCr | 0:03ec2f3bde8c | 32 | uint8_t DmaBusy : 1; //!< Flag for DMA busy |
GregCr | 0:03ec2f3bde8c | 33 | uint8_t CmdStatus : 3; //!< Command status |
GregCr | 0:03ec2f3bde8c | 34 | uint8_t ChipMode : 3; //!< Chip mode |
GregCr | 0:03ec2f3bde8c | 35 | }Fields; |
GregCr | 0:03ec2f3bde8c | 36 | |
GregCr | 0:03ec2f3bde8c | 37 | /*! |
GregCr | 0:03ec2f3bde8c | 38 | * \brief Serialized radio status |
GregCr | 0:03ec2f3bde8c | 39 | */ |
GregCr | 0:03ec2f3bde8c | 40 | uint8_t Value; |
GregCr | 0:03ec2f3bde8c | 41 | }RadioStatus_t; |
GregCr | 0:03ec2f3bde8c | 42 | |
GregCr | 0:03ec2f3bde8c | 43 | /*! |
GregCr | 0:03ec2f3bde8c | 44 | * \brief Structure describing the ranging codes for callback functions |
GregCr | 0:03ec2f3bde8c | 45 | */ |
GregCr | 0:03ec2f3bde8c | 46 | typedef enum |
GregCr | 0:03ec2f3bde8c | 47 | { |
GregCr | 0:03ec2f3bde8c | 48 | IRQ_RANGING_SLAVE_ERROR_CODE = 0x00, |
GregCr | 0:03ec2f3bde8c | 49 | IRQ_RANGING_SLAVE_VALID_CODE, |
GregCr | 0:03ec2f3bde8c | 50 | IRQ_RANGING_MASTER_ERROR_CODE, |
GregCr | 0:03ec2f3bde8c | 51 | IRQ_RANGING_MASTER_VALID_CODE, |
GregCr | 0:03ec2f3bde8c | 52 | }IrqRangingCode_t; |
GregCr | 0:03ec2f3bde8c | 53 | |
GregCr | 0:03ec2f3bde8c | 54 | /*! |
GregCr | 0:03ec2f3bde8c | 55 | * \brief Structure describing the error codes for callback functions |
GregCr | 0:03ec2f3bde8c | 56 | */ |
GregCr | 0:03ec2f3bde8c | 57 | typedef enum |
GregCr | 0:03ec2f3bde8c | 58 | { |
GregCr | 0:03ec2f3bde8c | 59 | IRQ_HEADER_ERROR_CODE = 0x00, |
GregCr | 0:03ec2f3bde8c | 60 | IRQ_SYNCWORD_ERROR_CODE, |
GregCr | 0:03ec2f3bde8c | 61 | IRQ_CRC_ERROR_CODE, |
GregCr | 0:03ec2f3bde8c | 62 | IRQ_RANGING_ON_LORA_ERROR_CODE, |
GregCr | 0:03ec2f3bde8c | 63 | }IrqErrorCode_t; |
GregCr | 0:03ec2f3bde8c | 64 | |
GregCr | 0:03ec2f3bde8c | 65 | /*! |
GregCr | 0:03ec2f3bde8c | 66 | * \brief Structure describing the validity codes for callback function rxValid |
GregCr | 0:03ec2f3bde8c | 67 | */ |
GregCr | 0:03ec2f3bde8c | 68 | typedef enum |
GregCr | 0:03ec2f3bde8c | 69 | { |
GregCr | 0:03ec2f3bde8c | 70 | IRQ_HEADER_VALID_CODE = 0x00, |
GregCr | 0:03ec2f3bde8c | 71 | IRQ_SYNCWORD_VALID_CODE, |
GregCr | 0:03ec2f3bde8c | 72 | }IrqValidCode_t; |
GregCr | 0:03ec2f3bde8c | 73 | |
GregCr | 0:03ec2f3bde8c | 74 | /*! |
GregCr | 0:03ec2f3bde8c | 75 | * \brief The radio command opcodes |
GregCr | 0:03ec2f3bde8c | 76 | */ |
GregCr | 0:03ec2f3bde8c | 77 | typedef enum RadioCommands_u RadioCommands_t; |
GregCr | 0:03ec2f3bde8c | 78 | |
GregCr | 0:03ec2f3bde8c | 79 | /*! |
GregCr | 0:03ec2f3bde8c | 80 | * \brief The radio callbacks structure |
GregCr | 0:03ec2f3bde8c | 81 | * Holds function pointers to be called on radio interrupts |
GregCr | 0:03ec2f3bde8c | 82 | */ |
GregCr | 0:03ec2f3bde8c | 83 | typedef struct |
GregCr | 0:03ec2f3bde8c | 84 | { |
GregCr | 0:03ec2f3bde8c | 85 | void ( *txDone )( void ); //!< Pointer to a function run on successful transmission |
GregCr | 0:03ec2f3bde8c | 86 | void ( *rxDone )( void ); //!< Pointer to a function run on successful reception |
GregCr | 0:03ec2f3bde8c | 87 | void ( *rxSyncWordDone )( void ); //!< Pointer to a function run on successful SyncWord reception |
GregCr | 0:03ec2f3bde8c | 88 | void ( *rxHeaderDone )( void ); //!< Pointer to a function run on successful Header reception |
GregCr | 0:03ec2f3bde8c | 89 | void ( *txTimeout )( void ); //!< Pointer to a function run on transmission timeout |
GregCr | 0:03ec2f3bde8c | 90 | void ( *rxTimeout )( void ); //!< Pointer to a function run on reception timeout |
GregCr | 0:03ec2f3bde8c | 91 | void ( *rxError )( IrqErrorCode_t errCode ); //!< Pointer to a function run on reception error |
GregCr | 0:03ec2f3bde8c | 92 | void ( *rangingDone )( IrqRangingCode_t val ); //!< Pointer to a function run on ranging terminated |
GregCr | 0:03ec2f3bde8c | 93 | void ( *cadDone )( bool cadFlag ); //!< Pointer to a function run on channel activity detected |
GregCr | 0:03ec2f3bde8c | 94 | }RadioCallbacks_t; |
GregCr | 0:03ec2f3bde8c | 95 | |
GregCr | 0:03ec2f3bde8c | 96 | /*! |
GregCr | 0:03ec2f3bde8c | 97 | * \brief Class holding the basic communications with a radio |
GregCr | 0:03ec2f3bde8c | 98 | * |
GregCr | 0:03ec2f3bde8c | 99 | * It sets the functions to read/write registers, send commands and read/write |
GregCr | 0:03ec2f3bde8c | 100 | * payload. |
GregCr | 0:03ec2f3bde8c | 101 | * It also provides functions to run callback functions depending on the |
GregCr | 0:03ec2f3bde8c | 102 | * interrupts generated from the radio. |
GregCr | 0:03ec2f3bde8c | 103 | */ |
GregCr | 0:03ec2f3bde8c | 104 | class Radio |
GregCr | 0:03ec2f3bde8c | 105 | { |
GregCr | 0:03ec2f3bde8c | 106 | protected: |
GregCr | 0:03ec2f3bde8c | 107 | /*! |
GregCr | 0:03ec2f3bde8c | 108 | * \brief Callback on Tx done interrupt |
GregCr | 0:03ec2f3bde8c | 109 | */ |
GregCr | 0:03ec2f3bde8c | 110 | void ( *txDone )( void ); |
GregCr | 0:03ec2f3bde8c | 111 | |
GregCr | 0:03ec2f3bde8c | 112 | /*! |
GregCr | 0:03ec2f3bde8c | 113 | * \brief Callback on Rx done interrupt |
GregCr | 0:03ec2f3bde8c | 114 | */ |
GregCr | 0:03ec2f3bde8c | 115 | void ( *rxDone )( void ); |
GregCr | 0:03ec2f3bde8c | 116 | |
GregCr | 0:03ec2f3bde8c | 117 | /*! |
GregCr | 0:03ec2f3bde8c | 118 | * \brief Callback on Rx SyncWord interrupt |
GregCr | 0:03ec2f3bde8c | 119 | */ |
GregCr | 0:03ec2f3bde8c | 120 | void ( *rxSyncWordDone )( void ); |
GregCr | 0:03ec2f3bde8c | 121 | |
GregCr | 0:03ec2f3bde8c | 122 | /*! |
GregCr | 0:03ec2f3bde8c | 123 | * \brief Callback on Rx header received interrupt |
GregCr | 0:03ec2f3bde8c | 124 | */ |
GregCr | 0:03ec2f3bde8c | 125 | void ( *rxHeaderDone )( void ); |
GregCr | 0:03ec2f3bde8c | 126 | |
GregCr | 0:03ec2f3bde8c | 127 | /*! |
GregCr | 0:03ec2f3bde8c | 128 | * \brief Callback on Tx timeout interrupt |
GregCr | 0:03ec2f3bde8c | 129 | */ |
GregCr | 0:03ec2f3bde8c | 130 | void ( *txTimeout )( void ); |
GregCr | 0:03ec2f3bde8c | 131 | |
GregCr | 0:03ec2f3bde8c | 132 | /*! |
GregCr | 0:03ec2f3bde8c | 133 | * \brief Callback on Rx timeout interrupt |
GregCr | 0:03ec2f3bde8c | 134 | */ |
GregCr | 0:03ec2f3bde8c | 135 | void ( *rxTimeout )( void ); |
GregCr | 0:03ec2f3bde8c | 136 | |
GregCr | 0:03ec2f3bde8c | 137 | /*! |
GregCr | 0:03ec2f3bde8c | 138 | * \brief Callback on Rx error interrupt |
GregCr | 0:03ec2f3bde8c | 139 | * |
GregCr | 0:03ec2f3bde8c | 140 | * \param [out] errCode A code indicating the type of interrupt (SyncWord error or CRC error) |
GregCr | 0:03ec2f3bde8c | 141 | */ |
GregCr | 0:03ec2f3bde8c | 142 | void ( *rxError )( IrqErrorCode_t errCode ); |
GregCr | 0:03ec2f3bde8c | 143 | |
GregCr | 0:03ec2f3bde8c | 144 | /*! |
GregCr | 0:03ec2f3bde8c | 145 | * \brief Callback on ranging done interrupt |
GregCr | 0:03ec2f3bde8c | 146 | * |
GregCr | 0:03ec2f3bde8c | 147 | * \param [out] val A flag indicating the type of interrupt (Master/Slave and Valid/Error) |
GregCr | 0:03ec2f3bde8c | 148 | */ |
GregCr | 0:03ec2f3bde8c | 149 | void ( *rangingDone )( IrqRangingCode_t val ); |
GregCr | 0:03ec2f3bde8c | 150 | |
GregCr | 0:03ec2f3bde8c | 151 | /*! |
GregCr | 0:03ec2f3bde8c | 152 | * \brief Callback on Channel Activity Detection done interrupt |
GregCr | 0:03ec2f3bde8c | 153 | * |
GregCr | 0:03ec2f3bde8c | 154 | * \param [out] cadFlag Flag for channel activity detected or not |
GregCr | 0:03ec2f3bde8c | 155 | */ |
GregCr | 0:03ec2f3bde8c | 156 | void ( *cadDone )( bool cadFlag ); |
GregCr | 0:03ec2f3bde8c | 157 | |
GregCr | 0:03ec2f3bde8c | 158 | public: |
GregCr | 0:03ec2f3bde8c | 159 | /*! |
GregCr | 0:03ec2f3bde8c | 160 | * \brief Constructor for radio class |
GregCr | 0:03ec2f3bde8c | 161 | * Sets the callbacks functions pointers |
GregCr | 0:03ec2f3bde8c | 162 | * |
GregCr | 0:03ec2f3bde8c | 163 | * \param [in] callbacks The structure of callbacks function pointers |
GregCr | 0:03ec2f3bde8c | 164 | * to be called on radio interrupts |
GregCr | 0:03ec2f3bde8c | 165 | * |
GregCr | 0:03ec2f3bde8c | 166 | */ |
GregCr | 0:03ec2f3bde8c | 167 | Radio( RadioCallbacks_t *callbacks ) |
GregCr | 0:03ec2f3bde8c | 168 | { |
GregCr | 0:03ec2f3bde8c | 169 | this->txDone = callbacks->txDone; |
GregCr | 0:03ec2f3bde8c | 170 | this->rxDone = callbacks->rxDone; |
GregCr | 0:03ec2f3bde8c | 171 | this->rxSyncWordDone = callbacks->rxSyncWordDone; |
GregCr | 0:03ec2f3bde8c | 172 | this->rxHeaderDone = callbacks->rxHeaderDone; |
GregCr | 0:03ec2f3bde8c | 173 | this->txTimeout = callbacks->txTimeout; |
GregCr | 0:03ec2f3bde8c | 174 | this->rxTimeout = callbacks->rxTimeout; |
GregCr | 0:03ec2f3bde8c | 175 | this->rxError = callbacks->rxError; |
GregCr | 0:03ec2f3bde8c | 176 | this->rangingDone = callbacks->rangingDone; |
GregCr | 0:03ec2f3bde8c | 177 | this->cadDone = callbacks->cadDone; |
GregCr | 0:03ec2f3bde8c | 178 | } |
GregCr | 0:03ec2f3bde8c | 179 | virtual ~Radio( void ){ }; |
GregCr | 0:03ec2f3bde8c | 180 | |
GregCr | 0:03ec2f3bde8c | 181 | /*! |
GregCr | 0:03ec2f3bde8c | 182 | * \brief Resets the radio |
GregCr | 0:03ec2f3bde8c | 183 | */ |
GregCr | 0:03ec2f3bde8c | 184 | virtual void Reset( void ) = 0; |
GregCr | 0:03ec2f3bde8c | 185 | |
GregCr | 0:03ec2f3bde8c | 186 | /*! |
GregCr | 0:03ec2f3bde8c | 187 | * \brief Gets the current radio status |
GregCr | 0:03ec2f3bde8c | 188 | * |
GregCr | 0:03ec2f3bde8c | 189 | * \retval status Radio status |
GregCr | 0:03ec2f3bde8c | 190 | */ |
GregCr | 0:03ec2f3bde8c | 191 | virtual RadioStatus_t GetStatus( void ) = 0; |
GregCr | 0:03ec2f3bde8c | 192 | |
GregCr | 0:03ec2f3bde8c | 193 | /*! |
GregCr | 0:03ec2f3bde8c | 194 | * \brief Writes the given command to the radio |
GregCr | 0:03ec2f3bde8c | 195 | * |
GregCr | 0:03ec2f3bde8c | 196 | * \param [in] opcode Command opcode |
GregCr | 0:03ec2f3bde8c | 197 | * \param [in] buffer Command parameters byte array |
GregCr | 0:03ec2f3bde8c | 198 | * \param [in] size Command parameters byte array size |
GregCr | 0:03ec2f3bde8c | 199 | */ |
GregCr | 0:03ec2f3bde8c | 200 | virtual void WriteCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size ) = 0; |
GregCr | 0:03ec2f3bde8c | 201 | |
GregCr | 0:03ec2f3bde8c | 202 | /*! |
GregCr | 0:03ec2f3bde8c | 203 | * \brief Reads the given command from the radio |
GregCr | 0:03ec2f3bde8c | 204 | * |
GregCr | 0:03ec2f3bde8c | 205 | * \param [in] opcode Command opcode |
GregCr | 0:03ec2f3bde8c | 206 | * \param [in] buffer Command parameters byte array |
GregCr | 0:03ec2f3bde8c | 207 | * \param [in] size Command parameters byte array size |
GregCr | 0:03ec2f3bde8c | 208 | */ |
GregCr | 0:03ec2f3bde8c | 209 | virtual void ReadCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size ) = 0; |
GregCr | 0:03ec2f3bde8c | 210 | |
GregCr | 0:03ec2f3bde8c | 211 | /*! |
GregCr | 0:03ec2f3bde8c | 212 | * \brief Writes multiple radio registers starting at address |
GregCr | 0:03ec2f3bde8c | 213 | * |
GregCr | 0:03ec2f3bde8c | 214 | * \param [in] address First Radio register address |
GregCr | 0:03ec2f3bde8c | 215 | * \param [in] buffer Buffer containing the new register's values |
GregCr | 0:03ec2f3bde8c | 216 | * \param [in] size Number of registers to be written |
GregCr | 0:03ec2f3bde8c | 217 | */ |
GregCr | 0:03ec2f3bde8c | 218 | virtual void WriteRegister( uint16_t address, uint8_t *buffer, uint16_t size ) = 0; |
GregCr | 0:03ec2f3bde8c | 219 | |
GregCr | 0:03ec2f3bde8c | 220 | /*! |
GregCr | 0:03ec2f3bde8c | 221 | * \brief Writes the radio register at the specified address |
GregCr | 0:03ec2f3bde8c | 222 | * |
GregCr | 0:03ec2f3bde8c | 223 | * \param [in] address Register address |
GregCr | 0:03ec2f3bde8c | 224 | * \param [in] value New register value |
GregCr | 0:03ec2f3bde8c | 225 | */ |
GregCr | 0:03ec2f3bde8c | 226 | virtual void WriteRegister( uint16_t address, uint8_t value ) = 0; |
GregCr | 0:03ec2f3bde8c | 227 | |
GregCr | 0:03ec2f3bde8c | 228 | /*! |
GregCr | 0:03ec2f3bde8c | 229 | * \brief Reads multiple radio registers starting at address |
GregCr | 0:03ec2f3bde8c | 230 | * |
GregCr | 0:03ec2f3bde8c | 231 | * \param [in] address First Radio register address |
GregCr | 0:03ec2f3bde8c | 232 | * \param [out] buffer Buffer where to copy the registers data |
GregCr | 0:03ec2f3bde8c | 233 | * \param [in] size Number of registers to be read |
GregCr | 0:03ec2f3bde8c | 234 | */ |
GregCr | 0:03ec2f3bde8c | 235 | virtual void ReadRegister( uint16_t address, uint8_t *buffer, uint16_t size ) = 0; |
GregCr | 0:03ec2f3bde8c | 236 | |
GregCr | 0:03ec2f3bde8c | 237 | /*! |
GregCr | 0:03ec2f3bde8c | 238 | * \brief Reads the radio register at the specified address |
GregCr | 0:03ec2f3bde8c | 239 | * |
GregCr | 0:03ec2f3bde8c | 240 | * \param [in] address Register address |
GregCr | 0:03ec2f3bde8c | 241 | * |
GregCr | 0:03ec2f3bde8c | 242 | * \retval value The register value |
GregCr | 0:03ec2f3bde8c | 243 | */ |
GregCr | 0:03ec2f3bde8c | 244 | virtual uint8_t ReadRegister( uint16_t address ) = 0; |
GregCr | 0:03ec2f3bde8c | 245 | |
GregCr | 0:03ec2f3bde8c | 246 | /*! |
GregCr | 0:03ec2f3bde8c | 247 | * \brief Writes Radio Data Buffer with buffer of size starting at offset. |
GregCr | 0:03ec2f3bde8c | 248 | * |
GregCr | 0:03ec2f3bde8c | 249 | * \param [in] offset Offset where to start writing |
GregCr | 0:03ec2f3bde8c | 250 | * \param [in] buffer Buffer pointer |
GregCr | 0:03ec2f3bde8c | 251 | * \param [in] size Buffer size |
GregCr | 0:03ec2f3bde8c | 252 | */ |
GregCr | 0:03ec2f3bde8c | 253 | virtual void WriteBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ) = 0; |
GregCr | 0:03ec2f3bde8c | 254 | |
GregCr | 0:03ec2f3bde8c | 255 | /*! |
GregCr | 0:03ec2f3bde8c | 256 | * \brief Reads Radio Data Buffer at offset to buffer of size |
GregCr | 0:03ec2f3bde8c | 257 | * |
GregCr | 0:03ec2f3bde8c | 258 | * \param [in] offset Offset where to start reading |
GregCr | 0:03ec2f3bde8c | 259 | * \param [out] buffer Buffer pointer |
GregCr | 0:03ec2f3bde8c | 260 | * \param [in] size Buffer size |
GregCr | 0:03ec2f3bde8c | 261 | */ |
GregCr | 0:03ec2f3bde8c | 262 | virtual void ReadBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ) = 0; |
GregCr | 0:03ec2f3bde8c | 263 | |
GregCr | 0:03ec2f3bde8c | 264 | /*! |
GregCr | 0:03ec2f3bde8c | 265 | * \brief Return firmware version |
GregCr | 0:03ec2f3bde8c | 266 | * |
GregCr | 0:03ec2f3bde8c | 267 | * \retval firmware The firmware version |
GregCr | 0:03ec2f3bde8c | 268 | */ |
GregCr | 0:03ec2f3bde8c | 269 | virtual uint16_t GetFirmwareVersion( void ) = 0; |
GregCr | 0:03ec2f3bde8c | 270 | }; |
GregCr | 0:03ec2f3bde8c | 271 | |
GregCr | 0:03ec2f3bde8c | 272 | #endif // __RADIO_H__ |