84 lines
3.4 KiB
Diff
Executable File
84 lines
3.4 KiB
Diff
Executable File
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
|
|
|