From ee5615f36ca5472a2da5ee685414297bddd7216f Mon Sep 17 00:00:00 2001 From: weiwentan23 Date: Thu, 14 Oct 2021 11:15:02 +0800 Subject: [PATCH 1/9] AA-253, fix multi device streaming errors --- .../supportfragments/PlotFragment.java | 21 +++++++++++++++---- .../SignalsToPlotFragment.java | 18 ++++++++++++++++ .../shimmerserviceexample/MainActivity.java | 1 + 3 files changed, 36 insertions(+), 4 deletions(-) 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..1db28532 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"; @@ -324,4 +330,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/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java index fd63137e..5c26a613 100644 --- a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java +++ b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java @@ -355,6 +355,7 @@ public void onShimmerDeviceSelected(String macAddress, String deviceName) { plotFragment.setShimmerService(mService); plotFragment.clearPlot(); + plotFragment.setSelectedDeviceAddress(selectedDeviceAddress); dynamicPlot = plotFragment.getDynamicPlot(); mService.stopStreamingAllDevices(); From d2352b3591191a9b478cd1781802905109bef429 Mon Sep 17 00:00:00 2001 From: weiwentan23 Date: Wed, 20 Oct 2021 12:03:20 +0800 Subject: [PATCH 2/9] update device configuration after write config in enable sensors tab --- .../shimmerresearch/shimmerserviceexample/MainActivity.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java index 5c26a613..85f73b1e 100644 --- a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java +++ b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java @@ -300,6 +300,10 @@ 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()); + } break; case CONNECTING: break; From 6e31c57188dc41db8d59e89867aa5d684010d91a Mon Sep 17 00:00:00 2001 From: weiwentan23 Date: Wed, 27 Oct 2021 10:22:51 +0800 Subject: [PATCH 3/9] Add data sync function to shimmer service example --- .../build.gradle | 4 +- .../supportfragments/DataSyncFragment.java | 51 ++++++ .../supportfragments/PlotFragment.java | 5 + .../AndroidBleRadioByteCommunication.java | 4 + .../layouts/fragments/layout/data_sync.xml | 67 +++++++ .../shimmerServiceExample/build.gradle | 4 +- .../src/main/AndroidManifest.xml | 3 +- .../shimmerserviceexample/MainActivity.java | 165 +++++++++++++----- 8 files changed, 258 insertions(+), 45 deletions(-) create mode 100644 ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/DataSyncFragment.java create mode 100644 ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/res/layouts/fragments/layout/data_sync.xml diff --git a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/build.gradle b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/build.gradle index 0d995ab7..39042958 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.6'){ // 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.6'){ // 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/guiUtilities/supportfragments/DataSyncFragment.java b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/DataSyncFragment.java new file mode 100644 index 00000000..6cd13ece --- /dev/null +++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/guiUtilities/supportfragments/DataSyncFragment.java @@ -0,0 +1,51 @@ +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 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(); + //TextViewPayloadIndex.setText("aa"); + // 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); + + 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 1db28532..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 @@ -285,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; 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..1a986dc6 100644 --- a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/androidradiodriver/AndroidBleRadioByteCommunication.java +++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/androidradiodriver/AndroidBleRadioByteCommunication.java @@ -192,4 +192,8 @@ public void onWriteFailure(BleException exception) { public void stop() { } + + public String getUuid() { + return "00000000-0000-0000-0000-E7EC37A0D234"; + } } 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..cc595b4e --- /dev/null +++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/res/layouts/fragments/layout/data_sync.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/build.gradle b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/build.gradle index de1b65d2..f1fbe814 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.6'){ // 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.6'){ // 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() { @@ -322,6 +382,17 @@ public void handleMessage(Message msg) { case SDLOGGING: connectedShimmersListFragment.buildShimmersConnectedListView(mService.getListOfConnectedDevices(), getApplicationContext()); break; + case STREAMING_LOGGED_DATA: + if(selectedDeviceAddress != null) { + VerisenseDevice mDevice = (VerisenseDevice) mService.getShimmer(selectedDeviceAddress); + //DataSyncFragment.TextViewPayloadIndex.setText(mDevice.getPayloadIndex()); + try { + DataSyncFragment.TextViewPayloadIndex.setText(mDevice.getPayloadIndex()); + } catch (Exception e) { + + } + } + break; case DISCONNECTED: Toast.makeText(getApplicationContext(), "Device disconnected: " + shimmerName + " " + macAddress, Toast.LENGTH_SHORT).show(); connectedShimmersListFragment.buildShimmersConnectedListView(mService.getListOfConnectedDevices(), getApplicationContext()); //to be safe lets rebuild this @@ -333,9 +404,6 @@ public void handleMessage(Message msg) { if(msg.arg1 == Shimmer.MSG_STATE_STOP_STREAMING) { signalsToPlotFragment.setDeviceNotStreamingView(); } - - - } }; @@ -352,6 +420,23 @@ 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", 4); + } + } + else{ + if(mSectionsPagerAdapter1.getCount() == 6) + { + mSectionsPagerAdapter1.remove(4); + } + + } + mSectionsPagerAdapter1.notifyDataSetChanged(); + sensorsEnabledFragment.setShimmerService(mService); sensorsEnabledFragment.buildSensorsList(device, this, mService.getBluetoothManager()); From 6ec853efd4370bed1788d4ca0de116e223c2ecb1 Mon Sep 17 00:00:00 2001 From: weiwentan23 Date: Wed, 27 Oct 2021 13:38:03 +0800 Subject: [PATCH 4/9] Small fix to the pager adapter --- .../com/shimmerresearch/shimmerserviceexample/MainActivity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java index d45d1b02..4a59120e 100644 --- a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java +++ b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java @@ -195,6 +195,7 @@ public boolean onOptionsItemSelected(MenuItem item) { if(mSectionsPagerAdapter1.getCount() == 6) { mSectionsPagerAdapter1.remove(4); + mSectionsPagerAdapter1.notifyDataSetChanged(); } return true; default: From 6d0c18d7ab24b2403faf41b20be4efad3f903d77 Mon Sep 17 00:00:00 2001 From: weiwentan23 Date: Wed, 27 Oct 2021 16:25:14 +0800 Subject: [PATCH 5/9] update get uuid function and some small fix --- .../AndroidBleRadioByteCommunication.java | 8 +++++++- .../src/main/res/layouts/fragments/layout/data_sync.xml | 2 +- .../shimmerserviceexample/MainActivity.java | 7 ++----- 3 files changed, 10 insertions(+), 7 deletions(-) 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 1a986dc6..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,8 +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() { - return "00000000-0000-0000-0000-E7EC37A0D234"; + //"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 index cc595b4e..5e49e73a 100644 --- a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/res/layouts/fragments/layout/data_sync.xml +++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/res/layouts/fragments/layout/data_sync.xml @@ -53,7 +53,7 @@ android:id="@+id/payloadIndexLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Current Payload Index:" + android:text="Current Payload Index: " android:textStyle="bold" /> Date: Thu, 28 Oct 2021 10:30:04 +0800 Subject: [PATCH 6/9] menu update for data sync function --- .../shimmerServiceExample/src/main/res/menu/menu.xml | 2 ++ 1 file changed, 2 insertions(+) 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 From a6320404a187a714d734b2f2814f898bd7080600 Mon Sep 17 00:00:00 2001 From: weiwentan23 Date: Mon, 1 Nov 2021 10:11:54 +0800 Subject: [PATCH 7/9] Update payload index and add speed for data sync function --- .../build.gradle | 4 ++-- .../android/VerisenseDeviceAndroid.java | 16 +++++++++++++ .../supportfragments/DataSyncFragment.java | 3 ++- .../layouts/fragments/layout/data_sync.xml | 15 ++++++++---- .../shimmerServiceExample/build.gradle | 4 ++-- .../shimmerserviceexample/MainActivity.java | 23 +++++++++++-------- 6 files changed, 46 insertions(+), 19 deletions(-) diff --git a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/build.gradle b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/build.gradle index 39042958..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.6'){ + 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.6'){ + 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..59176040 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,17 @@ private void sendMsgToHandlerListTarget(int what, Object object) { } } } + @Override + protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { + + } + + @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 index 6cd13ece..2324e7b7 100644 --- 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 @@ -18,6 +18,7 @@ public class DataSyncFragment extends Fragment { public static EditText editTextParticipantName; public static EditText editTextTrialName; public static TextView TextViewPayloadIndex; + public static TextView TextViewSpeed; public DataSyncFragment() { // Required empty public constructor @@ -34,7 +35,6 @@ public static DataSyncFragment newInstance() { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { context = getActivity(); - //TextViewPayloadIndex.setText("aa"); // Inflate the layout for this fragment return inflater.inflate(R.layout.data_sync, container, false); } @@ -45,6 +45,7 @@ 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); } 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 index 5e49e73a..15901478 100644 --- a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/res/layouts/fragments/layout/data_sync.xml +++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/res/layouts/fragments/layout/data_sync.xml @@ -50,17 +50,24 @@ android:gravity="center" android:orientation="horizontal"> + + diff --git a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/build.gradle b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/build.gradle index f1fbe814..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.6'){ + 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.6'){ + 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/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java index e77604a3..eb3ce949 100644 --- a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java +++ b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java @@ -44,6 +44,7 @@ import com.shimmerresearch.exceptions.ShimmerException; import com.shimmerresearch.driver.Configuration.COMMUNICATION_TYPE; import com.shimmerresearch.verisense.VerisenseDevice; +import com.shimmerresearch.verisense.communication.SyncProgressDetails; import com.shimmerresearch.android.VerisenseDeviceAndroid; import java.util.List; @@ -365,6 +366,11 @@ public void handleMessage(Message msg) { ShimmerDevice mDevice = mService.getShimmer(selectedDeviceAddress); deviceConfigFragment.buildDeviceConfigList(mDevice, getApplicationContext(), mService.getBluetoothManager()); } + if(dataSyncFragment != null){ + DataSyncFragment.TextViewPayloadIndex.setText(""); + DataSyncFragment.TextViewSpeed.setText(""); + } + break; case CONNECTING: break; @@ -383,25 +389,23 @@ public void handleMessage(Message msg) { case SDLOGGING: connectedShimmersListFragment.buildShimmersConnectedListView(mService.getListOfConnectedDevices(), getApplicationContext()); break; - case STREAMING_LOGGED_DATA: - if(selectedDeviceAddress != null) { - VerisenseDeviceAndroid mDevice = (VerisenseDeviceAndroid) mService.getShimmer(selectedDeviceAddress); - try { - DataSyncFragment.TextViewPayloadIndex.setText(Integer.toString(mDevice.getPayloadIndex())); - } catch (Exception e) { - } - } - break; case DISCONNECTED: Toast.makeText(getApplicationContext(), "Device disconnected: " + shimmerName + " " + macAddress, Toast.LENGTH_SHORT).show(); 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(); } + + } }; @@ -431,7 +435,6 @@ public void onShimmerDeviceSelected(String macAddress, String deviceName) { { mSectionsPagerAdapter1.remove(4); } - } mSectionsPagerAdapter1.notifyDataSetChanged(); From 2aec17e782e350ed1d4ac1b768a91e6a72ebf8ba Mon Sep 17 00:00:00 2001 From: weiwentan23 Date: Mon, 1 Nov 2021 10:27:17 +0800 Subject: [PATCH 8/9] remove some unused code --- .../com/shimmerresearch/android/VerisenseDeviceAndroid.java | 4 ---- .../shimmerresearch/shimmerserviceexample/MainActivity.java | 3 --- 2 files changed, 7 deletions(-) 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 59176040..14a11ee3 100644 --- a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/VerisenseDeviceAndroid.java +++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/VerisenseDeviceAndroid.java @@ -50,10 +50,6 @@ private void sendMsgToHandlerListTarget(int what, Object object) { } } } - @Override - protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { - - } @Override public void sendCallBackMsg(int i, Object ojc){ diff --git a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java index eb3ce949..bc54a69b 100644 --- a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java +++ b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java @@ -370,7 +370,6 @@ public void handleMessage(Message msg) { DataSyncFragment.TextViewPayloadIndex.setText(""); DataSyncFragment.TextViewSpeed.setText(""); } - break; case CONNECTING: break; @@ -404,8 +403,6 @@ else if(msg.what == Shimmer.MSG_IDENTIFIER_SYNC_PROGRESS){ if(msg.arg1 == Shimmer.MSG_STATE_STOP_STREAMING) { signalsToPlotFragment.setDeviceNotStreamingView(); } - - } }; From bd4f89832c2ee39f1c65638bb052fdc91431d7b2 Mon Sep 17 00:00:00 2001 From: weiwentan23 Date: Mon, 1 Nov 2021 15:05:18 +0800 Subject: [PATCH 9/9] Move the data sync fragment to between device configuration and plot fragment --- .../shimmerresearch/shimmerserviceexample/MainActivity.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java index bc54a69b..7b28d516 100644 --- a/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java +++ b/ShimmerAndroidInstrumentDriver/shimmerServiceExample/src/main/java/com/shimmerresearch/shimmerserviceexample/MainActivity.java @@ -195,7 +195,7 @@ public boolean onOptionsItemSelected(MenuItem item) { connectedShimmersListFragment.buildShimmersConnectedListView(null, getApplicationContext()); if(mSectionsPagerAdapter1.getCount() == 6) { - mSectionsPagerAdapter1.remove(4); + mSectionsPagerAdapter1.remove(3); mSectionsPagerAdapter1.notifyDataSetChanged(); } return true; @@ -424,13 +424,13 @@ public void onShimmerDeviceSelected(String macAddress, String deviceName) { if(mSectionsPagerAdapter1.getCount() == 5) { dataSyncFragment = DataSyncFragment.newInstance(); - mSectionsPagerAdapter1.add(dataSyncFragment, "Data Sync", 4); + mSectionsPagerAdapter1.add(dataSyncFragment, "Data Sync", 3); } } else{ if(mSectionsPagerAdapter1.getCount() == 6) { - mSectionsPagerAdapter1.remove(4); + mSectionsPagerAdapter1.remove(3); } } mSectionsPagerAdapter1.notifyDataSetChanged();