From eb0945124d29f09505cca13e23f30f10771cecce Mon Sep 17 00:00:00 2001 From: JongChern Date: Thu, 13 Nov 2025 15:18:07 +0800 Subject: [PATCH 1/5] update --- .../shimmerresearch/driver/Configuration.java | 3 +++ .../shimmerresearch/driver/ShimmerObject.java | 5 +++-- .../sensors/SensorShimmerClock.java | 20 +++++++++++++++---- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java index 8bf461b39..956da2f76 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java @@ -1084,6 +1084,7 @@ public static class ObjectClusterSensorName{ public static String TIMESTAMP = SensorShimmerClock.ObjectClusterSensorName.TIMESTAMP;//"Timestamp"; public static String REAL_TIME_CLOCK = SensorShimmerClock.ObjectClusterSensorName.REAL_TIME_CLOCK;//"RealTime"; + public static String SHIMMER_CLOCK = SensorShimmerClock.ObjectClusterSensorName.SHIMMER_CLOCK;//"RealTime"; // public static String REAL_TIME_CLOCK_SYNC = TimeSyncModule.ObjectClusterSensorName.REAL_TIME_CLOCK_SYNC;//"RealTime_Sync"; // public static String TIMESTAMP_SYNC = TimeSyncModule.ObjectClusterSensorName.TIMESTAMP_SYNC;//"Timestamp_Sync"; public static String SYSTEM_TIMESTAMP = SensorSystemTimeStamp.ObjectClusterSensorName.SYSTEM_TIMESTAMP;//"System_Timestamp"; @@ -1727,6 +1728,7 @@ public static class CompatibilityInfoForMaps{ aMap.put(SensorSystemTimeStamp.ObjectClusterSensorName.SYSTEM_TIMESTAMP_PLOT, SensorShimmerClock.channelSystemTimestampPlot); aMap.put(SensorShimmerClock.ObjectClusterSensorName.REAL_TIME_CLOCK, SensorShimmerClock.channelRealTimeClock); + aMap.put(SensorShimmerClock.ObjectClusterSensorName.SHIMMER_CLOCK, SensorShimmerClock.channelShimmerClock3LSB); // aMap.put(ShimmerClock.ObjectClusterSensorName.REAL_TIME_CLOCK, ShimmerClock.channelRealTimeClockSync); aMap.put(SensorShimmerClock.ObjectClusterSensorName.TIMESTAMP_OFFSET, SensorShimmerClock.channelShimmerClockOffset); // aMap.putAll(ShimmerClock.mChannelMapRef); @@ -1773,6 +1775,7 @@ public static class CompatibilityInfoForMaps{ aMap.put(SensorSystemTimeStamp.ObjectClusterSensorName.SYSTEM_TIMESTAMP_PLOT, SensorShimmerClock.channelSystemTimestampPlot); aMap.put(SensorShimmerClock.ObjectClusterSensorName.REAL_TIME_CLOCK, SensorShimmerClock.channelRealTimeClock); + aMap.put(SensorShimmerClock.ObjectClusterSensorName.SHIMMER_CLOCK, SensorShimmerClock.channelShimmerClock3LSB); // aMap.put(ShimmerClock.ObjectClusterSensorName.REAL_TIME_CLOCK, ShimmerClock.channelRealTimeClockSync); aMap.put(SensorShimmerClock.ObjectClusterSensorName.TIMESTAMP_OFFSET, SensorShimmerClock.channelShimmerClockOffset); // aMap.putAll(ShimmerClock.mChannelMapRef); diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java index cf852a799..83f7c40ca 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java @@ -2804,7 +2804,7 @@ else if (getHardwareVersion()==HW_ID.SHIMMER_2 || getHardwareVersion()==HW_ID.SH protected void parseTimestampShimmer3(COMMUNICATION_TYPE fwType, ObjectCluster objectCluster, double[] uncalibratedData, String[] uncalibratedDataUnits, double[] calibratedData, String[] calibratedDataUnits, String[] sensorNames, long[] newPacketInt) { int iTimeStamp=getSignalIndex(Configuration.Shimmer3.ObjectClusterSensorName.TIMESTAMP); //find index double shimmerTimestampTicks = (double)newPacketInt[iTimeStamp]; - + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.SHIMMER_CLOCK,CHANNEL_TYPE.UNCAL.toString(),CHANNEL_UNITS.CLOCK_UNIT,shimmerTimestampTicks); if(mFirstTime && fwType==COMMUNICATION_TYPE.SD){ //this is to make sure the Raw starts from zero for SD data. See comment for mFirstTsOffsetFromInitialTsTicks. mFirstTsOffsetFromInitialTsTicks = shimmerTimestampTicks; @@ -2822,7 +2822,8 @@ protected void parseTimestampShimmer3(COMMUNICATION_TYPE fwType, ObjectCluster o double timestampUnwrappedTicks = unwrapTimeStamp(shimmerTimestampTicks); double timestampUnwrappedMilliSecs = timestampUnwrappedTicks/getRtcClockFreq()*1000; // to convert into mS - + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.SHIMMER_CLOCK,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.CLOCK_UNIT,shimmerTimestampTicks); + incrementPacketsReceivedCounters(); calculateTrialPacketLoss(timestampUnwrappedMilliSecs); diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorShimmerClock.java b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorShimmerClock.java index ef9d58814..b45cd1b68 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorShimmerClock.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorShimmerClock.java @@ -83,7 +83,7 @@ public static class ObjectClusterSensorName{ public static final String TIMESTAMP_DIFFERENCE = "Timestamp Difference"; public static final String REAL_TIME_CLOCK = "RealTime"; - + public static final String SHIMMER_CLOCK = "Shimmer Clock 3-LSB"; public static final String TIMESTAMP_OFFSET = "Offset"; } @@ -93,6 +93,7 @@ public static class DatabaseChannelHandles{ public static final String OFFSET_TIMESTAMP = "OFFSET";//"Offset"; public static final String REAL_TIME_CLOCK = "Real_Time_Clock"; + public static final String SHIMMER_CLOCK = "SHIMMER_Clock"; } public static final class DatabaseConfigHandle{ @@ -106,7 +107,8 @@ public static final class DatabaseConfigHandle{ Arrays.asList(SensorShimmerClock.ObjectClusterSensorName.TIMESTAMP, SensorShimmerClock.ObjectClusterSensorName.TIMESTAMP_DIFFERENCE, SensorShimmerClock.ObjectClusterSensorName.REAL_TIME_CLOCK, - SensorShimmerClock.ObjectClusterSensorName.TIMESTAMP_OFFSET + SensorShimmerClock.ObjectClusterSensorName.TIMESTAMP_OFFSET, + SensorShimmerClock.ObjectClusterSensorName.SHIMMER_CLOCK )); { sensorShimmerClock.mIsApiSensor = true; // Even though TIMESTAMP channel is an API channel, there is no enabledSensor bit for it @@ -220,6 +222,17 @@ public static final class DatabaseConfigHandle{ channelRealTimeClock.mChannelSource = CHANNEL_SOURCE.API; } + public static final ChannelDetails channelShimmerClock3LSB = new ChannelDetails( + ObjectClusterSensorName.SHIMMER_CLOCK, + ObjectClusterSensorName.SHIMMER_CLOCK, + DatabaseChannelHandles.SHIMMER_CLOCK, + CHANNEL_UNITS.MILLISECONDS, + Arrays.asList(CHANNEL_TYPE.UNCAL ,CHANNEL_TYPE.CAL), false, true); + { + //TODO put into above constructor + channelRealTimeClock.mChannelSource = CHANNEL_SOURCE.API; + } + //TODO: Move to separate class public static final ChannelDetails channelBattPercentage = new ChannelDetails( Configuration.Shimmer3.ObjectClusterSensorName.BATT_PERCENTAGE, @@ -301,9 +314,8 @@ public void generateSensorMap() { channelMapRef.put(SensorShimmerClock.ObjectClusterSensorName.TIMESTAMP_DIFFERENCE, SensorShimmerClock.channelShimmerTsDiffernce); channelMapRef.put(SensorShimmerClock.ObjectClusterSensorName.TIMESTAMP_OFFSET, SensorShimmerClock.channelShimmerClockOffset); channelMapRef.put(SensorShimmerClock.ObjectClusterSensorName.REAL_TIME_CLOCK, SensorShimmerClock.channelRealTimeClock); - + channelMapRef.put(SensorShimmerClock.ObjectClusterSensorName.SHIMMER_CLOCK, SensorShimmerClock.channelShimmerClock3LSB); channelMapRef.put(SensorBattVoltage.ObjectClusterSensorName.BATT_PERCENTAGE, SensorShimmerClock.channelBattPercentage); - channelMapRef.put(ShimmerStreamingProperties.ObjectClusterSensorName.PACKET_RECEPTION_RATE_CURRENT, SensorShimmerClock.channelReceptionRateCurrent); channelMapRef.put(ShimmerStreamingProperties.ObjectClusterSensorName.PACKET_RECEPTION_RATE_OVERALL, SensorShimmerClock.channelReceptionRateTrial); } From effdca45af438bb212d132b90b19a8dfa11fc8cd Mon Sep 17 00:00:00 2001 From: JongChern Date: Fri, 14 Nov 2025 12:27:45 +0800 Subject: [PATCH 2/5] Update SensorShimmerClock.java --- .../java/com/shimmerresearch/sensors/SensorShimmerClock.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorShimmerClock.java b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorShimmerClock.java index b45cd1b68..2c9aa879f 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorShimmerClock.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorShimmerClock.java @@ -93,7 +93,7 @@ public static class DatabaseChannelHandles{ public static final String OFFSET_TIMESTAMP = "OFFSET";//"Offset"; public static final String REAL_TIME_CLOCK = "Real_Time_Clock"; - public static final String SHIMMER_CLOCK = "SHIMMER_Clock"; + public static final String SHIMMER_CLOCK = "Clock_3-LSB"; } public static final class DatabaseConfigHandle{ @@ -226,7 +226,7 @@ public static final class DatabaseConfigHandle{ ObjectClusterSensorName.SHIMMER_CLOCK, ObjectClusterSensorName.SHIMMER_CLOCK, DatabaseChannelHandles.SHIMMER_CLOCK, - CHANNEL_UNITS.MILLISECONDS, + CHANNEL_UNITS.CLOCK_UNIT, Arrays.asList(CHANNEL_TYPE.UNCAL ,CHANNEL_TYPE.CAL), false, true); { //TODO put into above constructor From 2639082b889aa2a6827295f9bd8f239dda118c43 Mon Sep 17 00:00:00 2001 From: JongChern Date: Fri, 14 Nov 2025 12:49:18 +0800 Subject: [PATCH 3/5] Update SensorShimmerClock.java --- .../java/com/shimmerresearch/sensors/SensorShimmerClock.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorShimmerClock.java b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorShimmerClock.java index 2c9aa879f..604703d60 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorShimmerClock.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorShimmerClock.java @@ -83,7 +83,7 @@ public static class ObjectClusterSensorName{ public static final String TIMESTAMP_DIFFERENCE = "Timestamp Difference"; public static final String REAL_TIME_CLOCK = "RealTime"; - public static final String SHIMMER_CLOCK = "Shimmer Clock 3-LSB"; + public static final String SHIMMER_CLOCK = "Clock 3_LSB"; public static final String TIMESTAMP_OFFSET = "Offset"; } @@ -93,7 +93,7 @@ public static class DatabaseChannelHandles{ public static final String OFFSET_TIMESTAMP = "OFFSET";//"Offset"; public static final String REAL_TIME_CLOCK = "Real_Time_Clock"; - public static final String SHIMMER_CLOCK = "Clock_3-LSB"; + public static final String SHIMMER_CLOCK = "Clock_3_LSB"; } public static final class DatabaseConfigHandle{ From af84ee001a70ce0a770c811eae7e522cdb0ddf68 Mon Sep 17 00:00:00 2001 From: JongChern Date: Fri, 14 Nov 2025 12:50:14 +0800 Subject: [PATCH 4/5] Update ShimmerObject.java --- .../src/main/java/com/shimmerresearch/driver/ShimmerObject.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java index 83f7c40ca..64ce81849 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java @@ -2822,7 +2822,7 @@ protected void parseTimestampShimmer3(COMMUNICATION_TYPE fwType, ObjectCluster o double timestampUnwrappedTicks = unwrapTimeStamp(shimmerTimestampTicks); double timestampUnwrappedMilliSecs = timestampUnwrappedTicks/getRtcClockFreq()*1000; // to convert into mS - objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.SHIMMER_CLOCK,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.CLOCK_UNIT,shimmerTimestampTicks); + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.SHIMMER_CLOCK,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.CLOCK_UNIT,timestampUnwrappedTicks); incrementPacketsReceivedCounters(); calculateTrialPacketLoss(timestampUnwrappedMilliSecs); From d209b3534a1ac9321a4b807040ca4b6737cf654c Mon Sep 17 00:00:00 2001 From: JongChern Date: Fri, 14 Nov 2025 12:57:40 +0800 Subject: [PATCH 5/5] Update ShimmerObject.java --- .../src/main/java/com/shimmerresearch/driver/ShimmerObject.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java index 64ce81849..481f91247 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java @@ -2805,6 +2805,7 @@ protected void parseTimestampShimmer3(COMMUNICATION_TYPE fwType, ObjectCluster o int iTimeStamp=getSignalIndex(Configuration.Shimmer3.ObjectClusterSensorName.TIMESTAMP); //find index double shimmerTimestampTicks = (double)newPacketInt[iTimeStamp]; objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.SHIMMER_CLOCK,CHANNEL_TYPE.UNCAL.toString(),CHANNEL_UNITS.CLOCK_UNIT,shimmerTimestampTicks); + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.SHIMMER_CLOCK,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.CLOCK_UNIT,shimmerTimestampTicks); if(mFirstTime && fwType==COMMUNICATION_TYPE.SD){ //this is to make sure the Raw starts from zero for SD data. See comment for mFirstTsOffsetFromInitialTsTicks. mFirstTsOffsetFromInitialTsTicks = shimmerTimestampTicks; @@ -2822,7 +2823,6 @@ protected void parseTimestampShimmer3(COMMUNICATION_TYPE fwType, ObjectCluster o double timestampUnwrappedTicks = unwrapTimeStamp(shimmerTimestampTicks); double timestampUnwrappedMilliSecs = timestampUnwrappedTicks/getRtcClockFreq()*1000; // to convert into mS - objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.SHIMMER_CLOCK,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.CLOCK_UNIT,timestampUnwrappedTicks); incrementPacketsReceivedCounters(); calculateTrialPacketLoss(timestampUnwrappedMilliSecs);