diff --git a/cube/data/BoardFeature.json b/cube/data/BoardFeature.json new file mode 100644 index 0000000..69ae5a9 --- /dev/null +++ b/cube/data/BoardFeature.json @@ -0,0 +1,65 @@ +{ + "adc128": { + "status": "enable", + "slave": "0x1f", + "ch0_name": "Channel0", + "ch1_name": "Channel1", + "ch2_name": "Channel2", + "ch3_name": "Channel3", + "ch4_name": "Channel4", + "ch5_name": "Channel5", + "ch6_name": "Channel6", + "ch7_name": "Channel7", + "ch0_factor": 1, + "ch1_factor": 1, + "ch2_factor": 1, + "ch3_factor": 1, + "ch4_factor": 1, + "ch5_factor": 1, + "ch6_factor": 1, + "ch7_factor": 1 + }, + "ina3221": { + "status": "enable", + "slave": "0x41", + "ch0_name": "Channel0", + "ch1_name": "Channel1", + "ch2_name": "Channel2", + "ch0_shunt": 2, + "ch1_shunt": 2, + "ch2_shunt": 5 + }, + "emc1413": { + "status": "disable", + "slave": "0x4c", + "ch0_name": "Channel0", + "ch1_name": "Channel1", + "ch2_name": "Channel2" + }, + "tmp468": { + "status": "enable", + "slave": "0x48", + "remote_name": "Remote", + "ch0_name": "Channel0", + "ch1_name": "Channel1", + "ch2_name": "Channel2", + "ch3_name": "Channel3", + "ch4_name": "Channel4", + "ch5_name": "Channel5", + "ch6_name": "Channel6", + "ch7_name": "Channel7" + }, + "tmp112": { + "status": "disable", + "slave": "0x49", + "tmp112_name": "Temperature" + }, + "fru": { + "status": "enable", + "slave": "0x50" + }, + "chip": { + "status": "enable", + "slave": "0x10" + } +} \ No newline at end of file diff --git a/cube/data/ServerHwTopo.json b/cube/data/ServerHwTopo.json new file mode 100644 index 0000000..9943246 --- /dev/null +++ b/cube/data/ServerHwTopo.json @@ -0,0 +1,34 @@ +{ + "maxPcieSlotNum": 8, + "PcieSlotProperties":{ + "busCount":1, + "i2c_cs0":{ + "i2c_bus":13, + "is_have_pca9641": "enable", + "pca9641_slave": "0x42", + "pca9548num": 2, + "pca9548_cs0":{ + "slave": "0x71", + "channel0": "pcie0", + "channel1": "pcie1", + "channel2": "pcie2", + "channel3": "pcie3", + "channel4": null, + "channel5": null, + "channel6": null, + "channel7": null + }, + "pca9548_cs1":{ + "slave": "0x72", + "channel0": "pcie4", + "channel1": "pcie5", + "channel2": "pcie6", + "channel3": "pcie7", + "channel4": null, + "channel5": null, + "channel6": null, + "channel7": null + } + } + } +} \ No newline at end of file diff --git a/cube/sample/ServerHwTopo.json b/cube/sample/ServerHwTopo.json index f386164..2aca6ff 100644 --- a/cube/sample/ServerHwTopo.json +++ b/cube/sample/ServerHwTopo.json @@ -2,12 +2,12 @@ "maxPcieSlotNum": 8, "PcieSlotProperties":{ "busCount":1, - "i2c_cs1":{ + "i2c_cs0":{ "i2c_bus":13, "is_have_pca9641": "enable", "pca9641_slave": "0x42", "pca9548num": 2, - "pca9548_cs1":{ + "pca9548_cs0":{ "slave": "0x71", "channel0": "pcie0", "channel1": "pcie1", @@ -18,7 +18,7 @@ "channel6": null, "channel7": null }, - "pca9548_cs2":{ + "pca9548_cs1":{ "slave": "0x72", "channel0": "pcie4", "channel1": "pcie5", diff --git a/cube/src/create_nicsensor.py b/cube/src/create_nicsensor.py new file mode 100644 index 0000000..2b873c7 --- /dev/null +++ b/cube/src/create_nicsensor.py @@ -0,0 +1,103 @@ +from datetime import datetime +import os +import json + +def get_content_before_substring(a, b): + index = a.find(b) + if index != -1: + return a[:index] + return None + +def dbg_print(level, context): + # 获取当前时间 + now = datetime.now() + # 将当前时间转换为时间戳 + timestamp = now.timestamp() + dt_object = datetime.fromtimestamp(timestamp) + formatted_time = dt_object.strftime("%Y-%m-%dT%H:%M:%S") + + print(f"|{formatted_time}|{level}|{context}") + +file_path = 'create_nicsensor.py' +absolute_path = os.path.abspath(file_path) +workspace_path = get_content_before_substring(absolute_path, "src") + +model_path = "data\\" +board_feature_path = workspace_path + model_path + "BoardFeature.json" +hw_topo_path = workspace_path + model_path + "ServerHwTopo.json" + +dbg_print("info", "====== Pre Init ======") +dbg_print("info", f"workspace_path={workspace_path}") +dbg_print("info", f"board_feature_path={board_feature_path}") +dbg_print("info", f"hw_topo_path={hw_topo_path}") + +def process_hw_topo(): + dbg_print("info", "====== Process Server Hw Topo ======") + # open hw topo file + try: + # 打开JSON文件 + with open(hw_topo_path, 'r') as file: + # 读取并解析JSON数据 + hw_topo_data = json.load(file) + + # 处理解析后的数据 + except FileNotFoundError: + dbg_print("Error", "错误: 未找到JSON文件。") + except json.JSONDecodeError: + dbg_print("Error", "错误: JSON文件格式有误。") + except Exception as e: + dbg_print("Error", f"发生未知错误:{e}") + + maxPcieSlotNum = hw_topo_data['maxPcieSlotNum'] + dbg_print("info", f"maxPcieSlotNum={maxPcieSlotNum}") + + PcieSlotProperties = hw_topo_data['PcieSlotProperties'] + # dbg_print("info", f"PcieSlotProperties={PcieSlotProperties}") + + busCount = PcieSlotProperties['busCount'] + dbg_print("info", f"busCount={busCount}") + + for bus_count_index in range(busCount): + i2c_cs_str = f"i2c_cs{bus_count_index}" + dbg_print("info", f">>> i2c_cs_str={i2c_cs_str}") + + i2c_cs = PcieSlotProperties[i2c_cs_str] + # dbg_print("info", f"i2c_cs={i2c_cs}") + + i2c_bus = i2c_cs['i2c_bus'] + dbg_print("info", f">>> i2c_bus={i2c_bus}") + + is_have_pca9641 = i2c_cs['is_have_pca9641'] + + if is_have_pca9641 == "enable": + pca9641_slave = i2c_cs['pca9641_slave'] + dbg_print("info", f">>> there has pca9641 !!!") + dbg_print("info", f">>> pca9641_slave={pca9641_slave}") + else: + dbg_print("info", f">>> there has no pca9641 !!!") + + pca9548num = i2c_cs['pca9548num'] + dbg_print("info", f">>> pca9548num={pca9548num}") + + for pca9548_count_index in range(pca9548num): + pca9548_cs_str = f"pca9548_cs{pca9548_count_index}" + dbg_print("info", f">>>>>> pca9548_cs_str={pca9548_cs_str}") + + pca9548_cs = i2c_cs[pca9548_cs_str] + + pca9548_slave = pca9548_cs['slave'] + dbg_print("info", f">>>>>> pca9548_slave={pca9548_slave}") + + for i in range(8): + channel = f"channel{i}" + pca9548_channel = pca9548_cs[channel] + + if pca9548_channel != None : + dbg_print("info", f"{channel}={pca9548_channel}") + else: + dbg_print("info", f"{channel} is null") + +# ===================================================== +# Start execute script +# ===================================================== +process_hw_topo() \ No newline at end of file