From db4837a1d02e33207aac8c612e46c510c7dd773b Mon Sep 17 00:00:00 2001 From: andy Date: Wed, 2 Jul 2025 21:01:00 +0100 Subject: [PATCH 1/2] modbus-debug --- modbus_rtu.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/modbus_rtu.c b/modbus_rtu.c index a91d23d..a6d8a62 100644 --- a/modbus_rtu.c +++ b/modbus_rtu.c @@ -21,10 +21,30 @@ */ + #include #include #include "hal.h" +#if MODBUS_DEBUG +#include "stream.h" +static void log_modbus_frame(const char *label, + const uint8_t *data, + uint8_t len) +{ + char buf[64]; + size_t n = (size_t)snprintf(buf, sizeof(buf), "%s:", label); + hal.stream.write(buf); + + for(uint_fast8_t i = 0; i < len; i++) { + snprintf(buf, sizeof(buf), " %02X", data[i]); + hal.stream.write(buf); + } + + hal.stream.write(ASCII_EOL); +} +#endif +#include "report.h" #include "platform.h" #include "protocol.h" #include "settings.h" @@ -152,6 +172,9 @@ static void tx_message (volatile queue_entry_t *msg) rx_timeout = modbus.rx_timeout; stream.flush_rx_buffer(); +#if MODBUS_DEBUG + log_modbus_frame("TX", (const uint8_t *)msg->msg.adu, msg->msg.tx_length); +#endif stream.write((char *)((queue_entry_t *)msg)->msg.adu, ((queue_entry_t *)msg)->msg.tx_length); } @@ -243,6 +266,9 @@ static void modbus_poll (void *data) } } +#if MODBUS_DEBUG + log_modbus_frame("RX", (const uint8_t *)((queue_entry_t *)packet)->msg.adu, rx_len); +#endif if((state = packet->async ? ModBus_Silent : ModBus_GotReply) == ModBus_Silent) { if(packet->callbacks.on_rx_packet) { packet->msg.rx_length = rx_len; From 3b7db51b37f2c74f4915bde37e7151549e75f875 Mon Sep 17 00:00:00 2001 From: andy Date: Sat, 5 Jul 2025 20:39:40 +0100 Subject: [PATCH 2/2] debug_printf --- modbus_rtu.c | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/modbus_rtu.c b/modbus_rtu.c index a6d8a62..43cda34 100644 --- a/modbus_rtu.c +++ b/modbus_rtu.c @@ -26,25 +26,6 @@ #include #include "hal.h" -#if MODBUS_DEBUG -#include "stream.h" -static void log_modbus_frame(const char *label, - const uint8_t *data, - uint8_t len) -{ - char buf[64]; - size_t n = (size_t)snprintf(buf, sizeof(buf), "%s:", label); - hal.stream.write(buf); - - for(uint_fast8_t i = 0; i < len; i++) { - snprintf(buf, sizeof(buf), " %02X", data[i]); - hal.stream.write(buf); - } - - hal.stream.write(ASCII_EOL); -} -#endif -#include "report.h" #include "platform.h" #include "protocol.h" #include "settings.h" @@ -132,6 +113,21 @@ static bool valid_crc (const char *buf, uint_fast16_t len) } */ +#if DEBUG +static void log_modbus_frame(const char *label, + const uint8_t *data, + uint8_t len) +{ + char frame[3 * MODBUS_MAX_ADU_SIZE + 4]; + char *ptr = frame; + ptr += sprintf(ptr, "%s:", label); + for(uint_fast8_t i = 0; i < len; i++) { + ptr += sprintf(ptr, " %02X", data[i]); + } + debug_printf("%s", frame); +} +#endif + static void retry_exception (uint8_t code, void *context) { if(packet && packet->callbacks.retries) { @@ -172,7 +168,7 @@ static void tx_message (volatile queue_entry_t *msg) rx_timeout = modbus.rx_timeout; stream.flush_rx_buffer(); -#if MODBUS_DEBUG +#if DEBUG log_modbus_frame("TX", (const uint8_t *)msg->msg.adu, msg->msg.tx_length); #endif stream.write((char *)((queue_entry_t *)msg)->msg.adu, ((queue_entry_t *)msg)->msg.tx_length); @@ -266,7 +262,7 @@ static void modbus_poll (void *data) } } -#if MODBUS_DEBUG +#if DEBUG log_modbus_frame("RX", (const uint8_t *)((queue_entry_t *)packet)->msg.adu, rx_len); #endif if((state = packet->async ? ModBus_Silent : ModBus_GotReply) == ModBus_Silent) { @@ -639,4 +635,4 @@ void modbus_rtu_init (int8_t stream, int8_t dir_aux) task_run_on_startup(report_warning, "Modbus failed to initialize!"); system_raise_alarm(Alarm_SelftestFailed); } -} +} \ No newline at end of file