Fixed wrong buffer processing

This commit is contained in:
mj 2021-12-22 18:19:53 +01:00
parent c12042dd2d
commit 6bede12d21

View File

@ -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 ||