WIP holding register write
This commit is contained in:
@@ -97,7 +97,7 @@ int8_t config_write(config_t *config)
|
||||
}
|
||||
|
||||
/* Write LED BRIGHTNESS */
|
||||
if (eeprom_program_word(CONFIG_EEPROM_ADDR_LED_BRIGHTNESS, config->led_brightness) != EEPROM_OK)
|
||||
if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_LED_BRIGHTNESS, config->led_brightness) != EEPROM_OK)
|
||||
{
|
||||
return EEPROM_WRITE_ERROR;
|
||||
}
|
||||
|
||||
@@ -180,12 +180,20 @@ int8_t modbus_slave_process_msg(const uint8_t *buffer, int len)
|
||||
return MODBUS_ERROR;
|
||||
}
|
||||
transaction.register_address = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++];
|
||||
transaction.register_count = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++];
|
||||
if (
|
||||
transaction.register_count < 1 ||
|
||||
transaction.register_count > MODBUS_MAX_REGISTERS
|
||||
) {
|
||||
transaction.exception.exception_code = MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE;
|
||||
if (flags & MODBUS_FLAG_WRITE) {
|
||||
if (flags & MODBUS_FLAG_SINGLE) {
|
||||
transaction.holding_registers[0] = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++];
|
||||
} else {
|
||||
// write multiple register - TODO
|
||||
}
|
||||
} else {
|
||||
transaction.register_count = (buffer[buffer_pos++] << 8) | buffer[buffer_pos++];
|
||||
if (
|
||||
transaction.register_count < 1 ||
|
||||
transaction.register_count > MODBUS_MAX_REGISTERS
|
||||
) {
|
||||
transaction.exception.exception_code = MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE;
|
||||
}
|
||||
}
|
||||
// add offset to register number
|
||||
transaction.register_number += transaction.register_address;
|
||||
|
||||
Reference in New Issue
Block a user