in hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/client/handler/SensorHandler.java [103:135]
public double calcSensorValue(GetSdrResponse response, int raw) {
switch (response.analogDataFormat) {
case 0x00 -> raw = raw & 0xFF;
case 0x01 -> {
int signbit = raw & 0x80;
if (signbit != 0) {
raw = ~raw & 0x7F;
raw = -raw;
}
}
case 0x02 -> raw = ByteConvertUtils.getBitsAsSigned(raw, 8);
default -> {
return 0.0;
}
}
double value = (response.m * raw + response.b * Math.pow(10, response.k1)) * Math.pow(10, response.k2);
switch (response.linear) {
case 0x01 -> value = Math.log(value);
case 0x02 -> value = Math.log10(value);
case 0x03 -> value = Math.log(value) / Math.log(2);
case 0x04 -> value = Math.exp(value);
case 0x05 -> value = Math.pow(10, value);
case 0x06 -> value = Math.pow(2, value);
case 0x07 -> value = Math.pow(value, -1.0);
case 0x08 -> value = Math.pow(value, 2.0);
case 0x09 -> value = Math.pow(value, 3.0);
case 0x0A -> value = Math.sqrt(value);
case 0x0B -> value = Math.cbrt(value);
default -> {
}
}
return value;
}