diff --git a/scripts/generate_params.py b/scripts/generate_params.py index a9c5eba..b32109e 100755 --- a/scripts/generate_params.py +++ b/scripts/generate_params.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # # Copyright (c) 2023 Dmitry Ponomarev -# +# Anastasiia Stepanova # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. @@ -26,6 +26,7 @@ def __init__(self, directory, name) -> None: self.integers_array = "" self.integers_enums = "" self.strings_array = "" + self.strings_enums = "" self.strings_amount = 0 def add_integer(self, param : IntegerParam): @@ -47,8 +48,9 @@ def add_integer(self, param : IntegerParam): def add_string(self, param : StringParam): assert isinstance(param, StringParam) c_string = f" {{{param.name :<32}, {param.default}, {param.mutability}}},\n" - + h_string = f" {param.enum_name},\n" if self.strings_amount > 0 else f" {param.enum_name} = INTEGER_PARAMS_AMOUNT,\n" self.strings_array += c_string + self.strings_enums += h_string self.strings_amount += 1 def generate(self): @@ -82,8 +84,16 @@ def generate(self): f"{self.integers_enums}\n" " INTEGER_PARAMS_AMOUNT\n" "};\n" - f"#define NUM_OF_STR_PARAMS {self.strings_amount}\n" + ) + if self.strings_amount > 0: + hpp_content += ( + "enum StrParamsIndexes {\n" + f"{self.strings_enums}\n" + "};\n" + ) + + hpp_content += f"#define NUM_OF_STR_PARAMS {self.strings_amount}\n" hpp_file.write(hpp_content) if __name__=="__main__": @@ -120,7 +130,8 @@ def generate(self): sys.exit(1) elif data['type'].lower() == "port": gen.add_integer(IntegerParam.create_port_id(param_name, data['enum_base'])) - gen.add_string(StringParam.create_port_type(param_name, data['data_type'])) + gen.add_string(StringParam.create_port_type(param_name, data['data_type'], + data['enum_base'])) elif data['type'].lower() == "integer": gen.add_integer(IntegerParam.create(param_name, data)) elif data['type'].lower() == "string": diff --git a/scripts/params.py b/scripts/params.py index b30ef01..3268aa9 100755 --- a/scripts/params.py +++ b/scripts/params.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # # Copyright (c) 2023 Dmitry Ponomarev -# +# Anastasiia Stepanova # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. @@ -15,9 +15,10 @@ @dataclass class BaseParam: name: str = "" - default: int = 0 + default: int | str = 0 note: str = "" mutability: str = "MUTABLE" + enum_name: str = "" @dataclass class IntegerParam(BaseParam): @@ -26,7 +27,6 @@ class IntegerParam(BaseParam): - Cyphal uavcan.register.Value.1.0.integer32 - DroneCAN uavcan.param.Value.integer_value """ - enum_name: str = "" flags: str = "" min: int = 0 max: int = 0 @@ -115,10 +115,11 @@ def create(param_name, data): return string_param @staticmethod - def create_port_type(param_name, data_type : str): + def create_port_type(param_name, data_type : str, enum_base : str): type_register = StringParam( name=f"\"{param_name}.type\"", default=f"\"{data_type}\"", + enum_name=f"{enum_base}_TYPE", mutability="IMMUTABLE" ) return type_register @@ -128,6 +129,7 @@ def _create_from_dict(param_name, data : dict): string_param = StringParam( name=f"\"{param_name}\"", default=f"\"{data['default']}\"", + enum_name=data['enum'], mutability=is_mutable(param_name, str(data['flags'])) ) if 'note' in data: @@ -141,6 +143,7 @@ def _create_from_list_legacy(param_name, data : list): """Input example: param_name : ["data_type", "ENUM_NAME"]""" string_param = StringParam( name=f"\"{param_name}\"", + enum_name=data[1], default=f"\"{data[3]}\"", mutability=is_mutable(param_name, str(data[2])) )