Fixed wrong buffer processing
This commit is contained in:
parent
c12042dd2d
commit
6bede12d21
@ -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 */
|
/* buffer too short to contain everything we need */
|
||||||
return MODBUS_ERROR;
|
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;
|
buffer += 2;
|
||||||
// TODO check length!
|
// TODO check length!
|
||||||
if (flags & MODBUS_FLAG_WRITE) {
|
if (flags & MODBUS_FLAG_WRITE) {
|
||||||
if (flags & MODBUS_FLAG_SINGLE) {
|
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;
|
buffer_pos += 2;
|
||||||
} else {
|
} else {
|
||||||
/* Write multiple registers */
|
/* 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;
|
buffer_pos += 2;
|
||||||
if (len < MODBUS_MINIMAL_WRITE_MULTIPLE_LEN) {
|
if (len < MODBUS_MINIMAL_WRITE_MULTIPLE_LEN) {
|
||||||
return MODBUS_ERROR;
|
return MODBUS_ERROR;
|
||||||
@ -286,13 +286,13 @@ static int8_t modbus_process_read_write_request(const uint8_t *buffer, int len,
|
|||||||
return MODBUS_ERROR;
|
return MODBUS_ERROR;
|
||||||
}
|
}
|
||||||
for (uint8_t i = 0; i < transaction->register_count; i++) {
|
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;
|
buffer_pos += 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} 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;
|
buffer_pos += 2;
|
||||||
if (
|
if (
|
||||||
transaction->register_count < 1 ||
|
transaction->register_count < 1 ||
|
||||||
|
Loading…
Reference in New Issue
Block a user