Driver for the SX1280 RF Transceiver

Dependents:   SX1280PingPong RangignMaster RangingSlave MSNV2-Terminal_V1-6 ... more

Committer:
mverdy
Date:
Thu Nov 08 10:08:44 2018 +0000
Revision:
12:c4f110f3fe3e
Parent:
11:d60df50e108f
Synchronze driver on v1.3.1

Who changed what in which revision?

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