44import java .awt .event .ActionListener ;
55import java .util .ArrayList ;
66import java .util .LinkedHashMap ;
7+ import java .util .LinkedList ;
78import java .util .List ;
89import java .util .Queue ;
910import java .util .concurrent .ConcurrentLinkedQueue ;
1920import com .shimmerresearch .driver .ObjectCluster ;
2021import com .shimmerresearch .driver .ShimmerMsg ;
2122import com .shimmerresearch .driver .Configuration .COMMUNICATION_TYPE ;
23+ import com .shimmerresearch .driver .FormatCluster ;
2224import com .shimmerresearch .driverUtilities .ChannelDetails ;
2325import com .shimmerresearch .exceptions .ShimmerException ;
2426import 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 ] + "\n Accel_LN_X : " + data [0 ]);
157+ Object [] data = receiveData ();
158+ System .out .println ("New Data : " + data [0 ] + "\t Channel Name : " + data [1 ]
159+ + "\t Format : " + data [2 ] + "\t Unit : " + 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