xref: /btstack/chipset/sx128x/SMTC_Drivers/sx1280-driver-c/sx1280-hal.h (revision 351edbb3c42bccf80f612a3a9710424787f8d951)
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