SX1261 and sx1262 common library

Dependents:   SX126xDevKit SX1262PingPong SX126X_TXonly SX126X_PingPong_Demo ... more

Fork of SX126xLib by Gregory Cristian

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?

UserRevisionLine numberNew 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__