From c5494ce6207e090fa05a6de92f3e25c299df96ff Mon Sep 17 00:00:00 2001 From: JongChern Date: Wed, 26 Feb 2025 14:18:52 +0800 Subject: [PATCH 1/7] Update ShimmerVerObject.java --- .../com/shimmerresearch/driverUtilities/ShimmerVerObject.java | 1 + 1 file changed, 1 insertion(+) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java index 8802eb7ea..7b3acfa8b 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java @@ -440,6 +440,7 @@ public static boolean isSupportedSdCardAccess(int hwVer, int fwId) { if ((hwVer==HW_ID.SHIMMER_3 && fwId == FW_ID.SDLOG) || (hwVer==HW_ID.SHIMMER_3 && fwId == FW_ID.LOGANDSTREAM) || (hwVer==HW_ID.SHIMMER_3 && fwId == FW_ID.STROKARE) + || (hwVer==HW_ID.SHIMMER_3R) || (hwVer==HW_ID.SHIMMER_GQ_BLE && fwId == FW_ID.GQ_BLE) // || hwVer==HW_ID.SHIMMER_GQ_802154_NR // || hwVer==HW_ID.SHIMMER_GQ_802154_LR From f82e3dc77aa9c29f0560d1ffe40ccb4317ab278b Mon Sep 17 00:00:00 2001 From: JongChern Date: Wed, 26 Feb 2025 15:59:35 +0800 Subject: [PATCH 2/7] Update ShimmerVerObject.java --- .../com/shimmerresearch/driverUtilities/ShimmerVerObject.java | 1 + 1 file changed, 1 insertion(+) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java index 7b3acfa8b..e4c1f7339 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java @@ -505,6 +505,7 @@ public static boolean isSupportedSdDataImport(int hwVer) { || hwVer == HW_ID.SHIMMER_2 || hwVer == HW_ID.SHIMMER_2R || hwVer == HW_ID.SHIMMER_3 + || hwVer == HW_ID.SHIMMER_3R || hwVer == HW_ID.SHIMMER_GQ_BLE || hwVer == HW_ID.SHIMMER_GQ_802154_LR || hwVer == HW_ID.SHIMMER_GQ_802154_NR From 77de9dd86cb4989c25115058b8580a13ac3c0b58 Mon Sep 17 00:00:00 2001 From: JongChern Date: Wed, 12 Mar 2025 16:05:24 +0800 Subject: [PATCH 3/7] updates --- .../shimmerresearch/driver/Configuration.java | 3 +- .../shimmerresearch/driver/ShimmerObject.java | 32 +++++++++++++------ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java index 21cf763d3..ca4ad8d60 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java @@ -1332,7 +1332,8 @@ public static class CompatibilityInfoForMaps{ public static final ShimmerVerObject svoShimmer3RLogAndStream = new ShimmerVerObject(HW_ID.SHIMMER_3R,FW_ID.LOGANDSTREAM,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION); public static final ShimmerVerObject svoShimmer3RSDLog = new ShimmerVerObject(HW_ID.SHIMMER_3R,FW_ID.SDLOG,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION); public static final ShimmerVerObject svoShimmer3LogAndStreamWithSDLogSyncSupport = new ShimmerVerObject(HW_ID.SHIMMER_3,FW_ID.LOGANDSTREAM,0,16,11,ShimmerVerDetails.ANY_VERSION); - + public static final ShimmerVerObject svoShimmer3RLogAndStreamWithSDLogSyncSupport = new ShimmerVerObject(HW_ID.SHIMMER_3R,FW_ID.LOGANDSTREAM,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION); + private static final ShimmerVerObject svoShimmerGq802154Lr = new ShimmerVerObject(HW_ID.SHIMMER_GQ_802154_LR,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION); private static final ShimmerVerObject svoShimmerGq802154Nr = new ShimmerVerObject(HW_ID.SHIMMER_GQ_802154_NR,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION); private static final ShimmerVerObject svoShimmer2rGq = new ShimmerVerObject(HW_ID.SHIMMER_2R_GQ,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION,ShimmerVerDetails.ANY_VERSION); diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java index 2d1e300b4..5aafce203 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java @@ -1101,7 +1101,8 @@ else if (isShimmerGen3()) { // } } } - if ((fwType == COMMUNICATION_TYPE.BLUETOOTH) && (mEnabledSensors & BTStream.ACCEL_ALT) > 0) { + if (((fwType == COMMUNICATION_TYPE.BLUETOOTH) && (mEnabledSensors & BTStream.ACCEL_ALT) > 0) + || ((fwType == COMMUNICATION_TYPE.SD) && (mEnabledSensors & SDLogHeader.ACCEL_MPU) > 0)) { int iAccelX=getSignalIndex(Shimmer3.ObjectClusterSensorName.ACCEL_HIGHG_X); //find index int iAccelY=getSignalIndex(Shimmer3.ObjectClusterSensorName.ACCEL_HIGHG_Y); //find index int iAccelZ=getSignalIndex(Shimmer3.ObjectClusterSensorName.ACCEL_HIGHG_Z); //find index @@ -1142,8 +1143,8 @@ else if (isShimmerGen3()) { accelerometer.z=altAccelCalibratedData[2]; } } - if ((fwType == COMMUNICATION_TYPE.BLUETOOTH) && (mEnabledSensors & BTStream.MAG_ALT) > 0) { - + if (((fwType == COMMUNICATION_TYPE.BLUETOOTH) && (mEnabledSensors & BTStream.MAG_ALT) > 0) + || ((fwType == COMMUNICATION_TYPE.SD) && (mEnabledSensors & SDLogHeader.MAG_MPU) > 0)) { int iMagX=getSignalIndex(Shimmer3.ObjectClusterSensorName.MAG_WR_X); int iMagY=getSignalIndex(Shimmer3.ObjectClusterSensorName.MAG_WR_Y); int iMagZ=getSignalIndex(Shimmer3.ObjectClusterSensorName.MAG_WR_Z); @@ -3940,7 +3941,7 @@ else if (getHardwareVersion()==HW_ID.SHIMMER_3R) { setLIS2DW12DigitalAccelRate(((int)(mConfigByte0 & 0xF0))>>4); setLowPowerAccelWR((getLIS2DW12DigitalAccelRate()==1)? true:false); - setMPU9150GyroAccelRate(((int)(mConfigByte0 & 65280))>>8); + setLSM6DSVGyroAccelRate(((int)(mConfigByte0 & 65280))>>8); checkLowPowerGyro(); int magSamplingRate = (int)((mConfigByte0 >> 18) & 0x07); @@ -8441,6 +8442,14 @@ public void setAccelRange(int i){ setDigitalAccelRange(i); } + public void setDigitalAccelRate(int i) { + if(isShimmerGen3()) { + mSensorLSM303.setLSM303DigitalAccelRate(i); + } else if(isShimmerGen3R()) { + mSensorLIS2DW12.setLIS2DW12DigitalAccelRate(i); + } + } + public void setDigitalAccelRange(int i){ if(isShimmerGen2()) { mSensorMMA736x.setAccelRange(i); @@ -8466,14 +8475,19 @@ public void setLIS2DW12DigitalAccelRate(int mLIS2DW12DigitalAccelRate) { } } - /** Use setLSM303MagRange() instead + + public void setMagRange(int i){ + if(isShimmerGen3()) { + mSensorLSM303.setLSM303MagRange(i); + } else if(isShimmerGen3R()) { + mSensorLIS3MDL.setLISMagRange(i); + } + } + + /** Use setMagRange() instead * @param i */ @Deprecated - public void setMagRange(int i){ - setLSM303MagRange(i); - } - public void setLSM303MagRange(int i){ if(isShimmerGen3()) { mSensorLSM303.setLSM303MagRange(i); From 1b2ad816896c120948c5417ef2beb22f5ab6f55a Mon Sep 17 00:00:00 2001 From: JongChern Date: Thu, 13 Mar 2025 15:23:56 +0800 Subject: [PATCH 4/7] Update ShimmerVerObject.java --- .../com/shimmerresearch/driverUtilities/ShimmerVerObject.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java index e4c1f7339..7f248d19b 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java @@ -410,7 +410,8 @@ public static boolean isSupportedRtcConfigViaUart(int hwVer, int fwId) { || (hwVer==HW_ID.SHIMMER_GQ_802154_NR) || (hwVer==HW_ID.SHIMMER_GQ_802154_LR) || (hwVer==HW_ID.SHIMMER_2R_GQ) - || (hwVer==HW_ID.SHIMMER_4_SDK)){ + || (hwVer==HW_ID.SHIMMER_4_SDK) + || (hwVer==HW_ID.SHIMMER_3R)){ return true; } return false; @@ -713,6 +714,7 @@ public static final boolean isSupportedExgChipClocksJoined(ShimmerVerObject svo, (svo.getHardwareVersion()==HW_ID.SHIMMER_3 && ebd.getExpansionBoardId()==HW_ID_SR_CODES.EXP_BRD_EXG_UNIFIED && ebd.getExpansionBoardRev()>=4) + || (svo.getHardwareVersion()==HW_ID.SHIMMER_3R && ebd.getExpansionBoardId()==HW_ID_SR_CODES.EXP_BRD_EXG_UNIFIED ) ){ return true; } From 5875918567b51de812b2cc14ace9e41de037f38f Mon Sep 17 00:00:00 2001 From: JongChern Date: Thu, 13 Mar 2025 15:42:12 +0800 Subject: [PATCH 5/7] Update ShimmerObject.java --- .../com/shimmerresearch/driver/ShimmerObject.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java index 5aafce203..0cd089e83 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java @@ -6577,7 +6577,19 @@ public byte[] generateCalParamLSM303DLHCMag(){ public void parseCalibParamFromPacketAccelLsm(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { getCurrentCalibDetailsAccelWr().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); } + + public void parseCalibParamFromPacketAccelAlt(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { + getCurrentCalibDetailsAccelWr().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); + } + + public void getCurrentCalibDetailsAccelAlt(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { + getCurrentCalibDetailsAccelAlt().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); + } + public void getCurrentCalibDetailsMagWr(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { + getCurrentCalibDetailsMagWr().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); + } + public void parseCalibParamFromPacketMag(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { getCurrentCalibDetailsMag().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); } From efb9fe776ed55fdc1a0efec633ccceee6db3488a Mon Sep 17 00:00:00 2001 From: JongChern Date: Fri, 14 Mar 2025 13:31:46 +0800 Subject: [PATCH 6/7] Update ShimmerObject.java --- .../main/java/com/shimmerresearch/driver/ShimmerObject.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java index 0cd089e83..f65b10abe 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java @@ -6578,10 +6578,6 @@ public void parseCalibParamFromPacketAccelLsm(byte[] bufferCalibrationParameters getCurrentCalibDetailsAccelWr().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); } - public void parseCalibParamFromPacketAccelAlt(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { - getCurrentCalibDetailsAccelWr().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); - } - public void getCurrentCalibDetailsAccelAlt(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { getCurrentCalibDetailsAccelAlt().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); } From 74210e8693a65ee65a150b6ffda0d103d2ede030 Mon Sep 17 00:00:00 2001 From: JongChern Date: Tue, 15 Apr 2025 14:17:15 +0800 Subject: [PATCH 7/7] updates for 3r parsing --- .../shimmerresearch/driver/ShimmerObject.java | 41 +++++++++++-- .../driverUtilities/UtilParseData.java | 49 +++++++++++++++ .../API_XXXXX_UtilParseData.java | 61 +++++++++++++++++++ 3 files changed, 145 insertions(+), 6 deletions(-) create mode 100644 ShimmerDriver/src/test/java/com/shimmerresearch/driverUtilities/API_XXXXX_UtilParseData.java diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java index adb2d4882..dfb0f073c 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java @@ -841,6 +841,11 @@ public ObjectCluster buildMsg(byte[] newPacket, COMMUNICATION_TYPE fwType, boole numAdditionalChannels += 1; } else { + if (fwType == COMMUNICATION_TYPE.SD && getHardwareVersion()==HW_ID.SHIMMER_3R) { + //plus 1 because of: timestamp, because we are no longer relying on interpretdatapacketformat within ShimmerSDLog + numAdditionalChannels += 1; + } + if (!isRtcDifferenceSet()){ //sd log time stamp already included in mnChannels } @@ -2922,23 +2927,47 @@ protected int getSignalIndex(String signalName) { public void interpretDataPacketFormat(int numChannels, byte[] signalId){ String [] signalNameArray=new String[MAX_NUMBER_OF_SIGNALS]; String [] signalDataTypeArray=new String[MAX_NUMBER_OF_SIGNALS]; + int packetSize=mTimeStampPacketByteSize; // Time stamp + + int iTS=0; + + if (getHardwareVersion()==HW_ID.SHIMMER_3R && this.getClass().getSimpleName().equals("ShimmerSDLog") ) { + mNChannels = numChannels; + if (isSyncWhenLogging() + && (getFirmwareIdentifier()==FW_ID.SDLOG || getFirmwareIdentifier()==FW_ID.GQ_802154 + ||(UtilShimmer.compareVersions(getShimmerVerObject(),Configuration.Shimmer3.CompatibilityInfoForMaps.svoShimmer3LogAndStreamWithSDLogSyncSupport)) + ||(UtilShimmer.compareVersions(getShimmerVerObject(),Configuration.Shimmer3.CompatibilityInfoForMaps.svoShimmer3RLogAndStreamWithSDLogSyncSupport)))){ + signalNameArray[iTS]=SensorShimmerClock.ObjectClusterSensorName.TIMESTAMP_OFFSET; + if (OFFSET_LENGTH==5){ + signalDataTypeArray[iTS]="u32signed"; + mNChannels += 1; + packetSize+=5; + } else if (OFFSET_LENGTH==9){ + signalDataTypeArray[iTS]="u72"; + mNChannels += 1; + packetSize+=9; + } + iTS++; + } + } + if (getHardwareVersion()==HW_ID.SHIMMER_SR30 || getHardwareVersion()==HW_ID.SHIMMER_3 || getHardwareVersion() == HW_ID.SHIMMER_3R){ - signalNameArray[0]=Configuration.Shimmer3.ObjectClusterSensorName.TIMESTAMP; + signalNameArray[iTS]=Configuration.Shimmer3.ObjectClusterSensorName.TIMESTAMP; } else{ - signalNameArray[0]=Configuration.Shimmer2.ObjectClusterSensorName.TIMESTAMP; + signalNameArray[iTS]=Configuration.Shimmer2.ObjectClusterSensorName.TIMESTAMP; } - int packetSize=mTimeStampPacketByteSize; // Time stamp + if (mTimeStampPacketByteSize==2){ - signalDataTypeArray[0]="u16"; + signalDataTypeArray[iTS]="u16"; } else if (mTimeStampPacketByteSize==3) { - signalDataTypeArray[0]="u24"; + signalDataTypeArray[iTS]="u24"; } int enabledSensors= 0x00; - for (int i=0;i": + case "i12*>": + case "u16": + case "u16r": + case "i16": + case "i16r": + totalBytes += 2; + break; + case "u24": + case "u24r": + case "i24r": + totalBytes += 3; + break; + case "u32": + case "u32r": + case "i32": + case "i32r": + totalBytes += 4; + break; + case "u32signed": + totalBytes += 5; + break; + case "u72": + totalBytes += 9; + break; + default: + throw new IllegalArgumentException("Unknown data type: " + type); + } + } + + return totalBytes; + } + + } diff --git a/ShimmerDriver/src/test/java/com/shimmerresearch/driverUtilities/API_XXXXX_UtilParseData.java b/ShimmerDriver/src/test/java/com/shimmerresearch/driverUtilities/API_XXXXX_UtilParseData.java new file mode 100644 index 000000000..2d96fa300 --- /dev/null +++ b/ShimmerDriver/src/test/java/com/shimmerresearch/driverUtilities/API_XXXXX_UtilParseData.java @@ -0,0 +1,61 @@ +package com.shimmerresearch.driverUtilities; +import static org.junit.Assert.*; + +import org.junit.Test; + +public class API_XXXXX_UtilParseData { + @Test + public void testSingleByteTypes() { + String[] types = {"u8", "i8"}; + assertEquals(2, UtilParseData.countBytesFromDataTypes(types)); + } + + @Test + public void testTwoByteTypes() { + String[] types = {"u12", "u14", "i12>", "i12*>", "u16", "u16r", "i16", "i16r"}; + assertEquals(2 * types.length, UtilParseData.countBytesFromDataTypes(types)); + } + + @Test + public void testThreeByteTypes() { + String[] types = {"u24", "u24r", "i24r"}; + assertEquals(9, UtilParseData.countBytesFromDataTypes(types)); + } + + @Test + public void testFourByteTypes() { + String[] types = {"u32", "u32r", "i32", "i32r"}; + assertEquals(4 * types.length, UtilParseData.countBytesFromDataTypes(types)); + } + + @Test + public void testFiveByteType() { + String[] types = {"u32signed"}; + assertEquals(5, UtilParseData.countBytesFromDataTypes(types)); + } + + @Test + public void testNineByteType() { + String[] types = {"u72"}; + assertEquals(9, UtilParseData.countBytesFromDataTypes(types)); + } + + @Test + public void testMixedTypes() { + String[] types = {"u8", "i8", "u16", "u24", "u32signed", "u72"}; + int expected = 1 + 1 + 2 + 3 + 5 + 9; + assertEquals(expected, UtilParseData.countBytesFromDataTypes(types)); + } + + @Test + public void testEmptyInput() { + String[] types = {}; + assertEquals(0, UtilParseData.countBytesFromDataTypes(types)); + } + + @Test(expected = IllegalArgumentException.class) + public void testUnknownTypeThrows() { + String[] types = {"u8", "invalidType"}; + UtilParseData.countBytesFromDataTypes(types); + } +}