From 6bede12d21d6631d6cf5de399f0236605313d0cf Mon Sep 17 00:00:00 2001 From: mj Date: Wed, 22 Dec 2021 18:19:53 +0100 Subject: [PATCH] Fixed wrong buffer processing --- fw/Core/Src/modbus.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fw/Core/Src/modbus.c b/fw/Core/Src/modbus.c index 36c2869..ddf37b6 100644 --- a/fw/Core/Src/modbus.c +++ b/fw/Core/Src/modbus.c @@ -263,16 +263,16 @@ static int8_t modbus_process_read_write_request(const uint8_t *buffer, int len, /* buffer too short to contain everything we need */ return MODBUS_ERROR; } - transaction->register_address = (buffer[buffer_pos + 1] << 8) | buffer[buffer_pos + 2]; + transaction->register_address = (buffer[buffer_pos] << 8) | buffer[buffer_pos + 1]; buffer += 2; // TODO check length! if (flags & MODBUS_FLAG_WRITE) { if (flags & MODBUS_FLAG_SINGLE) { - transaction->holding_registers[0] = (buffer[buffer_pos + 1] << 8) | buffer[buffer_pos + 2]; + transaction->holding_registers[0] = (buffer[buffer_pos] << 8) | buffer[buffer_pos + 1]; buffer_pos += 2; } else { /* Write multiple registers */ - transaction->register_count = (buffer[buffer_pos + 1] << 8) | buffer[buffer_pos + 2]; + transaction->register_count = (buffer[buffer_pos] << 8) | buffer[buffer_pos + 1]; buffer_pos += 2; if (len < MODBUS_MINIMAL_WRITE_MULTIPLE_LEN) { return MODBUS_ERROR; @@ -286,13 +286,13 @@ static int8_t modbus_process_read_write_request(const uint8_t *buffer, int len, return MODBUS_ERROR; } for (uint8_t i = 0; i < transaction->register_count; i++) { - transaction->holding_registers[i] = (buffer[buffer_pos + 1] << 8) | buffer[buffer_pos + 2]; + transaction->holding_registers[i] = (buffer[buffer_pos] << 8) | buffer[buffer_pos + 1]; buffer_pos += 2; } } } } else { - transaction->register_count = (buffer[buffer_pos + 1] << 8) | buffer[buffer_pos + 2]; + transaction->register_count = (buffer[buffer_pos] << 8) | buffer[buffer_pos + 1]; buffer_pos += 2; if ( transaction->register_count < 1 ||