// -----------------------------------------------------------------------------
// This file is automatically generated by hdl-registers version 8.1.1-dev.
// Code generator CppHeaderGenerator version 1.0.0.
// Generated 2026-03-13 21:05 from file regs_dma_axi_write_simple.toml at Git commit 2161f6cde157.
// Register hash a600c44f72777903809768e11279acf79aae51d4.
// -----------------------------------------------------------------------------

#pragma once

#include "i_dma_axi_write_simple.h"

namespace fpga_regs
{

  class DmaAxiWriteSimple : public IDmaAxiWriteSimple
  {
  public:
    /**
     * Class constructor.
     * @param base_address Byte address where these registers are memory mapped.
     *                     Can be e.g. '0x43C00000' in bare metal, or e.g.
     *                     'reinterpret_cast<uintptr_t>(mmap(...))' in Linux.
     *                     When using an operating system, care must be taken to pass the
     *                     virtual address, not the physical address.
     *                     When using bare metal, these are the same.
     * @param assertion_handler Function to call when an assertion fails.
     *                          Function takes a string pointer as an argument, where the string
     *                          will contain an error diagnostic message.
     *                          Function must return a boolean 'true'.
     */
    DmaAxiWriteSimple(uintptr_t base_address, bool (*assertion_handler) (const std::string*));

    virtual ~DmaAxiWriteSimple() {}

    // -------------------------------------------------------------------------
    // Methods for the 'interrupt_status' register.
    // Mode 'Read, Write-pulse'.
    // -------------------------------------------------------------------------
    // Read the whole register value over the register bus.
    virtual dma_axi_write_simple::interrupt_status::Value get_interrupt_status() const override;

    // Read the whole register value over the register bus.
    // This method returns the raw register value without any type conversion.
    virtual uint32_t get_interrupt_status_raw() const override;

    // Read the register and slice out the 'write_done' field value.
    virtual bool get_interrupt_status_write_done() const override;

    // Read the register and slice out the 'write_error' field value.
    virtual bool get_interrupt_status_write_error() const override;

    // Read the register and slice out the 'start_address_unaligned_error' field value.
    virtual bool get_interrupt_status_start_address_unaligned_error() const override;

    // Read the register and slice out the 'end_address_unaligned_error' field value.
    virtual bool get_interrupt_status_end_address_unaligned_error() const override;

    // Read the register and slice out the 'read_address_unaligned_error' field value.
    virtual bool get_interrupt_status_read_address_unaligned_error() const override;

    // Write the whole register value over the register bus.
    virtual void set_interrupt_status(
      dma_axi_write_simple::interrupt_status::Value register_value
    ) const override;

    // Write the whole register value over the register bus.
    // This method takes a raw register value and does not perform any type conversion.
    virtual void set_interrupt_status_raw(
      uint32_t register_value
    ) const override;

    // Write the 'write_done' field value.
    // Will write the register with all other fields set as default.
    virtual void set_interrupt_status_write_done(
      bool field_value
    ) const override;

    // Write the 'write_error' field value.
    // Will write the register with all other fields set as default.
    virtual void set_interrupt_status_write_error(
      bool field_value
    ) const override;

    // Write the 'start_address_unaligned_error' field value.
    // Will write the register with all other fields set as default.
    virtual void set_interrupt_status_start_address_unaligned_error(
      bool field_value
    ) const override;

    // Write the 'end_address_unaligned_error' field value.
    // Will write the register with all other fields set as default.
    virtual void set_interrupt_status_end_address_unaligned_error(
      bool field_value
    ) const override;

    // Write the 'read_address_unaligned_error' field value.
    // Will write the register with all other fields set as default.
    virtual void set_interrupt_status_read_address_unaligned_error(
      bool field_value
    ) const override;
    // -------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // Methods for the 'interrupt_mask' register.
    // Mode 'Read, Write'.
    // -------------------------------------------------------------------------
    // Read the whole register value over the register bus.
    virtual uint32_t get_interrupt_mask() const override;

    // Write the whole register value over the register bus.
    virtual void set_interrupt_mask(
      uint32_t register_value
    ) const override;
    // -------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // Methods for the 'config' register.
    // Mode 'Read, Write'.
    // -------------------------------------------------------------------------
    // Read the whole register value over the register bus.
    virtual dma_axi_write_simple::config::Value get_config() const override;

    // Read the whole register value over the register bus.
    // This method returns the raw register value without any type conversion.
    virtual uint32_t get_config_raw() const override;

