1cb5466b0SMatthias Ringwald /* 2cb5466b0SMatthias Ringwald ______ _ 3cb5466b0SMatthias Ringwald / _____) _ | | 4cb5466b0SMatthias Ringwald ( (____ _____ ____ _| |_ _____ ____| |__ 5cb5466b0SMatthias Ringwald \____ \| ___ | (_ _) ___ |/ ___) _ \ 6cb5466b0SMatthias Ringwald _____) ) ____| | | || |_| ____( (___| | | | 7cb5466b0SMatthias Ringwald (______/|_____)_|_|_| \__)_____)\____)_| |_| 8cb5466b0SMatthias Ringwald (C)2015 Semtech 9cb5466b0SMatthias Ringwald 10cb5466b0SMatthias Ringwald Description: Handling of the node configuration protocol 11cb5466b0SMatthias Ringwald 12cb5466b0SMatthias Ringwald License: Revised BSD License, see LICENSE.TXT file include in the project 13cb5466b0SMatthias Ringwald 14cb5466b0SMatthias Ringwald Maintainer: Miguel Luis, Matthieu Verdy and Benjamin Boulet 15cb5466b0SMatthias Ringwald */ 16cb5466b0SMatthias Ringwald #ifndef __SX1280_HAL_H__ 17cb5466b0SMatthias Ringwald #define __SX1280_HAL_H__ 18cb5466b0SMatthias Ringwald 19cb5466b0SMatthias Ringwald #include "hw.h" 20cb5466b0SMatthias Ringwald 21cb5466b0SMatthias Ringwald /*! 22cb5466b0SMatthias Ringwald * * \brief Define which DIOs are connected 23cb5466b0SMatthias Ringwald */ 24cb5466b0SMatthias Ringwald #define RADIO_DIO1_ENABLE 1 25*351edbb3SMatthias Ringwald #define RADIO_DIO2_ENABLE 0 26*351edbb3SMatthias Ringwald #define RADIO_DIO3_ENABLE 0 27cb5466b0SMatthias Ringwald 28cb5466b0SMatthias Ringwald void SX1280HalWaitOnBusy( void ); 29cb5466b0SMatthias Ringwald 30cb5466b0SMatthias Ringwald void SX1280HalInit( DioIrqHandler **irqHandlers ); 31cb5466b0SMatthias Ringwald 32cb5466b0SMatthias Ringwald void SX1280HalIoInit( void ); 33cb5466b0SMatthias Ringwald 34cb5466b0SMatthias Ringwald /*! 35cb5466b0SMatthias Ringwald * \brief Soft resets the radio 36cb5466b0SMatthias Ringwald */ 37cb5466b0SMatthias Ringwald void SX1280HalReset( void ); 38cb5466b0SMatthias Ringwald 39cb5466b0SMatthias Ringwald /*! 40cb5466b0SMatthias Ringwald * \brief Clears the instruction ram memory block 41cb5466b0SMatthias Ringwald */ 42cb5466b0SMatthias Ringwald void SX1280HalClearInstructionRam( void ); 43cb5466b0SMatthias Ringwald 44cb5466b0SMatthias Ringwald /*! 45cb5466b0SMatthias Ringwald * \brief Wakes up the radio 46cb5466b0SMatthias Ringwald */ 47cb5466b0SMatthias Ringwald void SX1280HalWakeup( void ); 48cb5466b0SMatthias Ringwald 49cb5466b0SMatthias Ringwald /*! 50cb5466b0SMatthias Ringwald * \brief Send a command that write data to the radio 51cb5466b0SMatthias Ringwald * 52cb5466b0SMatthias Ringwald * \param [in] opcode Opcode of the command 53cb5466b0SMatthias Ringwald * \param [in] buffer Buffer to be send to the radio 54cb5466b0SMatthias Ringwald * \param [in] size Size of the buffer to send 55cb5466b0SMatthias Ringwald */ 56cb5466b0SMatthias Ringwald void SX1280HalWriteCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size ); 57cb5466b0SMatthias Ringwald 58cb5466b0SMatthias Ringwald /*! 59cb5466b0SMatthias Ringwald * \brief Send a command that read data from the radio 60cb5466b0SMatthias Ringwald * 61cb5466b0SMatthias Ringwald * \param [in] opcode Opcode of the command 62cb5466b0SMatthias Ringwald * \param [out] buffer Buffer holding data from the radio 63cb5466b0SMatthias Ringwald * \param [in] size Size of the buffer 64cb5466b0SMatthias Ringwald */ 65cb5466b0SMatthias Ringwald void SX1280HalReadCommand( RadioCommands_t opcode, uint8_t *buffer, uint16_t size ); 66cb5466b0SMatthias Ringwald 67cb5466b0SMatthias Ringwald /*! 68cb5466b0SMatthias Ringwald * \brief Write data to the radio memory 69cb5466b0SMatthias Ringwald * 70cb5466b0SMatthias Ringwald * \param [in] address The address of the first byte to write in the radio 71cb5466b0SMatthias Ringwald * \param [in] buffer The data to be written in radio's memory 72cb5466b0SMatthias Ringwald * \param [in] size The number of bytes to write in radio's memory 73cb5466b0SMatthias Ringwald */ 74cb5466b0SMatthias Ringwald void SX1280HalWriteRegisters( uint16_t address, uint8_t *buffer, uint16_t size ); 75cb5466b0SMatthias Ringwald 76cb5466b0SMatthias Ringwald /*! 77cb5466b0SMatthias Ringwald * \brief Write a single byte of data to the radio memory 78cb5466b0SMatthias Ringwald * 79cb5466b0SMatthias Ringwald * \param [in] address The address of the first byte to write in the radio 80cb5466b0SMatthias Ringwald * \param [in] value The data to be written in radio's memory 81cb5466b0SMatthias Ringwald */ 82cb5466b0SMatthias Ringwald void SX1280HalWriteRegister( uint16_t address, uint8_t value ); 83cb5466b0SMatthias Ringwald 84cb5466b0SMatthias Ringwald /*! 85cb5466b0SMatthias Ringwald * \brief Read data from the radio memory 86cb5466b0SMatthias Ringwald * 87cb5466b0SMatthias Ringwald * \param [in] address The address of the first byte to read from the radio 88cb5466b0SMatthias Ringwald * \param [out] buffer The buffer that holds data read from radio 89cb5466b0SMatthias Ringwald * \param [in] size The number of bytes to read from radio's memory 90cb5466b0SMatthias Ringwald */ 91cb5466b0SMatthias Ringwald void SX1280HalReadRegisters( uint16_t address, uint8_t *buffer, uint16_t size ); 92cb5466b0SMatthias Ringwald 93cb5466b0SMatthias Ringwald /*! 94cb5466b0SMatthias Ringwald * \brief Read a single byte of data from the radio memory 95cb5466b0SMatthias Ringwald * 96cb5466b0SMatthias Ringwald * \param [in] address The address of the first byte to write in the 97cb5466b0SMatthias Ringwald * radio 98cb5466b0SMatthias Ringwald * 99cb5466b0SMatthias Ringwald * \retval value The value of the byte at the given address in 100cb5466b0SMatthias Ringwald * radio's memory 101cb5466b0SMatthias Ringwald */ 102cb5466b0SMatthias Ringwald uint8_t SX1280HalReadRegister( uint16_t address ); 103cb5466b0SMatthias Ringwald 104cb5466b0SMatthias Ringwald /*! 105cb5466b0SMatthias Ringwald * \brief Write data to the buffer holding the payload in the radio 106cb5466b0SMatthias Ringwald * 107cb5466b0SMatthias Ringwald * \param [in] offset The offset to start writing the payload 108cb5466b0SMatthias Ringwald * \param [in] buffer The data to be written (the payload) 109cb5466b0SMatthias Ringwald * \param [in] size The number of byte to be written 110cb5466b0SMatthias Ringwald */ 111cb5466b0SMatthias Ringwald void SX1280HalWriteBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ); 112cb5466b0SMatthias Ringwald 113cb5466b0SMatthias Ringwald /*! 114cb5466b0SMatthias Ringwald * \brief Read data from the buffer holding the payload in the radio 115cb5466b0SMatthias Ringwald * 116cb5466b0SMatthias Ringwald * \param [in] offset The offset to start reading the payload 117cb5466b0SMatthias Ringwald * \param [out] buffer A pointer to a buffer holding the data from the radio 118cb5466b0SMatthias Ringwald * \param [in] size The number of byte to be read 119cb5466b0SMatthias Ringwald */ 120cb5466b0SMatthias Ringwald void SX1280HalReadBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ); 121cb5466b0SMatthias Ringwald 122cb5466b0SMatthias Ringwald /*! 123cb5466b0SMatthias Ringwald * \brief Returns the status of DIOs pins 124cb5466b0SMatthias Ringwald * 125cb5466b0SMatthias Ringwald * \retval dioStatus A byte where each bit represents a DIO state: 126cb5466b0SMatthias Ringwald * [ DIOx | BUSY ] 127cb5466b0SMatthias Ringwald */ 128cb5466b0SMatthias Ringwald uint8_t SX1280HalGetDioStatus( void ); 129cb5466b0SMatthias Ringwald 130cb5466b0SMatthias Ringwald void SX1280HalIoIrqInit( DioIrqHandler **irqHandlers ); 131cb5466b0SMatthias Ringwald 132cb5466b0SMatthias Ringwald #endif // __SX1280_HAL_H__ 133