mirror of https://github.com/rusefi/rusefi.git
32 lines
1011 B
Java
32 lines
1011 B
Java
package com.rusefi.core;
|
|
|
|
import java.nio.ByteBuffer;
|
|
|
|
import static com.rusefi.core.FileUtil.littleEndianWrap;
|
|
|
|
public interface ISensorHolder {
|
|
default void grabSensorValues(byte[] response) {
|
|
for (Sensor sensor : Sensor.values()) {
|
|
if (sensor.getType() == null) {
|
|
// for example ETB_CONTROL_QUALITY, weird use-case
|
|
continue;
|
|
}
|
|
|
|
int offset = 1 + sensor.getOffset();
|
|
int size = 4;
|
|
if (offset + size > response.length) {
|
|
throw new IllegalArgumentException(sensor + String.format(" but %d+%d in %d", offset, size, response.length));
|
|
}
|
|
ByteBuffer bb = littleEndianWrap(response, offset, size);
|
|
|
|
double rawValue = sensor.getValueForChannel(bb);
|
|
double scaledValue = rawValue * sensor.getScale();
|
|
setValue(scaledValue, sensor);
|
|
}
|
|
}
|
|
|
|
double getValue(Sensor sensor);
|
|
|
|
boolean setValue(double value, Sensor sensor);
|
|
}
|