diff --git a/common/config_loader.py b/common/config_loader.py new file mode 100644 index 0000000..9fb75b6 --- /dev/null +++ b/common/config_loader.py @@ -0,0 +1,51 @@ +import json +from dataclasses import dataclass +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parent.parent +FENGHUANG_CONFIG = REPO_ROOT / "configs" / "config-fenghuang" / "config.json" +GARUDA_CONFIG = REPO_ROOT / "configs" / "config-garuda" / "config.json" +JIG_CONFIG = REPO_ROOT / "configs" / "config-jig" / "config.json" + + +@dataclass(frozen=True) +class Register: + label: str + address: int + data_type: str + object_type: str + show_as_hex: bool = False + + +def load_data_sets(config_path): + with open(config_path, encoding="utf-8") as f: + raw = json.load(f) + return {ds["name"]: ds["data"] for ds in raw["data_sets"]} + + +def load_registers(config_path, dataset_names=None): + data_sets = load_data_sets(config_path) + names = dataset_names or data_sets.keys() + registers = {} + for name in names: + for entry in data_sets[name]: + registers[entry["label"]] = Register( + label=entry["label"], + address=entry["address"], + data_type=entry["data_type"], + object_type=entry["object_type"], + show_as_hex=entry.get("show_as_hex", False), + ) + return registers + + +def load_fenghuang_registers(dataset_names=None): + return load_registers(FENGHUANG_CONFIG, dataset_names) + + +def load_garuda_registers(dataset_names=None): + return load_registers(GARUDA_CONFIG, dataset_names) + + +def load_jig_registers(dataset_names=None): + return load_registers(JIG_CONFIG, dataset_names)