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)