diff --git a/reader/src/main/java/com/rusefi/can/reader/dbc/DbcField.java b/reader/src/main/java/com/rusefi/can/reader/dbc/DbcField.java index 1022d4f..ebbc670 100644 --- a/reader/src/main/java/com/rusefi/can/reader/dbc/DbcField.java +++ b/reader/src/main/java/com/rusefi/can/reader/dbc/DbcField.java @@ -149,8 +149,18 @@ public class DbcField { public boolean coversByte(int byteIndex) { int startBit = byteIndex * 8; - if (isBigEndian && /* byte endianess less important for one byte fields */ length > 8) - startBit += 8; + + if (isBigEndian) { + if (!DbcFile.compatibilityWithBrokenRusEfiLogic) { + startBit = DbcField.crazyMotorolaMath(startBit, length, true); + + } else { + if (/* byte endianess less important for one byte fields */ length > 8) { + startBit += 8; + } + } + } + if (startOffset > startBit) return false; return startOffset + length >= startBit + 8; diff --git a/reader/src/test/java/com/rusefi/can/reader/dbc/DbcFieldTest.java b/reader/src/test/java/com/rusefi/can/reader/dbc/DbcFieldTest.java index b248790..33c7f74 100644 --- a/reader/src/test/java/com/rusefi/can/reader/dbc/DbcFieldTest.java +++ b/reader/src/test/java/com/rusefi/can/reader/dbc/DbcFieldTest.java @@ -10,12 +10,13 @@ public class DbcFieldTest { @Test public void testBigEndian() { { + // todo: sorry I do not trust this test :( compatibilityWithBrokenRusEfiLogic = false; DbcField field = create(true); + assertFalse(field.coversByte(0)); assertFalse(field.coversByte(1)); assertFalse(field.coversByte(2)); - assertTrue(field.coversByte(3)); - assertFalse(field.coversByte(0)); + assertFalse(field.coversByte(3)); } { compatibilityWithBrokenRusEfiLogic = true; @@ -28,7 +29,11 @@ public class DbcFieldTest { } private static DbcField create(boolean isBigEndian) { - return new DbcField("", 8, 16, 1, 0, null, isBigEndian); + int startBit = 8; + int length = 16; + + startBit = DbcField.crazyMotorolaMath(startBit, length, isBigEndian); + return new DbcField("", startBit, length, 1, 0, null, isBigEndian); } @Test diff --git a/reader/src/test/java/com/rusefi/can/reader/impl/ParseDBCTest.java b/reader/src/test/java/com/rusefi/can/reader/impl/ParseDBCTest.java index e9a2a02..af5ad31 100644 --- a/reader/src/test/java/com/rusefi/can/reader/impl/ParseDBCTest.java +++ b/reader/src/test/java/com/rusefi/can/reader/impl/ParseDBCTest.java @@ -123,7 +123,6 @@ public class ParseDBCTest { DbcFile dbc = new DbcFile(false); - DbcFile.compatibilityWithBrokenRusEfiLogic = false; dbc.read(reader); assertEquals(dbc.packets.size(), 1); @@ -136,14 +135,11 @@ public class ParseDBCTest { @Test public void crazyMotorola() { - DbcFile.compatibilityWithBrokenRusEfiLogic = false; assertEquals(24, DbcField.crazyMotorolaMath(27, 4, true)); assertEquals(24, DbcField.crazyMotorolaMath(30, 7, true)); assertEquals(24, DbcField.crazyMotorolaMath(31, 8, true)); assertEquals(24, DbcField.crazyMotorolaMath(17, 10, true)); assertEquals(24, DbcField.crazyMotorolaMath(17, 10, true)); - - } }