local for mbed5
radio.h@3:7e3595a9ebe0, 2016-10-12 (annotated)
- Committer:
- GregCr
- Date:
- Wed Oct 12 08:49:58 2016 +0000
- Revision:
- 3:7e3595a9ebe0
- Parent:
- 0:deaafdfde3bb
- Child:
- 4:c6ef863d0b07
updated version with patch RAM
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GregCr | 0:deaafdfde3bb | 1 | /* |
GregCr | 0:deaafdfde3bb | 2 | / _____) _ | | |
GregCr | 0:deaafdfde3bb | 3 | ( (____ _____ ____ _| |_ _____ ____| |__ |
GregCr | 0:deaafdfde3bb | 4 | \____ \| ___ | (_ _) ___ |/ ___) _ \ |
GregCr | 0:deaafdfde3bb | 5 | _____) ) ____| | | || |_| ____( (___| | | | |
GregCr | 0:deaafdfde3bb | 6 | (______/|_____)_|_|_| \__)_____)\____)_| |_| |
GregCr | 0:deaafdfde3bb | 7 | (C)2016 Semtech |
GregCr | 0:deaafdfde3bb | 8 | |
GregCr | 0:deaafdfde3bb | 9 | Description: Handling of the node configuration protocol |
GregCr | 0:deaafdfde3bb | 10 | |
GregCr | 0:deaafdfde3bb | 11 | License: Revised BSD License, see LICENSE.TXT file include in the project |
GregCr | 0:deaafdfde3bb | 12 | |
GregCr | 0:deaafdfde3bb | 13 | Maintainer: Miguel Luis, Gregory Cristian and Matthieu Verdy |
GregCr | 0:deaafdfde3bb | 14 | */ |
GregCr | 0:deaafdfde3bb | 15 | #ifndef __RADIO_H__ |
GregCr | 0:deaafdfde3bb | 16 | #define __RADIO_H__ |
GregCr | 0:deaafdfde3bb | 17 | |
GregCr | 0:deaafdfde3bb | 18 | #include "mbed.h" |
GregCr | 0:deaafdfde3bb | 19 | |
GregCr | 0:deaafdfde3bb | 20 | /*! |
GregCr | 0:deaafdfde3bb | 21 | * \brief Structure describing the radio status |
GregCr | 0:deaafdfde3bb | 22 | */ |
GregCr | 0:deaafdfde3bb | 23 | typedef union RadioStatus_u |
GregCr | 0:deaafdfde3bb | 24 | { |
GregCr | 0:deaafdfde3bb | 25 | uint8_t Value; |
GregCr | 0:deaafdfde3bb | 26 | struct |
GregCr | 0:deaafdfde3bb | 27 | { //bit order is lsb -> msb |
GregCr | 0:deaafdfde3bb | 28 | uint8_t Reserved : 1; //!< Reserved |
GregCr | 0:deaafdfde3bb | 29 | uint8_t CmdStatus : 3; //!< Command status |
GregCr | 0:deaafdfde3bb | 30 | uint8_t ChipMode : 3; //!< Chip mode |
GregCr | 0:deaafdfde3bb | 31 | uint8_t CpuBusy : 1; //!< Flag for CPU radio busy |
GregCr | 0:deaafdfde3bb | 32 | }Fields; |
GregCr | 0:deaafdfde3bb | 33 | }RadioStatus_t; |
GregCr | 0:deaafdfde3bb | 34 | |
GregCr | 0:deaafdfde3bb | 35 | /*! |
GregCr | 0:deaafdfde3bb | 36 | * \brief Structure describing the error codes for callback functions |
GregCr | 0:deaafdfde3bb | 37 | */ |
GregCr | 0:deaafdfde3bb | 38 | enum IrqErrorCode_t |
GregCr | 0:deaafdfde3bb | 39 | { |
GregCr | 0:deaafdfde3bb | 40 | IRQ_HEADER_ERROR_CODE = 0x01, |
GregCr | 0:deaafdfde3bb | 41 | IRQ_SYNCWORD_ERROR_CODE = 0x02, |
GregCr | 3:7e3595a9ebe0 | 42 | IRQ_CRC_ERROR_CODE = 0x04, |
GregCr | 0:deaafdfde3bb | 43 | }; |
GregCr | 0:deaafdfde3bb | 44 | |
GregCr | 0:deaafdfde3bb | 45 | |
GregCr | 0:deaafdfde3bb | 46 | enum IrqPblSyncHeaderCode_t |
GregCr | 0:deaafdfde3bb | 47 | { |
GregCr | 0:deaafdfde3bb | 48 | IRQ_PBL_DETECT_CODE = 0x01, |
GregCr | 0:deaafdfde3bb | 49 | IRQ_SYNCWORD_VALID_CODE = 0x02, |
GregCr | 3:7e3595a9ebe0 | 50 | IRQ_HEADER_VALID_CODE = 0x04, |
GregCr | 3:7e3595a9ebe0 | 51 | }; |
GregCr | 3:7e3595a9ebe0 | 52 | |
GregCr | 3:7e3595a9ebe0 | 53 | enum IrqTimeoutCode_t |
GregCr | 3:7e3595a9ebe0 | 54 | { |
GregCr | 3:7e3595a9ebe0 | 55 | IRQ_RX_TIMEOUT = 0x00, |
GregCr | 3:7e3595a9ebe0 | 56 | IRQ_TX_TIMEOUT = 0x01, |
GregCr | 3:7e3595a9ebe0 | 57 | IRQ_XYZ = 0xFF, |
GregCr | 0:deaafdfde3bb | 58 | }; |
GregCr | 0:deaafdfde3bb | 59 | |
GregCr | 0:deaafdfde3bb | 60 | /*! |
GregCr | 0:deaafdfde3bb | 61 | * \brief The radio command opcodes |
GregCr | 0:deaafdfde3bb | 62 | */ |
GregCr | 0:deaafdfde3bb | 63 | enum RadioCommands_t; |
GregCr | 0:deaafdfde3bb | 64 | |
GregCr | 0:deaafdfde3bb | 65 | /*! |
GregCr | 0:deaafdfde3bb | 66 | * \brief Class holding the basic communications with a radio |
GregCr | 0:deaafdfde3bb | 67 | * |
GregCr | 0:deaafdfde3bb | 68 | * It sets the functions to read/write registers, send commands and read/write |
GregCr | 0:deaafdfde3bb | 69 | * payload. |
GregCr | 0:deaafdfde3bb | 70 | * It also provides functions to run callback functions depending on the |
GregCr | 0:deaafdfde3bb | 71 | * interrupts generated from the radio. |
GregCr | 0:deaafdfde3bb | 72 | */ |
GregCr | 0:deaafdfde3bb | 73 | class Radio |
GregCr | 0:deaafdfde3bb | 74 | { |
GregCr | 0:deaafdfde3bb | 75 | protected: |
GregCr | 0:deaafdfde3bb | 76 | /*! |
GregCr | 0:deaafdfde3bb | 77 | * \brief Callback on Tx done interrupt |
GregCr | 0:deaafdfde3bb | 78 | */ |
GregCr | 0:deaafdfde3bb | 79 | void ( *txDone )( ); |
GregCr | 0:deaafdfde3bb | 80 | |
GregCr | 0:deaafdfde3bb | 81 | /*! |
GregCr | 0:deaafdfde3bb | 82 | * \brief Callback on Rx done interrupt |
GregCr | 0:deaafdfde3bb | 83 | */ |
GregCr | 0:deaafdfde3bb | 84 | void ( *rxDone )( ); |
GregCr | 0:deaafdfde3bb | 85 | |
GregCr | 0:deaafdfde3bb | 86 | /*! |
GregCr | 0:deaafdfde3bb | 87 | * \brief Callback on Rx SyncWord done interrupt |
GregCr | 0:deaafdfde3bb | 88 | */ |
GregCr | 0:deaafdfde3bb | 89 | void ( *rxPblSyncWordHeader )( IrqPblSyncHeaderCode_t val ); |
GregCr | 0:deaafdfde3bb | 90 | |
GregCr | 0:deaafdfde3bb | 91 | /*! |
GregCr | 0:deaafdfde3bb | 92 | * \brief Callback on Rx Tx timeout interrupt |
GregCr | 3:7e3595a9ebe0 | 93 | * |
GregCr | 3:7e3595a9ebe0 | 94 | * \param [out] errCode A code indicating the source of the Timeout interrupt |
GregCr | 0:deaafdfde3bb | 95 | */ |
GregCr | 3:7e3595a9ebe0 | 96 | void ( *rxTxTimeout )( IrqTimeoutCode_t timeoutCode ); |
GregCr | 0:deaafdfde3bb | 97 | |
GregCr | 0:deaafdfde3bb | 98 | /*! |
GregCr | 0:deaafdfde3bb | 99 | * \brief Callback on Rx error interrupt |
GregCr | 0:deaafdfde3bb | 100 | * |
GregCr | 0:deaafdfde3bb | 101 | * \param [out] errCode A code indicating the type of interrupt ( SyncWord error or CRC error) |
GregCr | 0:deaafdfde3bb | 102 | */ |
GregCr | 0:deaafdfde3bb | 103 | void ( *rxError )( IrqErrorCode_t errCode ); |
GregCr | 0:deaafdfde3bb | 104 | |
GregCr | 0:deaafdfde3bb | 105 | /*! |
GregCr | 0:deaafdfde3bb | 106 | * \brief Callback on Channel Activity Detection done interrupt |
GregCr | 0:deaafdfde3bb | 107 | * |
GregCr | 0:deaafdfde3bb | 108 | * \param [out] cadFlag Flag for channel activity detected or not |
GregCr | 0:deaafdfde3bb | 109 | */ |
GregCr | 0:deaafdfde3bb | 110 | void ( *cadDone )( bool cadFlag ); |
GregCr | 0:deaafdfde3bb | 111 | |
GregCr | 0:deaafdfde3bb | 112 | public: |
GregCr | 0:deaafdfde3bb | 113 | /*! |
GregCr | 0:deaafdfde3bb | 114 | * \brief Constructor for radio class |
GregCr | 0:deaafdfde3bb | 115 | * |
GregCr | 0:deaafdfde3bb | 116 | * Sets the callbacks functions pointers |
GregCr | 0:deaafdfde3bb | 117 | */ |
GregCr | 0:deaafdfde3bb | 118 | Radio( void ( *txDone )( ), void ( *rxDone )( ), void ( *rxPblSyncWordHeader )(IrqPblSyncHeaderCode_t val ), |
GregCr | 3:7e3595a9ebe0 | 119 | void ( *rxTxTimeout )( IrqTimeoutCode_t timeoutCode ), void ( *rxError )( IrqErrorCode_t errorCode ), |
GregCr | 0:deaafdfde3bb | 120 | void ( *cadDone )( bool channelActivityDetected ) ) |
GregCr | 0:deaafdfde3bb | 121 | { |
GregCr | 0:deaafdfde3bb | 122 | this->txDone = txDone; |
GregCr | 0:deaafdfde3bb | 123 | this->rxDone = rxDone; |
GregCr | 0:deaafdfde3bb | 124 | this->rxPblSyncWordHeader = rxPblSyncWordHeader; |
GregCr | 0:deaafdfde3bb | 125 | this->rxTxTimeout = rxTxTimeout; |
GregCr | 0:deaafdfde3bb | 126 | this->rxError = rxError; |
GregCr | 0:deaafdfde3bb | 127 | this->cadDone = cadDone; |
GregCr | 0:deaafdfde3bb | 128 | } |
GregCr | 0:deaafdfde3bb | 129 | virtual ~Radio( ){ }; |
GregCr | 0:deaafdfde3bb | 130 | |
GregCr | 0:deaafdfde3bb | 131 | /*! |
GregCr | 0:deaafdfde3bb | 132 | * \brief Resets the radio |
GregCr | 0:deaafdfde3bb | 133 | */ |
GregCr | 0:deaafdfde3bb | 134 | virtual void Reset( void ) = 0; |
GregCr | 0:deaafdfde3bb | 135 | |
GregCr | 0:deaafdfde3bb | 136 | /*! |
GregCr | 0:deaafdfde3bb | 137 | * \brief Gets the current radio status |
GregCr | 0:deaafdfde3bb | 138 | * |
GregCr | 0:deaafdfde3bb | 139 | * \retval status Radio status |
GregCr | 0:deaafdfde3bb | 140 | */ |
GregCr | 0:deaafdfde3bb | 141 | virtual RadioStatus_t GetStatus( void ) = 0; |
GregCr | 0:deaafdfde3bb | 142 | |
GregCr | 0:deaafdfde3bb | 143 | /*! |
GregCr | 0:deaafdfde3bb | 144 | * \brief Writes the given command to the radio |
GregCr | 0:deaafdfde3bb | 145 | * |
GregCr | 0:deaafdfde3bb | 146 | * \param [in] opcode Command opcode |
GregCr | 0:deaafdfde3bb | 147 | * \param [in] buffer Command parameters byte array |
GregCr | 0:deaafdfde3bb | 148 | * \param [in] size Command parameters byte array size |
GregCr | 0:deaafdfde3bb | 149 | */ |
GregCr | 0:deaafdfde3bb | 150 | virtual void WriteCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size ) = 0; |
GregCr | 0:deaafdfde3bb | 151 | |
GregCr | 0:deaafdfde3bb | 152 | /*! |
GregCr | 0:deaafdfde3bb | 153 | * \brief Reads the given command from the radio |
GregCr | 0:deaafdfde3bb | 154 | * |
GregCr | 0:deaafdfde3bb | 155 | * \param [in] opcode Command opcode |
GregCr | 0:deaafdfde3bb | 156 | * \param [in] buffer Command parameters byte array |
GregCr | 0:deaafdfde3bb | 157 | * \param [in] size Command parameters byte array size |
GregCr | 0:deaafdfde3bb | 158 | */ |
GregCr | 0:deaafdfde3bb | 159 | virtual void ReadCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size ) = 0; |
GregCr | 0:deaafdfde3bb | 160 | |
GregCr | 0:deaafdfde3bb | 161 | /*! |
GregCr | 0:deaafdfde3bb | 162 | * \brief Writes multiple radio registers starting at address |
GregCr | 0:deaafdfde3bb | 163 | * |
GregCr | 0:deaafdfde3bb | 164 | * \param [in] address First Radio register address |
GregCr | 0:deaafdfde3bb | 165 | * \param [in] buffer Buffer containing the new register's values |
GregCr | 0:deaafdfde3bb | 166 | * \param [in] size Number of registers to be written |
GregCr | 0:deaafdfde3bb | 167 | */ |
GregCr | 0:deaafdfde3bb | 168 | virtual void WriteRegister( uint16_t address, uint8_t *buffer, uint16_t size ) = 0; |
GregCr | 0:deaafdfde3bb | 169 | |
GregCr | 0:deaafdfde3bb | 170 | /*! |
GregCr | 0:deaafdfde3bb | 171 | * \brief Writes the radio register at the specified address |
GregCr | 0:deaafdfde3bb | 172 | * |
GregCr | 0:deaafdfde3bb | 173 | * \param [in] address Register address |
GregCr | 0:deaafdfde3bb | 174 | * \param [in] value New register value |
GregCr | 0:deaafdfde3bb | 175 | */ |
GregCr | 0:deaafdfde3bb | 176 | virtual void WriteRegister( uint16_t address, uint8_t value ) = 0; |
GregCr | 0:deaafdfde3bb | 177 | |
GregCr | 0:deaafdfde3bb | 178 | /*! |
GregCr | 0:deaafdfde3bb | 179 | * \brief Reads multiple radio registers starting at address |
GregCr | 0:deaafdfde3bb | 180 | * |
GregCr | 0:deaafdfde3bb | 181 | * \param [in] address First Radio register address |
GregCr | 0:deaafdfde3bb | 182 | * \param [out] buffer Buffer where to copy the registers data |
GregCr | 0:deaafdfde3bb | 183 | * \param [in] size Number of registers to be read |
GregCr | 0:deaafdfde3bb | 184 | */ |
GregCr | 0:deaafdfde3bb | 185 | virtual void ReadRegister( uint16_t address, uint8_t *buffer, uint16_t size ) = 0; |
GregCr | 0:deaafdfde3bb | 186 | |
GregCr | 0:deaafdfde3bb | 187 | /*! |
GregCr | 0:deaafdfde3bb | 188 | * \brief Reads the radio register at the specified address |
GregCr | 0:deaafdfde3bb | 189 | * |
GregCr | 0:deaafdfde3bb | 190 | * \param [in] address Register address |
GregCr | 0:deaafdfde3bb | 191 | * |
GregCr | 0:deaafdfde3bb | 192 | * \retval value The register value |
GregCr | 0:deaafdfde3bb | 193 | */ |
GregCr | 0:deaafdfde3bb | 194 | virtual uint8_t ReadRegister( uint16_t address ) = 0; |
GregCr | 0:deaafdfde3bb | 195 | |
GregCr | 0:deaafdfde3bb | 196 | /*! |
GregCr | 0:deaafdfde3bb | 197 | * \brief Writes Radio Data Buffer with buffer of size starting at offset. |
GregCr | 0:deaafdfde3bb | 198 | * |
GregCr | 0:deaafdfde3bb | 199 | * \param [in] offset Offset where to start writing |
GregCr | 0:deaafdfde3bb | 200 | * \param [in] buffer Buffer pointer |
GregCr | 0:deaafdfde3bb | 201 | * \param [in] size Buffer size |
GregCr | 0:deaafdfde3bb | 202 | */ |
GregCr | 0:deaafdfde3bb | 203 | virtual void WriteBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ) = 0; |
GregCr | 0:deaafdfde3bb | 204 | |
GregCr | 0:deaafdfde3bb | 205 | /*! |
GregCr | 0:deaafdfde3bb | 206 | * \brief Reads Radio Data Buffer at offset to buffer of size |
GregCr | 0:deaafdfde3bb | 207 | * |
GregCr | 0:deaafdfde3bb | 208 | * \param [in] offset Offset where to start reading |
GregCr | 0:deaafdfde3bb | 209 | * \param [out] buffer Buffer pointer |
GregCr | 0:deaafdfde3bb | 210 | * \param [in] size Buffer size |
GregCr | 0:deaafdfde3bb | 211 | */ |
GregCr | 0:deaafdfde3bb | 212 | virtual void ReadBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ) = 0; |
GregCr | 0:deaafdfde3bb | 213 | |
GregCr | 0:deaafdfde3bb | 214 | /*! |
GregCr | 0:deaafdfde3bb | 215 | * \brief Return firmware version |
GregCr | 0:deaafdfde3bb | 216 | * |
GregCr | 0:deaafdfde3bb | 217 | * \retval firmware The firmware version |
GregCr | 0:deaafdfde3bb | 218 | */ |
GregCr | 0:deaafdfde3bb | 219 | virtual uint16_t GetFirmwareVersion( void ) = 0; |
GregCr | 0:deaafdfde3bb | 220 | }; |
GregCr | 0:deaafdfde3bb | 221 | |
GregCr | 0:deaafdfde3bb | 222 | #endif // __RADIO_H__ |
GregCr | 0:deaafdfde3bb | 223 |