Driver for the SX1280 RF Transceiver

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

Committer:
GregCr
Date:
Mon Mar 13 14:16:00 2017 +0000
Revision:
0:03ec2f3bde8c
Child:
11:d60df50e108f
alpha version

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 0:03ec2f3bde8c 63 * \brief Send a command that write data to the radio
GregCr 0:03ec2f3bde8c 64 *
GregCr 0:03ec2f3bde8c 65 * \param [in] opcode Opcode of the command
GregCr 0:03ec2f3bde8c 66 * \param [in] buffer Buffer to be send to the radio
GregCr 0:03ec2f3bde8c 67 * \param [in] size Size of the buffer to send
GregCr 0:03ec2f3bde8c 68 */
GregCr 0:03ec2f3bde8c 69 virtual void WriteCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size );
GregCr 0:03ec2f3bde8c 70
GregCr 0:03ec2f3bde8c 71 /*!
GregCr 0:03ec2f3bde8c 72 * \brief Send a command that read data from the radio
GregCr 0:03ec2f3bde8c 73 *
GregCr 0:03ec2f3bde8c 74 * \param [in] opcode Opcode of the command
GregCr 0:03ec2f3bde8c 75 * \param [out] buffer Buffer holding data from the radio
GregCr 0:03ec2f3bde8c 76 * \param [in] size Size of the buffer
GregCr 0:03ec2f3bde8c 77 */
GregCr 0:03ec2f3bde8c 78 virtual void ReadCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size );
GregCr 0:03ec2f3bde8c 79
GregCr 0:03ec2f3bde8c 80 /*!
GregCr 0:03ec2f3bde8c 81 * \brief Write data to the radio memory
GregCr 0:03ec2f3bde8c 82 *
GregCr 0:03ec2f3bde8c 83 * \param [in] address The address of the first byte to write in the radio
GregCr 0:03ec2f3bde8c 84 * \param [in] buffer The data to be written in radio's memory
GregCr 0:03ec2f3bde8c 85 * \param [in] size The number of bytes to write in radio's memory
GregCr 0:03ec2f3bde8c 86 */
GregCr 0:03ec2f3bde8c 87 virtual void WriteRegister( uint16_t address, uint8_t *buffer, uint16_t size );
GregCr 0:03ec2f3bde8c 88
GregCr 0:03ec2f3bde8c 89 /*!
GregCr 0:03ec2f3bde8c 90 * \brief Write a single byte of data to the radio memory
GregCr 0:03ec2f3bde8c 91 *
GregCr 0:03ec2f3bde8c 92 * \param [in] address The address of the first byte to write in the radio
GregCr 0:03ec2f3bde8c 93 * \param [in] value The data to be written in radio's memory
GregCr 0:03ec2f3bde8c 94 */
GregCr 0:03ec2f3bde8c 95 virtual void WriteRegister( uint16_t address, uint8_t value );
GregCr 0:03ec2f3bde8c 96
GregCr 0:03ec2f3bde8c 97 /*!
GregCr 0:03ec2f3bde8c 98 * \brief Read data from the radio memory
GregCr 0:03ec2f3bde8c 99 *
GregCr 0:03ec2f3bde8c 100 * \param [in] address The address of the first byte to read from the radio
GregCr 0:03ec2f3bde8c 101 * \param [out] buffer The buffer that holds data read from radio
GregCr 0:03ec2f3bde8c 102 * \param [in] size The number of bytes to read from radio's memory
GregCr 0:03ec2f3bde8c 103 */
GregCr 0:03ec2f3bde8c 104 virtual void ReadRegister( uint16_t address, uint8_t *buffer, uint16_t size );
GregCr 0:03ec2f3bde8c 105
GregCr 0:03ec2f3bde8c 106 /*!
GregCr 0:03ec2f3bde8c 107 * \brief Read a single byte of data from the radio memory
GregCr 0:03ec2f3bde8c 108 *
GregCr 0:03ec2f3bde8c 109 * \param [in] address The address of the first byte to write in the
GregCr 0:03ec2f3bde8c 110 * radio
GregCr 0:03ec2f3bde8c 111 *
GregCr 0:03ec2f3bde8c 112 * \retval value The value of the byte at the given address in
GregCr 0:03ec2f3bde8c 113 * radio's memory
GregCr 0:03ec2f3bde8c 114 */
GregCr 0:03ec2f3bde8c 115 virtual uint8_t ReadRegister( uint16_t address );
GregCr 0:03ec2f3bde8c 116
GregCr 0:03ec2f3bde8c 117 /*!
GregCr 0:03ec2f3bde8c 118 * \brief Write data to the buffer holding the payload in the radio
GregCr 0:03ec2f3bde8c 119 *
GregCr 0:03ec2f3bde8c 120 * \param [in] offset The offset to start writing the payload
GregCr 0:03ec2f3bde8c 121 * \param [in] buffer The data to be written (the payload)
GregCr 0:03ec2f3bde8c 122 * \param [in] size The number of byte to be written
GregCr 0:03ec2f3bde8c 123 */
GregCr 0:03ec2f3bde8c 124 virtual void WriteBuffer( uint8_t offset, uint8_t *buffer, uint8_t size );
GregCr 0:03ec2f3bde8c 125
GregCr 0:03ec2f3bde8c 126 /*!
GregCr 0:03ec2f3bde8c 127 * \brief Read data from the buffer holding the payload in the radio
GregCr 0:03ec2f3bde8c 128 *
GregCr 0:03ec2f3bde8c 129 * \param [in] offset The offset to start reading the payload
GregCr 0:03ec2f3bde8c 130 * \param [out] buffer A pointer to a buffer holding the data from the radio
GregCr 0:03ec2f3bde8c 131 * \param [in] size The number of byte to be read
GregCr 0:03ec2f3bde8c 132 */
GregCr 0:03ec2f3bde8c 133 virtual void ReadBuffer( uint8_t offset, uint8_t *buffer, uint8_t size );
GregCr 0:03ec2f3bde8c 134
GregCr 0:03ec2f3bde8c 135 /*!
GregCr 0:03ec2f3bde8c 136 * \brief Returns the status of DIOs pins
GregCr 0:03ec2f3bde8c 137 *
GregCr 0:03ec2f3bde8c 138 * \retval dioStatus A byte where each bit represents a DIO state:
GregCr 0:03ec2f3bde8c 139 * [ DIO3 | DIO2 | DIO1 | BUSY ]
GregCr 0:03ec2f3bde8c 140 */
GregCr 0:03ec2f3bde8c 141 virtual uint8_t GetDioStatus( void );
GregCr 0:03ec2f3bde8c 142
GregCr 0:03ec2f3bde8c 143 protected:
GregCr 0:03ec2f3bde8c 144
GregCr 0:03ec2f3bde8c 145 SPI *RadioSpi; //!< The SPI object used to communicate with the radio
GregCr 0:03ec2f3bde8c 146 Serial *RadioUart; //!< The UART object used to communicate with the radio
GregCr 0:03ec2f3bde8c 147 DigitalOut RadioNss; //!< The pin connected to Radio chip select (active low)
GregCr 0:03ec2f3bde8c 148 DigitalInOut RadioReset; //!< The reset pin connected to the radio
GregCr 0:03ec2f3bde8c 149 DigitalOut RadioCtsn; //!< The Clear To Send radio pin (active low)
GregCr 0:03ec2f3bde8c 150
GregCr 0:03ec2f3bde8c 151 DigitalIn BUSY; //!< The pin connected to BUSY
GregCr 0:03ec2f3bde8c 152 InterruptIn *DIO1; //!< The pin connected to DIO1
GregCr 0:03ec2f3bde8c 153 InterruptIn *DIO2; //!< The pin connected to DIO2
GregCr 0:03ec2f3bde8c 154 InterruptIn *DIO3; //!< The pin connected to DIO3
GregCr 0:03ec2f3bde8c 155
GregCr 0:03ec2f3bde8c 156 /*!
GregCr 0:03ec2f3bde8c 157 * \brief Initializes SPI object used to communicate with the radio
GregCr 0:03ec2f3bde8c 158 */
GregCr 0:03ec2f3bde8c 159 virtual void SpiInit( void );
GregCr 0:03ec2f3bde8c 160
GregCr 0:03ec2f3bde8c 161 /*!
GregCr 0:03ec2f3bde8c 162 * \brief Initializes UART object used to communicate with the radio
GregCr 0:03ec2f3bde8c 163 */
GregCr 0:03ec2f3bde8c 164 virtual void UartInit( void );
GregCr 0:03ec2f3bde8c 165
GregCr 0:03ec2f3bde8c 166 /*!
GregCr 0:03ec2f3bde8c 167 * \brief Sets the callback functions to be run on DIO1..3 interrupt
GregCr 0:03ec2f3bde8c 168 *
GregCr 0:03ec2f3bde8c 169 * \param [in] irqHandler A function pointer of the function to be run on every DIO interrupt
GregCr 0:03ec2f3bde8c 170 */
GregCr 0:03ec2f3bde8c 171 virtual void IoIrqInit( DioIrqHandler irqHandler );
GregCr 0:03ec2f3bde8c 172 };
GregCr 0:03ec2f3bde8c 173
GregCr 0:03ec2f3bde8c 174 #endif // __SX1280_HAL_H__