/
DataController.java
58 lines (47 loc) · 1.69 KB
/
DataController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package sample;
import com.fazecast.jSerialComm.SerialPort;
import com.fazecast.jSerialComm.SerialPortEvent;
import com.fazecast.jSerialComm.SerialPortMessageListenerWithExceptions;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.chart.XYChart;
import java.nio.ByteBuffer;
public class DataController implements SerialPortMessageListenerWithExceptions {
private static final byte[] DELIMITER = new byte[]{'\n'};
private final ObservableList<XYChart.Data<Number, Number>> dataPoints;
//Recieves byte data from input stream
public DataController() {
this.dataPoints = FXCollections.observableArrayList();
}
public ObservableList<XYChart.Data<Number, Number>> getDataPoints() {
return dataPoints;
}
@Override
public int getListeningEvents() {
return SerialPort.LISTENING_EVENT_DATA_RECEIVED;
}
@Override
public void serialEvent(SerialPortEvent serialPortEvent) {
if(serialPortEvent.getEventType() != SerialPort.LISTENING_EVENT_DATA_RECEIVED){
return;
}
var data = serialPortEvent.getReceivedData();
var value = ByteBuffer.wrap(data).getInt();
var time = System.currentTimeMillis();
var dataPoint = new XYChart.Data<Number, Number>(time, value);
Platform.runLater(() -> this.dataPoints.add(dataPoint));
}
@Override
public void catchException(Exception e) {
e.printStackTrace();
}
@Override
public byte[] getMessageDelimiter() {
return DELIMITER;
}
@Override
public boolean delimiterIndicatesEndOfMessage() {
return true;
}
}