SX1261 and sx1262 common library

Dependents:   SX126xDevKit SX1262PingPong SX126X_TXonly SX126X_PingPong_Demo ... more

Fork of SX126xLib by Gregory Cristian

Committer:
GregCr
Date:
Fri Sep 23 09:38:34 2016 +0000
Revision:
2:4ff11ea92fbe
Parent:
1:35d34672a089
Child:
3:7e3595a9ebe0
updated

Who changed what in which revision?

UserRevisionLine numberNew 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)2015 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 and Gregory Cristian
GregCr 0:deaafdfde3bb 14 */
GregCr 2:4ff11ea92fbe 15 #ifndef __SX126x_HAL_H__
GregCr 2:4ff11ea92fbe 16 #define __SX126x_HAL_H__
GregCr 0:deaafdfde3bb 17
GregCr 1:35d34672a089 18 #include "sx126x.h"
GregCr 0:deaafdfde3bb 19
GregCr 0:deaafdfde3bb 20 /*!
GregCr 0:deaafdfde3bb 21 * \brief The default value of SPI clock
GregCr 0:deaafdfde3bb 22 */
GregCr 2:4ff11ea92fbe 23 #define SX126x_SPI_FREQ_DEFAULT 1000000 // 16000000
GregCr 0:deaafdfde3bb 24
GregCr 0:deaafdfde3bb 25 /*!
GregCr 0:deaafdfde3bb 26 * \brief Actual implementation of a SX1280 radio
GregCr 0:deaafdfde3bb 27 */
GregCr 2:4ff11ea92fbe 28 class SX126xHal : public SX126x
GregCr 0:deaafdfde3bb 29 {
GregCr 0:deaafdfde3bb 30 public:
GregCr 0:deaafdfde3bb 31 /*!
GregCr 2:4ff11ea92fbe 32 * \brief Constructor for SX126xHal with SPI support
GregCr 0:deaafdfde3bb 33 *
GregCr 0:deaafdfde3bb 34 * Represents the physical connectivity with the radio and set callback functions on radio interrupts
GregCr 0:deaafdfde3bb 35 */
GregCr 2:4ff11ea92fbe 36 SX126xHal( PinName mosi, PinName miso, PinName sclk, PinName nss, PinName busy, PinName dio1, PinName dio2, PinName dio3, PinName rst,
GregCr 0:deaafdfde3bb 37 void ( *txDone )( ), void ( *rxDone )( ), void ( *rxPblSyncWordHeader )( IrqPblSyncHeaderCode_t val ),
GregCr 0:deaafdfde3bb 38 void ( *rxTxTimeout )( ),void ( *rxError )( IrqErrorCode_t errorCode ), void ( *rangingDone )( IrqRangingCode_t val ),
GregCr 0:deaafdfde3bb 39 void ( *cadDone )( bool channelActivityDetected ),
GregCr 0:deaafdfde3bb 40 void ( *onDioIrq )( ) );
GregCr 0:deaafdfde3bb 41
GregCr 0:deaafdfde3bb 42 /*!
GregCr 2:4ff11ea92fbe 43 * \brief Constructor for SX126xHal with UART support
GregCr 0:deaafdfde3bb 44 *
GregCr 0:deaafdfde3bb 45 * Represents the physical connectivity with the radio and set callback functions on radio interrupts
GregCr 0:deaafdfde3bb 46 */
GregCr 2:4ff11ea92fbe 47 SX126xHal( PinName tx, PinName rx, PinName busy, PinName dio1, PinName dio2, PinName dio3, PinName rst,
GregCr 0:deaafdfde3bb 48 void ( *txDone )( ), void ( *rxDone )( ), void ( *rxPblSyncWordHeader )( IrqPblSyncHeaderCode_t val ),
GregCr 0:deaafdfde3bb 49 void ( *rxTxTimeout )( ), void ( *rxError )( IrqErrorCode_t errorCode ), void ( *rangingDone )( IrqRangingCode_t val ),
GregCr 0:deaafdfde3bb 50 void ( *cadDone )( bool channelActivityDetected ),
GregCr 0:deaafdfde3bb 51 void ( *onDioIrq )( ) );
GregCr 0:deaafdfde3bb 52
GregCr 0:deaafdfde3bb 53 /*!
GregCr 2:4ff11ea92fbe 54 * \brief Destructor for SX126xHal with UART support
GregCr 0:deaafdfde3bb 55 *
GregCr 0:deaafdfde3bb 56 * Take care of the correct destruction of the communication objects
GregCr 0:deaafdfde3bb 57 */
GregCr 2:4ff11ea92fbe 58 virtual ~SX126xHal( )
GregCr 0:deaafdfde3bb 59 {
GregCr 0:deaafdfde3bb 60 if( this->RadioSpi != 0 )
GregCr 0:deaafdfde3bb 61 {
GregCr 0:deaafdfde3bb 62 delete RadioSpi;
GregCr 0:deaafdfde3bb 63 }
GregCr 0:deaafdfde3bb 64 if( this->RadioUart != 0 )
GregCr 0:deaafdfde3bb 65 {
GregCr 0:deaafdfde3bb 66 delete RadioUart;
GregCr 0:deaafdfde3bb 67 }
GregCr 0:deaafdfde3bb 68 };
GregCr 0:deaafdfde3bb 69
GregCr 0:deaafdfde3bb 70 /*!
GregCr 0:deaafdfde3bb 71 * \brief Soft resets the radio
GregCr 0:deaafdfde3bb 72 */
GregCr 0:deaafdfde3bb 73 virtual void Reset( void );
GregCr 0:deaafdfde3bb 74
GregCr 0:deaafdfde3bb 75 /*!
GregCr 0:deaafdfde3bb 76 * \brief Clears the instruction ram memory block
GregCr 0:deaafdfde3bb 77 */
GregCr 0:deaafdfde3bb 78 virtual void ClearInstructionRam( void );
GregCr 0:deaafdfde3bb 79
GregCr 0:deaafdfde3bb 80 /*!
GregCr 0:deaafdfde3bb 81 * \brief Wakes up the radio
GregCr 0:deaafdfde3bb 82 */
GregCr 0:deaafdfde3bb 83 virtual void Wakeup( void );
GregCr 0:deaafdfde3bb 84
GregCr 0:deaafdfde3bb 85 /*!
GregCr 0:deaafdfde3bb 86 * \brief Send a command that write data to the radio
GregCr 0:deaafdfde3bb 87 *
GregCr 0:deaafdfde3bb 88 * \param [in] opcode Opcode of the command
GregCr 0:deaafdfde3bb 89 * \param [in] buffer Buffer to be send to the radio
GregCr 0:deaafdfde3bb 90 * \param [in] size Size of the buffer to send
GregCr 0:deaafdfde3bb 91 */
GregCr 0:deaafdfde3bb 92 virtual void WriteCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size );
GregCr 0:deaafdfde3bb 93
GregCr 0:deaafdfde3bb 94 /*!
GregCr 0:deaafdfde3bb 95 * \brief Send a command that read data from the radio
GregCr 0:deaafdfde3bb 96 *
GregCr 0:deaafdfde3bb 97 * \param [in] opcode Opcode of the command
GregCr 0:deaafdfde3bb 98 * \param [out] buffer Buffer holding data from the radio
GregCr 0:deaafdfde3bb 99 * \param [in] size Size of the buffer
GregCr 0:deaafdfde3bb 100 */
GregCr 0:deaafdfde3bb 101 virtual void ReadCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size );
GregCr 0:deaafdfde3bb 102
GregCr 0:deaafdfde3bb 103 /*!
GregCr 0:deaafdfde3bb 104 * \brief Write data to the radio memory
GregCr 0:deaafdfde3bb 105 *
GregCr 0:deaafdfde3bb 106 * \param [in] address The address of the first byte to write in the radio
GregCr 0:deaafdfde3bb 107 * \param [in] buffer The data to be written in radio's memory
GregCr 0:deaafdfde3bb 108 * \param [in] size The number of bytes to write in radio's memory
GregCr 0:deaafdfde3bb 109 */
GregCr 0:deaafdfde3bb 110 virtual void WriteRegister( uint16_t address, uint8_t *buffer, uint16_t size );
GregCr 0:deaafdfde3bb 111
GregCr 0:deaafdfde3bb 112 virtual void WriteRegisterNoBusy( uint16_t address, uint8_t *buffer, uint16_t size );
GregCr 0:deaafdfde3bb 113
GregCr 0:deaafdfde3bb 114
GregCr 0:deaafdfde3bb 115 /*!
GregCr 0:deaafdfde3bb 116 * \brief Write a single byte of data to the radio memory
GregCr 0:deaafdfde3bb 117 *
GregCr 0:deaafdfde3bb 118 * \param [in] address The address of the first byte to write in the radio
GregCr 0:deaafdfde3bb 119 * \param [in] value The data to be written in radio's memory
GregCr 0:deaafdfde3bb 120 */
GregCr 0:deaafdfde3bb 121 virtual void WriteRegister( uint16_t address, uint8_t value );
GregCr 0:deaafdfde3bb 122
GregCr 0:deaafdfde3bb 123 virtual void WriteRegisterNoBusy( uint16_t address, uint8_t value );
GregCr 0:deaafdfde3bb 124
GregCr 0:deaafdfde3bb 125 /*!
GregCr 0:deaafdfde3bb 126 * \brief Read data from the radio memory
GregCr 0:deaafdfde3bb 127 *
GregCr 0:deaafdfde3bb 128 * \param [in] address The address of the first byte to read from the radio
GregCr 0:deaafdfde3bb 129 * \param [out] buffer The buffer that holds data read from radio
GregCr 0:deaafdfde3bb 130 * \param [in] size The number of bytes to read from radio's memory
GregCr 0:deaafdfde3bb 131 */
GregCr 0:deaafdfde3bb 132 virtual void ReadRegister( uint16_t address, uint8_t *buffer, uint16_t size );
GregCr 0:deaafdfde3bb 133 virtual void ReadRegisterNoBusy( uint16_t address, uint8_t *buffer, uint16_t size );
GregCr 0:deaafdfde3bb 134
GregCr 0:deaafdfde3bb 135 /*!
GregCr 0:deaafdfde3bb 136 * \brief Read a single byte of data from the radio memory
GregCr 0:deaafdfde3bb 137 *
GregCr 0:deaafdfde3bb 138 * \param [in] address The address of the first byte to write in the
GregCr 0:deaafdfde3bb 139 * radio
GregCr 0:deaafdfde3bb 140 *
GregCr 0:deaafdfde3bb 141 * \retval value The value of the byte at the given address in
GregCr 0:deaafdfde3bb 142 * radio's memory
GregCr 0:deaafdfde3bb 143 */
GregCr 0:deaafdfde3bb 144 virtual uint8_t ReadRegister( uint16_t address );
GregCr 0:deaafdfde3bb 145 virtual uint8_t ReadRegisterNoBusy( uint16_t address );
GregCr 0:deaafdfde3bb 146
GregCr 0:deaafdfde3bb 147
GregCr 0:deaafdfde3bb 148 /*!
GregCr 0:deaafdfde3bb 149 * \brief Write data to the buffer holding the payload in the radio
GregCr 0:deaafdfde3bb 150 *
GregCr 0:deaafdfde3bb 151 * \param [in] offset The offset to start writing the payload
GregCr 0:deaafdfde3bb 152 * \param [in] buffer The data to be written (aka payload)
GregCr 0:deaafdfde3bb 153 * \param [in] size The number of byte to be written
GregCr 0:deaafdfde3bb 154 */
GregCr 0:deaafdfde3bb 155 virtual void WriteBuffer( uint8_t offset, uint8_t *buffer, uint8_t size );
GregCr 0:deaafdfde3bb 156
GregCr 0:deaafdfde3bb 157 /*!
GregCr 0:deaafdfde3bb 158 * \brief Read data from the buffer holding the payload in the radio
GregCr 0:deaafdfde3bb 159 *
GregCr 0:deaafdfde3bb 160 * \param [in] offset The offset to start reading the payload
GregCr 0:deaafdfde3bb 161 * \param [out] buffer A pointer to a buffer holding the data from the radio
GregCr 0:deaafdfde3bb 162 * \param [in] size The number of byte to be read
GregCr 0:deaafdfde3bb 163 */
GregCr 0:deaafdfde3bb 164 virtual void ReadBuffer( uint8_t offset, uint8_t *buffer, uint8_t size );
GregCr 0:deaafdfde3bb 165
GregCr 0:deaafdfde3bb 166 /*!
GregCr 0:deaafdfde3bb 167 * \brief Returns the status of DIOs pins
GregCr 0:deaafdfde3bb 168 *
GregCr 0:deaafdfde3bb 169 * \retval dioStatus A byte where each bit represents a DIO state:
GregCr 0:deaafdfde3bb 170 * [ DIO3 | DIO2 | DIO1 | DIO0 ]
GregCr 0:deaafdfde3bb 171 */
GregCr 0:deaafdfde3bb 172 virtual uint8_t GetDioStatus( void );
GregCr 0:deaafdfde3bb 173
GregCr 0:deaafdfde3bb 174 protected:
GregCr 0:deaafdfde3bb 175
GregCr 0:deaafdfde3bb 176 SPI *RadioSpi; //!< The SPI object used to communicate with the radio
GregCr 0:deaafdfde3bb 177 Serial *RadioUart; //!< The UART object used to communicate with the radio
GregCr 0:deaafdfde3bb 178 DigitalOut RadioNss; //!< The pin connected to Radio chip select
GregCr 0:deaafdfde3bb 179 DigitalOut RadioReset; //!< The reset pin connected to the radio
GregCr 0:deaafdfde3bb 180 DigitalIn BUSY; //!< The pin connected to DIO0 of the radio (aka busy pin)
GregCr 0:deaafdfde3bb 181
GregCr 0:deaafdfde3bb 182 InterruptIn DIO1; //!< The pin connected to DIO1
GregCr 0:deaafdfde3bb 183 InterruptIn DIO2; //!< The pin connected to DIO2
GregCr 0:deaafdfde3bb 184 InterruptIn DIO3; //!< The pin connected to DIO3
GregCr 0:deaafdfde3bb 185
GregCr 0:deaafdfde3bb 186 /*!
GregCr 0:deaafdfde3bb 187 * \brief Initializes SPI object used to communicate with the radio
GregCr 0:deaafdfde3bb 188 */
GregCr 0:deaafdfde3bb 189 virtual void SpiInit( void );
GregCr 0:deaafdfde3bb 190
GregCr 0:deaafdfde3bb 191 /*!
GregCr 0:deaafdfde3bb 192 * \brief Initializes UART object used to communicate with the radio
GregCr 0:deaafdfde3bb 193 */
GregCr 0:deaafdfde3bb 194 virtual void UartInit( void );
GregCr 0:deaafdfde3bb 195
GregCr 0:deaafdfde3bb 196 /*!
GregCr 0:deaafdfde3bb 197 * \brief Sets the callback functions to be run on DIO1..3 interrupt
GregCr 0:deaafdfde3bb 198 *
GregCr 0:deaafdfde3bb 199 * \param [in] irqHandler A function pointer of the function to be run on every DIO interrupt
GregCr 0:deaafdfde3bb 200 */
GregCr 0:deaafdfde3bb 201 virtual void IoIrqInit( DioIrqHandler irqHandler );
GregCr 0:deaafdfde3bb 202 };
GregCr 0:deaafdfde3bb 203
GregCr 2:4ff11ea92fbe 204 #endif // __SX126x_HAL_H__