@@ -23,6 +23,7 @@ volatile uint16_t irq_status = 0;
2323
2424static uint32_t busy_timeout = 1000 ;
2525static uint8_t payload_len = 8 ;
26+ static uint8_t buffer_status [2 ] = {0 , 0 };
2627
2728extern volatile uint32_t packet_time_us ;
2829extern volatile uint8_t packet_status [2 ];
@@ -107,31 +108,29 @@ static void sx128x_set_dio0_active(void *arg) {
107108 dio0_active = 1 ;
108109}
109110
111+ static void sx128x_read_buffer (void * arg ) {
112+ {
113+ const spi_txn_segment_t segs [] = {
114+ spi_make_seg_const (SX1280_RADIO_READ_BUFFER , buffer_status [1 ], 0x00 ),
115+ spi_make_seg_buffer ((uint8_t * )rx_spi_packet , NULL , payload_len ),
116+ };
117+ spi_seg_submit (& bus , segs );
118+ }
119+ {
120+ const spi_txn_segment_t segs [] = {
121+ read_command_txn (SX1280_RADIO_GET_PACKETSTATUS , (uint8_t * )packet_status , 2 ),
122+ };
123+ spi_seg_submit (& bus , segs , .done_fn = sx128x_set_dio0_active );
124+ }
125+ }
126+
110127static void sx128x_handle_irq_status (void * arg ) {
111128 const uint16_t irq = ((irq_status & 0xFF ) << 8 | ((irq_status >> 8 ) & 0xFF ));
112129 if ((irq & SX1280_IRQ_RX_DONE )) {
113- static uint8_t buffer_status [2 ] = {0 , 0 };
114- {
115- static const spi_txn_segment_t segs [] = {
116- read_command_txn (SX1280_RADIO_GET_RXBUFFERSTATUS , buffer_status , 2 ),
117- };
118- spi_seg_submit (& bus , segs );
119- }
120- {
121- const spi_txn_segment_t segs [] = {
122- spi_make_seg_const (SX1280_RADIO_READ_BUFFER ),
123- spi_make_seg_delay (NULL , buffer_status + 1 , 1 ),
124- spi_make_seg_const (0x00 ),
125- spi_make_seg_buffer ((uint8_t * )rx_spi_packet , NULL , payload_len ),
126- };
127- spi_seg_submit (& bus , segs );
128- }
129- {
130- static const spi_txn_segment_t segs [] = {
131- read_command_txn (SX1280_RADIO_GET_PACKETSTATUS , (uint8_t * )packet_status , 2 ),
132- };
133- spi_seg_submit (& bus , segs , .done_fn = sx128x_set_dio0_active );
134- }
130+ const spi_txn_segment_t segs [] = {
131+ read_command_txn (SX1280_RADIO_GET_RXBUFFERSTATUS , buffer_status , 2 ),
132+ };
133+ spi_seg_submit (& bus , segs , .done_fn = sx128x_read_buffer );
135134 } else if ((irq & SX1280_IRQ_TX_DONE )) {
136135 sx128x_set_mode_async (SX1280_MODE_RX );
137136 }
@@ -156,17 +155,17 @@ void sx128x_wait() {
156155}
157156
158157void sx128x_handle_dio0_exti (bool level ) {
159- if (!level ) {
158+ if (!level )
160159 return ;
161- }
160+
162161 {
163- static const spi_txn_segment_t segs [] = {
162+ const spi_txn_segment_t segs [] = {
164163 read_command_txn (SX1280_RADIO_GET_IRQSTATUS , (uint8_t * )& irq_status , 2 ),
165164 };
166165 spi_seg_submit (& bus , segs );
167166 }
168167 {
169- static const spi_txn_segment_t segs [] = {
168+ const spi_txn_segment_t segs [] = {
170169 spi_make_seg_const (
171170 SX1280_RADIO_CLR_IRQSTATUS ,
172171 (uint8_t )(((uint16_t )SX1280_IRQ_RADIO_ALL >> 8 ) & 0x00FF ),
@@ -199,15 +198,11 @@ uint16_t sx128x_read_dio0() {
199198}
200199
201200void sx128x_read_register_burst (const uint16_t reg , uint8_t * data , const uint8_t size ) {
202- const uint8_t buf [4 ] = {
203- (SX1280_RADIO_READ_REGISTER ),
204- ((reg & 0xFF00 ) >> 8 ),
205- (reg & 0x00FF ),
206- 0x00 ,
207- };
208-
209201 const spi_txn_segment_t segs [] = {
210- spi_make_seg_buffer (NULL , buf , 4 ),
202+ spi_make_seg_const ((SX1280_RADIO_READ_REGISTER ),
203+ ((reg & 0xFF00 ) >> 8 ),
204+ (reg & 0x00FF ),
205+ 0x00 ),
211206 spi_make_seg_buffer (data , NULL , size ),
212207 };
213208 spi_seg_submit (& bus , segs );
@@ -221,14 +216,10 @@ uint8_t sx128x_read_register(const uint16_t reg) {
221216}
222217
223218void sx128x_write_register_burst (const uint16_t reg , const uint8_t * data , const uint8_t size ) {
224- uint8_t buf [3 ] = {
225- (uint8_t )SX1280_RADIO_WRITE_REGISTER ,
226- ((reg & 0xFF00 ) >> 8 ),
227- (reg & 0x00FF ),
228- };
229-
230219 const spi_txn_segment_t segs [] = {
231- spi_make_seg_buffer (NULL , buf , 3 ),
220+ spi_make_seg_const ((uint8_t )SX1280_RADIO_WRITE_REGISTER ,
221+ ((reg & 0xFF00 ) >> 8 ),
222+ (reg & 0x00FF )),
232223 spi_make_seg_buffer (NULL , data , size ),
233224 };
234225 spi_seg_submit (& bus , segs );
@@ -258,12 +249,8 @@ void sx128x_write_command(const sx128x_commands_t cmd, const uint8_t val) {
258249}
259250
260251void sx128x_write_tx_buffer (const uint8_t offset , const volatile uint8_t * data , const uint8_t size ) {
261- const uint8_t buf [2 ] = {
262- (uint8_t )SX1280_RADIO_WRITE_BUFFER ,
263- offset ,
264- };
265252 const spi_txn_segment_t segs [] = {
266- spi_make_seg_buffer ( NULL , buf , 2 ),
253+ spi_make_seg_const ( SX1280_RADIO_WRITE_BUFFER , offset ),
267254 spi_make_seg_buffer (NULL , (uint8_t * )data , size ),
268255 };
269256 spi_seg_submit (& bus , segs );
0 commit comments