Files
OpenBMC/meta-luxshare/meta-bhs/recipes-phosphor/configuration/entity-manager/0001-Add-Status-interface-to-settableInterfaces.patch
T

84 lines
3.4 KiB
Diff
Raw Normal View History

2026-04-23 17:07:55 +08:00
From 8d85b0f37638c606e195753553fe21cbe8663cd1 Mon Sep 17 00:00:00 2001
From: wangjue <jue.wang2@luxshare-ict.com>
Date: Tue, 15 Oct 2024 18:42:41 +0800
Subject: [PATCH] Add Status interface to settableInterfaces
Signed-off-by: wangjue <jue.wang2@luxshare-ict.com>
%% original patch: 0001-Add-Status-interface-to-settableInterfaces.patch
---
src/entity_manager.cpp | 36 +++++++++++++++++++++++++++++++-----
1 file changed, 31 insertions(+), 5 deletions(-)
diff --git a/src/entity_manager.cpp b/src/entity_manager.cpp
index ee08c00..24da084 100644
--- a/src/entity_manager.cpp
+++ b/src/entity_manager.cpp
@@ -52,6 +52,9 @@ constexpr const char* tempConfigDir = "/tmp/configuration/";
constexpr const char* lastConfiguration = "/tmp/configuration/last.json";
constexpr const char* currentConfiguration = "/var/configuration/system.json";
constexpr const char* globalSchema = "global.json";
+constexpr auto configIfaceName = "xyz.openbmc_project.Configuration.Status";
+constexpr auto statusPropName = "Status";
+bool internalSet = false;
const boost::container::flat_map<const char*, probe_type_codes, CmpStr>
probeTypes{{{"FALSE", probe_type_codes::FALSE_T},
@@ -61,8 +64,8 @@ const boost::container::flat_map<const char*, probe_type_codes, CmpStr>
{"FOUND", probe_type_codes::FOUND},
{"MATCH_ONE", probe_type_codes::MATCH_ONE}}};
-static constexpr std::array<const char*, 6> settableInterfaces = {
- "FanProfile", "Pid", "Pid.Zone", "Stepwise", "Thresholds", "Polling"};
+static constexpr std::array<const char*, 9> settableInterfaces = {
+ "FanProfile", "Pid", "Pid.Zone", "Stepwise", "Thresholds", "Polling", "Status", "Description", "Health"};
using JsonVariantType =
std::variant<std::vector<std::string>, std::vector<double>, std::string,
int64_t, uint64_t, double, int32_t, uint32_t, int16_t,
@@ -216,9 +219,31 @@ void addProperty(const std::string& name, const PropertyType& value,
iface->register_property(
name, value,
[&systemConfiguration,
- jsonPointerString{std::string(jsonPointerString)}](
- const PropertyType& newVal, PropertyType& val) {
- val = newVal;
+ jsonPointerString{std::string(jsonPointerString)},
+ interface = iface->get_interface_name(),
+ propertyName = name](const PropertyType& newVal, PropertyType& val) {
+ // if set from external source, for status property, only
+ // keep the bits 0..15
+ if (!internalSet && interface == configIfaceName &&
+ propertyName == statusPropName)
+ {
+ if constexpr (std::is_same_v<PropertyType, double>)
+ {
+ auto tmp = static_cast<uint32_t>(newVal);
+ tmp &= 0xFFFF;
+ val = static_cast<double>(
+ (static_cast<uint32_t>(val) & ~0xFFFF) | tmp);
+ }
+ else
+ {
+ val = newVal;
+ }
+ }
+ else
+ {
+ val = newVal;
+ }
+
if (!setJsonFromPointer(jsonPointerString, val, systemConfiguration))
{
std::cerr << "error setting json field\n";
@@ -1280,6 +1305,7 @@ int main()
entityIface->register_method("ReScan", [&]() {
propertiesChangedCallback(systemConfiguration, objServer);
});
+
entityIface->initialize();
if (fwVersionIsSame())
--
2.34.1