From 30e7657f71220f9c444a2d1756b0e2e51913c468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20H=C3=BC=C3=9Fler?= Date: Sat, 1 Mar 2025 00:49:35 +0100 Subject: [PATCH] drivers/sx126x: better debug with multiple transceivers --- drivers/sx126x/include/sx126x_internal.h | 12 ++++ drivers/sx126x/sx126x.c | 71 ++++++++++++------------ drivers/sx126x/sx126x_netdev.c | 49 ++++++++-------- drivers/sx126x/sx126x_radio_hal.c | 71 ++++++++++++------------ 4 files changed, 108 insertions(+), 95 deletions(-) diff --git a/drivers/sx126x/include/sx126x_internal.h b/drivers/sx126x/include/sx126x_internal.h index df4d5c6c7898..6b61c22f72fd 100644 --- a/drivers/sx126x/include/sx126x_internal.h +++ b/drivers/sx126x/include/sx126x_internal.h @@ -24,6 +24,7 @@ #include "net/lora.h" #include "sx126x.h" +#include "thread.h" #ifdef __cplusplus extern "C" { @@ -244,6 +245,17 @@ static inline int _sx126x_lora_cr_to(sx126x_lora_cr_t cr) } } +/** + * @name Internal debug macros for sx126x identification + * @{ + */ +#define SX126X_ID(d) thread_getpid() +#define SX126X_DEBUG(d, msg, ...) DEBUG("[sx126x %i] " msg, SX126X_ID(d), ##__VA_ARGS__) +#define SX126X_LOG_INFO(d, msg, ...) LOG_INFO("[sx126x %i] " msg, SX126X_ID(d), ##__VA_ARGS__) +#define SX126X_LOG_WARNING(d, msg, ...) LOG_WARNING("[sx126x %i] " msg, SX126X_ID(d), ##__VA_ARGS__) +#define SX126X_LOG_ERROR(d, msg, ...) LOG_ERROR("[sx126x %i] " msg, SX126X_ID(d), ##__VA_ARGS__) +/** @} */ + #ifdef __cplusplus } #endif diff --git a/drivers/sx126x/sx126x.c b/drivers/sx126x/sx126x.c index d3f60654c6f0..140353dd1ef9 100644 --- a/drivers/sx126x/sx126x.c +++ b/drivers/sx126x/sx126x.c @@ -199,12 +199,12 @@ int sx126x_init(sx126x_t *dev) int res = spi_init_cs(dev->params->spi, dev->params->nss_pin); if (res != SPI_OK) { - DEBUG("[sx126x] error: failed to initialize SPI_%i device (code %i)\n", - dev->params->spi, res); + SX126X_DEBUG(dev, "error: failed to initialize SPI_%i device (code %i)\n", + dev->params->spi, res); return -1; } - DEBUG("[sx126x] init: SPI_%i initialized with success\n", dev->params->spi); + SX126X_DEBUG(dev, "init: SPI_%i initialized with success\n", dev->params->spi); #if IS_ACTIVE(SX126X_SPI) gpio_init(dev->params->reset_pin, GPIO_OUT); @@ -215,12 +215,12 @@ int sx126x_init(sx126x_t *dev) res = gpio_init_int(dev->params->dio1_pin, GPIO_IN, GPIO_RISING, dev->event_cb, dev->event_arg); if (res < 0) { - DEBUG("[sx126x] error: failed to initialize DIO1 pin\n"); + SX126X_DEBUG(dev, "error: failed to initialize DIO1 pin\n"); return res; } } else { - DEBUG("[sx126x] error: no DIO1 pin defined\n"); + SX126X_DEBUG(dev, "error: no DIO1 pin defined\n"); return -EIO; } #endif @@ -247,7 +247,7 @@ int sx126x_init(sx126x_t *dev) res = gpio_init_int(dev->params->u_dio2_arg.dio2_pin, GPIO_IN, GPIO_RISING, dev->event_cb, dev->event_arg); if (res < 0) { - DEBUG("[sx126x] error: failed to initialize DIO2 pin\n"); + SX126X_DEBUG(dev, "error: failed to initialize DIO2 pin\n"); return res; } irq_mask_dio2 = dev->params->u_dio2_arg.dio2_irq_mask; @@ -257,7 +257,7 @@ int sx126x_init(sx126x_t *dev) if (gpio_is_valid(dev->params->u_dio2_arg.rf_switch_pin)) { res = gpio_init(dev->params->u_dio2_arg.rf_switch_pin, GPIO_IN); if (res < 0) { - DEBUG("[sx126x] error: failed to initialize RF switch pin\n"); + SX126X_DEBUG(dev, "error: failed to initialize RF switch pin\n"); return res; } } @@ -270,7 +270,7 @@ int sx126x_init(sx126x_t *dev) res = gpio_init_int(dev->params->u_dio3_arg.dio3_pin, GPIO_IN, GPIO_RISING, dev->event_cb, dev->event_arg); if (res < 0) { - DEBUG("[sx126x] error: failed to initialize DIO3 pin\n"); + SX126X_DEBUG(dev, "error: failed to initialize DIO3 pin\n"); return res; } irq_mask_dio3 = dev->params->u_dio3_arg.dio3_irq_mask; @@ -290,13 +290,13 @@ int sx126x_init(sx126x_t *dev) sizeof(trimming_capacitor_values)); /* 11.3 pF + x * 0.47pF = 33.4pF | x = 0x2f*/ if (trimming_capacitor_values[0] != 0x2f) { - DEBUG("[sx126x] warning: failed to set TCXO control: SX126X_REG_XTATRIM=%02x\n", - trimming_capacitor_values[0]); + SX126X_DEBUG(dev, "warning: failed to set TCXO control: SX126X_REG_XTATRIM=%02x\n", + trimming_capacitor_values[0]); } - DEBUG("[sx126x] XTA capacitor ~ %upF\n", - (unsigned)(0.5f + (11.3f + trimming_capacitor_values[0] * 0.47f))); - DEBUG("[sx126x] XTB capacitor ~ %upF\n", - (unsigned)(0.5f + (11.3f + trimming_capacitor_values[1] * 0.47f))); + SX126X_DEBUG(dev, "XTA capacitor ~ %upF\n", + (unsigned)(0.5f + (11.3f + trimming_capacitor_values[0] * 0.47f))); + SX126X_DEBUG(dev, "XTB capacitor ~ %upF\n", + (unsigned)(0.5f + (11.3f + trimming_capacitor_values[1] * 0.47f))); /* When the 32 MHz clock is coming from a TCXO, the calibration will fail and the user should request a complete calibration after calling the function @@ -328,12 +328,12 @@ int sx126x_init(sx126x_t *dev) if (IS_ACTIVE(ENABLE_DEBUG)) { sx126x_pkt_type_t pkt_type; sx126x_get_pkt_type(dev, &pkt_type); - DEBUG("[sx126x] init radio: pkt type: %d\n", pkt_type); + SX126X_DEBUG(dev, "init radio: pkt type: %d\n", pkt_type); sx126x_chip_status_t radio_status; sx126x_get_status(dev, &radio_status); - DEBUG("[sx126x] init: chip mode %d\n", radio_status.chip_mode); - DEBUG("[sx126x] init: cmd status %d\n", radio_status.cmd_status); + SX126X_DEBUG(dev, "init: chip mode %d\n", radio_status.chip_mode); + SX126X_DEBUG(dev, "init: cmd status %d\n", radio_status.cmd_status); } /* Radio Rx timeout timer stopped on preamble detection */ @@ -344,26 +344,27 @@ int sx126x_init(sx126x_t *dev) uint32_t sx126x_get_channel(const sx126x_t *dev) { - DEBUG("[sx126x]: sx126x_get_radio_status \n"); + SX126X_DEBUG(dev, "sx126x_get_radio_status \n"); return dev->channel; } void sx126x_set_channel(sx126x_t *dev, uint32_t freq) { - DEBUG("[sx126x]: sx126x_set_channel %" PRIu32 "Hz \n", freq); + SX126X_DEBUG(dev, "sx126x_set_channel %" PRIu32 "Hz \n", freq); dev->channel = freq; sx126x_set_rf_freq(dev, dev->channel); + sx126x_cal_img(dev, dev->channel); } uint8_t sx126x_get_bandwidth(const sx126x_t *dev) { - DEBUG("[sx126x]: sx126x_get_bandwidth \n"); + SX126X_DEBUG(dev, "sx126x_get_bandwidth \n"); return _sx126x_lora_bw_to(dev->mod_params.bw); } void sx126x_set_bandwidth(sx126x_t *dev, uint8_t bandwidth) { - DEBUG("[sx126x]: sx126x_set_bandwidth %02x\n", bandwidth); + SX126X_DEBUG(dev, "sx126x_set_bandwidth %02x\n", bandwidth); dev->mod_params.bw = _sx126x_lora_bw_from(bandwidth); dev->mod_params.ldro = _ldro(dev); sx126x_set_lora_mod_params(dev, &dev->mod_params); @@ -371,13 +372,13 @@ void sx126x_set_bandwidth(sx126x_t *dev, uint8_t bandwidth) uint8_t sx126x_get_spreading_factor(const sx126x_t *dev) { - DEBUG("[sx126x]: sx126x_get_spreading_factor \n"); + SX126X_DEBUG(dev, "sx126x_get_spreading_factor \n"); return _sx126x_lora_sf_to(dev->mod_params.sf); } void sx126x_set_spreading_factor(sx126x_t *dev, uint8_t sf) { - DEBUG("[sx126x]: sx126x_set_spreading_factor : %02x\n", sf); + SX126X_DEBUG(dev, "sx126x_set_spreading_factor : %02x\n", sf); dev->mod_params.sf = _sx126x_lora_sf_from(sf); dev->mod_params.ldro = _ldro(dev); sx126x_set_lora_mod_params(dev, &dev->mod_params); @@ -385,20 +386,20 @@ void sx126x_set_spreading_factor(sx126x_t *dev, uint8_t sf) uint8_t sx126x_get_coding_rate(const sx126x_t *dev) { - DEBUG("[sx126x]: sx126x_get_coding_rate \n"); + SX126X_DEBUG(dev, "sx126x_get_coding_rate \n"); return _sx126x_lora_cr_to(dev->mod_params.cr); } void sx126x_set_coding_rate(sx126x_t *dev, uint8_t cr) { - DEBUG("[sx126x]: sx126x_set_coding_rate %01x\n", cr); + SX126X_DEBUG(dev, "sx126x_set_coding_rate %01x\n", cr); dev->mod_params.cr = _sx126x_lora_cr_from(cr); sx126x_set_lora_mod_params(dev, &dev->mod_params); } uint8_t sx126x_get_lora_payload_length(const sx126x_t *dev) { - DEBUG("[sx126x]: sx126x_get_lora_payload_length \n"); + SX126X_DEBUG(dev, "sx126x_get_lora_payload_length \n"); sx126x_rx_buffer_status_t rx_buffer_status; sx126x_get_rx_buffer_status(dev, &rx_buffer_status); @@ -407,59 +408,59 @@ uint8_t sx126x_get_lora_payload_length(const sx126x_t *dev) void sx126x_set_lora_payload_length(sx126x_t *dev, uint8_t len) { - DEBUG("[sx126x]: sx126x_set_lora_payload_length %d\n", len); + SX126X_DEBUG(dev, "sx126x_set_lora_payload_length %d\n", len); dev->pkt_params.pld_len_in_bytes = len; sx126x_set_lora_pkt_params(dev, &dev->pkt_params); } bool sx126x_get_lora_crc(const sx126x_t *dev) { - DEBUG("[sx126x]: sx126x_get_lora_crc \n"); + SX126X_DEBUG(dev, "sx126x_get_lora_crc \n"); return dev->pkt_params.crc_is_on; } void sx126x_set_lora_crc(sx126x_t *dev, bool crc) { - DEBUG("[sx126x]: sx126x_set_lora_crc %d\n", crc); + SX126X_DEBUG(dev, "sx126x_set_lora_crc %d\n", crc); dev->pkt_params.crc_is_on = crc; sx126x_set_lora_pkt_params(dev, &dev->pkt_params); } bool sx126x_get_lora_implicit_header(const sx126x_t *dev) { - DEBUG("[sx126x]: sx126x_get_lora_implicit_header \n"); + SX126X_DEBUG(dev, "sx126x_get_lora_implicit_header \n"); return dev->pkt_params.header_type == SX126X_LORA_PKT_IMPLICIT; } void sx126x_set_lora_implicit_header(sx126x_t *dev, bool mode) { - DEBUG("[sx126x]: sx126x_set_lora_implicit_header %d\n", mode); + SX126X_DEBUG(dev, "sx126x_set_lora_implicit_header %d\n", mode); dev->pkt_params.header_type = (mode ? SX126X_LORA_PKT_IMPLICIT : SX126X_LORA_PKT_EXPLICIT); sx126x_set_lora_pkt_params(dev, &dev->pkt_params); } uint16_t sx126x_get_lora_preamble_length(const sx126x_t *dev) { - DEBUG("[sx126x]: sx126x_get_lora_preamble_length \n"); + SX126X_DEBUG(dev, "sx126x_get_lora_preamble_length \n"); return dev->pkt_params.preamble_len_in_symb; } void sx126x_set_lora_preamble_length(sx126x_t *dev, uint16_t preamble) { - DEBUG("[sx126x]: sx126x_set_lora_preamble_length %" PRIu16 "\n", preamble); + SX126X_DEBUG(dev, "sx126x_set_lora_preamble_length %" PRIu16 "\n", preamble); dev->pkt_params.preamble_len_in_symb = preamble; sx126x_set_lora_pkt_params(dev, &dev->pkt_params); } bool sx126x_get_lora_iq_invert(const sx126x_t *dev) { - DEBUG("[sx126x]: sx126x_get_lora_iq_invert \n"); + SX126X_DEBUG(dev, "sx126x_get_lora_iq_invert \n"); return dev->pkt_params.invert_iq_is_on; } void sx126x_set_lora_iq_invert(sx126x_t *dev, bool iq_invert) { - DEBUG("[sx126x]: sx126x_set_lora_iq_invert %d\n", iq_invert); + SX126X_DEBUG(dev, "sx126x_set_lora_iq_invert %d\n", iq_invert); dev->pkt_params.invert_iq_is_on = iq_invert; sx126x_set_lora_pkt_params(dev, &dev->pkt_params); } diff --git a/drivers/sx126x/sx126x_netdev.c b/drivers/sx126x/sx126x_netdev.c index 4caeef8e383f..6f6ac5a311d8 100644 --- a/drivers/sx126x/sx126x_netdev.c +++ b/drivers/sx126x/sx126x_netdev.c @@ -47,7 +47,7 @@ static int _send(netdev_t *netdev, const iolist_t *iolist) netdev->driver->get(netdev, NETOPT_STATE, &state, sizeof(uint8_t)); if (state == NETOPT_STATE_TX) { - DEBUG("[sx126x] netdev: cannot send packet, radio is already transmitting.\n"); + SX126X_DEBUG(dev, "netdev: cannot send packet, radio is already transmitting.\n"); return -ENOTSUP; } @@ -57,7 +57,7 @@ static int _send(netdev_t *netdev, const iolist_t *iolist) for (const iolist_t *iol = iolist; iol; iol = iol->iol_next) { if (iol->iol_len > 0) { sx126x_write_buffer(dev, pos, iol->iol_base, iol->iol_len); - DEBUG("[sx126x] netdev: send: wrote data to payload buffer.\n"); + SX126X_DEBUG(dev, "netdev: send: wrote data to payload buffer.\n"); pos += iol->iol_len; } } @@ -67,23 +67,21 @@ static int _send(netdev_t *netdev, const iolist_t *iolist) return 0; } - DEBUG("[sx126x] netdev: sending packet now (size: %" PRIuSIZE ").\n", pos); + SX126X_DEBUG(dev, "netdev: sending packet now (size: %" PRIuSIZE ").\n", pos); sx126x_set_lora_payload_length(dev, pos); state = NETOPT_STATE_TX; netdev->driver->set(netdev, NETOPT_STATE, &state, sizeof(uint8_t)); - DEBUG("[sx126x] netdev: send: transmission in progress.\n"); + SX126X_DEBUG(dev, "netdev: send: transmission in progress.\n"); return 0; } static int _recv(netdev_t *netdev, void *buf, size_t len, void *info) { - DEBUG("[sx126x] netdev: read received data.\n"); - sx126x_t *dev = container_of(netdev, sx126x_t, netdev); + SX126X_DEBUG(dev, "netdev: read received data.\n"); uint8_t size = 0; - netdev_lora_rx_info_t *packet_info = info; if (packet_info) { @@ -117,13 +115,13 @@ static int _init(netdev_t *netdev) sx126x_t *dev = container_of(netdev, sx126x_t, netdev); /* Launch initialization of driver and device */ - DEBUG("[sx126x] netdev: initializing driver...\n"); + SX126X_DEBUG(dev, "netdev: initializing driver...\n"); if (sx126x_init(dev) != 0) { - DEBUG("[sx126x] netdev: initialization failed\n"); + SX126X_DEBUG(dev, "netdev: initialization failed\n"); return -1; } - DEBUG("[sx126x] netdev: initialization successful\n"); + SX126X_DEBUG(dev, "netdev: initialization successful\n"); /* signal link UP */ netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); @@ -146,43 +144,43 @@ static void _isr(netdev_t *netdev) } if (irq_mask & SX126X_IRQ_TX_DONE) { - DEBUG("[sx126x] netdev: SX126X_IRQ_TX_DONE\n"); + SX126X_DEBUG(dev, "netdev: SX126X_IRQ_TX_DONE\n"); netdev->event_callback(netdev, NETDEV_EVENT_TX_COMPLETE); } else if (irq_mask & SX126X_IRQ_RX_DONE) { - DEBUG("[sx126x] netdev: SX126X_IRQ_RX_DONE\n"); + SX126X_DEBUG(dev, "netdev: SX126X_IRQ_RX_DONE\n"); netdev->event_callback(netdev, NETDEV_EVENT_RX_COMPLETE); } else if (irq_mask & SX126X_IRQ_PREAMBLE_DETECTED) { - DEBUG("[sx126x] netdev: SX126X_IRQ_PREAMBLE_DETECTED\n"); + SX126X_DEBUG(dev, "netdev: SX126X_IRQ_PREAMBLE_DETECTED\n"); } else if (irq_mask & SX126X_IRQ_SYNC_WORD_VALID) { - DEBUG("[sx126x] netdev: SX126X_IRQ_SYNC_WORD_VALID\n"); + SX126X_DEBUG(dev, "netdev: SX126X_IRQ_SYNC_WORD_VALID\n"); } else if (irq_mask & SX126X_IRQ_HEADER_VALID) { - DEBUG("[sx126x] netdev: SX126X_IRQ_HEADER_VALID\n"); + SX126X_DEBUG(dev, "netdev: SX126X_IRQ_HEADER_VALID\n"); netdev->event_callback(netdev, NETDEV_EVENT_RX_STARTED); } else if (irq_mask & SX126X_IRQ_HEADER_ERROR) { - DEBUG("[sx126x] netdev: SX126X_IRQ_HEADER_ERROR\n"); + SX126X_DEBUG(dev, "netdev: SX126X_IRQ_HEADER_ERROR\n"); } else if (irq_mask & SX126X_IRQ_CRC_ERROR) { - DEBUG("[sx126x] netdev: SX126X_IRQ_CRC_ERROR\n"); + SX126X_DEBUG(dev, "netdev: SX126X_IRQ_CRC_ERROR\n"); netdev->event_callback(netdev, NETDEV_EVENT_CRC_ERROR); } else if (irq_mask & SX126X_IRQ_CAD_DONE) { - DEBUG("[sx126x] netdev: SX126X_IRQ_CAD_DONE\n"); + SX126X_DEBUG(dev, "netdev: SX126X_IRQ_CAD_DONE\n"); netdev->event_callback(netdev, NETDEV_EVENT_CAD_DONE); } else if (irq_mask & SX126X_IRQ_CAD_DETECTED) { - DEBUG("[sx126x] netdev: SX126X_IRQ_CAD_DETECTED\n"); + SX126X_DEBUG(dev, "netdev: SX126X_IRQ_CAD_DETECTED\n"); } else if (irq_mask & SX126X_IRQ_TIMEOUT) { - DEBUG("[sx126x] netdev: SX126X_IRQ_TIMEOUT\n"); + SX126X_DEBUG(dev, "netdev: SX126X_IRQ_TIMEOUT\n"); netdev->event_callback(netdev, NETDEV_EVENT_RX_TIMEOUT); } else { - DEBUG("[sx126x] netdev: SX126X_IRQ_NONE\n"); + SX126X_DEBUG(dev, "netdev: SX126X_IRQ_NONE\n"); } } @@ -193,6 +191,7 @@ static int _get_state(sx126x_t *dev, void *val) sx126x_get_status(dev, &radio_status); netopt_state_t state = NETOPT_STATE_OFF; + SX126X_DEBUG(dev, "netdev: state: %d\n", radio_status.chip_mode); switch (radio_status.chip_mode) { case SX126X_CHIP_MODE_RFU: case SX126X_CHIP_MODE_STBY_RC: @@ -306,13 +305,13 @@ static int _set_state(sx126x_t *dev, netopt_state_t state) switch (state) { case NETOPT_STATE_STANDBY: - DEBUG("[sx126x] netdev: set NETOPT_STATE_STANDBY state\n"); + SX126X_DEBUG(dev, "netdev: set NETOPT_STATE_STANDBY state\n"); sx126x_set_standby(dev, SX126X_CHIP_MODE_STBY_XOSC); break; case NETOPT_STATE_IDLE: case NETOPT_STATE_RX: - DEBUG("[sx126x] netdev: set NETOPT_STATE_RX state\n"); + SX126X_DEBUG(dev, "netdev: set NETOPT_STATE_RX state\n"); #if IS_USED(MODULE_SX126X_RF_SWITCH) /* Refer Section 4.2 RF Switch in Application Note (AN5406) */ if (dev->params->set_rf_mode) { @@ -341,7 +340,7 @@ static int _set_state(sx126x_t *dev, netopt_state_t state) break; case NETOPT_STATE_TX: - DEBUG("[sx126x] netdev: set NETOPT_STATE_TX state\n"); + SX126X_DEBUG(dev, "netdev: set NETOPT_STATE_TX state\n"); #if IS_USED(MODULE_SX126X_RF_SWITCH) if (dev->params->set_rf_mode) { dev->params->set_rf_mode(dev, dev->params->tx_pa_mode); @@ -351,7 +350,7 @@ static int _set_state(sx126x_t *dev, netopt_state_t state) break; case NETOPT_STATE_RESET: - DEBUG("[sx126x] netdev: set NETOPT_STATE_RESET state\n"); + SX126X_DEBUG(dev, "netdev: set NETOPT_STATE_RESET state\n"); sx126x_reset(dev); break; diff --git a/drivers/sx126x/sx126x_radio_hal.c b/drivers/sx126x/sx126x_radio_hal.c index f64a05ccc72a..756427c65d92 100644 --- a/drivers/sx126x/sx126x_radio_hal.c +++ b/drivers/sx126x/sx126x_radio_hal.c @@ -91,7 +91,7 @@ static bool _l2filter(ieee802154_dev_t *hal, uint8_t *mhr) if ((mhr[0] & IEEE802154_FCF_TYPE_MASK) == IEEE802154_FCF_TYPE_BEACON) { if (dev->pan_id == pan_bcast.u16) { - DEBUG("[sx126x] hal: beacon\n"); + SX126X_DEBUG(dev, "hal: beacon\n"); return true; } } @@ -101,7 +101,7 @@ static bool _l2filter(ieee802154_dev_t *hal, uint8_t *mhr) if (pan_bcast.u16 != byteorder_ltohs(dst_pan) && dev->pan_id != byteorder_ltohs(dst_pan)) { - DEBUG("[sx126x] hal: PAN ID mismatch\n"); + SX126X_DEBUG(dev, "hal: PAN ID mismatch\n"); return false; } @@ -112,8 +112,8 @@ static bool _l2filter(ieee802154_dev_t *hal, uint8_t *mhr) return true; } else { - DEBUG("[sx126x] hal: short address mismatch 0x%02x:0x%02x\n", - dst_addr[0], dst_addr[1]); + SX126X_DEBUG(dev, "hal: short address mismatch 0x%02x:0x%02x\n", + dst_addr[0], dst_addr[1]); return false; } } @@ -122,8 +122,8 @@ static bool _l2filter(ieee802154_dev_t *hal, uint8_t *mhr) return true; } else { - DEBUG("[sx126x] hal: long address mismatch 0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x\n", - dst_addr[0], dst_addr[1], dst_addr[2], dst_addr[3], dst_addr[4], dst_addr[5], dst_addr[6], dst_addr[7]); + SX126X_DEBUG(dev, "hal: long address mismatch 0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x\n", + dst_addr[0], dst_addr[1], dst_addr[2], dst_addr[3], dst_addr[4], dst_addr[5], dst_addr[6], dst_addr[7]); return false; } } @@ -135,12 +135,12 @@ static int _set_state(sx126x_t *dev, sx126x_state_t state) { switch (state) { case SX126X_STATE_STANDBY: - DEBUG("[sx126x] hal: set STATE_STANDBY\n"); + SX126X_DEBUG(dev, "hal: set STATE_STANDBY\n"); sx126x_set_standby(dev, SX126X_CHIP_MODE_STBY_XOSC); break; case SX126X_STATE_RX: - DEBUG("[sx126x] hal: set STATE_RX\n"); + SX126X_DEBUG(dev, "hal: set STATE_RX\n"); #if IS_USED(MODULE_SX126X_RF_SWITCH) /* Refer Section 4.2 RF Switch in Application Note (AN5406) */ if (dev->params->set_rf_mode) { @@ -169,7 +169,7 @@ static int _set_state(sx126x_t *dev, sx126x_state_t state) break; case SX126X_STATE_TX: - DEBUG("[sx126x] hal: set STATE_TX\n"); + SX126X_DEBUG(dev, "hal: set STATE_TX\n"); #if IS_USED(MODULE_SX126X_RF_SWITCH) if (dev->params->set_rf_mode) { dev->params->set_rf_mode(dev, dev->params->tx_pa_mode); @@ -179,7 +179,7 @@ static int _set_state(sx126x_t *dev, sx126x_state_t state) break; case SX126X_STATE_CAD: - DEBUG("[sx126x] hal: set STATE_CCA\n"); + SX126X_DEBUG(dev, "hal: set STATE_CCA\n"); dev->cad_done = false; sx126x_set_cad(dev); break; @@ -197,7 +197,7 @@ static int _get_state(sx126x_t *dev, void *val) sx126x_get_status(dev, &radio_status); sx126x_state_t state; - DEBUG("[sx126x] hal: state %d\n", radio_status.chip_mode); + SX126X_DEBUG(dev, "hal: state %d\n", radio_status.chip_mode); switch (radio_status.chip_mode) { case SX126X_CHIP_MODE_TX: @@ -222,18 +222,18 @@ void sx126x_hal_event_handler(ieee802154_dev_t *hal) sx126x_irq_mask_t irq_mask; sx126x_get_and_clear_irq_status(dev, &irq_mask); - DEBUG("sx126x_hal_event_handler(): 0x%"PRIx16"\n", irq_mask); + SX126X_DEBUG(dev, "sx126x_hal_event_handler(): 0x%"PRIx16"\n", irq_mask); if (sx126x_is_stm32wl(dev)) { #if IS_USED(MODULE_SX126X_STM32WL) NVIC_EnableIRQ(SUBGHZ_Radio_IRQn); #endif } if (irq_mask & SX126X_IRQ_TX_DONE) { - DEBUG("[sx126x] hal: SX126X_IRQ_TX_DONE\n"); + SX126X_DEBUG(dev, "hal: SX126X_IRQ_TX_DONE\n"); hal->cb(hal, IEEE802154_RADIO_CONFIRM_TX_DONE); } else if (irq_mask & SX126X_IRQ_RX_DONE) { - DEBUG("[sx126x] hal: SX126X_IRQ_RX_DONE\n"); + SX126X_DEBUG(dev, "hal: SX126X_IRQ_RX_DONE\n"); uint8_t mhdr[IEEE802154_MAX_HDR_LEN]; sx126x_rx_buffer_status_t rx_buffer_status; sx126x_get_rx_buffer_status(dev, &rx_buffer_status); @@ -248,57 +248,57 @@ void sx126x_hal_event_handler(ieee802154_dev_t *hal) * directly or if the driver should send an ACK frame before the indication */ if (is_ack || (!ackf && (match = _l2filter(hal, mhdr)))) { if (is_data && (mhdr[0] & IEEE802154_FCF_ACK_REQ)) { - DEBUG("Received valid frame, need to send ack\n"); + SX126X_DEBUG(dev, "Received valid frame, need to send ack\n"); } - DEBUG("[sx126x] RX (%s) frame\n", is_ack ? "ACK" : (is_data ? "DATA" : "UNKNOWN")); + SX126X_DEBUG(dev, "RX (%s) frame\n", is_ack ? "ACK" : (is_data ? "DATA" : "UNKNOWN")); hal->cb(hal, IEEE802154_RADIO_INDICATION_RX_DONE); } /* If radio is in promiscuos mode, indicate packet and * don't event think of sending an ACK frame :) */ else if (dev->promisc) { - DEBUG("[sx126x] Promiscuous mode is enabled.\n"); + SX126X_DEBUG(dev, "Promiscuous mode is enabled.\n"); hal->cb(hal, IEEE802154_RADIO_INDICATION_RX_DONE); } /* If all failed, simply drop the frame and continue listening * to incoming frames */ else { - DEBUG("[sx126x] ACK filter %s.\n", ackf ? "enabled" : "disabled"); - DEBUG("[sx126x] L2 filter %s.\n", match ? "passed" : "failed"); + SX126X_DEBUG(dev, "ACK filter %s.\n", ackf ? "enabled" : "disabled"); + SX126X_DEBUG(dev, "L2 filter %s.\n", match ? "passed" : "failed"); _set_state(dev, SX126X_STATE_RX); } } else if (irq_mask & SX126X_IRQ_PREAMBLE_DETECTED) { - DEBUG("[sx126x] hal: SX126X_IRQ_PREAMBLE_DETECTED\n"); + SX126X_DEBUG(dev, "hal: SX126X_IRQ_PREAMBLE_DETECTED\n"); } else if (irq_mask & SX126X_IRQ_SYNC_WORD_VALID) { - DEBUG("[sx126x] hal: SX126X_IRQ_SYNC_WORD_VALID\n"); + SX126X_DEBUG(dev, "hal: SX126X_IRQ_SYNC_WORD_VALID\n"); } else if (irq_mask & SX126X_IRQ_HEADER_VALID) { - DEBUG("[sx126x] hal: SX126X_IRQ_HEADER_VALID\n"); + SX126X_DEBUG(dev, "hal: SX126X_IRQ_HEADER_VALID\n"); hal->cb(hal, IEEE802154_RADIO_INDICATION_RX_START); } else if (irq_mask & SX126X_IRQ_HEADER_ERROR) { - DEBUG("[sx126x] hal: SX126X_IRQ_HEADER_ERROR\n"); + SX126X_DEBUG(dev, "hal: SX126X_IRQ_HEADER_ERROR\n"); } else if (irq_mask & SX126X_IRQ_CRC_ERROR) { - DEBUG("[sx126x] hal: SX126X_IRQ_CRC_ERROR\n"); + SX126X_DEBUG(dev, "hal: SX126X_IRQ_CRC_ERROR\n"); hal->cb(hal, IEEE802154_RADIO_INDICATION_CRC_ERROR); } else if (irq_mask & SX126X_IRQ_CAD_DONE) { if (irq_mask & SX126X_IRQ_CAD_DETECTED){ - DEBUG("[sx126x] hal: SX126X_IRQ_CAD_DETECTED \n"); + SX126X_DEBUG(dev, "hal: SX126X_IRQ_CAD_DETECTED \n"); dev->cad_detected = true; } - DEBUG("[sx126x] hal: SX126X_IRQ_CAD_DONE\n"); + SX126X_DEBUG(dev, "hal: SX126X_IRQ_CAD_DONE\n"); dev->cad_done = true; hal->cb(hal, IEEE802154_RADIO_CONFIRM_CCA); _set_state(dev, SX126X_STATE_RX); } else if (irq_mask & SX126X_IRQ_TIMEOUT) { - DEBUG("[sx126x] hal: SX126X_IRQ_TIMEOUT\n"); + SX126X_DEBUG(dev, "hal: SX126X_IRQ_TIMEOUT\n"); } else { - DEBUG("[sx126x] hal: SX126X_IRQ_NONE\n"); + SX126X_DEBUG(dev, "hal: SX126X_IRQ_NONE\n"); } } @@ -311,12 +311,12 @@ static int _write(ieee802154_dev_t *hal, const iolist_t *iolist) /* Write payload buffer */ for (const iolist_t *iol = iolist; iol; iol = iol->iol_next) { if (pos + iol->iol_len > SX126X_BUFFER_SIZE - SX126X_TX_BUFFER_OFFSET - IEEE802154_FCS_LEN) { - DEBUG("[sx126] hal: no buffer space to write payload\n"); + SX126X_DEBUG(dev, "hal: no buffer space to write payload\n"); return -E2BIG; } if (iol->iol_len > 0) { sx126x_write_buffer(dev, SX126X_TX_BUFFER_OFFSET + pos, iol->iol_base, iol->iol_len); - DEBUG("[sx126x] hal: wrote data to payload buffer\n"); + SX126X_DEBUG(dev, "hal: wrote data to payload buffer\n"); pos += iol->iol_len; #if IS_ACTIVE(ENABLE_DEBUG) od_hex_dump(iol->iol_base, iol->iol_len, OD_WIDTH_DEFAULT); @@ -328,7 +328,7 @@ static int _write(ieee802154_dev_t *hal, const iolist_t *iolist) sx126x_write_buffer(dev, SX126X_TX_BUFFER_OFFSET + pos, (uint8_t *)&chksum, sizeof(chksum)); pos += sizeof(chksum); sx126x_set_lora_payload_length(dev, pos); - DEBUG("[sx126x] writing (size: %d)\n", (pos)); + SX126X_DEBUG(dev, "writing (size: %d)\n", (pos)); return 0; } @@ -352,7 +352,7 @@ static int _request_op(ieee802154_dev_t *hal, ieee802154_hal_op_t op, void *ctx) break; case IEEE802154_HAL_OP_CCA: - DEBUG("[sx126x] hal: HAL_OP_CCA (CAD Detection state)\n"); + SX126X_DEBUG(dev, "hal: HAL_OP_CCA (CAD Detection state)\n"); dev->cad_detected = false; _set_state(dev, SX126X_STATE_STANDBY); sx126x_set_cad(dev); @@ -506,7 +506,7 @@ static int _set_cca_mode(ieee802154_dev_t *hal, ieee802154_cca_mode_t mode) { (void)mode; sx126x_t* dev = hal->priv; - DEBUG("[sx126x] hal: set_cca_mode \n"); + SX126X_DEBUG(dev, "hal: set_cca_mode \n"); dev->cad_params.cad_exit_mode = SX126X_CAD_ONLY; dev->cad_params.cad_detect_min = 10; dev->cad_params.cad_detect_peak = 22; @@ -534,14 +534,15 @@ static int _set_frame_filter_mode(ieee802154_dev_t *hal, ieee802154_filter_mode_ switch (mode) { case IEEE802154_FILTER_ACCEPT: - DEBUG("[sx126x] hal: Filter accept all\n"); + SX126X_DEBUG(dev, "hal: Filter accept all\n"); break; case IEEE802154_FILTER_PROMISC: promisc = true; + SX126X_DEBUG(dev, "hal: Filter promiscuous\n"); break; case IEEE802154_FILTER_ACK_ONLY: ackf = true; - DEBUG("[sx126x] hal: Filter ACK only\n"); + SX126X_DEBUG(dev, "hal: Filter ACK only\n"); break; default: return -ENOTSUP;