diff options
Diffstat (limited to 'utils')
-rw-r--r-- | utils/codegen/controls.py | 24 | ||||
-rwxr-xr-x | utils/codegen/gen-controls.py | 2 | ||||
-rwxr-xr-x | utils/codegen/gen-gst-controls.py | 2 |
3 files changed, 25 insertions, 3 deletions
diff --git a/utils/codegen/controls.py b/utils/codegen/controls.py index 03c77cc6..602f15b2 100644 --- a/utils/codegen/controls.py +++ b/utils/codegen/controls.py @@ -28,7 +28,7 @@ class ControlEnum(object): class Control(object): - def __init__(self, name, data, vendor): + def __init__(self, name, data, vendor, mode): self.__name = name self.__data = data self.__enum_values = None @@ -60,6 +60,16 @@ class Control(object): self.__size = num_elems + if mode == 'properties': + self.__direction = 'out' + else: + direction = self.__data.get('direction') + if direction is None: + raise RuntimeError(f'Control `{self.__name}` missing required field `{direction}`') + if direction not in ['in', 'out', 'inout']: + raise RuntimeError(f'Control `{self.__name}` direction `{direction}` is invalid; must be one of `in`, `out`, or `inout`') + self.__direction = direction + @property def description(self): """The control description""" @@ -112,6 +122,18 @@ class Control(object): return f"Span<const {typ}>" @property + def direction(self): + in_flag = 'ControlId::Direction::In' + out_flag = 'ControlId::Direction::Out' + + if self.__direction == 'inout': + return f'{in_flag} | {out_flag}' + if self.__direction == 'in': + return in_flag + if self.__direction == 'out': + return out_flag + + @property def element_type(self): return self.__data.get('type') diff --git a/utils/codegen/gen-controls.py b/utils/codegen/gen-controls.py index 3034e9a5..59b716c1 100755 --- a/utils/codegen/gen-controls.py +++ b/utils/codegen/gen-controls.py @@ -71,7 +71,7 @@ def main(argv): ctrls = controls.setdefault(vendor, []) for i, ctrl in enumerate(data['controls']): - ctrl = Control(*ctrl.popitem(), vendor) + ctrl = Control(*ctrl.popitem(), vendor, args.mode) ctrls.append(extend_control(ctrl, i, ranges)) # Sort the vendors by range numerical value diff --git a/utils/codegen/gen-gst-controls.py b/utils/codegen/gen-gst-controls.py index 2601a675..df098826 100755 --- a/utils/codegen/gen-gst-controls.py +++ b/utils/codegen/gen-gst-controls.py @@ -154,7 +154,7 @@ def main(argv): ctrls = controls.setdefault(vendor, []) for ctrl in data['controls']: - ctrl = Control(*ctrl.popitem(), vendor) + ctrl = Control(*ctrl.popitem(), vendor, mode='controls') if ctrl.name in exposed_controls: ctrls.append(extend_control(ctrl)) |