| ECC1C 145-944-00

Architecture

Firmware architecture consists of systems, individual building blocks of the firmware providing parts of the functionality.

A given system may support one or more registers and/or vectors, variables which can be read and/or written to by the user.

A table of registers and vectors supported by a particular system is provided in the system's documentation, along with details on how to use them (click the links in the table below).

For the purposes of communication, a register is a 32-bit value which should always be in big endian when being sent to and from the device. The exact semantics of these 32 bits are defined by the system documentation and will in general be different for different registers For example, it can be an IEEE 754 32bit float, an unsigned integer, a boolean value, or something else. Some registers can be read/only, other registers may trigger complex operations when written to.

A vector is a variable length analogue to registers, primarily intended for arrays of data. Along with the semantics, they should have a defined size, and are generally addressable by bytes (although a particular System may require that all reads/writes be aligned to e.g. 4-byte chunks). When writing to / reading from a vector, an index will need to be supplied to specify which part of the vector is to be accessed.

### Available systems:

System Name | System ID
--- | ---
STATUS | 0x10
BOARD EEPROM | 0x20
DEVICE EEPROM | 0x21
TEMPERATURE MANAGER | 0x22
LOGGER | 0x24
MISCELLANEOUS FEATURES | 0x25
VECTOR PATTERN MEMORY | 0x26
SNAPSHOT MANAGER | 0x27
VECTOR ADAPTER | 0x28
I2C | 0x31
SIGNAL FLOW MANAGER | 0x40
STATIC INPUT | 0x50
ANALOG INPUT | 0x58
SIGNAL GENERATOR | 0x60
VECTOR PATTERN UNIT | 0x68
INPUT CONDITIONING | 0x98
OPEN LOOP | 0xB0
LENS COMPENSATIONS | 0xC8
OUTPUT CONDITIONING | 0xD0
LINEAR OUTPUT | 0xE8