Skip to content

Commit fd88119

Browse files
committed
drivers/sx126x: split out _set_state and _get_state
1 parent ef76a04 commit fd88119

File tree

3 files changed

+58
-20
lines changed

3 files changed

+58
-20
lines changed

drivers/sx126x/include/sx126x_internal.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,23 @@ static inline bool sx126x_is_stm32wl(sx126x_t *dev)
122122
}
123123
}
124124

125+
/**
126+
* @brief Get the current chip state
127+
*
128+
* @param[in] dev
129+
*
130+
* @return Chip state
131+
*/
132+
sx126x_chip_modes_t sx126x_get_state(const sx126x_t *dev);
133+
134+
/**
135+
* @brief Set the internal chip state
136+
*
137+
* @param[in] dev
138+
* @param[in] state
139+
*/
140+
void sx126x_set_state(sx126x_t *dev, sx126x_chip_modes_t state);
141+
125142
#ifdef __cplusplus
126143
}
127144
#endif

drivers/sx126x/sx126x.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,38 @@ int sx126x_init(sx126x_t *dev)
427427
return res;
428428
}
429429

430+
sx126x_chip_modes_t sx126x_get_state(const sx126x_t *dev)
431+
{
432+
sx126x_chip_status_t radio_status;
433+
sx126x_get_status(dev, &radio_status);
434+
return radio_status.chip_mode;
435+
}
436+
437+
void sx126x_set_state(sx126x_t *dev, sx126x_chip_modes_t state)
438+
{
439+
switch (state) {
440+
case SX126X_CHIP_MODE_TX:
441+
sx126x_set_tx(dev, 0); /* no TX frame timeout */
442+
break;
443+
case SX126X_CHIP_MODE_RX: {
444+
int timeout = (sx126x_symbol_to_msec(dev, dev->rx_timeout));
445+
sx126x_set_rx_tx_fallback_mode(dev, SX126X_FALLBACK_STDBY_XOSC);
446+
if (timeout > 0) {
447+
sx126x_set_rx(dev, timeout);
448+
}
449+
else {
450+
sx126x_set_rx(dev, SX126X_RX_SINGLE_MODE);
451+
}
452+
} break;
453+
case SX126X_CHIP_MODE_STBY_RC:
454+
case SX126X_CHIP_MODE_STBY_XOSC:
455+
sx126x_set_standby(dev, state);
456+
break;
457+
default:
458+
break;
459+
}
460+
}
461+
430462
uint32_t sx126x_get_channel(const sx126x_t *dev)
431463
{
432464
DEBUG("[sx126x]: sx126x_get_radio_status \n");

drivers/sx126x/sx126x_netdev.c

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -206,16 +206,11 @@ static void _isr(netdev_t *netdev)
206206

207207
static int _get_state(sx126x_t *dev, void *val)
208208
{
209-
sx126x_chip_status_t radio_status;
210-
211-
sx126x_get_status(dev, &radio_status);
212-
netopt_state_t state = NETOPT_STATE_OFF;
213-
214-
switch (radio_status.chip_mode) {
215-
case SX126X_CHIP_MODE_RFU:
216-
case SX126X_CHIP_MODE_STBY_RC:
217-
case SX126X_CHIP_MODE_STBY_XOSC:
218-
state = NETOPT_STATE_STANDBY;
209+
netopt_state_t state;
210+
sx126x_chip_modes_t mode = sx126x_get_state(dev);
211+
switch (mode) {
212+
case SX126X_CHIP_MODE_FS:
213+
state = NETOPT_STATE_IDLE;
219214
break;
220215

221216
case SX126X_CHIP_MODE_TX:
@@ -227,6 +222,7 @@ static int _get_state(sx126x_t *dev, void *val)
227222
break;
228223

229224
default:
225+
state = NETOPT_STATE_STANDBY;
230226
break;
231227
}
232228
memcpy(val, &state, sizeof(netopt_state_t));
@@ -312,7 +308,7 @@ static int _set_state(sx126x_t *dev, netopt_state_t state)
312308
switch (state) {
313309
case NETOPT_STATE_STANDBY:
314310
DEBUG("[sx126x] netdev: set NETOPT_STATE_STANDBY state\n");
315-
sx126x_set_standby(dev, SX126X_CHIP_MODE_STBY_XOSC);
311+
sx126x_set_state(dev, SX126X_CHIP_MODE_STBY_XOSC);
316312
break;
317313

318314
case NETOPT_STATE_IDLE:
@@ -324,14 +320,7 @@ static int _set_state(sx126x_t *dev, netopt_state_t state)
324320
dev->params->set_rf_mode(dev, SX126X_RF_MODE_RX);
325321
}
326322
#endif
327-
sx126x_cfg_rx_boosted(dev, true);
328-
int _timeout = (sx126x_symbol_to_msec(dev, dev->rx_timeout));
329-
if (_timeout != 0) {
330-
sx126x_set_rx(dev, _timeout);
331-
}
332-
else {
333-
sx126x_set_rx(dev, SX126X_RX_SINGLE_MODE);
334-
}
323+
sx126x_set_state(dev, SX126X_CHIP_MODE_RX);
335324
break;
336325

337326
case NETOPT_STATE_TX:
@@ -341,7 +330,7 @@ static int _set_state(sx126x_t *dev, netopt_state_t state)
341330
dev->params->set_rf_mode(dev, dev->params->tx_pa_mode);
342331
}
343332
#endif
344-
sx126x_set_tx(dev, 0);
333+
sx126x_set_state(dev, SX126X_CHIP_MODE_TX);
345334
break;
346335

347336
case NETOPT_STATE_RESET:

0 commit comments

Comments
 (0)