summaryrefslogtreecommitdiffstats
path: root/sensorhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sensorhandler.cpp')
-rw-r--r--sensorhandler.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/sensorhandler.cpp b/sensorhandler.cpp
index 1d0f4c9..eacc274 100644
--- a/sensorhandler.cpp
+++ b/sensorhandler.cpp
@@ -1,4 +1,5 @@
#include <mapper.h>
+#include <math.h>
#include <stdio.h>
#include <string.h>
#include <bitset>
@@ -556,6 +557,9 @@ ipmi_ret_t ipmi_sen_get_sensor_reading(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
*data_len=0;
+ int64_t raw_value, scale;
+ ipmi::sensor::Info sensor;
+
switch(type) {
case 0xC3:
case 0xC2:
@@ -584,6 +588,58 @@ ipmi_ret_t ipmi_sen_get_sensor_reading(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
resp->indication[1] = 0;
break;
+ case IPMI_SENSOR_TEMP:
+ case IPMI_SENSOR_VOLTAGE:
+ case IPMI_SENSOR_CURRENT:
+ case IPMI_SENSOR_FAN:
+ // Get reading for /xyz/openbmc_project/Sensor/Value.interface
+
+ // Get value
+ r = sd_bus_get_property_trivial(bus,
+ a.bus,
+ a.path,
+ a.interface,
+ "Value",
+ NULL,
+ 'x',
+ &raw_value);
+ if (r < 0) {
+ fprintf(stderr,
+ "Failed to call sd_bus_get_property:%d, %s, 'value'\n",
+ r,
+ strerror(-r));
+ fprintf(stderr, "Bus: %s, Path: %s, Interface: %s\n",
+ a.bus, a.path, a.interface);
+ break;
+ }
+
+ // Get scale
+ r = sd_bus_get_property_trivial(bus,
+ a.bus,
+ a.path,
+ a.interface,
+ "Scale",
+ NULL,
+ 'x',
+ &scale);
+ if (r < 0) {
+ fprintf(stderr,
+ "Failed to call sd_bus_get_property:%d, %s (scale)\n",
+ r,
+ strerror(-r));
+ fprintf(stderr, "Bus: %s, Path: %s, Interface: %s\n",
+ a.bus, a.path, a.interface);
+ break;
+ }
+
+ resp->value = raw_value * pow(10,scale);
+ resp->operation = 0;
+ resp->indication[0] = 0;
+ resp->indication[1] = 0;
+ rc = IPMI_CC_OK;
+ *data_len=sizeof(sensorreadingresp_t);
+ break;
+
default:
*data_len=0;
rc = IPMI_CC_SENSOR_INVALID;
OpenPOWER on IntegriCloud