Skip to content

Commit 09fb410

Browse files
committed
update on shimmerjavaclass for getformatcluster
1 parent 2bdc27a commit 09fb410

2 files changed

Lines changed: 67 additions & 24 deletions

File tree

ShimmerDriver/src/main/java/com/shimmerresearch/driver/ObjectCluster.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,15 @@ public double getFormatClusterValue(ChannelDetails channelDetails, CHANNEL_TYPE
247247
return getFormatClusterValue(channelDetails.mObjectClusterName, channelType.toString());
248248
}
249249

250+
public FormatCluster getFormatCluster(String channelName, String format)
251+
{
252+
FormatCluster formatCluster = getLastFormatCluster(channelName, format);
253+
if(formatCluster!=null){
254+
return formatCluster;
255+
}
256+
return null;
257+
}
258+
250259
// public double getFormatClusterValue(ChannelDetails channelDetails, String format){
251260
// return getFormatClusterValue(channelDetails.mObjectClusterName, format);
252261
// }

ShimmerDriverPC/src/main/java/com/shimmerresearch/tools/matlab/ShimmerJavaClass.java

Lines changed: 58 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.awt.event.ActionListener;
55
import java.util.ArrayList;
66
import java.util.LinkedHashMap;
7+
import java.util.LinkedList;
78
import java.util.List;
89
import java.util.Queue;
910
import java.util.concurrent.ConcurrentLinkedQueue;
@@ -19,6 +20,7 @@
1920
import com.shimmerresearch.driver.ObjectCluster;
2021
import com.shimmerresearch.driver.ShimmerMsg;
2122
import com.shimmerresearch.driver.Configuration.COMMUNICATION_TYPE;
23+
import com.shimmerresearch.driver.FormatCluster;
2224
import com.shimmerresearch.driverUtilities.ChannelDetails;
2325
import com.shimmerresearch.exceptions.ShimmerException;
2426
import com.shimmerresearch.pcDriver.ShimmerPC;
@@ -28,19 +30,26 @@ public class ShimmerJavaClass {
2830
private String comPort;
2931
private SensorDataReceived sdr = new SensorDataReceived();
3032
private String[] channelNames;
31-
private final Queue<float[]> dataQueue = new ConcurrentLinkedQueue<float[]>();
33+
private Queue<Object[]> dataQueue = new LinkedList<>();
34+
private List<float[]> collectedData = new ArrayList<>();
35+
private String[] signalNameArray;
36+
private String[] signalFormatArray;
37+
private String[] signalUnitArray;
38+
// private int rowIndex = 0;
39+
Object[] currentData = null;
3240
public static BasicShimmerBluetoothManagerPc mBluetoothManager = new BasicShimmerBluetoothManagerPc();
3341

3442
public ShimmerJavaClass() {
3543
sdr.setWaitForData(mBluetoothManager.callBackObject);
44+
mBluetoothManager.addCallBack(sdr);
45+
System.out.println("Callback Registered");
46+
System.out.flush();
3647
}
3748

3849
public static void main(String[] args) {
3950
ShimmerJavaClass example = new ShimmerJavaClass();
4051
example.createAndShowGUI();
4152
}
42-
43-
4453

4554
public void createAndShowGUI() {
4655
JFrame frame = new JFrame("Shimmer Device Controller");
@@ -122,28 +131,32 @@ public String[] retrieveSensorChannels() {
122131
return channelNamesList.toArray(new String[0]);
123132
}
124133

125-
public float receiveData(String channel) { //Receive data for specific Object Cluster
126-
float[] data = dataQueue.poll();
127-
for (int i = 0; i < channelNames.length; i++) {
128-
if (channelNames[i].equals(channel)) {
129-
return data[i];
130-
}
131-
}
132-
return Float.NaN;
133-
}
134-
135-
public float[] receiveData() { //Receive data for all Object Cluster
136-
float[] data = dataQueue.poll();
137-
return data;
138-
}
134+
public Object[] receiveData() {
135+
while (!dataQueue.isEmpty()) {
136+
Object[] currentData = dataQueue.poll();
137+
138+
float[] newData = (float[]) currentData[0];
139+
signalNameArray = (String[]) currentData[1];
140+
signalFormatArray = (String[]) currentData[2];
141+
signalUnitArray = (String[]) currentData[3];
139142

140-
private void sendData(float[] data) {
143+
collectedData.add(newData);
144+
}
145+
146+
// Convert list to 2D float array (m × n)
147+
float[][] dataMatrix = collectedData.toArray(new float[0][0]);
148+
149+
return new Object[]{dataMatrix, signalNameArray, signalFormatArray, signalUnitArray};
150+
}
151+
152+
private void sendData(Object[] data) {
141153
dataQueue.add(data);
142154
}
143155

144156
public void readData() { //Test receive data for all Object Cluster
145-
float[] data = receiveData();
146-
System.out.println("Timestamp : " + data[4] + "\nAccel_LN_X : " + data[0]);
157+
Object[] data = receiveData();
158+
System.out.println("New Data : " + data[0] + "\tChannel Name : " + data[1]
159+
+ "\tFormat : " + data[2] + "\tUnit : " + data[3]);
147160
}
148161

149162
public class SensorDataReceived extends BasicProcessWithCallBack {
@@ -157,27 +170,48 @@ protected void processMsgFromCallback(ShimmerMsg shimmerMSG) {
157170
CallbackObject callbackObject = (CallbackObject) object;
158171

159172
if (callbackObject.mState == BT_STATE.CONNECTING) {
173+
System.out.println("Device State Change: " + callbackObject.mState);
174+
System.out.flush();
160175

161176
} else if (callbackObject.mState == BT_STATE.CONNECTED) {
177+
System.out.println("Device State Change: " + callbackObject.mState);
178+
System.out.flush();
179+
if (comPort == null) {
180+
comPort = callbackObject.mComPort;
181+
}
162182
channelNames = retrieveSensorChannels();
163183
for(String channel : channelNames) {
164184
System.out.println(channel);
165185
}
166186
} else if (callbackObject.mState == BT_STATE.DISCONNECTED || callbackObject.mState == BT_STATE.CONNECTION_LOST) {
187+
System.out.println("Device State Change: " + callbackObject.mState);
188+
System.out.flush();
167189

168190
}
169191
} else if (ind == ShimmerPC.MSG_IDENTIFIER_NOTIFICATION_MESSAGE) {
170192

171193
} else if (ind == ShimmerPC.MSG_IDENTIFIER_DATA_PACKET) {
172194
ObjectCluster objc = (ObjectCluster) shimmerMSG.mB;
173195

174-
float[] data = new float[channelNames.length];
196+
float[] newData = new float[channelNames.length];
197+
String[] signalNameArray = new String[channelNames.length];
198+
String[] signalFormatArray = new String[channelNames.length];
199+
String[] signalUnitArray = new String[channelNames.length];
200+
175201
for (int i = 0; i < channelNames.length; i++) {
176-
data[i] = (float) objc.getFormatClusterValue(channelNames[i], "CAL");
202+
FormatCluster formatCluster = objc.getFormatCluster(channelNames[i], "CAL");
203+
if (formatCluster != null) {
204+
newData[i] = (float) formatCluster.mData;
205+
signalNameArray[i] = channelNames[i];
206+
signalFormatArray[i] = formatCluster.mFormat;
207+
signalUnitArray[i] = formatCluster.mUnits;
208+
}
177209
}
210+
211+
Object[] outputData = { newData, signalNameArray, signalFormatArray, signalUnitArray };
178212

179-
sendData(data);
213+
sendData(outputData);
180214
}
181215
}
182216
}
183-
}
217+
}

0 commit comments

Comments
 (0)