Skip to content

Commit ecfcc7f

Browse files
committed
drivers/sx126x: read error flags
1 parent d1aa2cf commit ecfcc7f

File tree

1 file changed

+39
-5
lines changed

1 file changed

+39
-5
lines changed

drivers/sx126x/sx126x.c

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -405,11 +405,13 @@ int sx126x_init(sx126x_t *dev)
405405
sx126x_cfg_tx_clamp(dev);
406406
}
407407

408-
/* Configure the power regulator mode */
409-
sx126x_set_reg_mode(dev, dev->params->regulator);
410-
411-
/* Initialize radio with the default parameters */
412-
sx126x_init_default_config(dev);
408+
/* check for errors */
409+
sx126x_errors_mask_t error = 0;
410+
sx126x_get_device_errors(dev, &error);
411+
if (error) {
412+
SX126X_LOG_ERROR(dev, "startup: device errors 0x%04x\n", error);
413+
}
414+
sx126x_clear_device_errors(dev);
413415

414416
#if IS_USED(MODULE_SX126X_DIO2)
415417
if (dev->params->dio2_mode == SX126X_DIO2_RF_SWITCH) {
@@ -445,6 +447,16 @@ int sx126x_init(sx126x_t *dev)
445447
sx126x_cal(dev, SX126X_CAL_ALL);
446448
}
447449
#endif
450+
error = 0;
451+
sx126x_get_device_errors(dev, &error);
452+
if (error) {
453+
SX126X_LOG_ERROR(dev, "error: device error 0x%04x\n", error);
454+
}
455+
else {
456+
SX126X_LOG_INFO(dev, "startup successful\n");
457+
}
458+
sx126x_clear_device_errors(dev);
459+
448460
/* The user can specify the use of DC-DC by using the command SetRegulatorMode(...).
449461
This operation must be carried out in STDBY_RC mode only.*/
450462
sx126x_set_reg_mode(dev, dev->params->regulator);
@@ -482,6 +494,14 @@ sx126x_chip_modes_t sx126x_get_state(const sx126x_t *dev)
482494

483495
void sx126x_set_state(sx126x_t *dev, sx126x_chip_modes_t state)
484496
{
497+
/* check for errors */
498+
sx126x_errors_mask_t error = 0;
499+
sx126x_get_device_errors(dev, &error);
500+
if (error) {
501+
SX126X_DEBUG(dev, "before set state: device error 0x%04x before setting state\n", error);
502+
}
503+
sx126x_clear_device_errors(dev);
504+
485505
switch (state) {
486506
case SX126X_CHIP_MODE_TX:
487507
sx126x_set_tx(dev, 0); /* no TX frame timeout */
@@ -514,6 +534,13 @@ void sx126x_set_state(sx126x_t *dev, sx126x_chip_modes_t state)
514534
default:
515535
break;
516536
}
537+
538+
error = 0;
539+
sx126x_get_device_errors(dev, &error);
540+
if (error) {
541+
SX126X_DEBUG(dev, "after set state: device error 0x%04x before setting state\n", error);
542+
}
543+
sx126x_clear_device_errors(dev);
517544
}
518545

519546
uint32_t sx126x_get_channel(const sx126x_t *dev)
@@ -558,10 +585,17 @@ static void _cal_img(sx126x_t *dev, uint32_t freq)
558585

559586
void sx126x_set_channel(sx126x_t *dev, uint32_t freq)
560587
{
588+
sx126x_clear_device_errors(dev);
561589
SX126X_DEBUG(dev, "sx126x_set_channel %" PRIu32 "Hz \n", freq);
562590
dev->channel = freq;
563591
sx126x_set_rf_freq(dev, dev->channel);
564592
_cal_img(dev, freq);
593+
sx126x_errors_mask_t error = 0;
594+
sx126x_get_device_errors(dev, &error);
595+
if (error) {
596+
SX126X_DEBUG(dev, "sx126x_set_channel: device errors 0x%04x\n", error);
597+
}
598+
sx126x_clear_device_errors(dev);
565599
}
566600

567601
uint8_t sx126x_get_bandwidth(const sx126x_t *dev)

0 commit comments

Comments
 (0)