From cb2f2369c62aca1f30ef6ff67f0bb97e3916c3a2 Mon Sep 17 00:00:00 2001 From: JongChern Date: Thu, 23 Oct 2025 15:22:12 +0800 Subject: [PATCH 1/2] Update Shimmer.java --- .../com/shimmerresearch/android/Shimmer.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/Shimmer.java b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/Shimmer.java index e3f18d5..f94bfb5 100644 --- a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/Shimmer.java +++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/Shimmer.java @@ -1922,4 +1922,58 @@ public void stateHandler(Object obj){ //sendMsgToHandlerListTarget(ShimmerBluetooth.MSG_IDENTIFIER_STATE_CHANGE, obj); } + private static final byte PING_BYTE = (byte) 0xB5; + private java.util.concurrent.ScheduledExecutorService pingExec; + private java.util.concurrent.ScheduledFuture pingTask; + + public void startPingTask() { + if (pingExec != null && !pingExec.isShutdown()) return; + + pingExec = java.util.concurrent.Executors.newSingleThreadScheduledExecutor(r -> { + Thread t = new Thread(r, "ShimmerPing"); + t.setDaemon(true); + android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO); + return t; + }); + + // schedule every 2 seconds + pingTask = pingExec.scheduleWithFixedDelay(() -> { + try { + if (mIsStreaming) + { + write(new byte[]{PING_BYTE}); + } else { + stopPingTask(); + } + } catch (Throwable e) { + // If device disconnects, stop pings + stopPingTask(); + } + }, 2, 2, java.util.concurrent.TimeUnit.SECONDS); + } + + public void stopPingTask() { + if (pingTask != null) pingTask.cancel(true); + if (pingExec != null) { + pingExec.shutdownNow(); + pingExec = null; + } + } + + + @Override + public void startStreaming() throws ShimmerException { + super.startStreaming(); + if (getHardwareVersion()== ShimmerVerDetails.HW_ID.SHIMMER_3R){ + startPingTask(); + } + } + + @Override + public void stopStreaming(){ + super.stopStreaming(); + if (getHardwareVersion()== ShimmerVerDetails.HW_ID.SHIMMER_3R) { + stopPingTask(); + } + } } From b0f788ec030bb08ab19b0e6827d2548a1a57c6ca Mon Sep 17 00:00:00 2001 From: JongChern Date: Thu, 23 Oct 2025 15:32:52 +0800 Subject: [PATCH 2/2] update --- .../ShimmerAndroidInstrumentDriver/build.gradle | 2 +- .../src/main/java/com/shimmerresearch/android/Shimmer.java | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/build.gradle b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/build.gradle index d956e5a..04a86ed 100644 --- a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/build.gradle +++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/build.gradle @@ -83,7 +83,7 @@ publishing { bar(MavenPublication) { groupId = 'com.shimmerresearch' // Replace with your package's group/organization name artifactId = 'shimmerandroidinstrumentdriver' // Replace with the name of your package - version = '3.2.5_beta' // Replace with your package version + version = '3.2.6_beta' // Replace with your package version artifact("$buildDir/outputs/aar/${getArtificatId()}-release.aar") } } diff --git a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/Shimmer.java b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/Shimmer.java index f94bfb5..fe8080f 100644 --- a/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/Shimmer.java +++ b/ShimmerAndroidInstrumentDriver/ShimmerAndroidInstrumentDriver/src/main/java/com/shimmerresearch/android/Shimmer.java @@ -1964,7 +1964,8 @@ public void stopPingTask() { @Override public void startStreaming() throws ShimmerException { super.startStreaming(); - if (getHardwareVersion()== ShimmerVerDetails.HW_ID.SHIMMER_3R){ + if (getHardwareVersion()== ShimmerVerDetails.HW_ID.SHIMMER_3R + && isThisVerCompatibleWith(ShimmerVerDetails.FW_ID.LOGANDSTREAM, 1, 0, 46)) { startPingTask(); } } @@ -1972,7 +1973,8 @@ public void startStreaming() throws ShimmerException { @Override public void stopStreaming(){ super.stopStreaming(); - if (getHardwareVersion()== ShimmerVerDetails.HW_ID.SHIMMER_3R) { + if (getHardwareVersion()== ShimmerVerDetails.HW_ID.SHIMMER_3R + && isThisVerCompatibleWith(ShimmerVerDetails.FW_ID.LOGANDSTREAM, 1, 0, 46)) { stopPingTask(); } }