From f75804dfa77a0ea2a308940dcbb5edc3302a062d Mon Sep 17 00:00:00 2001 From: Mark Nolan Date: Mon, 14 Apr 2025 10:04:03 +0100 Subject: [PATCH 1/4] DEV-216 #time 10m clear CRC bytes for instream commands --- .../bluetooth/ShimmerBluetooth.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java b/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java index 499444017..4bcc7de33 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java @@ -980,7 +980,7 @@ else if(isSupportedInStreamCmds() && bufferTemp[getPacketSizeWithCrc()+2]==INSTR mWaitForResponse=false; mWaitForAck=false; - processInstreamResponse(); + processInstreamResponse(true); // Need to remove here because it is an // in-stream response while streaming so not @@ -1089,7 +1089,9 @@ else if(currentCommand==GET_INFOMEM_COMMAND || currentCommand==GET_CALIB_DUMP_CO } /** process responses to in-stream response */ - protected void processInstreamResponse() { + protected void processInstreamResponse(boolean clearCrcBytes) { + boolean responseWasParsed = true; + byte[] inStreamResponseCommandBuffer = readBytes(1, INSTREAM_CMD_RESPONSE); if(inStreamResponseCommandBuffer!=null){ byte inStreamResponseCommand = inStreamResponseCommandBuffer[0]; @@ -1138,7 +1140,19 @@ else if(inStreamResponseCommand==VBATT_RESPONSE) { + "\tBatt %=" + battStatusDetails.getEstimatedChargePercentageParsed()); } } + else + { + responseWasParsed = false; + } + + if (clearCrcBytes && mBtCommsCrcModeCurrent != BT_CRC_MODE.OFF && responseWasParsed) { + // The driver doesn't currently support checking of CRC bytes on any response + // other then data packets but we still need to clear them from the buffer if + // CRC is enabled. + clearCrcBytesFromBuffer(inStreamResponseCommand); + } } + } private void processFirmwareVerResponse() { @@ -1675,7 +1689,7 @@ else if(responseCommand==RWC_RESPONSE) { } } else if(responseCommand==INSTREAM_CMD_RESPONSE) { - processInstreamResponse(); + processInstreamResponse(false); } else if(responseCommand==LSM303DLHC_ACCEL_LPMODE_RESPONSE) { byte[] responseData = readBytes(1, responseCommand); From 5713c85282388263c12d30c7e46a9cbdb2ee6d45 Mon Sep 17 00:00:00 2001 From: Mark Nolan Date: Mon, 14 Apr 2025 10:32:12 +0100 Subject: [PATCH 2/4] DEV-216 #time 1m addressing PR comment --- .../java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java b/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java index 4bcc7de33..1b2a67f42 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/bluetooth/ShimmerBluetooth.java @@ -1089,7 +1089,7 @@ else if(currentCommand==GET_INFOMEM_COMMAND || currentCommand==GET_CALIB_DUMP_CO } /** process responses to in-stream response */ - protected void processInstreamResponse(boolean clearCrcBytes) { + protected void processInstreamResponse(boolean shouldClearCrcFromBuffer) { boolean responseWasParsed = true; byte[] inStreamResponseCommandBuffer = readBytes(1, INSTREAM_CMD_RESPONSE); @@ -1145,7 +1145,7 @@ else if(inStreamResponseCommand==VBATT_RESPONSE) { responseWasParsed = false; } - if (clearCrcBytes && mBtCommsCrcModeCurrent != BT_CRC_MODE.OFF && responseWasParsed) { + if (shouldClearCrcFromBuffer && mBtCommsCrcModeCurrent != BT_CRC_MODE.OFF && responseWasParsed) { // The driver doesn't currently support checking of CRC bytes on any response // other then data packets but we still need to clear them from the buffer if // CRC is enabled. From 4346e1d0c20403bd29c69d8922006b0aa88c197c Mon Sep 17 00:00:00 2001 From: JongChern Date: Fri, 18 Apr 2025 12:12:05 +0800 Subject: [PATCH 3/4] update --- .../API_0000X_ByteCommunicationShimmer3.java | 89 ++++++++++---- .../API_0000X_ByteCommunicationShimmer3R.java | 55 ++++----- ...teCommunicationShimmer3_CRC_Streaming.java | 114 ++++++++++++++++++ ...X_ByteCommunicationShimmer3lns0_16_11.java | 12 +- ...nShimmer3lns0_16_11_w_sd_bt_streaming.java | 12 +- ...unicationShimmer3lns0_16_11_w_sd_only.java | 12 +- ...ationShimmer3lns0_16_11_w_sync_master.java | 12 +- ...cationShimmer3lns0_16_11_w_sync_slave.java | 12 +- .../ByteCommunicationSimulatorS3.java | 54 ++++++++- ...ionSimulatorS3_streaming_instream_crc.java | 57 +++++++++ 10 files changed, 331 insertions(+), 98 deletions(-) create mode 100644 ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3_CRC_Streaming.java create mode 100644 ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/ByteCommunicationSimulatorS3_streaming_instream_crc.java diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3.java index 58df455b0..0506ad8cc 100644 --- a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3.java +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3.java @@ -8,6 +8,7 @@ import com.shimmerresearch.bluetooth.ShimmerBluetooth.BT_STATE; import com.shimmerresearch.driver.BasicProcessWithCallBack; import com.shimmerresearch.driver.CallbackObject; +import com.shimmerresearch.driver.ObjectCluster; import com.shimmerresearch.driver.ShimmerMsg; import com.shimmerresearch.driver.Configuration.COMMUNICATION_TYPE; import com.shimmerresearch.driverUtilities.ChannelDetails; @@ -28,7 +29,8 @@ @FixMethodOrder(MethodSorters.NAME_ASCENDING) // Test methods will be run in alphabetical order public class API_0000X_ByteCommunicationShimmer3 extends BasicProcessWithCallBack{ ShimmerPC mDevice; - TaskCompletionSource mCalibrationTask; + TaskCompletionSource mWaitTask; + TaskCompletionSource mStreamingTask; ByteCommunicationSimulatorS3 mByteCommunicationSimulatorS3; @Before @@ -42,12 +44,12 @@ public void setUp() { @Test public void test001_testConnectandDisconnect() { mByteCommunicationSimulatorS3.setIsNewBMPSupported(false); - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(60, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS); //Just to give time to connect to finish } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -76,23 +78,18 @@ public void test001_testConnectandDisconnect() { assert(false); } - try { - mDevice.disconnect(); - } catch (ShimmerException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + } @Test public void test002_testConnectandDisconnect_NewBMPSupported() { mByteCommunicationSimulatorS3.setIsNewBMPSupported(true); - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(60, TimeUnit.SECONDS); + boolean result = mWaitTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -144,6 +141,45 @@ public void test002_testConnectandDisconnect_NewBMPSupported() { } } + + ArrayList mListOJC; + @Test + public void test003_testStreaming() { + mListOJC = new ArrayList(); + mByteCommunicationSimulatorS3.setIsNewBMPSupported(false); + mWaitTask = new TaskCompletionSource(); + mDevice.connect("",""); + + mWaitTask = new TaskCompletionSource<>(); + mStreamingTask = new TaskCompletionSource(); + try { + boolean result = mWaitTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + try { + mDevice.startStreaming(); + } catch (ShimmerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + mStreamingTask.getTask().waitForCompletion(2, TimeUnit.SECONDS); + if(mListOJC.size()!=1) { + assert(false); + } + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + + } + + @Override protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { // TODO Auto-generated method stub @@ -156,21 +192,24 @@ protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { CallbackObject callbackObject = (CallbackObject)object; if (callbackObject.mState == BT_STATE.CONNECTED) { - try { - Thread.sleep(200); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - if (mCalibrationTask!=null) { - mCalibrationTask.setResult(true); - mCalibrationTask = null; + if (mDevice.isInitialised()) { + try { + Thread.sleep(200); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } } } - - } - } + } else if (ind == ShimmerPC.MSG_IDENTIFIER_DATA_PACKET) { + System.out.println("Shimmer MSG_IDENTIFIER_DATA_PACKET"); + ObjectCluster objc = (ObjectCluster) shimmerMSG.mB; + mListOJC.add(objc); + } + +} } diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3R.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3R.java index 637bd5d23..dff9ec942 100644 --- a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3R.java +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3R.java @@ -48,7 +48,7 @@ @FixMethodOrder(MethodSorters.NAME_ASCENDING) // Test methods will be run in alphabetical order public class API_0000X_ByteCommunicationShimmer3R extends BasicProcessWithCallBack{ ShimmerPC mDevice; - TaskCompletionSource mCalibrationTask; + TaskCompletionSource mWaitTask; ByteCommunicationSimulatorS3R mByteCommunicationSimulatorS3R; @Before public void setUp() { @@ -60,12 +60,12 @@ public void setUp() { @Test public void test001_testConnectandDisconnect() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS);//Just to give time to connect to finish } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -114,12 +114,12 @@ public void test001_testConnectandDisconnect() { @Test public void test002_ConnectandTestBMP390() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); + boolean result = mWaitTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -155,12 +155,12 @@ public void test002_ConnectandTestBMP390() { @Test public void test003_ConnectandTestCalibParamRead() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); + boolean result = mWaitTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -210,12 +210,12 @@ public void test003_ConnectandTestCalibParamRead() { @Test public void test004_ConnectandTestDefaultLNAccelAndGyroCalibParam() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -262,12 +262,12 @@ public void test004_ConnectandTestDefaultLNAccelAndGyroCalibParam() { @Test public void test005_ConnectandTestDefaultWRAccelCalibParam() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); + boolean result = mWaitTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -302,12 +302,12 @@ public void test005_ConnectandTestDefaultWRAccelCalibParam() { @Test public void test006_ConnectandTestDefaultMagCalibParam() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); + boolean result = mWaitTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -339,12 +339,12 @@ public void test006_ConnectandTestDefaultMagCalibParam() { @Test public void test007_ConnectandTestDefaultHighGAccelCalibParam() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); + boolean result = mWaitTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -367,12 +367,12 @@ public void test007_ConnectandTestDefaultHighGAccelCalibParam() { @Test public void test008_ConnectandTestDefaultWRMagCalibParam() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); + boolean result = mWaitTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -428,10 +428,7 @@ protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { // TODO Auto-generated catch block e.printStackTrace(); } - if (mCalibrationTask!=null) { - mCalibrationTask.setResult(true); - mCalibrationTask = null; - } + } } diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3_CRC_Streaming.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3_CRC_Streaming.java new file mode 100644 index 000000000..7578abb98 --- /dev/null +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3_CRC_Streaming.java @@ -0,0 +1,114 @@ +package com.shimmerresearch.shimmer3.communication; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +import com.shimmerresearch.bluetooth.ShimmerBluetooth.BT_STATE; +import com.shimmerresearch.driver.BasicProcessWithCallBack; +import com.shimmerresearch.driver.CallbackObject; +import com.shimmerresearch.driver.ObjectCluster; +import com.shimmerresearch.driver.ShimmerMsg; +import com.shimmerresearch.driver.Configuration.COMMUNICATION_TYPE; +import com.shimmerresearch.driverUtilities.ChannelDetails; +import com.shimmerresearch.driverUtilities.SensorDetails; +import com.shimmerresearch.driverUtilities.ShimmerVerDetails.HW_ID; +import com.shimmerresearch.exceptions.ShimmerException; +import com.shimmerresearch.pcDriver.ShimmerPC; +import com.shimmerresearch.sensors.AbstractSensor; +import com.shimmerresearch.sensors.AbstractSensor.SENSORS; + +import bolts.TaskCompletionSource; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.concurrent.TimeUnit; +@FixMethodOrder(MethodSorters.NAME_ASCENDING) // Test methods will be run in alphabetical order +public class API_0000X_ByteCommunicationShimmer3_CRC_Streaming extends BasicProcessWithCallBack{ + ShimmerPC mDevice; + TaskCompletionSource mCalibrationTask; + TaskCompletionSource mStreamingTask; + ByteCommunicationSimulatorS3 mByteCommunicationSimulatorS3; + + @Before + public void setUp() { + mByteCommunicationSimulatorS3 = new ByteCommunicationSimulatorS3_streaming_instream_crc("COM99"); + mDevice = new ShimmerPC("COM99"); + mDevice.setTestRadio(mByteCommunicationSimulatorS3); + setWaitForData(mDevice); + } + + ArrayList mListOJC; + @Test + public void test001_testStreaming() { + mListOJC = new ArrayList(); + mByteCommunicationSimulatorS3.setIsNewBMPSupported(false); + mCalibrationTask = new TaskCompletionSource(); + mDevice.connect("",""); + + mCalibrationTask = new TaskCompletionSource<>(); + mStreamingTask = new TaskCompletionSource(); + try { + boolean result = mCalibrationTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + try { + mDevice.startStreaming(); + } catch (ShimmerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + mStreamingTask.getTask().waitForCompletion(2, TimeUnit.SECONDS); + if(mListOJC.size()!=2) { + assert(false); + } + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + + } + + + @Override + protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { + // TODO Auto-generated method stub + int ind = shimmerMSG.mIdentifier; + + Object object = (Object) shimmerMSG.mB; + + if (ind == ShimmerPC.MSG_IDENTIFIER_STATE_CHANGE) { + if (ind == ShimmerPC.MSG_IDENTIFIER_STATE_CHANGE) { + CallbackObject callbackObject = (CallbackObject)object; + + if (callbackObject.mState == BT_STATE.CONNECTED) { + if (mDevice.isInitialised()) { + try { + Thread.sleep(200); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + } + } + } else if (ind == ShimmerPC.MSG_IDENTIFIER_DATA_PACKET) { + System.out.println("Shimmer MSG_IDENTIFIER_DATA_PACKET"); + ObjectCluster objc = (ObjectCluster) shimmerMSG.mB; + mListOJC.add(objc); + } + +} + +} diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11.java index 0d2cdcd5c..352fb6060 100644 --- a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11.java +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11.java @@ -28,7 +28,7 @@ @FixMethodOrder(MethodSorters.NAME_ASCENDING) // Test methods will be run in alphabetical order public class API_0000X_ByteCommunicationShimmer3lns0_16_11 extends BasicProcessWithCallBack{ ShimmerPC mDevice; - TaskCompletionSource mCalibrationTask; + TaskCompletionSource mWaitTask; @Before public void setUp() { mDevice = new ShimmerPC("COM99"); @@ -38,12 +38,12 @@ public void setUp() { @Test public void test001_testConnectandDisconnect() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -88,10 +88,6 @@ protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { // TODO Auto-generated catch block e.printStackTrace(); } - if (mCalibrationTask!=null) { - mCalibrationTask.setResult(true); - mCalibrationTask = null; - } } } diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sd_bt_streaming.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sd_bt_streaming.java index a4eba51ca..26851dbe5 100644 --- a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sd_bt_streaming.java +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sd_bt_streaming.java @@ -28,7 +28,7 @@ @FixMethodOrder(MethodSorters.NAME_ASCENDING) // Test methods will be run in alphabetical order public class API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sd_bt_streaming extends BasicProcessWithCallBack{ ShimmerPC mDevice; - TaskCompletionSource mCalibrationTask; + TaskCompletionSource mWaitTask; @Before public void setUp() { mDevice = new ShimmerPC("COM99"); @@ -38,12 +38,12 @@ public void setUp() { @Test public void test001_testConnectandDisconnect() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); //Just to give time to connect to finish } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -108,10 +108,6 @@ protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { // TODO Auto-generated catch block e.printStackTrace(); } - if (mCalibrationTask!=null) { - mCalibrationTask.setResult(true); - mCalibrationTask = null; - } } } diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sd_only.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sd_only.java index b100711e0..37fba3b78 100644 --- a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sd_only.java +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sd_only.java @@ -28,7 +28,7 @@ @FixMethodOrder(MethodSorters.NAME_ASCENDING) // Test methods will be run in alphabetical order public class API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sd_only extends BasicProcessWithCallBack{ ShimmerPC mDevice; - TaskCompletionSource mCalibrationTask; + TaskCompletionSource mWaitTask; @Before public void setUp() { mDevice = new ShimmerPC("COM99"); @@ -38,12 +38,12 @@ public void setUp() { @Test public void test001_testConnectandDisconnect() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS);//Just to give time to connect to finish } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -108,10 +108,6 @@ protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { // TODO Auto-generated catch block e.printStackTrace(); } - if (mCalibrationTask!=null) { - mCalibrationTask.setResult(true); - mCalibrationTask = null; - } } } diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sync_master.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sync_master.java index a675ed754..d849f02df 100644 --- a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sync_master.java +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sync_master.java @@ -28,7 +28,7 @@ @FixMethodOrder(MethodSorters.NAME_ASCENDING) // Test methods will be run in alphabetical order public class API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sync_master extends BasicProcessWithCallBack{ ShimmerPC mDevice; - TaskCompletionSource mCalibrationTask; + TaskCompletionSource mWaitTask; @Before public void setUp() { mDevice = new ShimmerPC("COM99"); @@ -38,12 +38,12 @@ public void setUp() { @Test public void test001_testConnectandDisconnect() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS);//Just to give time to connect to finish } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -116,10 +116,6 @@ protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { // TODO Auto-generated catch block e.printStackTrace(); } - if (mCalibrationTask!=null) { - mCalibrationTask.setResult(true); - mCalibrationTask = null; - } } } diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sync_slave.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sync_slave.java index a81b7c54c..9ef38ea74 100644 --- a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sync_slave.java +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sync_slave.java @@ -28,7 +28,7 @@ @FixMethodOrder(MethodSorters.NAME_ASCENDING) // Test methods will be run in alphabetical order public class API_0000X_ByteCommunicationShimmer3lns0_16_11_w_sync_slave extends BasicProcessWithCallBack{ ShimmerPC mDevice; - TaskCompletionSource mCalibrationTask; + TaskCompletionSource mWaitTask; @Before public void setUp() { mDevice = new ShimmerPC("COM99"); @@ -38,12 +38,12 @@ public void setUp() { @Test public void test001_testConnectandDisconnect() { - mCalibrationTask = new TaskCompletionSource(); + mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); - mCalibrationTask = new TaskCompletionSource<>(); + mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mCalibrationTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); + boolean result = mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS);//Just to give time to connect to finish } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -113,10 +113,6 @@ protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { // TODO Auto-generated catch block e.printStackTrace(); } - if (mCalibrationTask!=null) { - mCalibrationTask.setResult(true); - mCalibrationTask = null; - } } } diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/ByteCommunicationSimulatorS3.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/ByteCommunicationSimulatorS3.java index f7bca2534..abc9b29fb 100644 --- a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/ByteCommunicationSimulatorS3.java +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/ByteCommunicationSimulatorS3.java @@ -92,6 +92,40 @@ protected void txShimmerVersion() { mBuffer.add((byte) 0x03); } + protected void streaming() { + int numberOfPackets = 2; + mBuffer.add((byte) 0xff); + mBuffer.add((byte) 0xf4); + //0x00 0xEF 0xBE 0x1B 0xE7 0x09 0x3C 0x08 0x3F 0x09 0x7A + byte[] bytes = UtilShimmer.hexStringToByteArray("00EFBE1BE7093C083F097A"); + /* + for (byte b:bytes) { + mBuffer.add(b); + } + */ + + // Start a new thread to send data periodically + int intervalMs = 100; // replace with desired interval in milliseconds + Thread streamingThread = new Thread(() -> { + try { + Thread.sleep(200); + for (int i=0;i { + try { + Thread.sleep(200); + for (int i=0;i Date: Fri, 18 Apr 2025 13:31:26 +0800 Subject: [PATCH 4/4] fixes made --- .../API_0000X_ByteCommunicationShimmer3.java | 36 ------ .../API_0000X_ByteCommunicationShimmer3R.java | 12 +- ...teCommunicationShimmer3_CRC_Streaming.java | 2 +- ...X_ByteCommunicationShimmer3_Streaming.java | 114 ++++++++++++++++++ .../ByteCommunicationSimulatorS3.java | 42 ++----- ...yteCommunicationSimulatorS3_streaming.java | 60 +++++++++ ...ionSimulatorS3_streaming_instream_crc.java | 12 +- 7 files changed, 199 insertions(+), 79 deletions(-) create mode 100644 ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3_Streaming.java create mode 100644 ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/ByteCommunicationSimulatorS3_streaming.java diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3.java index 0506ad8cc..c9332a3f3 100644 --- a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3.java +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3.java @@ -143,42 +143,6 @@ public void test002_testConnectandDisconnect_NewBMPSupported() { ArrayList mListOJC; - @Test - public void test003_testStreaming() { - mListOJC = new ArrayList(); - mByteCommunicationSimulatorS3.setIsNewBMPSupported(false); - mWaitTask = new TaskCompletionSource(); - mDevice.connect("",""); - - mWaitTask = new TaskCompletionSource<>(); - mStreamingTask = new TaskCompletionSource(); - try { - boolean result = mWaitTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - try { - mDevice.startStreaming(); - } catch (ShimmerException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - try { - mStreamingTask.getTask().waitForCompletion(2, TimeUnit.SECONDS); - if(mListOJC.size()!=1) { - assert(false); - } - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - - - } - @Override protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3R.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3R.java index dff9ec942..31faa7a00 100644 --- a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3R.java +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3R.java @@ -119,7 +119,7 @@ public void test002_ConnectandTestBMP390() { mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mWaitTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -160,7 +160,7 @@ public void test003_ConnectandTestCalibParamRead() { mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mWaitTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -267,7 +267,7 @@ public void test005_ConnectandTestDefaultWRAccelCalibParam() { mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mWaitTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -307,7 +307,7 @@ public void test006_ConnectandTestDefaultMagCalibParam() { mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mWaitTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -344,7 +344,7 @@ public void test007_ConnectandTestDefaultHighGAccelCalibParam() { mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mWaitTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -372,7 +372,7 @@ public void test008_ConnectandTestDefaultWRMagCalibParam() { mWaitTask = new TaskCompletionSource<>(); try { - boolean result = mWaitTask.getTask().waitForCompletion(15, TimeUnit.SECONDS); + mWaitTask.getTask().waitForCompletion(3, TimeUnit.SECONDS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3_CRC_Streaming.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3_CRC_Streaming.java index 7578abb98..568d693c2 100644 --- a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3_CRC_Streaming.java +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3_CRC_Streaming.java @@ -66,7 +66,7 @@ public void test001_testStreaming() { } try { mStreamingTask.getTask().waitForCompletion(2, TimeUnit.SECONDS); - if(mListOJC.size()!=2) { + if(mListOJC.size()!=3) { //three is expected because every packet is followed by an ack which meets ShimmerBluetooth.processPacket requirements assert(false); } } catch (InterruptedException e) { diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3_Streaming.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3_Streaming.java new file mode 100644 index 000000000..fab8ec632 --- /dev/null +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/API_0000X_ByteCommunicationShimmer3_Streaming.java @@ -0,0 +1,114 @@ +package com.shimmerresearch.shimmer3.communication; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +import com.shimmerresearch.bluetooth.ShimmerBluetooth.BT_STATE; +import com.shimmerresearch.driver.BasicProcessWithCallBack; +import com.shimmerresearch.driver.CallbackObject; +import com.shimmerresearch.driver.ObjectCluster; +import com.shimmerresearch.driver.ShimmerMsg; +import com.shimmerresearch.driver.Configuration.COMMUNICATION_TYPE; +import com.shimmerresearch.driverUtilities.ChannelDetails; +import com.shimmerresearch.driverUtilities.SensorDetails; +import com.shimmerresearch.driverUtilities.ShimmerVerDetails.HW_ID; +import com.shimmerresearch.exceptions.ShimmerException; +import com.shimmerresearch.pcDriver.ShimmerPC; +import com.shimmerresearch.sensors.AbstractSensor; +import com.shimmerresearch.sensors.AbstractSensor.SENSORS; + +import bolts.TaskCompletionSource; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.concurrent.TimeUnit; +@FixMethodOrder(MethodSorters.NAME_ASCENDING) // Test methods will be run in alphabetical order +public class API_0000X_ByteCommunicationShimmer3_Streaming extends BasicProcessWithCallBack{ + ShimmerPC mDevice; + TaskCompletionSource mCalibrationTask; + TaskCompletionSource mStreamingTask; + ByteCommunicationSimulatorS3 mByteCommunicationSimulatorS3; + + @Before + public void setUp() { + mByteCommunicationSimulatorS3 = new ByteCommunicationSimulatorS3_streaming("COM99"); + mDevice = new ShimmerPC("COM99"); + mDevice.setTestRadio(mByteCommunicationSimulatorS3); + setWaitForData(mDevice); + } + + ArrayList mListOJC; + @Test + public void test001_testStreaming() { + mListOJC = new ArrayList(); + mByteCommunicationSimulatorS3.setIsNewBMPSupported(false); + mCalibrationTask = new TaskCompletionSource(); + mDevice.connect("",""); + + mCalibrationTask = new TaskCompletionSource<>(); + mStreamingTask = new TaskCompletionSource(); + try { + boolean result = mCalibrationTask.getTask().waitForCompletion(5, TimeUnit.SECONDS); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + try { + mDevice.startStreaming(); + } catch (ShimmerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + mStreamingTask.getTask().waitForCompletion(2, TimeUnit.SECONDS); + if(mListOJC.size()!=1) {//only one is expected because only the first packet is followed which meets ShimmerBluetooth.processPacket requirements + assert(false); + } + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + + } + + + @Override + protected void processMsgFromCallback(ShimmerMsg shimmerMSG) { + // TODO Auto-generated method stub + int ind = shimmerMSG.mIdentifier; + + Object object = (Object) shimmerMSG.mB; + + if (ind == ShimmerPC.MSG_IDENTIFIER_STATE_CHANGE) { + if (ind == ShimmerPC.MSG_IDENTIFIER_STATE_CHANGE) { + CallbackObject callbackObject = (CallbackObject)object; + + if (callbackObject.mState == BT_STATE.CONNECTED) { + if (mDevice.isInitialised()) { + try { + Thread.sleep(200); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + } + } + } else if (ind == ShimmerPC.MSG_IDENTIFIER_DATA_PACKET) { + System.out.println("Shimmer MSG_IDENTIFIER_DATA_PACKET"); + ObjectCluster objc = (ObjectCluster) shimmerMSG.mB; + mListOJC.add(objc); + } + +} + +} diff --git a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/ByteCommunicationSimulatorS3.java b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/ByteCommunicationSimulatorS3.java index abc9b29fb..e6a9a54f0 100644 --- a/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/ByteCommunicationSimulatorS3.java +++ b/ShimmerDriverPC/src/test/java/com/shimmerresearch/shimmer3/communication/ByteCommunicationSimulatorS3.java @@ -93,37 +93,17 @@ protected void txShimmerVersion() { } protected void streaming() { - int numberOfPackets = 2; + //not implemented for connect test please see ByteCommunicationS3_streaming.java + } + + protected void inquiryResponse() { mBuffer.add((byte) 0xff); - mBuffer.add((byte) 0xf4); - //0x00 0xEF 0xBE 0x1B 0xE7 0x09 0x3C 0x08 0x3F 0x09 0x7A - byte[] bytes = UtilShimmer.hexStringToByteArray("00EFBE1BE7093C083F097A"); - /* + mBuffer.add((byte) 0x02); + byte[] bytes = UtilShimmer.hexStringToByteArray("800202FF01080001"); for (byte b:bytes) { mBuffer.add(b); } - */ - - // Start a new thread to send data periodically - int intervalMs = 100; // replace with desired interval in milliseconds - Thread streamingThread = new Thread(() -> { - try { - Thread.sleep(200); - for (int i=0;i { + try { + Thread.sleep(200); + for (int i=0;i