WIP holding register write

This commit is contained in:
dooku
2021-10-06 20:20:51 +02:00
parent 15bc1943ef
commit 917886820d
3 changed files with 64 additions and 7 deletions

View File

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

View File

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