tinyriscv/tools/regtool/reggen/enum_entry.py

36 lines
1.3 KiB
Python
Raw Normal View History

# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
from typing import Dict
from .lib import check_keys, check_str, check_int
REQUIRED_FIELDS = {
'name': ['s', "name of the member of the enum"],
'desc': ['t', "description when field has this value"],
'value': ['d', "value of this member of the enum"]
}
class EnumEntry:
def __init__(self, where: str, max_val: int, raw: object):
rd = check_keys(raw, where,
list(REQUIRED_FIELDS.keys()),
[])
self.name = check_str(rd['name'], 'name field of {}'.format(where))
self.desc = check_str(rd['desc'], 'desc field of {}'.format(where))
self.value = check_int(rd['value'], 'value field of {}'.format(where))
if not (0 <= self.value <= max_val):
raise ValueError("value for {} is {}, which isn't representable "
"in the field (representable range: 0 .. {})."
.format(where, self.value, max_val))
def _asdict(self) -> Dict[str, object]:
return {
'name': self.name,
'desc': self.desc,
'value': str(self.value)
}