public double calcSensorValue()

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;
    }