#ifndef MODBUS_SERVER_H #define MODBUS_SERVER_H #include /** * @brief Modbus Input Register Addresses. */ enum { /* Valve Control & Status */ REG_INPUT_VALVE_STATE_MOVEMENT = 0x0000, REG_INPUT_MOTOR_CURRENT_MA = 0x0001, /* Digital Inputs */ REG_INPUT_DIGITAL_INPUTS_STATE = 0x0020, REG_INPUT_BUTTON_EVENTS = 0x0021, /* System Config & Status */ REG_INPUT_FIRMWARE_VERSION_MAJOR_MINOR = 0x00F0, REG_INPUT_FIRMWARE_VERSION_PATCH = 0x00F1, REG_INPUT_DEVICE_STATUS = 0x00F2, REG_INPUT_UPTIME_SECONDS_LOW = 0x00F3, REG_INPUT_UPTIME_SECONDS_HIGH = 0x00F4, /* Firmware Update */ REG_INPUT_FWU_LAST_CHUNK_CRC = 0x0100, }; /** * @brief Modbus Holding Register Addresses. */ enum { /* Valve Control */ REG_HOLDING_VALVE_COMMAND = 0x0000, REG_HOLDING_MAX_OPENING_TIME_S = 0x0001, REG_HOLDING_MAX_CLOSING_TIME_S = 0x0002, /* Digital Outputs */ REG_HOLDING_DIGITAL_OUTPUTS_STATE = 0x0010, /* System Config */ REG_HOLDING_WATCHDOG_TIMEOUT_S = 0x00F0, REG_HOLDING_DEVICE_RESET = 0x00F1, /* Firmware Update */ REG_HOLDING_FWU_COMMAND = 0x0100, REG_HOLDING_FWU_CHUNK_OFFSET_LOW = 0x0101, REG_HOLDING_FWU_CHUNK_OFFSET_HIGH = 0x0102, REG_HOLDING_FWU_CHUNK_SIZE = 0x0103, REG_HOLDING_FWU_DATA_BUFFER = 0x0180, }; int modbus_server_init(void); int modbus_reconfigure(uint32_t baudrate, uint8_t unit_id); uint32_t modbus_get_baudrate(void); uint8_t modbus_get_unit_id(void); #endif // MODBUS_SERVER_H