    // Read the register and slice out the 'enable' field value.
    virtual bool get_config_enable() const override;

    // Write the whole register value over the register bus.
    virtual void set_config(
      dma_axi_write_simple::config::Value register_value
    ) const override;

    // Write the whole register value over the register bus.
    // This method takes a raw register value and does not perform any type conversion.
    virtual void set_config_raw(
      uint32_t register_value
    ) const override;

    // Write the 'enable' field value.
    // Will write the register with all other fields set as default.
    virtual void set_config_enable(
      bool field_value
    ) const override;
    // -------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // Methods for the 'buffer_start_address' register.
    // Mode 'Write'.
    // -------------------------------------------------------------------------
    // Write the whole register value over the register bus.
    virtual void set_buffer_start_address(
      uint32_t register_value
    ) const override;
    // -------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // Methods for the 'buffer_end_address' register.
    // Mode 'Write'.
    // -------------------------------------------------------------------------
    // Write the whole register value over the register bus.
    virtual void set_buffer_end_address(
      uint32_t register_value
    ) const override;
    // -------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // Methods for the 'buffer_written_address' register.
    // Mode 'Read'.
    // -------------------------------------------------------------------------
    // Read the whole register value over the register bus.
    virtual uint32_t get_buffer_written_address() const override;
    // -------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // Methods for the 'buffer_read_address' register.
    // Mode 'Write'.
    // -------------------------------------------------------------------------
    // Write the whole register value over the register bus.
    virtual void set_buffer_read_address(
      uint32_t register_value
    ) const override;
    // -------------------------------------------------------------------------

  private:
    volatile uint32_t *m_registers;
    bool (*m_assertion_handler) (const std::string*);

    // -------------------------------------------------------------------------
    // Methods for the 'interrupt_status' register.
    // Mode 'Read, Write-pulse'.
    // -------------------------------------------------------------------------
    // Slice out the 'write_done' field value from a given raw register value.
    // Performs no operation on the register bus.
    bool get_interrupt_status_write_done_from_raw(
      uint32_t register_value
    ) const;

    // Slice out the 'write_error' field value from a given raw register value.
    // Performs no operation on the register bus.
    bool get_interrupt_status_write_error_from_raw(
      uint32_t register_value
    ) const;

    // Slice out the 'start_address_unaligned_error' field value from a given raw register value.
    // Performs no operation on the register bus.
    bool get_interrupt_status_start_address_unaligned_error_from_raw(
      uint32_t register_value
    ) const;

    // Slice out the 'end_address_unaligned_error' field value from a given raw register value.
    // Performs no operation on the register bus.
    bool get_interrupt_status_end_address_unaligned_error_from_raw(
      uint32_t register_value
    ) const;

    // Slice out the 'read_address_unaligned_error' field value from a given raw register value.
    // Performs no operation on the register bus.
    bool get_interrupt_status_read_address_unaligned_error_from_raw(
      uint32_t register_value
    ) const;

    // Get the raw representation of a given 'write_done' field value.
    // Performs no operation on the register bus.
    uint32_t get_interrupt_status_write_done_to_raw(bool field_value) const;

    // Get the raw representation of a given 'write_error' field value.
    // Performs no operation on the register bus.
    uint32_t get_interrupt_status_write_error_to_raw(bool field_value) const;

    // Get the raw representation of a given 'start_address_unaligned_error' field value.
    // Performs no operation on the register bus.
    uint32_t get_interrupt_status_start_address_unaligned_error_to_raw(bool field_value) const;

    // Get the raw representation of a given 'end_address_unaligned_error' field value.
    // Performs no operation on the register bus.
    uint32_t get_interrupt_status_end_address_unaligned_error_to_raw(bool field_value) const;

    // Get the raw representation of a given 'read_address_unaligned_error' field value.
    // Performs no operation on the register bus.
    uint32_t get_interrupt_status_read_address_unaligned_error_to_raw(bool field_value) const;
    // -------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // Methods for the 'config' register.
    // Mode 'Read, Write'.
    // -------------------------------------------------------------------------
    // Slice out the 'enable' field value from a given raw register value.
    // Performs no operation on the register bus.
    bool get_config_enable_from_raw(
      uint32_t register_value
    ) const;

    // Get the raw representation of a given 'enable' field value.
    // Performs no operation on the register bus.
    uint32_t get_config_enable_to_raw(bool field_value) const;
    // -------------------------------------------------------------------------
  };

} // namespace fpga_regs
