Source code for ifgen.svd.model.enum
"""
A module implementing a data model for ARM CMSIS-SVD 'enumeratedValue' data.
"""
# built-in
from dataclasses import dataclass
from typing import Iterable, Optional
from xml.etree import ElementTree
# internal
from ifgen.svd.model.derived import DerivedMixin
from ifgen.svd.string import StringKeyVal, StringKeyValueMixin
[docs]
@dataclass
class EnumeratedValue(StringKeyValueMixin):
"""A container for enumerated-value information."""
[docs]
@classmethod
def string_keys(cls) -> Iterable[StringKeyVal]:
"""Get string keys for this instance type."""
return [
StringKeyVal("name", False),
StringKeyVal("description", False),
# Some kind of parsing needed for this field maybe.
StringKeyVal("value", False),
StringKeyVal("isDefault", False),
]
EnumValueMap = dict[str, EnumeratedValue]
[docs]
@dataclass
class EnumeratedValues(DerivedMixin):
"""A container for enum information."""
derived_from: Optional["EnumeratedValues"]
enum: EnumValueMap
[docs]
@classmethod
def string_keys(cls) -> Iterable[StringKeyVal]:
"""Get string keys for this instance type."""
return [
StringKeyVal("name", False),
StringKeyVal("headerEnumName", False),
StringKeyVal("usage", False),
]
[docs]
def get_enum(enumerated_values: ElementTree.Element) -> EnumeratedValues:
"""Get register clusters."""
# Handle values.
vals = {}
for enum in enumerated_values.iterfind("enumeratedValue"):
val_inst = EnumeratedValue.create(enum)
vals[val_inst.raw_data["name"]] = val_inst
# No handling for derived enumerations yet.
derived = enumerated_values.attrib.get("derivedFrom")
assert derived is None, derived
return EnumeratedValues.create(enumerated_values, None, vals)