SX1261 and sx1262 common library
Dependents: SX126xDevKit SX1262PingPong SX126X_TXonly SX126X_PingPong_Demo ... more
Fork of SX126xLib by
sx126x-hal.h@6:1e2345700991, 2018-07-18 (annotated)
- Committer:
- GregCr
- Date:
- Wed Jul 18 13:33:42 2018 +0000
- Revision:
- 6:1e2345700991
- Parent:
- 5:e488e6f185f3
added support for sx1268
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GregCr | 0:deaafdfde3bb | 1 | /* |
GregCr | 4:c6ef863d0b07 | 2 | ______ _ |
GregCr | 0:deaafdfde3bb | 3 | / _____) _ | | |
GregCr | 0:deaafdfde3bb | 4 | ( (____ _____ ____ _| |_ _____ ____| |__ |
GregCr | 0:deaafdfde3bb | 5 | \____ \| ___ | (_ _) ___ |/ ___) _ \ |
GregCr | 0:deaafdfde3bb | 6 | _____) ) ____| | | || |_| ____( (___| | | | |
GregCr | 0:deaafdfde3bb | 7 | (______/|_____)_|_|_| \__)_____)\____)_| |_| |
GregCr | 0:deaafdfde3bb | 8 | (C)2015 Semtech |
GregCr | 0:deaafdfde3bb | 9 | |
GregCr | 0:deaafdfde3bb | 10 | Description: Handling of the node configuration protocol |
GregCr | 0:deaafdfde3bb | 11 | |
GregCr | 0:deaafdfde3bb | 12 | License: Revised BSD License, see LICENSE.TXT file include in the project |
GregCr | 0:deaafdfde3bb | 13 | |
GregCr | 4:c6ef863d0b07 | 14 | Maintainer: Miguel Luis, Gregory Cristian & Gilbert Menth |
GregCr | 0:deaafdfde3bb | 15 | */ |
GregCr | 2:4ff11ea92fbe | 16 | #ifndef __SX126x_HAL_H__ |
GregCr | 2:4ff11ea92fbe | 17 | #define __SX126x_HAL_H__ |
GregCr | 0:deaafdfde3bb | 18 | |
GregCr | 1:35d34672a089 | 19 | #include "sx126x.h" |
GregCr | 0:deaafdfde3bb | 20 | |
GregCr | 0:deaafdfde3bb | 21 | /*! |
GregCr | 0:deaafdfde3bb | 22 | * \brief The default value of SPI clock |
GregCr | 0:deaafdfde3bb | 23 | */ |
GregCr | 4:c6ef863d0b07 | 24 | #define SX126x_SPI_FREQ_DEFAULT 16000000 |
GregCr | 0:deaafdfde3bb | 25 | |
GregCr | 0:deaafdfde3bb | 26 | /*! |
GregCr | 4:c6ef863d0b07 | 27 | * \brief Actual implementation of a SX126x radio |
GregCr | 0:deaafdfde3bb | 28 | */ |
GregCr | 2:4ff11ea92fbe | 29 | class SX126xHal : public SX126x |
GregCr | 0:deaafdfde3bb | 30 | { |
GregCr | 0:deaafdfde3bb | 31 | public: |
GregCr | 0:deaafdfde3bb | 32 | /*! |
GregCr | 2:4ff11ea92fbe | 33 | * \brief Constructor for SX126xHal with SPI support |
GregCr | 0:deaafdfde3bb | 34 | * |
GregCr | 0:deaafdfde3bb | 35 | * Represents the physical connectivity with the radio and set callback functions on radio interrupts |
GregCr | 0:deaafdfde3bb | 36 | */ |
GregCr | 4:c6ef863d0b07 | 37 | SX126xHal( PinName mosi, PinName miso, PinName sclk, PinName nss, |
GregCr | 4:c6ef863d0b07 | 38 | PinName busy, PinName dio1, PinName dio2, PinName dio3, PinName rst, |
GregCr | 5:e488e6f185f3 | 39 | PinName freqSel, PinName deviceSelect, PinName antSwPower, RadioCallbacks_t *callbacks ); |
GregCr | 0:deaafdfde3bb | 40 | |
GregCr | 0:deaafdfde3bb | 41 | /*! |
GregCr | 4:c6ef863d0b07 | 42 | * \brief Destructor for SX126xHal |
GregCr | 0:deaafdfde3bb | 43 | * |
GregCr | 0:deaafdfde3bb | 44 | * Take care of the correct destruction of the communication objects |
GregCr | 0:deaafdfde3bb | 45 | */ |
GregCr | 4:c6ef863d0b07 | 46 | virtual ~SX126xHal( void ); |
GregCr | 0:deaafdfde3bb | 47 | |
GregCr | 0:deaafdfde3bb | 48 | /*! |
GregCr | 0:deaafdfde3bb | 49 | * \brief Soft resets the radio |
GregCr | 0:deaafdfde3bb | 50 | */ |
GregCr | 0:deaafdfde3bb | 51 | virtual void Reset( void ); |
GregCr | 0:deaafdfde3bb | 52 | |
GregCr | 0:deaafdfde3bb | 53 | /*! |
GregCr | 0:deaafdfde3bb | 54 | * \brief Wakes up the radio |
GregCr | 0:deaafdfde3bb | 55 | */ |
GregCr | 0:deaafdfde3bb | 56 | virtual void Wakeup( void ); |
GregCr | 0:deaafdfde3bb | 57 | |
GregCr | 0:deaafdfde3bb | 58 | /*! |
GregCr | 0:deaafdfde3bb | 59 | * \brief Send a command that write data to the radio |
GregCr | 0:deaafdfde3bb | 60 | * |
GregCr | 0:deaafdfde3bb | 61 | * \param [in] opcode Opcode of the command |
GregCr | 0:deaafdfde3bb | 62 | * \param [in] buffer Buffer to be send to the radio |
GregCr | 0:deaafdfde3bb | 63 | * \param [in] size Size of the buffer to send |
GregCr | 0:deaafdfde3bb | 64 | */ |
GregCr | 0:deaafdfde3bb | 65 | virtual void WriteCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size ); |
GregCr | 0:deaafdfde3bb | 66 | |
GregCr | 0:deaafdfde3bb | 67 | /*! |
GregCr | 0:deaafdfde3bb | 68 | * \brief Send a command that read data from the radio |
GregCr | 0:deaafdfde3bb | 69 | * |
GregCr | 0:deaafdfde3bb | 70 | * \param [in] opcode Opcode of the command |
GregCr | 0:deaafdfde3bb | 71 | * \param [out] buffer Buffer holding data from the radio |
GregCr | 0:deaafdfde3bb | 72 | * \param [in] size Size of the buffer |
GregCr | 0:deaafdfde3bb | 73 | */ |
GregCr | 0:deaafdfde3bb | 74 | virtual void ReadCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size ); |
GregCr | 0:deaafdfde3bb | 75 | |
GregCr | 0:deaafdfde3bb | 76 | /*! |
GregCr | 0:deaafdfde3bb | 77 | * \brief Write data to the radio memory |
GregCr | 0:deaafdfde3bb | 78 | * |
GregCr | 0:deaafdfde3bb | 79 | * \param [in] address The address of the first byte to write in the radio |
GregCr | 0:deaafdfde3bb | 80 | * \param [in] buffer The data to be written in radio's memory |
GregCr | 0:deaafdfde3bb | 81 | * \param [in] size The number of bytes to write in radio's memory |
GregCr | 0:deaafdfde3bb | 82 | */ |
GregCr | 0:deaafdfde3bb | 83 | virtual void WriteRegister( uint16_t address, uint8_t *buffer, uint16_t size ); |
GregCr | 0:deaafdfde3bb | 84 | |
GregCr | 0:deaafdfde3bb | 85 | /*! |
GregCr | 0:deaafdfde3bb | 86 | * \brief Write a single byte of data to the radio memory |
GregCr | 0:deaafdfde3bb | 87 | * |
GregCr | 0:deaafdfde3bb | 88 | * \param [in] address The address of the first byte to write in the radio |
GregCr | 0:deaafdfde3bb | 89 | * \param [in] value The data to be written in radio's memory |
GregCr | 0:deaafdfde3bb | 90 | */ |
GregCr | 4:c6ef863d0b07 | 91 | virtual void WriteReg( uint16_t address, uint8_t value ); |
GregCr | 0:deaafdfde3bb | 92 | |
GregCr | 0:deaafdfde3bb | 93 | /*! |
GregCr | 0:deaafdfde3bb | 94 | * \brief Read data from the radio memory |
GregCr | 0:deaafdfde3bb | 95 | * |
GregCr | 0:deaafdfde3bb | 96 | * \param [in] address The address of the first byte to read from the radio |
GregCr | 0:deaafdfde3bb | 97 | * \param [out] buffer The buffer that holds data read from radio |
GregCr | 0:deaafdfde3bb | 98 | * \param [in] size The number of bytes to read from radio's memory |
GregCr | 0:deaafdfde3bb | 99 | */ |
GregCr | 0:deaafdfde3bb | 100 | virtual void ReadRegister( uint16_t address, uint8_t *buffer, uint16_t size ); |
GregCr | 0:deaafdfde3bb | 101 | |
GregCr | 0:deaafdfde3bb | 102 | /*! |
GregCr | 0:deaafdfde3bb | 103 | * \brief Read a single byte of data from the radio memory |
GregCr | 0:deaafdfde3bb | 104 | * |
GregCr | 0:deaafdfde3bb | 105 | * \param [in] address The address of the first byte to write in the |
GregCr | 0:deaafdfde3bb | 106 | * radio |
GregCr | 0:deaafdfde3bb | 107 | * |
GregCr | 0:deaafdfde3bb | 108 | * \retval value The value of the byte at the given address in |
GregCr | 0:deaafdfde3bb | 109 | * radio's memory |
GregCr | 0:deaafdfde3bb | 110 | */ |
GregCr | 4:c6ef863d0b07 | 111 | virtual uint8_t ReadReg( uint16_t address ); |
GregCr | 0:deaafdfde3bb | 112 | |
GregCr | 0:deaafdfde3bb | 113 | /*! |
GregCr | 0:deaafdfde3bb | 114 | * \brief Write data to the buffer holding the payload in the radio |
GregCr | 0:deaafdfde3bb | 115 | * |
GregCr | 0:deaafdfde3bb | 116 | * \param [in] offset The offset to start writing the payload |
GregCr | 4:c6ef863d0b07 | 117 | * \param [in] buffer The data to be written (the payload) |
GregCr | 0:deaafdfde3bb | 118 | * \param [in] size The number of byte to be written |
GregCr | 0:deaafdfde3bb | 119 | */ |
GregCr | 0:deaafdfde3bb | 120 | virtual void WriteBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ); |
GregCr | 0:deaafdfde3bb | 121 | |
GregCr | 0:deaafdfde3bb | 122 | /*! |
GregCr | 0:deaafdfde3bb | 123 | * \brief Read data from the buffer holding the payload in the radio |
GregCr | 0:deaafdfde3bb | 124 | * |
GregCr | 0:deaafdfde3bb | 125 | * \param [in] offset The offset to start reading the payload |
GregCr | 0:deaafdfde3bb | 126 | * \param [out] buffer A pointer to a buffer holding the data from the radio |
GregCr | 0:deaafdfde3bb | 127 | * \param [in] size The number of byte to be read |
GregCr | 0:deaafdfde3bb | 128 | */ |
GregCr | 0:deaafdfde3bb | 129 | virtual void ReadBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ); |
GregCr | 0:deaafdfde3bb | 130 | |
GregCr | 0:deaafdfde3bb | 131 | /*! |
GregCr | 0:deaafdfde3bb | 132 | * \brief Returns the status of DIOs pins |
GregCr | 0:deaafdfde3bb | 133 | * |
GregCr | 0:deaafdfde3bb | 134 | * \retval dioStatus A byte where each bit represents a DIO state: |
GregCr | 4:c6ef863d0b07 | 135 | * [ DIO3 | DIO2 | DIO1 | BUSY ] |
GregCr | 0:deaafdfde3bb | 136 | */ |
GregCr | 0:deaafdfde3bb | 137 | virtual uint8_t GetDioStatus( void ); |
GregCr | 0:deaafdfde3bb | 138 | |
GregCr | 4:c6ef863d0b07 | 139 | /*! |
GregCr | 4:c6ef863d0b07 | 140 | * \brief Returns the device type |
GregCr | 4:c6ef863d0b07 | 141 | * |
GregCr | 6:1e2345700991 | 142 | * \retval 0: SX1261, 1: SX1262, 2: SX1268 |
GregCr | 4:c6ef863d0b07 | 143 | */ |
GregCr | 4:c6ef863d0b07 | 144 | virtual uint8_t GetDeviceType( void ); |
GregCr | 4:c6ef863d0b07 | 145 | |
GregCr | 4:c6ef863d0b07 | 146 | /*! |
GregCr | 5:e488e6f185f3 | 147 | * \brief Returns the matching frequency |
GregCr | 5:e488e6f185f3 | 148 | * |
GregCr | 5:e488e6f185f3 | 149 | * \retval 1: 868 MHz |
GregCr | 5:e488e6f185f3 | 150 | * 0: 915 MHz |
GregCr | 5:e488e6f185f3 | 151 | */ |
GregCr | 5:e488e6f185f3 | 152 | virtual uint8_t GetFreqSelect( void ); |
GregCr | 5:e488e6f185f3 | 153 | |
GregCr | 5:e488e6f185f3 | 154 | /*! |
GregCr | 4:c6ef863d0b07 | 155 | * \brief RF Switch power on |
GregCr | 4:c6ef863d0b07 | 156 | */ |
GregCr | 4:c6ef863d0b07 | 157 | virtual void AntSwOn( void ); |
GregCr | 4:c6ef863d0b07 | 158 | |
GregCr | 4:c6ef863d0b07 | 159 | /*! |
GregCr | 4:c6ef863d0b07 | 160 | * \brief RF Switch power off |
GregCr | 4:c6ef863d0b07 | 161 | */ |
GregCr | 4:c6ef863d0b07 | 162 | virtual void AntSwOff( void ); |
GregCr | 4:c6ef863d0b07 | 163 | |
GregCr | 0:deaafdfde3bb | 164 | protected: |
GregCr | 0:deaafdfde3bb | 165 | |
GregCr | 0:deaafdfde3bb | 166 | SPI *RadioSpi; //!< The SPI object used to communicate with the radio |
GregCr | 4:c6ef863d0b07 | 167 | DigitalOut RadioNss; //!< The pin connected to Radio chip select (active low) |
GregCr | 4:c6ef863d0b07 | 168 | DigitalInOut RadioReset; //!< The reset pin connected to the radio |
GregCr | 0:deaafdfde3bb | 169 | |
GregCr | 4:c6ef863d0b07 | 170 | DigitalIn BUSY; //!< The pin connected to BUSY |
GregCr | 4:c6ef863d0b07 | 171 | InterruptIn *DIO1; //!< The pin connected to DIO1 |
GregCr | 4:c6ef863d0b07 | 172 | InterruptIn *DIO2; //!< The pin connected to DIO2 |
GregCr | 4:c6ef863d0b07 | 173 | InterruptIn *DIO3; //!< The pin connected to DIO3 |
GregCr | 6:1e2345700991 | 174 | AnalogIn FreqSelect; //!< The pin connected to a pull-up/down to select Frequency of the matching |
GregCr | 6:1e2345700991 | 175 | AnalogIn DeviceSelect; //!< The pin connected to a pull-up/down to select device |
GregCr | 4:c6ef863d0b07 | 176 | DigitalOut antSwitchPower; //!< The pin connected to the RF Switch Power |
GregCr | 0:deaafdfde3bb | 177 | |
GregCr | 0:deaafdfde3bb | 178 | /*! |
GregCr | 0:deaafdfde3bb | 179 | * \brief Initializes SPI object used to communicate with the radio |
GregCr | 0:deaafdfde3bb | 180 | */ |
GregCr | 0:deaafdfde3bb | 181 | virtual void SpiInit( void ); |
GregCr | 0:deaafdfde3bb | 182 | |
GregCr | 0:deaafdfde3bb | 183 | /*! |
GregCr | 0:deaafdfde3bb | 184 | * \brief Sets the callback functions to be run on DIO1..3 interrupt |
GregCr | 0:deaafdfde3bb | 185 | * |
GregCr | 0:deaafdfde3bb | 186 | * \param [in] irqHandler A function pointer of the function to be run on every DIO interrupt |
GregCr | 0:deaafdfde3bb | 187 | */ |
GregCr | 0:deaafdfde3bb | 188 | virtual void IoIrqInit( DioIrqHandler irqHandler ); |
GregCr | 0:deaafdfde3bb | 189 | }; |
GregCr | 0:deaafdfde3bb | 190 | |
GregCr | 2:4ff11ea92fbe | 191 | #endif // __SX126x_HAL_H__ |