Files
OpenBMC/meta-luxshare/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-add-sensor-config-file.patch
T
2026-04-23 17:07:55 +08:00

161 lines
4.9 KiB
Diff
Executable File

From 3079d7621187cb966f19726f2f31fb03f0080eed Mon Sep 17 00:00:00 2001
From: roly <Rolyli.Li@luxshare-ict.com>
Date: Wed, 11 Dec 2024 17:08:44 +0800
Subject: [PATCH] add sensor config file
---
scripts/meson.build | 19 +++++-
scripts/sensor_data_record_gen.py | 104 ++++++++++++++++++++++++++++++
2 files changed, 120 insertions(+), 3 deletions(-)
create mode 100755 scripts/sensor_data_record_gen.py
diff --git a/scripts/meson.build b/scripts/meson.build
index b739e6f..ae5358c 100644
--- a/scripts/meson.build
+++ b/scripts/meson.build
@@ -3,11 +3,11 @@ python_exe = find_program('python3', 'python')
sensor_gen = custom_target('sensor-gen',
output: 'sensor-gen.cpp',
- input: [ 'sensor_gen.py', get_option('sensor-yaml-gen')],
+ input: files(get_option('sensor-yaml-gen')),
command: [
python_exe,
- '@INPUT0@',
- '-i', '@INPUT1@',
+ files('sensor_gen.py'),
+ '-i', '@INPUT@',
'-o', meson.current_build_dir(),
'generate-cpp',
],
@@ -39,3 +39,16 @@ fru_gen = custom_target('fru-gen',
],
)
generated_src += fru_gen
+
+sensor_data_gen = custom_target('sensor-json-gen',
+ output: 'sensor-data-record.json',
+ input: files(get_option('sensor-yaml-gen')),
+ command: [
+ files('sensor_data_record_gen.py'),
+ '-i', '@INPUT@',
+ '-o', meson.current_build_dir(),
+ ],
+ install: true,
+ install_dir: get_option('datadir') / 'ipmi-providers',
+)
+generated_src += sensor_data_gen
diff --git a/scripts/sensor_data_record_gen.py b/scripts/sensor_data_record_gen.py
new file mode 100755
index 0000000..2ef58b7
--- /dev/null
+++ b/scripts/sensor_data_record_gen.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python3
+
+import argparse
+import json
+import os
+
+import yaml
+
+
+def getSensorParams(sensor, sensor_params):
+ path = sensor["path"]
+ sensorName = sensor.get("sensorName", path[path.rfind("/") + 1 :])
+ sensorReadingType = sensor.get("sensorReadingType", 0)
+ sensorType = sensor.get("sensorType", 0)
+ sensor_params[path] = {
+ "sensorName": sensorName,
+ "sensorReadingType": sensorReadingType,
+ "sensorType": sensorType,
+ }
+
+ overridePaths = sensor.get("overridePaths", [])
+ for item in overridePaths:
+ sensorName = item[item.rfind("/") + 1 :]
+ sensor_params[item] = {
+ "sensorName": sensorName,
+ "sensorReadingType": sensorReadingType,
+ "sensorType": sensorType,
+ }
+ return sensor_params
+
+
+def main():
+ app_description = "Convert sensor yaml to json."
+
+ parser = argparse.ArgumentParser(
+ description=app_description,
+ formatter_class=argparse.RawDescriptionHelpFormatter,
+ )
+ parser.add_argument(
+ "-i",
+ "--sensor_yaml",
+ dest="sensor_yaml",
+ nargs="*",
+ type=str,
+ default=[],
+ help="input sensor yaml file list to parse",
+ )
+ parser.add_argument(
+ "-o",
+ "--output-dir",
+ dest="outputdir",
+ help="The directory of json file",
+ )
+ parser.add_argument(
+ "-f",
+ "--override-flag",
+ dest="override",
+ default="",
+ help="override flag",
+ )
+ args = parser.parse_args()
+
+ if not args.override and len(args.sensor_yaml) > 1:
+ raise RuntimeError(
+ "Not support multi machine, but there are multi sensor yamls"
+ )
+ total_sensor_params = {}
+
+ for yaml_file in args.sensor_yaml:
+ with open(yaml_file, "r") as y:
+ sensors = yaml.safe_load(y)
+ sensors = [i for i in sensors.values()]
+ sensor_params = {}
+ for s in sensors:
+ sensor_params = getSensorParams(s, sensor_params)
+ for sensor_param in sensor_params:
+ # if the sensor is already in the total_sensor_params, check the value is must same
+ if sensor_param in total_sensor_params:
+ if (
+ total_sensor_params[sensor_param]
+ != sensor_params[sensor_param]
+ ):
+ raise RuntimeError(
+ "The sensor is already in the total_sensor_params, but the value is different"
+ )
+ else:
+ total_sensor_params[sensor_param] = sensor_params[
+ sensor_param
+ ]
+ output_json = os.path.join(args.outputdir, "sensor-data-record.json")
+ with open(output_json, "w") as j:
+ j.write(
+ json.dumps(
+ total_sensor_params,
+ indent=4,
+ sort_keys=True,
+ separators=(",", ": "),
+ )
+ )
+ j.write("\n")
+
+
+if __name__ == "__main__":
+ main()
--
2.25.1