diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java index d73e5961f..d4ebc68b3 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 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 e49a01d4d..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 } @@ -1101,7 +1106,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 +1148,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); @@ -2921,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>4); setLowPowerAccelWR((getLIS2DW12DigitalAccelRate()==1)? true:false); - setMPU9150GyroAccelRate(((int)(mConfigByte0 & 65280))>>8); + setLSM6DSVGyroAccelRate(((int)(mConfigByte0 & 65280))>>8); checkLowPowerGyro(); int magSamplingRate = (int)((mConfigByte0 >> 18) & 0x07); @@ -6576,7 +6606,15 @@ public byte[] generateCalParamLSM303DLHCMag(){ public void parseCalibParamFromPacketAccelLsm(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); } @@ -8441,6 +8479,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 +8512,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); diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java index 0f3bd609f..056286eec 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; @@ -440,6 +441,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 @@ -504,6 +506,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 diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/UtilParseData.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/UtilParseData.java index 0f6985aa2..533530329 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/UtilParseData.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/UtilParseData.java @@ -308,4 +308,53 @@ public static long calculatetwoscomplement(long signedData, int bitLength){ return newData; } + + public static int countBytesFromDataTypes(String[] dataType) { + int totalBytes = 0; + + for (String type : dataType) { + if(type==null) { + continue; + } + switch (type) { + case "u8": + case "i8": + totalBytes += 1; + break; + case "u12": + case "u14": + case "i12>": + 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); + } +}