can-log-tools/reader/src/test/java/com/rusefi/can/reader/impl/GetValueFromTrcTest.java

88 lines
3.0 KiB
Java
Raw Normal View History

2022-06-20 14:38:30 -07:00
package com.rusefi.can.reader.impl;
2022-06-20 18:29:27 -07:00
import com.rusefi.can.CANPacket;
2024-03-16 18:56:54 -07:00
import com.rusefi.can.reader.dbc.DbcPacket;
2022-11-12 09:29:20 -08:00
import com.rusefi.mlv.LoggingStrategy;
2022-06-20 18:29:27 -07:00
import com.rusefi.can.reader.dbc.DbcField;
2022-06-20 14:38:30 -07:00
import com.rusefi.can.reader.dbc.DbcFile;
import org.junit.Test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
2022-08-16 22:01:48 -07:00
import static com.rusefi.can.reader.impl.ParseDBCTest.VAG_MOTOR_1;
2022-06-22 00:19:09 -07:00
import static junit.framework.TestCase.assertNull;
2024-02-15 20:18:54 -08:00
import static org.junit.Assert.*;
2022-06-20 14:38:30 -07:00
2024-02-15 20:18:54 -08:00
public class GetValueFromTrcTest {
2022-06-20 18:49:31 -07:00
public static final double EPS = 0.01;
2024-02-15 20:18:54 -08:00
private static int getBitIndex(byte[] data, int bitIndex, int bitWidth) {
return DbcField.getBitRange(data, bitIndex, bitWidth, false);
}
@Test
public void testBigEndian() {
2024-02-15 21:31:00 -08:00
byte[] rpm = {(byte) 0x70, 0x04, 0x1F};
assertEquals(0x41f, DbcField.getBitRange(rpm, 16, 16, true));
2024-02-15 22:18:03 -08:00
byte[] torque = {0x68, 0x07};
assertEquals(0x807, DbcField.getBitRange(torque, 8, 13, true));
2024-02-15 21:25:15 -08:00
byte[] data = {(byte) 0xAB, 0x56, 0x34};
2024-02-15 21:31:00 -08:00
2024-02-15 20:18:54 -08:00
assertEquals(0x56AB, DbcField.getBitRange(data, 0, 16, false));
assertEquals(0xAB56, DbcField.getBitRange(data, 8, 16, true));
assertEquals(0xAB, DbcField.getBitRange(data, 0, 8, false));
assertEquals(0xAB, DbcField.getBitRange(data, 0, 8, true));
assertEquals(0x56, DbcField.getBitRange(data, 8, 8, false));
assertEquals(0x56, DbcField.getBitRange(data, 8, 8, true));
2024-02-15 21:25:15 -08:00
// yes we have a defect for sure, we only touch two bytes at most while in this case we shall touch three bytes
assertEquals(0x56A, DbcField.getBitRange(data, 4, 16, false));
2024-02-15 20:18:54 -08:00
}
2022-06-20 14:38:30 -07:00
@Test
public void test() throws IOException {
2022-09-12 23:01:23 -07:00
DbcFile dbc = new DbcFile(LoggingStrategy.LOG_ONLY_TRANSLATED_FIELDS);
2022-06-20 18:29:27 -07:00
{
BufferedReader reader = new BufferedReader(new StringReader(VAG_MOTOR_1));
dbc.read(reader);
}
2024-03-16 18:56:54 -07:00
DbcPacket packet640 = dbc.findPacket(640);
assertNotNull(packet640);
DbcField byte1 = packet640.getFieldAtByte(1);
assertNotNull(byte1);
assertEquals("inneres_Motor_Moment", byte1.getName());
DbcField byte4 = packet640.getFieldAtByte(4);
assertNotNull(byte4);
2022-06-22 00:19:09 -07:00
assertNull(dbc.findPacket(1640));
2022-06-20 14:38:30 -07:00
String trcLine = " 3769) 2117.7 Rx 0280 8 01 1D DF 12 1E 00 1A 1E ";
2022-11-12 19:13:12 -08:00
PcanTrcReader1_1 reader = new PcanTrcReader1_1();
2022-06-20 18:29:27 -07:00
CANPacket packet = reader.readLine(trcLine);
assertEquals(8, packet.getData().length);
assertEquals(640, packet.getId());
2024-02-15 20:18:54 -08:00
assertEquals(0x12DF, getBitIndex(packet.getData(), 16, 16));
assertEquals(0xDF1D, getBitIndex(packet.getData(), 8, 16));
2022-06-20 18:29:27 -07:00
2024-02-15 20:18:54 -08:00
assertEquals(1, getBitIndex(packet.getData(), 0, 3));
2022-06-20 18:29:27 -07:00
2024-02-15 20:18:54 -08:00
assertEquals(0x1D, getBitIndex(packet.getData(), 8, 8));
assertEquals(13, getBitIndex(packet.getData(), 8, 4));
2022-06-20 18:29:27 -07:00
2022-09-12 23:01:23 -07:00
DbcField bf = dbc.getPacketByIndexSlow(0).find("rpm");
2022-06-20 18:49:31 -07:00
assertEquals(1207.75, bf.getValue(packet), EPS);
2022-06-20 18:29:27 -07:00
System.out.println(packet);
2022-06-20 14:38:30 -07:00
}
}