can-log-tools/reader/src/main/java/com/rusefi/can/deprecated/decoders/bmw/Bmw0BA.java

47 lines
1.3 KiB
Java

package com.rusefi.can.deprecated.decoders.bmw;
import com.rusefi.can.CANPacket;
import com.rusefi.can.SensorValue;
import com.rusefi.can.deprecated.PacketPayload;
import com.rusefi.can.deprecated.SensorType;
import com.rusefi.can.deprecated.decoders.AbstractPacketDecoder;
public class Bmw0BA extends AbstractPacketDecoder {
public static final int ID = 0x0BA;
public static final Bmw0BA INSTANCE = new Bmw0BA();
public static int GEAR_UNKNOWN = -3;
public static int GEAR_R = -2;
public static int GEAR_P = -1;
public static int GEAR_N = 0;
private Bmw0BA() {
super(ID);
}
@Override
public PacketPayload decode(CANPacket packet) {
int gearBits = packet.getUnsignedInt(0) & 0xF;
int gear;
if (gearBits == 1) {
gear = GEAR_N;
} else if (gearBits == 2) {
gear = GEAR_R;
} else if (gearBits == 3) {
gear = GEAR_P;
} else if (gearBits == 0xF) {
gear = GEAR_UNKNOWN;
} else if (gearBits >= 5 && gearBits <= 0xA) {
/* gears 1 to 6 */
gear = gearBits - 4;
} else {
throw unexpected("gear bits", packet);
}
if (gear == GEAR_UNKNOWN)
return null;
return new PacketPayload(0, new SensorValue(SensorType.GEAR, gear));
}
}