2022-02-02 16:48:51 -08:00
|
|
|
package com.rusefi.can.reader;
|
|
|
|
|
|
|
|
import com.rusefi.can.CANPacket;
|
|
|
|
|
2022-02-02 19:37:29 -08:00
|
|
|
import java.io.IOException;
|
|
|
|
import java.nio.file.Files;
|
|
|
|
import java.nio.file.Paths;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.function.Consumer;
|
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
|
|
public class CANoeReader implements CANLineReader {
|
|
|
|
@Override
|
2022-02-02 16:48:51 -08:00
|
|
|
public CANPacket readLine(String line) {
|
2022-02-02 19:37:29 -08:00
|
|
|
if (line.contains("ErrorFrame"))
|
|
|
|
return null;
|
|
|
|
String[] tokens = line.trim().split("\\s+");
|
2022-02-02 16:48:51 -08:00
|
|
|
|
|
|
|
double timeStamp = Double.parseDouble(tokens[0]);
|
|
|
|
|
|
|
|
int sid = Integer.parseInt(tokens[2], 16);
|
|
|
|
int counter = Integer.parseInt(tokens[5]);
|
|
|
|
|
|
|
|
byte[] data = new byte[counter];
|
|
|
|
for (int i = 0; i < counter; i++)
|
|
|
|
data[i] = (byte) Integer.parseInt(tokens[6 + i], 16);
|
|
|
|
return new CANPacket(timeStamp, sid, data);
|
2022-02-02 19:37:29 -08:00
|
|
|
}
|
2022-02-02 16:48:51 -08:00
|
|
|
|
2022-02-02 19:37:29 -08:00
|
|
|
public List<CANPacket> readFile(String fileName) throws IOException {
|
|
|
|
List<CANPacket> result = new ArrayList<>();
|
|
|
|
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
|
|
|
|
stream.forEach(new Consumer<String>() {
|
|
|
|
int index = 0;
|
2022-02-02 16:48:51 -08:00
|
|
|
|
2022-02-02 19:37:29 -08:00
|
|
|
@Override
|
|
|
|
public void accept(String s) {
|
|
|
|
if (index++ < 5)
|
|
|
|
return;
|
|
|
|
CANPacket packet = readLine(s);
|
|
|
|
if (packet != null)
|
|
|
|
result.add(packet);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return result;
|
|
|
|
}
|
2022-02-02 16:48:51 -08:00
|
|
|
}
|
|
|
|
}
|