diff --git a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/build.gradle b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/build.gradle
index 0d995ab7..9d0be86b 100644
--- a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/build.gradle
+++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/build.gradle
@@ -74,13 +74,13 @@ dependencies {
compile files('libs/ShimmerBiophysicalProcessingLibrary_Rev_0_11.jar')
compile files('libs/AndroidBluetoothLibrary.jar')
compile files('libs/androidplot-core-0.5.0-release.jar')
- implementation (group: 'com.shimmersensing', name: 'ShimmerBluetoothManagerDev', version:'JA-56 v0.4'){
+ implementation (group: 'com.shimmersensing', name: 'ShimmerBluetoothManagerDev', version:'JA-56 v0.7'){
// excluding org.json which is provided by Android
exclude group: 'io.netty'
exclude group: 'com.google.protobuf'
exclude group: 'org.apache.commons.math'
}
- implementation (group: 'com.shimmersensing', name: 'ShimmerDriverDev', version:'JA-56 v0.4'){
+ implementation (group: 'com.shimmersensing', name: 'ShimmerDriverDev', version:'JA-56 v0.7'){
// excluding org.json which is provided by Android
exclude group: 'io.netty'
exclude group: 'com.google.protobuf'
diff --git a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/VerisenseDeviceAndroid.java b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/VerisenseDeviceAndroid.java
index 023c31bd..14a11ee3 100644
--- a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/VerisenseDeviceAndroid.java
+++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/VerisenseDeviceAndroid.java
@@ -4,8 +4,11 @@
import android.os.Handler;
import com.shimmerresearch.bluetooth.ShimmerBluetooth;
+import com.shimmerresearch.driver.CallbackObject;
import com.shimmerresearch.driver.ObjectCluster;
+import com.shimmerresearch.driver.ShimmerMsg;
import com.shimmerresearch.verisense.VerisenseDevice;
+import com.shimmerresearch.verisense.communication.SyncProgressDetails;
import java.util.ArrayList;
import java.util.List;
@@ -47,4 +50,13 @@ private void sendMsgToHandlerListTarget(int what, Object object) {
}
}
}
+
+ @Override
+ public void sendCallBackMsg(int i, Object ojc){
+ super.sendCallBackMsg(i, ojc);
+
+ if(((CallbackObject)ojc).mMyObject instanceof SyncProgressDetails){
+ sendMsgToHandlerListTarget(ShimmerBluetooth.MSG_IDENTIFIER_SYNC_PROGRESS, -1, -1, ojc);
+ }
+ }
}
diff --git a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/DataSyncFragment.java b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/DataSyncFragment.java
new file mode 100644
index 00000000..2324e7b7
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/DataSyncFragment.java
@@ -0,0 +1,52 @@
+package com.shimmerresearch.android.guiUtilities.supportfragments;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import android.widget.EditText;
+import com.shimmerresearch.androidinstrumentdriver.R;
+
+
+public class DataSyncFragment extends Fragment {
+
+ static Context context;
+ public static EditText editTextParticipantName;
+ public static EditText editTextTrialName;
+ public static TextView TextViewPayloadIndex;
+ public static TextView TextViewSpeed;
+
+ public DataSyncFragment() {
+ // Required empty public constructor
+ }
+
+ public static DataSyncFragment newInstance() {
+ DataSyncFragment fragment = new DataSyncFragment();
+ Bundle args = new Bundle();
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ context = getActivity();
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.data_sync, container, false);
+ }
+
+ @Override
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+
+ editTextParticipantName = (EditText) getView().findViewById(R.id.participantName);
+ editTextTrialName = (EditText) getView().findViewById(R.id.trialName);
+ TextViewPayloadIndex = (TextView) getView().findViewById(R.id.payloadIndex);
+ TextViewSpeed = (TextView) getView().findViewById(R.id.speed);
+
+ super.onActivityCreated(savedInstanceState);
+ }
+}
\ No newline at end of file
diff --git a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/PlotFragment.java b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/PlotFragment.java
index 60cdf71b..460cca9e 100644
--- a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/PlotFragment.java
+++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/PlotFragment.java
@@ -50,6 +50,7 @@ public class PlotFragment extends Fragment {
static String deviceState = "";
static TextView textViewDeviceName;
static TextView textViewDeviceState;
+ static String selectedDeviceAddress;
private static String LOG_TAG = "PlotFragment";
Button signalsToPlotButton;
@@ -201,8 +202,11 @@ public void handleMessage(Message msg) {
Log.d(LOG_TAG,"Message Fully Initialized Received from Shimmer driver");
shimmerService.enableGraphingHandler(true);
deviceState = "Connected";
- textViewDeviceName.setText(mBluetoothAddress);
- textViewDeviceState.setText(deviceState);
+ if(selectedDeviceAddress.equals(mBluetoothAddress)){
+ textViewDeviceName.setText(mBluetoothAddress);
+ textViewDeviceState.setText(deviceState);
+ }
+
break;
case SDLOGGING:
Log.d(LOG_TAG,"Message Fully Initialized Received from Shimmer driver");
@@ -214,8 +218,10 @@ public void handleMessage(Message msg) {
case CONNECTING:
Log.d(LOG_TAG,"Driver is attempting to establish connection with Shimmer device");
deviceState = "Connecting";
- textViewDeviceName.setText(mBluetoothAddress);
- textViewDeviceState.setText(deviceState);
+ if(selectedDeviceAddress.equals(mBluetoothAddress)){
+ textViewDeviceName.setText(mBluetoothAddress);
+ textViewDeviceState.setText(deviceState);
+ }
break;
case STREAMING:
deviceState="Streaming";
@@ -279,6 +285,11 @@ else if(shimmerService.isEXGUsingTestSignal16Configuration(mBluetoothAddress))
textViewDeviceState.setText(deviceState);
//TODO: set the enable logging regarding the user selection
break;
+ case STREAMING_LOGGED_DATA:
+ deviceState="Data Sync";
+ textViewDeviceName.setText(mBluetoothAddress);
+ textViewDeviceState.setText(deviceState);
+ break;
case DISCONNECTED:
Log.d(LOG_TAG,"Shimmer No State");
mBluetoothAddress=null;
@@ -324,4 +335,11 @@ public void clearPlot() {
mPlotDataMap.clear();
dynamicPlot.clear();
}
+
+ public void setSelectedDeviceAddress(String address){
+ selectedDeviceAddress = address;
+ textViewDeviceName.setText(address);
+ textViewDeviceState.setText("Connected");
+ }
+
}
diff --git a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/SignalsToPlotFragment.java b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/SignalsToPlotFragment.java
index 781706f9..3b9edfc2 100644
--- a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/SignalsToPlotFragment.java
+++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/SignalsToPlotFragment.java
@@ -7,6 +7,7 @@
import android.support.v4.app.Fragment;
import android.support.v4.app.ListFragment;
import android.util.Log;
+import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
@@ -141,6 +142,23 @@ public void buildSignalsToPlotList(Context context, final ShimmerService service
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
updateCheckboxes();
+ shimmerService.mPlotManager.removeAllSignals();
+
+ SparseBooleanArray pos = listView.getCheckedItemPositions();
+ for (int i = 0; i < listView.getCount(); i++) {
+ if (pos.get(i)) {
+ try {
+ if(dynamicPlot == null) {
+ Log.e(LOG_TAG, "dynamicPlot is null!");
+ }
+ shimmerService.mPlotManager.addSignal(mList.get(i), dynamicPlot);
+ } catch (Exception e) {
+ Log.e(LOG_TAG, "Error! Could not add signal: " + e);
+ e.printStackTrace();
+ }
+ }
+ }
+
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
diff --git a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/androidradiodriver/AndroidBleRadioByteCommunication.java b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/androidradiodriver/AndroidBleRadioByteCommunication.java
index 81cd1356..0b12185a 100644
--- a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/androidradiodriver/AndroidBleRadioByteCommunication.java
+++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/androidradiodriver/AndroidBleRadioByteCommunication.java
@@ -36,6 +36,7 @@ public class AndroidBleRadioByteCommunication extends AbstractByteCommunication
UUID txid = UUID.fromString(TxID);
UUID rxid = UUID.fromString(RxID);
String mMac;
+ String uuid;
//"DA:A6:19:F0:4A:D7"
//"E7:45:2C:6D:6F:14"
@@ -192,4 +193,13 @@ public void onWriteFailure(BleException exception) {
public void stop() {
}
+ public String convertMacIDtoUUID(String MacID) {
+ String uuid = "00000000-0000-0000-0000-";
+ return uuid + MacID.replace(":", "");
+ }
+
+ public String getUuid() {
+ //"00000000-0000-0000-0000-E7EC37A0D234"
+ return convertMacIDtoUUID(this.mMac);
+ }
}
diff --git a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/res/layouts/fragments/layout/data_sync.xml b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/res/layouts/fragments/layout/data_sync.xml
new file mode 100644
index 00000000..15901478
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/res/layouts/fragments/layout/data_sync.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/build.gradle b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/build.gradle
index de1b65d2..865471b0 100644
--- a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/build.gradle
+++ b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/build.gradle
@@ -41,13 +41,13 @@ android {
dependencies {
compile project(':ShimmerAndroidInstrumentDriver')
- implementation (group: 'com.shimmersensing', name: 'ShimmerBluetoothManagerDev', version:'JA-56 v0.4'){
+ implementation (group: 'com.shimmersensing', name: 'ShimmerBluetoothManagerDev', version:'JA-56 v0.7'){
// excluding org.json which is provided by Android
exclude group: 'io.netty'
exclude group: 'com.google.protobuf'
exclude group: 'org.apache.commons.math'
}
- implementation (group: 'com.shimmersensing', name: 'ShimmerDriverDev', version:'JA-56 v0.4'){
+ implementation (group: 'com.shimmersensing', name: 'ShimmerDriverDev', version:'JA-56 v0.7'){
// excluding org.json which is provided by Android
exclude group: 'io.netty'
exclude group: 'com.google.protobuf'
diff --git a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/AndroidManifest.xml b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/AndroidManifest.xml
index c0475a67..8357fb46 100644
--- a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/AndroidManifest.xml
+++ b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/AndroidManifest.xml
@@ -1,7 +1,8 @@
-
+
+
fragmentArrayList = new ArrayList();
+ ArrayList fragmentTitle = new ArrayList();
public SectionsPagerAdapter1(FragmentManager fm) {
super(fm);
+ connectedShimmersListFragment = ConnectedShimmersListFragment.newInstance();
+ sensorsEnabledFragment = SensorsEnabledFragment.newInstance(null, null);
+ deviceConfigFragment = DeviceConfigFragment.newInstance();
+ plotFragment = PlotFragment.newInstance();
+ signalsToPlotFragment = SignalsToPlotFragment.newInstance();
+
+ add(connectedShimmersListFragment, "Connected Devices");
+ add(sensorsEnabledFragment, "Enable Sensors");
+ add(deviceConfigFragment, "Device Configuration");
+ add(plotFragment, "Plot");
+ add(signalsToPlotFragment, "Signals to Plot");
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
- if(position == 0) {
+ if(position < fragmentArrayList.size()){
+ if(position == 0){
connectedShimmersListFragment.buildShimmersConnectedListView(null, getApplicationContext());
- return connectedShimmersListFragment;
- }
- else if(position == 1) {
- return sensorsEnabledFragment;
- }
- else if (position == 2) {
- return deviceConfigFragment;
- }
- else if (position == 3) {
- return plotFragment;
- }
- else if (position == 4) {
- return signalsToPlotFragment;
- }
- else {
- return null;
}
+ return fragmentArrayList.get(position);
+ }
+ else{
+ return null;
+ }
}
@Override
public int getCount() {
- // Show 5 total pages.
- return 5;
+ // Show 5 total pages (Show 6 when a verisense device is selected)
+ return fragmentArrayList.size();
}
@Override
public CharSequence getPageTitle(int position) {
- switch (position) {
- case 0: return "Connected Devices";
- case 1: return "Enable Sensors";
- case 2: return "Device Configuration";
- case 3: return "Plot";
- case 4: return "Signals to Plot";
- default: return "";
+ if(position < fragmentTitle.size()){
+ return fragmentTitle.get(position);
}
+ return "";
+ }
+
+ public void add(Fragment fragment, String title, int index)
+ {
+ fragmentArrayList.add(index, fragment);
+ fragmentTitle.add(index, title);
}
+ public void add(Fragment fragment, String title)
+ {
+ fragmentArrayList.add(fragment);
+ fragmentTitle.add(title);
+ }
+
+ public void remove(int index)
+ {
+ if(fragmentArrayList.size() > 1 && fragmentTitle.size() > 1){
+ fragmentArrayList.remove(index);
+ fragmentTitle.remove(index);
+ }
+ }
+
+ @Override
+ public int getItemPosition(Object object) {
+ // refresh all fragments when data set changed
+ return PagerAdapter.POSITION_NONE;
+ }
}
private Handler mHandler = new Handler() {
@@ -300,6 +362,14 @@ public void handleMessage(Message msg) {
switch (state) {
case CONNECTED:
connectedShimmersListFragment.buildShimmersConnectedListView(mService.getListOfConnectedDevices(), getApplicationContext());
+ if(selectedDeviceAddress != null){
+ ShimmerDevice mDevice = mService.getShimmer(selectedDeviceAddress);
+ deviceConfigFragment.buildDeviceConfigList(mDevice, getApplicationContext(), mService.getBluetoothManager());
+ }
+ if(dataSyncFragment != null){
+ DataSyncFragment.TextViewPayloadIndex.setText("");
+ DataSyncFragment.TextViewSpeed.setText("");
+ }
break;
case CONNECTING:
break;
@@ -323,15 +393,16 @@ public void handleMessage(Message msg) {
connectedShimmersListFragment.buildShimmersConnectedListView(mService.getListOfConnectedDevices(), getApplicationContext()); //to be safe lets rebuild this
break;
}
-
+ }
+ else if(msg.what == Shimmer.MSG_IDENTIFIER_SYNC_PROGRESS){
+ SyncProgressDetails mDetails = (SyncProgressDetails)((CallbackObject)msg.obj).mMyObject;
+ DataSyncFragment.TextViewPayloadIndex.setText("Current Payload Index : " + Integer.toString(mDetails.mPayloadIndex));
+ DataSyncFragment.TextViewSpeed.setText("Speed(KBps) : " + Double.toString(mDetails.mTransferRateBytes/1024));
}
if(msg.arg1 == Shimmer.MSG_STATE_STOP_STREAMING) {
signalsToPlotFragment.setDeviceNotStreamingView();
}
-
-
-
}
};
@@ -348,6 +419,22 @@ public void onShimmerDeviceSelected(String macAddress, String deviceName) {
//Pass the selected device to the fragments
ShimmerDevice device = mService.getShimmer(selectedDeviceAddress);
+ //add and remove DataSyncFragment based on the type of device
+ if(device instanceof VerisenseDeviceAndroid) {
+ if(mSectionsPagerAdapter1.getCount() == 5)
+ {
+ dataSyncFragment = DataSyncFragment.newInstance();
+ mSectionsPagerAdapter1.add(dataSyncFragment, "Data Sync", 3);
+ }
+ }
+ else{
+ if(mSectionsPagerAdapter1.getCount() == 6)
+ {
+ mSectionsPagerAdapter1.remove(3);
+ }
+ }
+ mSectionsPagerAdapter1.notifyDataSetChanged();
+
sensorsEnabledFragment.setShimmerService(mService);
sensorsEnabledFragment.buildSensorsList(device, this, mService.getBluetoothManager());
@@ -355,6 +442,7 @@ public void onShimmerDeviceSelected(String macAddress, String deviceName) {
plotFragment.setShimmerService(mService);
plotFragment.clearPlot();
+ plotFragment.setSelectedDeviceAddress(selectedDeviceAddress);
dynamicPlot = plotFragment.getDynamicPlot();
mService.stopStreamingAllDevices();
diff --git a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/res/menu/menu.xml b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/res/menu/menu.xml
index b6e858aa..a4fa9995 100644
--- a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/res/menu/menu.xml
+++ b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/res/menu/menu.xml
@@ -22,6 +22,8 @@
android:id="@+id/start_streaming">
+
\ No newline at end of file