From 971f3e3b4a62b96504ad4f44d59fb7ccd8899f6c Mon Sep 17 00:00:00 2001 From: Mas Azalya Date: Thu, 5 Jun 2025 12:01:52 +0800 Subject: [PATCH 1/3] add support for isUsbPluggedIn status byte --- .../bluetooth/ShimmerBluetooth.java | 31 ++++++++++++------- .../shimmerresearch/driver/ShimmerDevice.java | 15 +++++++++ .../driverUtilities/ShimmerVerObject.java | 4 ++- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java b/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java index 1b2a67f42..b73ffe007 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java @@ -1111,9 +1111,9 @@ protected void processInstreamResponse(boolean shouldClearCrcFromBuffer) { } } else if(inStreamResponseCommand==STATUS_RESPONSE){ - byte[] responseData = readBytes(1, inStreamResponseCommand); + byte[] responseData = readBytes(2, inStreamResponseCommand); if(responseData!=null){ - parseStatusByte(responseData[0]); + parseStatusByte(responseData); if(!isSupportedRtcStateInStatus()){ if(!mIsSensing && !isInitialised()){ @@ -2396,26 +2396,30 @@ protected byte[] readBytes(int numBytes, byte btCommand) { /** * @param statusByte */ - protected void parseStatusByte(byte statusByte){ + protected void parseStatusByte(byte[] statusByte){ Boolean savedDockedState = isDocked(); - setIsDocked(((statusByte & (0x01 << 0)) > 0)? true:false); - setIsSensing(((statusByte & (0x01 << 1)) > 0)? true:false); + setIsDocked(((statusByte[0] & (0x01 << 0)) > 0)? true:false); + setIsSensing(((statusByte[0] & (0x01 << 1)) > 0)? true:false); //reserved(((statusByte & (0x01 << 2)) > 0)? true:false); if(isSupportedRtcStateInStatus()){ - mIsRtcSet = ((statusByte & (0x01 << 2)) > 0)? true:false; + mIsRtcSet = ((statusByte[0] & (0x01 << 2)) > 0)? true:false; } - setIsSDLogging(((statusByte & (0x01 << 3)) > 0)? true:false); - setIsStreaming(((statusByte & (0x01 << 4)) > 0)? true:false); + setIsSDLogging(((statusByte[0] & (0x01 << 3)) > 0)? true:false); + setIsStreaming(((statusByte[0] & (0x01 << 4)) > 0)? true:false); if(isSupportedSdInfoInStatus()){ - setIsSDPresent(((statusByte & (0x01 << 5)) > 0)? true:false); - setIsSDError(((statusByte & (0x01 << 6)) > 0)? true:false); + setIsSDPresent(((statusByte[0] & (0x01 << 5)) > 0)? true:false); + setIsSDError(((statusByte[0] & (0x01 << 6)) > 0)? true:false); } if(isSupportedRedLedStateInStatus()){ - mIsRedLedOn = ((statusByte & (0x01 << 7)) > 0)? true:false; + mIsRedLedOn = ((statusByte[0] & (0x01 << 7)) > 0)? true:false; } - consolePrintLn("\nStatus Response = \n" + UtilShimmer.byteToHexStringFormatted(statusByte) + if(getHardwareVersion()==HW_ID.SHIMMER_3R && getFirmwareVersionCode()>=10) { + setIsUsbPluggedIn(((statusByte[1] & (0x01 << 0)) > 0)? true:false); + } + + consolePrintLn("\nStatus Response = \n" + UtilShimmer.byteToHexStringFormatted(statusByte[0]) + "\t" + "IsDocked = " + isDocked() + "\t" + "IsSensing = " + mIsSensing + "\t" + "IsRtcSet = " + mIsRtcSet @@ -2425,6 +2429,9 @@ protected void parseStatusByte(byte statusByte){ + "\t" + "mIsSdPresent = " + isSDPresent() + "\t" + "mIsRedLedOn = " + mIsRedLedOn); + consolePrintLn("\nStatus Response = \n" + UtilShimmer.byteToHexStringFormatted(statusByte[1]) + + "\t" + "IsUsbPluggedIn = " + isUsbPluggedIn()); + if(savedDockedState!=isDocked()){ dockedStateChange(); } diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java index 76e1dafb0..e19b0d15b 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java @@ -148,6 +148,7 @@ 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; protected boolean mHaveAttemptedToReadConfig = false; //BSL related start @@ -1048,6 +1049,16 @@ public boolean setIsDocked(boolean docked) { } return changed; } + + public boolean setIsUsbPluggedIn(boolean usbPluggedIn) { + boolean changed=false; + if (mIsUsbPluggedIn!=usbPluggedIn){ + changed = true; + } + mIsUsbPluggedIn = usbPluggedIn; + return changed; + + } public void stateHandler(Object obj){ @@ -1059,6 +1070,10 @@ public void stateHandler(Object obj){ public boolean isDocked() { return mIsDocked; } + + public boolean isUsbPluggedIn() { + return mIsUsbPluggedIn; + } public void setIsConnected(boolean state) { mIsConnected = state; diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java index 056286eec..0fb3d2c42 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java @@ -265,7 +265,9 @@ private void parseShimmerVerDetails() { &&mFirmwareVersionInternal!=FW_ID.UNKNOWN){ // Handle FW version code. mFirmwareVersionCode = -1; - if(UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3,FW_ID.LOGANDSTREAM,0,16,6)) { + if(UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3R,FW_ID.LOGANDSTREAM,1,0,23)) { + mFirmwareVersionCode = 10; + }else if(UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3,FW_ID.LOGANDSTREAM,0,16,6)) { mFirmwareVersionCode = 9; }else if(UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3R,FW_ID.LOGANDSTREAM,0,0,1) || UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3,FW_ID.LOGANDSTREAM,0,13,7) From 81533cf85e3ede688d4f02d42cb0b2a9696c4b50 Mon Sep 17 00:00:00 2001 From: Mas Azalya Date: Thu, 5 Jun 2025 12:21:35 +0800 Subject: [PATCH 2/3] update --- .../bluetooth/ShimmerBluetooth.java | 21 ++++++++++++------- .../driverUtilities/ShimmerVerObject.java | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java b/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java index b73ffe007..fdad3c1a2 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java @@ -1111,7 +1111,13 @@ protected void processInstreamResponse(boolean shouldClearCrcFromBuffer) { } } else if(inStreamResponseCommand==STATUS_RESPONSE){ - byte[] responseData = readBytes(2, inStreamResponseCommand); + int statusBytesToRead = 0; + if(getHardwareVersion()==HW_ID.SHIMMER_3R && getFirmwareVersionCode()>=10) { + statusBytesToRead = 2; + }else { + statusBytesToRead = 1; + } + byte[] responseData = readBytes(statusBytesToRead, inStreamResponseCommand); if(responseData!=null){ parseStatusByte(responseData); @@ -2414,10 +2420,6 @@ protected void parseStatusByte(byte[] statusByte){ if(isSupportedRedLedStateInStatus()){ mIsRedLedOn = ((statusByte[0] & (0x01 << 7)) > 0)? true:false; } - - if(getHardwareVersion()==HW_ID.SHIMMER_3R && getFirmwareVersionCode()>=10) { - setIsUsbPluggedIn(((statusByte[1] & (0x01 << 0)) > 0)? true:false); - } consolePrintLn("\nStatus Response = \n" + UtilShimmer.byteToHexStringFormatted(statusByte[0]) + "\t" + "IsDocked = " + isDocked() @@ -2429,8 +2431,13 @@ protected void parseStatusByte(byte[] statusByte){ + "\t" + "mIsSdPresent = " + isSDPresent() + "\t" + "mIsRedLedOn = " + mIsRedLedOn); - consolePrintLn("\nStatus Response = \n" + UtilShimmer.byteToHexStringFormatted(statusByte[1]) - + "\t" + "IsUsbPluggedIn = " + isUsbPluggedIn()); + if(statusByte.length > 1) { + setIsUsbPluggedIn(((statusByte[1] & (0x01 << 0)) > 0)? true:false); + + consolePrintLn("\nStatus Response = \n" + UtilShimmer.byteToHexStringFormatted(statusByte[1]) + + "\t" + "IsUsbPluggedIn = " + isUsbPluggedIn()); + + } if(savedDockedState!=isDocked()){ dockedStateChange(); diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java index 0fb3d2c42..7084c0b38 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java @@ -265,7 +265,7 @@ private void parseShimmerVerDetails() { &&mFirmwareVersionInternal!=FW_ID.UNKNOWN){ // Handle FW version code. mFirmwareVersionCode = -1; - if(UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3R,FW_ID.LOGANDSTREAM,1,0,23)) { + if(UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3R,FW_ID.LOGANDSTREAM,1,0,24)) { mFirmwareVersionCode = 10; }else if(UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3,FW_ID.LOGANDSTREAM,0,16,6)) { mFirmwareVersionCode = 9; From 657118d033ab2f667656a3f4162feb4edd17fc21 Mon Sep 17 00:00:00 2001 From: Mas Azalya Date: Thu, 5 Jun 2025 15:09:18 +0800 Subject: [PATCH 3/3] update hw fw compatibility check --- .../com/shimmerresearch/bluetooth/ShimmerBluetooth.java | 6 +++++- .../shimmerresearch/driverUtilities/ShimmerVerObject.java | 4 +--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java b/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java index fdad3c1a2..dfab7bc8a 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java @@ -1112,7 +1112,7 @@ protected void processInstreamResponse(boolean shouldClearCrcFromBuffer) { } else if(inStreamResponseCommand==STATUS_RESPONSE){ int statusBytesToRead = 0; - if(getHardwareVersion()==HW_ID.SHIMMER_3R && getFirmwareVersionCode()>=10) { + if(isSupportedUSBPluggedInStatus()) { statusBytesToRead = 2; }else { statusBytesToRead = 1; @@ -2456,6 +2456,10 @@ public boolean isSupportedSdInfoInStatus() { return isThisVerCompatibleWith(FW_ID.LOGANDSTREAM, 0, 7, 12); } + public boolean isSupportedUSBPluggedInStatus() { + return isThisVerCompatibleWith(HW_ID.SHIMMER_3R, FW_ID.LOGANDSTREAM, 1,0, 24); + } + protected boolean isSupportedInStreamCmds() { if((getFirmwareIdentifier()==FW_ID.LOGANDSTREAM || isThisVerCompatibleWith(FW_ID.BTSTREAM, 0, 8, 1))&& getHardwareVersion()!=HW_ID.SHIMMER_2R){ diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java index 7084c0b38..056286eec 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java @@ -265,9 +265,7 @@ private void parseShimmerVerDetails() { &&mFirmwareVersionInternal!=FW_ID.UNKNOWN){ // Handle FW version code. mFirmwareVersionCode = -1; - if(UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3R,FW_ID.LOGANDSTREAM,1,0,24)) { - mFirmwareVersionCode = 10; - }else if(UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3,FW_ID.LOGANDSTREAM,0,16,6)) { + if(UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3,FW_ID.LOGANDSTREAM,0,16,6)) { mFirmwareVersionCode = 9; }else if(UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3R,FW_ID.LOGANDSTREAM,0,0,1) || UtilShimmer.compareVersions(mHardwareVersion,mFirmwareIdentifier,mFirmwareVersionMajor,mFirmwareVersionMinor,mFirmwareVersionInternal,HW_ID.SHIMMER_3,FW_ID.LOGANDSTREAM,0,13,7)