1 package net.osdn.gokigen.blecontrol.lib.data.brainwave;
3 import android.util.Log;
5 import androidx.annotation.NonNull;
6 import androidx.annotation.Nullable;
8 import net.osdn.gokigen.blecontrol.lib.ui.brainwave.IBrainwaveDataDrawer;
10 import java.util.Arrays;
12 public class BrainwaveDataHolder implements IBrainwaveDataReceiver
14 private final String TAG = toString();
16 private final IBrainwaveDataDrawer dataDrawer;
17 private int[] valueBuffer;
18 private BrainwaveSummaryData currentSummaryData;
19 private int maxBufferSize;
20 private int currentPosition;
21 private boolean bufferIsFull = false;
23 public BrainwaveDataHolder(@NonNull IBrainwaveDataDrawer dataDrawer, int maxBufferSize)
25 this.dataDrawer = dataDrawer;
26 this.maxBufferSize = maxBufferSize;
28 valueBuffer = new int[maxBufferSize];
31 currentSummaryData = new BrainwaveSummaryData();
35 public void receivedRawData(int value)
37 //Log.v(TAG, " receivedRawData() : " + value);
40 valueBuffer[currentPosition] = value;
42 if (currentPosition == maxBufferSize)
52 dataDrawer.drawGraph();
56 public void receivedSummaryData(byte[] data)
58 if (!currentSummaryData.update(data))
61 Log.v(TAG, " FAIL : PARSE EEG SUMMARY DATA (" + data.length + ")");
65 public @NonNull BrainwaveSummaryData getSummaryData()
67 return (currentSummaryData);
70 public @Nullable int[] getValues(int size)
72 int [] replyData = null;
75 int endPosition = currentPosition - 1;
76 if (currentPosition > size)
78 return (Arrays.copyOfRange(valueBuffer, (endPosition - size), endPosition));
82 return (Arrays.copyOfRange(valueBuffer, 0, endPosition));
85 int remainSize = size - (currentPosition - 1);
86 int [] size0 = Arrays.copyOfRange(valueBuffer, 0, (currentPosition - 1));
87 int [] size1 = Arrays.copyOfRange(valueBuffer, ((maxBufferSize - 1) - remainSize), (maxBufferSize - 1));
89 replyData = new int[size];
91 System.arraycopy(size0, 0, replyData, 0, size0.length);
92 System.arraycopy(size1, 0, replyData, size0.length, size1.length);