|
| uint16_t | index = 0 |
| | Effective CoE index, with any slot offset applied.
|
| |
| uint8_t | subindex = 0 |
| | CoE subindex.
|
| |
| uint16_t | rawIndex = 0 |
| | The index exactly as written in the source dictionary.
|
| |
| std::string | objectName |
| | Object/Name — identical across every subindex of an object.
|
| |
| std::string | entryName |
| | This subindex's own name; equals objectName for a VAR.
|
| |
| std::string | displayName |
| | Info/DisplayName when the ESI overrides it, else entryName.
|
| |
| ObjectCode | objectCode = ObjectCode::Var |
| |
| uint8_t | numberOfEntries = 0 |
| | The subindex-0 value (highest subindex); 0 for a VAR.
|
| |
| std::string | dataTypeName |
| | Resolved ESI type name, e.g. "UDINT", "STRING(50)".
|
| |
| uint16_t | dataType = 0 |
| | ETG.1020 code; 0 when the name could not be resolved.
|
| |
| ValueKind | valueKind = ValueKind::Bytes |
| | The C++ type this entry's value maps to (resolveValueKind of dataType and bitSize).
|
| |
| bool | isSigned = false |
| |
| uint16_t | bitSize = 0 |
| | Width of this entry.
|
| |
| uint16_t | bitOffset = 0 |
| | Offset within the object's complete-access image.
|
| |
| std::optional< std::vector< uint8_t > > | defaultData |
| | Raw bytes, first byte least significant.
|
| |
| std::optional< std::vector< uint8_t > > | minData |
| |
| std::optional< std::vector< uint8_t > > | maxData |
| |
| std::optional< uint32_t > | unit |
| | Packed ETG.1004 notation value, e.g. 0xFD260000.
|
| |
| std::string | unitSymbol |
| | Rendered symbol, e.g. "mV"; empty when unresolvable.
|
| |
| Access | access {} |
| | Resolved mode plus read/write AL-state restrictions.
|
| |
| Category | category = Category::Optional |
| |
| PdoMapping | pdoMapping = PdoMapping::None |
| |
| SafetyMapping | safetyMapping = SafetyMapping::None |
| |
| SdoAccess | sdoAccess = SdoAccess::SubIndexAccess |
| |
| bool | backup = false |
| |
| bool | setting = false |
| |
| std::optional< uint32_t > | attribute |
| | SoE IDN, when declared.
|
| |
| uint16_t | objAccess = 0 |
| | ETG.1000.6 ObjAccess bitfield synthesised from the resolved flags.
|
| |
| std::vector< Property > | properties |
| | Every <Property> as written, for whatever this row describes.
|
| |
| std::string | description |
| | The "description" property of properties, decoded to text.
|
| |
| std::vector< EsiEnumOption > | options |
| |
| EsiEntrySource | source |
| |
One (index, subindex) row of a device's fully expanded object dictionary.
This is the library's deliverable: a flat vector of these describes every addressable CoE entry a configured device exposes, merged across its own dictionary and every module in its slots, with the ETG.2000 rules for flag inheritance, subindex derivation and type resolution already applied.
Values are raw little-endian bytes plus an ETG.1020 type code, deliberately — the same convention mm::comm::OdEntry documents. Decoding into a typed variant belongs to the node layer (mm::node::decodeSdoBytes(dataType, bytes)), which is what keeps mm::etg free of any dependency on mm::comm or mm::node. Note that a byte-wise comparison of minData against maxData is wrong for a signed type — minData "FF" on a SINT is −1, which sorts above maxData "01" as bytes. Interpret both through dataType first.
| uint16_t mm::etg::EsiEntry::objAccess = 0 |
ETG.1000.6 ObjAccess bitfield synthesised from the resolved flags.
Bits 0-2 readable in PreOP/SafeOP/OP, 3-5 writable in PreOP/SafeOP/OP, 6 RxPDO-mappable, 7 TxPDO-mappable, 8 backup, 9 setting. Provided so an entry drops straight into mm::node::DeviceParameter::access and its isReadable() without a second conversion.
| std::vector<Property> mm::etg::EsiEntry::properties |
Every <Property> as written, for whatever this row describes.
<Property> is the format's generic annotation mechanism, so these are carried verbatim and a vendor that uses names other than Synapticon's loses nothing. description and options below are conveniences decoded from this vector for the two conventional names; both are empty for such a vendor, whose data is still right here.
Subindex 0 describes the object itself, so on that row this is the object's own annotation (the Object's for a VAR, the DataType's for an ARRAY or RECORD). Every other row carries only what that specific entry declares — which for a RECORD member is its own description, and for an ARRAY element is nothing, since the ESI describes an array once rather than per element. Object-level text is therefore stored once, not repeated onto every subindex: look it up on subindex 0 of the same index.