OSDN Git Service

1秒おきのサマリーデータを表示するようにした。
[gokigen/BLEControl.git] / app / src / main / java / net / osdn / gokigen / blecontrol / lib / data / brainwave / BrainwaveDataHolder.java
1 package net.osdn.gokigen.blecontrol.lib.data.brainwave;
2
3 import android.util.Log;
4
5 import androidx.annotation.NonNull;
6 import androidx.annotation.Nullable;
7
8 import net.osdn.gokigen.blecontrol.lib.ui.brainwave.IBrainwaveDataDrawer;
9
10 import java.util.Arrays;
11
12 public class BrainwaveDataHolder implements IBrainwaveDataReceiver
13 {
14     private final String TAG = toString();
15
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;
22
23     public BrainwaveDataHolder(@NonNull IBrainwaveDataDrawer dataDrawer, int maxBufferSize)
24     {
25         this.dataDrawer = dataDrawer;
26         this.maxBufferSize = maxBufferSize;
27
28         valueBuffer = new int[maxBufferSize];
29         currentPosition = 0;
30
31         currentSummaryData = new BrainwaveSummaryData();
32     }
33
34     @Override
35     public void receivedRawData(int value)
36     {
37         //Log.v(TAG, " receivedRawData() : " + value);
38         try
39         {
40             valueBuffer[currentPosition] = value;
41             currentPosition++;
42             if (currentPosition == maxBufferSize)
43             {
44                 currentPosition = 0;
45                 bufferIsFull = true;
46             }
47         }
48         catch (Exception e)
49         {
50             e.printStackTrace();
51         }
52         dataDrawer.drawGraph();
53     }
54
55     @Override
56     public void receivedSummaryData(byte[] data)
57     {
58         if (!currentSummaryData.update(data))
59         {
60             // parse failure...
61             Log.v(TAG, " FAIL : PARSE EEG SUMMARY DATA (" + data.length + ")");
62         }
63     }
64
65     public @NonNull BrainwaveSummaryData getSummaryData()
66     {
67         return (currentSummaryData);
68     }
69
70     public @Nullable int[] getValues(int size)
71     {
72         int [] replyData = null;
73         try
74         {
75             int endPosition = currentPosition - 1;
76             if (currentPosition > size)
77             {
78                 return (Arrays.copyOfRange(valueBuffer, (endPosition - size), endPosition));
79             }
80             if (!bufferIsFull)
81             {
82                 return (Arrays.copyOfRange(valueBuffer, 0, endPosition));
83             }
84
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));
88
89             replyData = new int[size];
90
91             System.arraycopy(size0, 0, replyData, 0, size0.length);
92             System.arraycopy(size1, 0, replyData, size0.length, size1.length);
93         }
94         catch (Exception e)
95         {
96             e.printStackTrace();
97         }
98         return (replyData);
99     }
100 }