platform-mc: Refactor units and range field PDR decode
The conversion based on range_field_format and sensor_data_size
was duplicated across each of the fields. This change adds
helper functions and thus helping with reducing some of the
duplicated code.
Change-Id: I70a5477d6743b250aea55249ccb27d2459f044e5
Signed-off-by: Amithash Prasad <amithash@meta.com>
diff --git a/platform-mc/numeric_sensor.cpp b/platform-mc/numeric_sensor.cpp
index da468b3..0c40f2c 100644
--- a/platform-mc/numeric_sensor.cpp
+++ b/platform-mc/numeric_sensor.cpp
@@ -40,6 +40,65 @@
return true;
}
+inline double getSensorDataValue(uint8_t sensor_data_size,
+ union_sensor_data_size& value)
+{
+ double ret = std::numeric_limits<double>::quiet_NaN();
+ switch (sensor_data_size)
+ {
+ case PLDM_SENSOR_DATA_SIZE_UINT8:
+ ret = value.value_u8;
+ break;
+ case PLDM_SENSOR_DATA_SIZE_SINT8:
+ ret = value.value_s8;
+ break;
+ case PLDM_SENSOR_DATA_SIZE_UINT16:
+ ret = value.value_u16;
+ break;
+ case PLDM_SENSOR_DATA_SIZE_SINT16:
+ ret = value.value_s16;
+ break;
+ case PLDM_SENSOR_DATA_SIZE_UINT32:
+ ret = value.value_u32;
+ break;
+ case PLDM_SENSOR_DATA_SIZE_SINT32:
+ ret = value.value_s32;
+ break;
+ }
+ return ret;
+}
+
+inline double getRangeFieldValue(uint8_t range_field_format,
+ union_range_field_format& value)
+{
+ double ret = std::numeric_limits<double>::quiet_NaN();
+ switch (range_field_format)
+ {
+ case PLDM_RANGE_FIELD_FORMAT_UINT8:
+ ret = value.value_u8;
+ break;
+ case PLDM_RANGE_FIELD_FORMAT_SINT8:
+ ret = value.value_s8;
+ break;
+ case PLDM_RANGE_FIELD_FORMAT_UINT16:
+ ret = value.value_u16;
+ break;
+ case PLDM_RANGE_FIELD_FORMAT_SINT16:
+ ret = value.value_s16;
+ break;
+ case PLDM_RANGE_FIELD_FORMAT_UINT32:
+ ret = value.value_u32;
+ break;
+ case PLDM_RANGE_FIELD_FORMAT_SINT32:
+ ret = value.value_s32;
+ break;
+ case PLDM_RANGE_FIELD_FORMAT_REAL32:
+ ret = value.value_f32;
+ break;
+ }
+ return ret;
+}
+
void NumericSensor::setSensorUnit(uint8_t baseUnit)
{
sensorUnit = SensorUnit::DegreesC;
@@ -148,42 +207,11 @@
associationDefinitionsIntf->associations(
{{"chassis", "all_sensors", associationPath}});
- double maxValue = std::numeric_limits<double>::quiet_NaN();
- double minValue = std::numeric_limits<double>::quiet_NaN();
-
- switch (pdr->sensor_data_size)
- {
- case PLDM_SENSOR_DATA_SIZE_UINT8:
- maxValue = pdr->max_readable.value_u8;
- minValue = pdr->min_readable.value_u8;
- hysteresis = pdr->hysteresis.value_u8;
- break;
- case PLDM_SENSOR_DATA_SIZE_SINT8:
- maxValue = pdr->max_readable.value_s8;
- minValue = pdr->min_readable.value_s8;
- hysteresis = pdr->hysteresis.value_s8;
- break;
- case PLDM_SENSOR_DATA_SIZE_UINT16:
- maxValue = pdr->max_readable.value_u16;
- minValue = pdr->min_readable.value_u16;
- hysteresis = pdr->hysteresis.value_u16;
- break;
- case PLDM_SENSOR_DATA_SIZE_SINT16:
- maxValue = pdr->max_readable.value_s16;
- minValue = pdr->min_readable.value_s16;
- hysteresis = pdr->hysteresis.value_s16;
- break;
- case PLDM_SENSOR_DATA_SIZE_UINT32:
- maxValue = pdr->max_readable.value_u32;
- minValue = pdr->min_readable.value_u32;
- hysteresis = pdr->hysteresis.value_u32;
- break;
- case PLDM_SENSOR_DATA_SIZE_SINT32:
- maxValue = pdr->max_readable.value_s32;
- minValue = pdr->min_readable.value_s32;
- hysteresis = pdr->hysteresis.value_s32;
- break;
- }
+ double maxValue =
+ getSensorDataValue(pdr->sensor_data_size, pdr->max_readable);
+ double minValue =
+ getSensorDataValue(pdr->sensor_data_size, pdr->min_readable);
+ hysteresis = getSensorDataValue(pdr->sensor_data_size, pdr->hysteresis);
bool hasCriticalThresholds = false;
bool hasWarningThresholds = false;
@@ -195,117 +223,29 @@
if (pdr->supported_thresholds.bits.bit0)
{
hasWarningThresholds = true;
- switch (pdr->range_field_format)
- {
- case PLDM_RANGE_FIELD_FORMAT_UINT8:
- warningHigh = pdr->warning_high.value_u8;
- break;
- case PLDM_RANGE_FIELD_FORMAT_SINT8:
- warningHigh = pdr->warning_high.value_s8;
- break;
- case PLDM_RANGE_FIELD_FORMAT_UINT16:
- warningHigh = pdr->warning_high.value_u16;
- break;
- case PLDM_RANGE_FIELD_FORMAT_SINT16:
- warningHigh = pdr->warning_high.value_s16;
- break;
- case PLDM_RANGE_FIELD_FORMAT_UINT32:
- warningHigh = pdr->warning_high.value_u32;
- break;
- case PLDM_RANGE_FIELD_FORMAT_SINT32:
- warningHigh = pdr->warning_high.value_s32;
- break;
- case PLDM_RANGE_FIELD_FORMAT_REAL32:
- warningHigh = pdr->warning_high.value_f32;
- break;
- }
+ warningHigh =
+ getRangeFieldValue(pdr->range_field_format, pdr->warning_high);
}
if (pdr->supported_thresholds.bits.bit3)
{
hasWarningThresholds = true;
- switch (pdr->range_field_format)
- {
- case PLDM_RANGE_FIELD_FORMAT_UINT8:
- warningLow = pdr->warning_low.value_u8;
- break;
- case PLDM_RANGE_FIELD_FORMAT_SINT8:
- warningLow = pdr->warning_low.value_s8;
- break;
- case PLDM_RANGE_FIELD_FORMAT_UINT16:
- warningLow = pdr->warning_low.value_u16;
- break;
- case PLDM_RANGE_FIELD_FORMAT_SINT16:
- warningLow = pdr->warning_low.value_s16;
- break;
- case PLDM_RANGE_FIELD_FORMAT_UINT32:
- warningLow = pdr->warning_low.value_u32;
- break;
- case PLDM_RANGE_FIELD_FORMAT_SINT32:
- warningLow = pdr->warning_low.value_s32;
- break;
- case PLDM_RANGE_FIELD_FORMAT_REAL32:
- warningLow = pdr->warning_low.value_f32;
- break;
- }
+ warningLow =
+ getRangeFieldValue(pdr->range_field_format, pdr->warning_low);
}
if (pdr->supported_thresholds.bits.bit1)
{
hasCriticalThresholds = true;
- switch (pdr->range_field_format)
- {
- case PLDM_RANGE_FIELD_FORMAT_UINT8:
- criticalHigh = pdr->critical_high.value_u8;
- break;
- case PLDM_RANGE_FIELD_FORMAT_SINT8:
- criticalHigh = pdr->critical_high.value_s8;
- break;
- case PLDM_RANGE_FIELD_FORMAT_UINT16:
- criticalHigh = pdr->critical_high.value_u16;
- break;
- case PLDM_RANGE_FIELD_FORMAT_SINT16:
- criticalHigh = pdr->critical_high.value_s16;
- break;
- case PLDM_RANGE_FIELD_FORMAT_UINT32:
- criticalHigh = pdr->critical_high.value_u32;
- break;
- case PLDM_RANGE_FIELD_FORMAT_SINT32:
- criticalHigh = pdr->critical_high.value_s32;
- break;
- case PLDM_RANGE_FIELD_FORMAT_REAL32:
- criticalHigh = pdr->critical_high.value_f32;
- break;
- }
+ criticalHigh =
+ getRangeFieldValue(pdr->range_field_format, pdr->critical_high);
}
if (pdr->supported_thresholds.bits.bit4)
{
hasCriticalThresholds = true;
- switch (pdr->range_field_format)
- {
- case PLDM_RANGE_FIELD_FORMAT_UINT8:
- criticalLow = pdr->critical_low.value_u8;
- break;
- case PLDM_RANGE_FIELD_FORMAT_SINT8:
- criticalLow = pdr->critical_low.value_s8;
- break;
- case PLDM_RANGE_FIELD_FORMAT_UINT16:
- criticalLow = pdr->critical_low.value_u16;
- break;
- case PLDM_RANGE_FIELD_FORMAT_SINT16:
- criticalLow = pdr->critical_low.value_s16;
- break;
- case PLDM_RANGE_FIELD_FORMAT_UINT32:
- criticalLow = pdr->critical_low.value_u32;
- break;
- case PLDM_RANGE_FIELD_FORMAT_SINT32:
- criticalLow = pdr->critical_low.value_s32;
- break;
- case PLDM_RANGE_FIELD_FORMAT_REAL32:
- criticalLow = pdr->critical_low.value_f32;
- break;
- }
+ criticalLow =
+ getRangeFieldValue(pdr->range_field_format, pdr->critical_low);
}
resolution = pdr->resolution;