91 lines
1.8 KiB
Python
91 lines
1.8 KiB
Python
|
|
from typing import *
|
|
|
|
from perrepeat import *
|
|
from pertoken import *
|
|
|
|
|
|
T32GroupAttr = Literal['h', 'r', 's', 'w']
|
|
T32FieldAttr = Literal['a','r','hex','event','setclr']
|
|
T32MaskAttr = Literal['dec','hex','rhex']
|
|
T32TreeVisibility = Literal['open','closed']
|
|
|
|
|
|
class T32Field(NamedTuple):
|
|
attr: T32FieldAttr
|
|
qual: PerTokenQual
|
|
thing: int
|
|
bitrange: Tuple[int, int] # inclusive
|
|
name: str
|
|
description: str
|
|
values: Sequence[str]
|
|
|
|
|
|
class T32Mask(NamedTuple):
|
|
attr: T32MaskAttr
|
|
qual: Tuple[PerTokenQual, PerTokenQual]
|
|
thing: int
|
|
bitrange: Tuple[int, int] # inclusive
|
|
mask: int
|
|
name: str
|
|
description: str
|
|
values: Sequence[str]
|
|
|
|
|
|
class T32Line(NamedTuple):
|
|
hidden: bool
|
|
qual: PerTokenQual
|
|
offset: int
|
|
name: str
|
|
description: str
|
|
field:s Sequence[Union[T32Field, T32Mask]]
|
|
|
|
|
|
class T32Group(NamedTuple):
|
|
attrs: T32GroupAttr
|
|
qual: PerTokenQual
|
|
address: Union[T32Address, T32AddressRange]
|
|
description: str
|
|
regs: Sequence[T32Line]
|
|
copy: bool = False
|
|
|
|
|
|
class T32GroupRepeat(NamedTuple):
|
|
repeat: T32Repeat
|
|
width: int
|
|
groups: Sequence[T32Group]
|
|
class T32GroupRepeatReplay(NamedTuple):
|
|
pass
|
|
|
|
|
|
class T32Tree(NamedTuple):
|
|
base: T32Address
|
|
width: int
|
|
visibility: T32TreeVisibility
|
|
groups: Sequence[Union[T32Group, T32GroupRepeat, T32GroupRepeatReplay]]
|
|
subtrees: Sequence[Union[T32TreeRepeat, T32Tree]]
|
|
|
|
|
|
class T32TreeRepeat(NamedTuple):
|
|
repeat: T32Repeat
|
|
subtrees: Sequence[Union[T32TreeRepeat, T32Tree]]
|
|
|
|
|
|
class T32Per(NamedTuple):
|
|
title: str
|
|
props: str
|
|
author: str
|
|
changelog: Sequence[str]
|
|
manufacturer: str
|
|
doc: str
|
|
core: str
|
|
chip: Sequence[str]
|
|
copyright: str
|
|
description: str
|
|
keywords: str
|
|
date: str
|
|
id: str
|
|
config: Tuple[int, int]
|
|
trees: Union[T32Tree, T32TreeRepeat]
|
|
|