From 53f7abe794c42a55f2936a4415ab63f8c6d904a3 Mon Sep 17 00:00:00 2001 From: Mark Nolan Date: Mon, 12 Jan 2026 16:08:31 +0000 Subject: [PATCH 1/9] DEV-331 #time 5m commit missing dock job error code --- .../driverUtilities/DockJobDetails.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/DockJobDetails.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/DockJobDetails.java index 2cd914613..c40515dd7 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/DockJobDetails.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/DockJobDetails.java @@ -99,17 +99,16 @@ public enum DOCK_JOB_TYPE { aMap.put(getJobErrorCode(DOCK_JOB_TYPE.SET_INDICATOR_LEDS_STATE), "INDICATOR_LEDS_SET"); aMap.put(getJobErrorCode(DOCK_JOB_TYPE.GET_INDICATOR_LEDS_STATE), "INDICATOR_LEDS_GET"); aMap.put(getJobErrorCode(DOCK_JOB_TYPE.ACCESS_SD_CARD), "ACCESS_SD_CARD"); - - aMap.put(getJobErrorCode(DOCK_JOB_TYPE.FW_DOCK), "FW_DOCK"); - - - aMap.put(getJobErrorCode(DOCK_JOB_TYPE.SHIMMER_WRITE_EXP_BRD_MEMORY), "SHIMMER_WRITE_EXP"); - aMap.put(getJobErrorCode(DOCK_JOB_TYPE.DOCK_BOOT), "Fail to detect bootup"); aMap.put(getJobErrorCode(DOCK_JOB_TYPE.DOCK_RESET_VIA_FW), "Failed to reset Base"); aMap.put(getJobErrorCode(DOCK_JOB_TYPE.DOCK_RESET_VIA_BSL), "Failed to reset Base"); + aMap.put(getJobErrorCode(DOCK_JOB_TYPE.FW_DOCK), "FW_DOCK"); + + aMap.put(getJobErrorCode(DOCK_JOB_TYPE.SHIMMER_WRITE_EXP_BRD_MEMORY), "SHIMMER_WRITE_EXP"); + aMap.put(getJobErrorCode(DOCK_JOB_TYPE.SHIMMER_WRITE_DAUGHTER_CARD_ID), "SHIMMER_WRITE_DAUGHTER_CARD_ID"); + //Experimental aMap.put(getJobErrorCode(DOCK_JOB_TYPE.DOCK_MANAGER_RELOAD), "DOCK_MANAGER_RELOAD"); aMap.put(getJobErrorCode(DOCK_JOB_TYPE.DOCK_MANAGER_LOAD), "DOCK_MANAGER_LOAD"); From ca372c56d077609f2f8d304dfe93ff5406cf8f57 Mon Sep 17 00:00:00 2001 From: Mark Nolan Date: Fri, 16 Jan 2026 11:32:10 +0000 Subject: [PATCH 2/9] DEV-331 #time 15m reduce unnecessarily repeated dock commands --- .../main/java/com/shimmerresearch/driver/ShimmerDevice.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java index 49ef3e0ac..dbaf2db2a 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java @@ -142,6 +142,8 @@ public abstract class ShimmerDevice extends BasicProcessWithCallBack implements private boolean mConfigurationReadSuccess = false; public boolean mReadDaughterIDSuccess = false; public boolean writeRealWorldClockFromPcTimeSuccess = false; + public boolean mReadBtVerSuccess = false; + public boolean mReadBtModeSuccess = false; protected boolean mIsConnected = false; protected boolean mIsSensing = false; @@ -1691,7 +1693,9 @@ public void setFirstDockRead() { mReadHwFwSuccess = false; mReadDaughterIDSuccess = false; writeRealWorldClockFromPcTimeSuccess = false; - } + mReadBtVerSuccess = false; + mReadBtModeSuccess = false; + } // ----------------- Overrides from ShimmerDevice end ------------- From 5c2c2a50da1b49e3f7e9d354965d4ab35651e64b Mon Sep 17 00:00:00 2001 From: Mas Azalya Date: Mon, 19 Jan 2026 13:12:21 +0800 Subject: [PATCH 3/9] add isUsbPluggedIn support --- .../shimmerresearch/driverUtilities/AssembleShimmerConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/AssembleShimmerConfig.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/AssembleShimmerConfig.java index 181fb3675..dfba0b50b 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/AssembleShimmerConfig.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/AssembleShimmerConfig.java @@ -141,7 +141,7 @@ public static void generateMultipleShimmerConfig(List listOfShimm for(ShimmerDevice shimmerDevice:listOfShimmersToConfigureClone) { // Configure for docks. if(commType==COMMUNICATION_TYPE.DOCK - && shimmerDevice.isDocked() + && (shimmerDevice.isDocked() || shimmerDevice.isUsbPluggedIn()) && !shimmerDevice.isStreaming()){ listForConfiguringDocked.add(shimmerDevice.deepClone()); } From 468a58e893a05e658dc60473d3df743a09ee9467 Mon Sep 17 00:00:00 2001 From: Mark Nolan Date: Mon, 19 Jan 2026 10:22:14 +0000 Subject: [PATCH 4/9] Update ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../src/main/java/com/shimmerresearch/driver/ShimmerDevice.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java index dbaf2db2a..c4b89d688 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java @@ -1695,7 +1695,7 @@ public void setFirstDockRead() { writeRealWorldClockFromPcTimeSuccess = false; mReadBtVerSuccess = false; mReadBtModeSuccess = false; - } + } // ----------------- Overrides from ShimmerDevice end ------------- From eafab6042c6566f554fb9e24807a8bc614073875 Mon Sep 17 00:00:00 2001 From: Mas Azalya <43565312+MAzalya@users.noreply.github.com> Date: Wed, 21 Jan 2026 13:23:26 +0800 Subject: [PATCH 5/9] differentiate setIsUsbPluggedIn vs setIsDocked --- .../java/com/shimmerresearch/driver/ShimmerDevice.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java index c4b89d688..fb8feb267 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java @@ -756,7 +756,11 @@ public void addCommunicationRoute(COMMUNICATION_TYPE communicationType) { // Collections.sort(mListOfAvailableCommunicationTypes); if(communicationType==COMMUNICATION_TYPE.DOCK){ - setIsDocked(true); + if(mDockID.contains(DEVICE_TYPE.SHIMMER3R.toString())) { + setIsUsbPluggedIn(true); + }else { + setIsDocked(true); + } } //TODO temp here -> check if the best place for it @@ -782,7 +786,8 @@ public void removeCommunicationRoute(COMMUNICATION_TYPE communicationType) { } // Collections.sort(mListOfAvailableCommunicationTypes); - if(communicationType==COMMUNICATION_TYPE.DOCK){ + if(communicationType==COMMUNICATION_TYPE.DOCK){ + setIsUsbPluggedIn(false); setIsDocked(false); setFirstDockRead(); clearDockInfo(mDockID, mSlotNumber); From 77b595f557e37c1677d0e4690a725b42244a327c Mon Sep 17 00:00:00 2001 From: Mark Nolan Date: Wed, 21 Jan 2026 15:11:18 +0000 Subject: [PATCH 6/9] DEV-331 #time 2h major updates for S3R DFU support --- .../shimmerresearch/driver/ShimmerDevice.java | 9 +++++++++ .../driverUtilities/HwDriverDeviceDetails.java | 3 ++- .../HwDriverShimmerDeviceDetails.java | 17 ++++++++++------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java index fb8feb267..fa15c25ea 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java @@ -151,6 +151,7 @@ public abstract class ShimmerDevice extends BasicProcessWithCallBack implements protected boolean mIsInitialised = false; private boolean mIsDocked = false; private boolean mIsUsbPluggedIn= false; + public boolean mIsUsbDfuMode= false; protected boolean mHaveAttemptedToReadConfig = false; //BSL related start @@ -1109,6 +1110,14 @@ public boolean isDocked() { public boolean isUsbPluggedIn() { return mIsUsbPluggedIn; } + + public boolean isUsbDfuMode(){ + return mIsUsbDfuMode; + } + + public void setUsbDfuMode(boolean state) { + mIsUsbDfuMode = state; + } public void setIsConnected(boolean state) { mIsConnected = state; diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/HwDriverDeviceDetails.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/HwDriverDeviceDetails.java index 395e9ba78..47549a5f2 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/HwDriverDeviceDetails.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/HwDriverDeviceDetails.java @@ -40,5 +40,6 @@ public class HwDriverDeviceDetails { public String deviceDriverVersion = ""; public String devInterfaceGuid = ""; - + + public String deviceInstanceId = ""; } diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/HwDriverShimmerDeviceDetails.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/HwDriverShimmerDeviceDetails.java index b86a4f0b6..1d468073c 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/HwDriverShimmerDeviceDetails.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/HwDriverShimmerDeviceDetails.java @@ -145,15 +145,10 @@ public static final class MASS_STORAGE_DEVICE { "VID_0424&PID_2640", }; - public static final String[] SHIMMER_3R = new String[] { - "VID_0483&PID_52A4", - }; - public static final String[] SHIMMER_3R_USB_DFU = new String[] { "VID_0483&PID_DF11", }; - public static final String[] SHIMMER = new String[] { "shimmer", }; @@ -170,6 +165,8 @@ public static final class MASS_STORAGE_DEVICE { public static final String[] SHIMMER3R_MSC_DEVICE = new String[] { "SHIMMER MSC","STM32 MSC DEVICE" }; + public static final String[] SHIMMER3R_DFU_DEVICE_BUS_DESCRITION = new String[] { "DFU in HS Mode" }; + public static final class SERVICE_DESCRIPTION { public static final String[] COMPOSITE_DEVICE = new String[]{"USB Composite Device"}; @@ -203,6 +200,10 @@ public static final class SERIAL_PORT { public static final String FTDI_FT4232H_PROD_ID = "6011"; public static final String VIRTUAL_PORT = "COM0COM"; + + public static final String[] SHIMMER_3R = new String[] { + "VID_0483&PID_52A4" + }; } public static final class BT { @@ -272,6 +273,8 @@ public static final class BASE_HARDWARE_IDS{ public HwDriverDeviceDetails portableDevice = null; public HwDriverDeviceDetails storageVolume = null; + public HwDriverDeviceDetails dfuDevice = null; + public String mDockID= ""; public String mSmartDockFwComPort= ""; public String mSmartDockUartComPort= ""; @@ -282,8 +285,8 @@ public static final class BASE_HARDWARE_IDS{ public HIDDeviceInfo mHidDeviceInfo = null; - /** Normally used to store the FTDI serial ID. */ - public String mFtdiSerialID = ""; + /** Unique HW ID (e.g., FTDI serial ID or location path). */ + public String mUniqueHwID = ""; public SPAN_VERSION mSpanVersion = SPAN_VERSION.UNKNOWN; public HwDriverShimmerDeviceDetails() { From 82d16f439cf6f3ea0b6fe8b1796c1d08b4482932 Mon Sep 17 00:00:00 2001 From: Mark Nolan Date: Mon, 26 Jan 2026 17:07:31 +0000 Subject: [PATCH 7/9] DEV-331 #time 2h dealing with warnings and improving S3R DFU robustness --- .../shimmerresearch/driver/ShimmerDevice.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java index fa15c25ea..a5b0f347b 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java @@ -20,12 +20,11 @@ import org.apache.commons.lang3.ArrayUtils; -import com.shimmerresearch.driver.Configuration; -import com.shimmerresearch.driver.ObjectCluster; import com.shimmerresearch.algorithms.AbstractAlgorithm; import com.shimmerresearch.algorithms.AlgorithmResultObject; import com.shimmerresearch.algorithms.gyroOnTheFlyCal.GyroOnTheFlyCalLoader; import com.shimmerresearch.algorithms.AlgorithmDetails; +import com.shimmerresearch.algorithms.AlgorithmDetails.SENSOR_CHECK_METHOD; import com.shimmerresearch.algorithms.AlgorithmLoaderInterface; import com.shimmerresearch.algorithms.orientation.OrientationModule6DOFLoader; import com.shimmerresearch.algorithms.orientation.OrientationModule9DOFLoader; @@ -36,7 +35,6 @@ import com.shimmerresearch.comms.serialPortInterface.AbstractSerialPortHal; import com.shimmerresearch.comms.wiredProtocol.UartComponentPropertyDetails; import com.shimmerresearch.driver.Configuration.COMMUNICATION_TYPE; -import com.shimmerresearch.driver.Configuration.Shimmer3; import com.shimmerresearch.driver.calibration.CalibDetails; import com.shimmerresearch.driver.calibration.CalibDetailsKinematic; import com.shimmerresearch.driver.calibration.CalibDetails.CALIB_READ_SOURCE; @@ -67,7 +65,6 @@ import com.shimmerresearch.sensors.SensorShimmerClock; import com.shimmerresearch.shimmerConfig.FixedShimmerConfigs; import com.shimmerresearch.shimmerConfig.FixedShimmerConfigs.FIXED_SHIMMER_CONFIG_MODE; -import com.shimmerresearch.verisense.communication.VerisenseProtocolByteCommunication; import com.shimmerresearch.verisense.sensors.ISensorConfig; public abstract class ShimmerDevice extends BasicProcessWithCallBack implements Serializable{ @@ -3085,9 +3082,22 @@ public void setIsAlgorithmEnabled(String algorithmName, boolean state){ if(abstractAlgorithm!=null && abstractAlgorithm.mAlgorithmDetails!=null){ if(state){ //switch on the required sensors - //TODO add support for ANY/ALL sensors for (Integer sensorId:abstractAlgorithm.mAlgorithmDetails.mListOfRequiredSensors) { - setSensorEnabledState(sensorId, true); + if (abstractAlgorithm.mAlgorithmDetails.mSensorCheckMethod==SENSOR_CHECK_METHOD.ANY) { + + int tempSensorId = handleSpecCasesBeforeSetSensorState(sensorId,state); + SensorDetails sensorDetails = getSensorDetails(tempSensorId); + if(sensorDetails!=null){ + setSensorEnabledState(sensorId, true); + } + } + else if (abstractAlgorithm.mAlgorithmDetails.mSensorCheckMethod==SENSOR_CHECK_METHOD.ALL) { + boolean success = setSensorEnabledState(sensorId, true); + if(!success){ + consolePrintErrLn("Failed to enable required sensor ID " + sensorId + " for algorithm:\t" + abstractAlgorithm.getAlgorithmName()); + return; + } + } } } abstractAlgorithm.setIsEnabled(state); From 7e0e7016703ee3d44d8ace0af40d759532aa1073 Mon Sep 17 00:00:00 2001 From: Mark Nolan Date: Thu, 29 Jan 2026 08:07:44 +0000 Subject: [PATCH 8/9] DEV-331 #time 10m ability to show when Shimmer has stopped wired comms --- .../shimmerresearch/driver/ShimmerDevice.java | 11 +++++++++- .../shimmerresearch/driver/ShimmerShell.java | 20 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java index a5b0f347b..649878d33 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java @@ -147,7 +147,8 @@ public abstract class ShimmerDevice extends BasicProcessWithCallBack implements protected boolean mIsStreaming = false; // This is used to monitor whether the device is in streaming mode protected boolean mIsInitialised = false; private boolean mIsDocked = false; - private boolean mIsUsbPluggedIn= false; + private boolean mIsUsbPluggedIn = false; + private boolean mIsDockCommsSuccessful = false; public boolean mIsUsbDfuMode= false; protected boolean mHaveAttemptedToReadConfig = false; @@ -4787,4 +4788,12 @@ public String getRadioModel() { return ""; } + public boolean isDockCommsSuccessful() { + return mIsDockCommsSuccessful; + } + + public void setDockCommsSuccessful(boolean isDockCommsSuccessful) { + mIsDockCommsSuccessful = isDockCommsSuccessful; + } + } \ No newline at end of file diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerShell.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerShell.java index 7a6a09226..81b456344 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerShell.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerShell.java @@ -26,6 +26,8 @@ public class ShimmerShell extends ShimmerDevice { /** * */ private static final long serialVersionUID = 3505947289367382624L; + public String macIDParsed = ""; + public ShimmerShell() { setFirstDockRead(); } @@ -147,5 +149,23 @@ protected void dataHandler(ObjectCluster ojc) { // TODO Auto-generated method stub } + + @Override + public String getMacIdFromUartParsed() { + if(!macIDParsed.isEmpty()) { + return macIDParsed; + } else { + return super.getMacIdFromUartParsed(); + } + } + + @Override + public String getMacIdParsed() { + if(!macIDParsed.isEmpty()) { + return macIDParsed; + } else { + return super.getMacIdParsed(); + } + } } From 1dd16c2e02798c7ce8df113bfce1c5b49d8b2419 Mon Sep 17 00:00:00 2001 From: jyong15 Date: Fri, 30 Jan 2026 13:14:08 +0800 Subject: [PATCH 9/9] DEV-331 fix IllegalStateException in removeSetWaitForDataAll --- .../com/shimmerresearch/driver/BasicProcessWithCallBack.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/BasicProcessWithCallBack.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/BasicProcessWithCallBack.java index 142b3d09d..100e6168a 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/BasicProcessWithCallBack.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/BasicProcessWithCallBack.java @@ -235,10 +235,7 @@ public void removeSetWaitForDataAll(){ } mWaitForData = null; - Iterator entries = mListWaitForData.iterator(); - while (entries.hasNext()) { - entries.remove(); - } + mListWaitForData.clear(); } public void setWaitForDataWithSingleInstanceCheck(BasicProcessWithCallBack b){