diff --git a/software/lib/modbus_server/modbus_server.c b/software/lib/modbus_server/modbus_server.c index 9175b63..1d78f77 100644 --- a/software/lib/modbus_server/modbus_server.c +++ b/software/lib/modbus_server/modbus_server.c @@ -158,6 +158,17 @@ static struct modbus_user_callbacks mbs_cbs = { int modbus_server_init(void) { k_timer_init(&watchdog_timer, watchdog_timer_handler, NULL); + + // Load saved settings + uint32_t saved_baudrate = 19200; + uint8_t saved_unit_id = 1; + settings_load_one("modbus/baudrate", &saved_baudrate, sizeof(saved_baudrate)); + settings_load_one("modbus/unit_id", &saved_unit_id, sizeof(saved_unit_id)); + + // Apply loaded settings + server_param.serial.baud = saved_baudrate; + server_param.server.unit_id = saved_unit_id; + const char iface_name[] = {DEVICE_DT_NAME(MODBUS_NODE)}; #if DT_NODE_HAS_COMPAT(DT_PARENT(MODBUS_NODE), zephyr_cdc_acm_uart) const struct device *const dev = DEVICE_DT_GET(DT_PARENT(MODBUS_NODE)); @@ -182,20 +193,37 @@ int modbus_server_init(void) return modbus_iface; } server_param.server.user_cb = &mbs_cbs; + + LOG_INF("Starting Modbus server: baudrate=%u, unit_id=%u", saved_baudrate, saved_unit_id); return modbus_init_server(modbus_iface, server_param); } int modbus_reconfigure(uint32_t baudrate, uint8_t unit_id) { + // Update parameters server_param.serial.baud = baudrate; server_param.server.unit_id = unit_id; + // Try to reinitialize - this should work for most cases int ret = modbus_init_server(modbus_iface, server_param); if (ret == 0) { settings_save_one("modbus/baudrate", &baudrate, sizeof(baudrate)); settings_save_one("modbus/unit_id", &unit_id, sizeof(unit_id)); + LOG_INF("Modbus reconfigured: baudrate=%u, unit_id=%u", baudrate, unit_id); + } + else + { + LOG_ERR("Failed to reconfigure Modbus: %d", ret); + LOG_INF("Modbus reconfiguration requires restart to take effect"); + + // Save settings for next boot + settings_save_one("modbus/baudrate", &baudrate, sizeof(baudrate)); + settings_save_one("modbus/unit_id", &unit_id, sizeof(unit_id)); + + LOG_INF("Settings saved. Type 'reset' to restart the device and apply the change."); + return 0; // Return success since settings are saved } return ret;