Skip to content

Commit 39289c9

Browse files
authored
Merge pull request #214 from ShimmerEngineering/DEV-175
DEV-175
2 parents 0dbc09e + 36530c2 commit 39289c9

5 files changed

Lines changed: 182 additions & 17 deletions

File tree

ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1332,7 +1332,8 @@ public static class CompatibilityInfoForMaps{
13321332

13331333
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);
13341334
public static final ShimmerVerObject svoShimmer3LogAndStreamWithSDLogSyncSupport = new ShimmerVerObject(HW_ID.SHIMMER_3,FW_ID.LOGANDSTREAM,0,16,11,ShimmerVerDetails.ANY_VERSION);
1335-
1335+
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);
1336+
13361337
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);
13371338
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);
13381339
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);

ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java

Lines changed: 66 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -841,6 +841,11 @@ public ObjectCluster buildMsg(byte[] newPacket, COMMUNICATION_TYPE fwType, boole
841841
numAdditionalChannels += 1;
842842
}
843843
else {
844+
if (fwType == COMMUNICATION_TYPE.SD && getHardwareVersion()==HW_ID.SHIMMER_3R) {
845+
//plus 1 because of: timestamp, because we are no longer relying on interpretdatapacketformat within ShimmerSDLog
846+
numAdditionalChannels += 1;
847+
}
848+
844849
if (!isRtcDifferenceSet()){
845850
//sd log time stamp already included in mnChannels
846851
}
@@ -1101,7 +1106,8 @@ else if (isShimmerGen3()) {
11011106
// }
11021107
}
11031108
}
1104-
if ((fwType == COMMUNICATION_TYPE.BLUETOOTH) && (mEnabledSensors & BTStream.ACCEL_ALT) > 0) {
1109+
if (((fwType == COMMUNICATION_TYPE.BLUETOOTH) && (mEnabledSensors & BTStream.ACCEL_ALT) > 0)
1110+
|| ((fwType == COMMUNICATION_TYPE.SD) && (mEnabledSensors & SDLogHeader.ACCEL_MPU) > 0)) {
11051111
int iAccelX=getSignalIndex(Shimmer3.ObjectClusterSensorName.ACCEL_HIGHG_X); //find index
11061112
int iAccelY=getSignalIndex(Shimmer3.ObjectClusterSensorName.ACCEL_HIGHG_Y); //find index
11071113
int iAccelZ=getSignalIndex(Shimmer3.ObjectClusterSensorName.ACCEL_HIGHG_Z); //find index
@@ -1142,8 +1148,8 @@ else if (isShimmerGen3()) {
11421148
accelerometer.z=altAccelCalibratedData[2];
11431149
}
11441150
}
1145-
if ((fwType == COMMUNICATION_TYPE.BLUETOOTH) && (mEnabledSensors & BTStream.MAG_ALT) > 0) {
1146-
1151+
if (((fwType == COMMUNICATION_TYPE.BLUETOOTH) && (mEnabledSensors & BTStream.MAG_ALT) > 0)
1152+
|| ((fwType == COMMUNICATION_TYPE.SD) && (mEnabledSensors & SDLogHeader.MAG_MPU) > 0)) {
11471153
int iMagX=getSignalIndex(Shimmer3.ObjectClusterSensorName.MAG_WR_X);
11481154
int iMagY=getSignalIndex(Shimmer3.ObjectClusterSensorName.MAG_WR_Y);
11491155
int iMagZ=getSignalIndex(Shimmer3.ObjectClusterSensorName.MAG_WR_Z);
@@ -2921,23 +2927,47 @@ protected int getSignalIndex(String signalName) {
29212927
public void interpretDataPacketFormat(int numChannels, byte[] signalId){
29222928
String [] signalNameArray=new String[MAX_NUMBER_OF_SIGNALS];
29232929
String [] signalDataTypeArray=new String[MAX_NUMBER_OF_SIGNALS];
2930+
int packetSize=mTimeStampPacketByteSize; // Time stamp
2931+
2932+
int iTS=0;
2933+
2934+
if (getHardwareVersion()==HW_ID.SHIMMER_3R && this.getClass().getSimpleName().equals("ShimmerSDLog") ) {
2935+
mNChannels = numChannels;
2936+
if (isSyncWhenLogging()
2937+
&& (getFirmwareIdentifier()==FW_ID.SDLOG || getFirmwareIdentifier()==FW_ID.GQ_802154
2938+
||(UtilShimmer.compareVersions(getShimmerVerObject(),Configuration.Shimmer3.CompatibilityInfoForMaps.svoShimmer3LogAndStreamWithSDLogSyncSupport))
2939+
||(UtilShimmer.compareVersions(getShimmerVerObject(),Configuration.Shimmer3.CompatibilityInfoForMaps.svoShimmer3RLogAndStreamWithSDLogSyncSupport)))){
2940+
signalNameArray[iTS]=SensorShimmerClock.ObjectClusterSensorName.TIMESTAMP_OFFSET;
2941+
if (OFFSET_LENGTH==5){
2942+
signalDataTypeArray[iTS]="u32signed";
2943+
mNChannels += 1;
2944+
packetSize+=5;
2945+
} else if (OFFSET_LENGTH==9){
2946+
signalDataTypeArray[iTS]="u72";
2947+
mNChannels += 1;
2948+
packetSize+=9;
2949+
}
2950+
iTS++;
2951+
}
2952+
}
2953+
29242954

29252955
if (getHardwareVersion()==HW_ID.SHIMMER_SR30 || getHardwareVersion()==HW_ID.SHIMMER_3 || getHardwareVersion() == HW_ID.SHIMMER_3R){
2926-
signalNameArray[0]=Configuration.Shimmer3.ObjectClusterSensorName.TIMESTAMP;
2956+
signalNameArray[iTS]=Configuration.Shimmer3.ObjectClusterSensorName.TIMESTAMP;
29272957
}
29282958
else{
2929-
signalNameArray[0]=Configuration.Shimmer2.ObjectClusterSensorName.TIMESTAMP;
2959+
signalNameArray[iTS]=Configuration.Shimmer2.ObjectClusterSensorName.TIMESTAMP;
29302960
}
29312961

2932-
int packetSize=mTimeStampPacketByteSize; // Time stamp
2962+
29332963
if (mTimeStampPacketByteSize==2){
2934-
signalDataTypeArray[0]="u16";
2964+
signalDataTypeArray[iTS]="u16";
29352965
} else if (mTimeStampPacketByteSize==3) {
2936-
signalDataTypeArray[0]="u24";
2966+
signalDataTypeArray[iTS]="u24";
29372967
}
29382968

29392969
int enabledSensors= 0x00;
2940-
for (int i=0;i<numChannels;i++) {
2970+
for (int i=iTS;i<numChannels+iTS;i++) {
29412971
if ((byte)signalId[i]==(byte)0x00){
29422972
if (getHardwareVersion()==HW_ID.SHIMMER_SR30 || getHardwareVersion()==HW_ID.SHIMMER_3 || getHardwareVersion()==HW_ID.SHIMMER_3R){
29432973
signalNameArray[i+1]=Shimmer3.ObjectClusterSensorName.ACCEL_LN_X;
@@ -3940,7 +3970,7 @@ else if (getHardwareVersion()==HW_ID.SHIMMER_3R) {
39403970
setLIS2DW12DigitalAccelRate(((int)(mConfigByte0 & 0xF0))>>4);
39413971

39423972
setLowPowerAccelWR((getLIS2DW12DigitalAccelRate()==1)? true:false);
3943-
setMPU9150GyroAccelRate(((int)(mConfigByte0 & 65280))>>8);
3973+
setLSM6DSVGyroAccelRate(((int)(mConfigByte0 & 65280))>>8);
39443974
checkLowPowerGyro();
39453975

39463976
int magSamplingRate = (int)((mConfigByte0 >> 18) & 0x07);
@@ -6576,7 +6606,15 @@ public byte[] generateCalParamLSM303DLHCMag(){
65766606
public void parseCalibParamFromPacketAccelLsm(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) {
65776607
getCurrentCalibDetailsAccelWr().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource);
65786608
}
6609+
6610+
public void getCurrentCalibDetailsAccelAlt(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) {
6611+
getCurrentCalibDetailsAccelAlt().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource);
6612+
}
65796613

6614+
public void getCurrentCalibDetailsMagWr(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) {
6615+
getCurrentCalibDetailsMagWr().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource);
6616+
}
6617+
65806618
public void parseCalibParamFromPacketMag(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) {
65816619
getCurrentCalibDetailsMag().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource);
65826620
}
@@ -8441,6 +8479,14 @@ public void setAccelRange(int i){
84418479
setDigitalAccelRange(i);
84428480
}
84438481

8482+
public void setDigitalAccelRate(int i) {
8483+
if(isShimmerGen3()) {
8484+
mSensorLSM303.setLSM303DigitalAccelRate(i);
8485+
} else if(isShimmerGen3R()) {
8486+
mSensorLIS2DW12.setLIS2DW12DigitalAccelRate(i);
8487+
}
8488+
}
8489+
84448490
public void setDigitalAccelRange(int i){
84458491
if(isShimmerGen2()) {
84468492
mSensorMMA736x.setAccelRange(i);
@@ -8466,14 +8512,19 @@ public void setLIS2DW12DigitalAccelRate(int mLIS2DW12DigitalAccelRate) {
84668512
}
84678513
}
84688514

8469-
/** Use setLSM303MagRange() instead
8515+
8516+
public void setMagRange(int i){
8517+
if(isShimmerGen3()) {
8518+
mSensorLSM303.setLSM303MagRange(i);
8519+
} else if(isShimmerGen3R()) {
8520+
mSensorLIS3MDL.setLISMagRange(i);
8521+
}
8522+
}
8523+
8524+
/** Use setMagRange() instead
84708525
* @param i
84718526
*/
84728527
@Deprecated
8473-
public void setMagRange(int i){
8474-
setLSM303MagRange(i);
8475-
}
8476-
84778528
public void setLSM303MagRange(int i){
84788529
if(isShimmerGen3()) {
84798530
mSensorLSM303.setLSM303MagRange(i);

ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/ShimmerVerObject.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,8 @@ public static boolean isSupportedRtcConfigViaUart(int hwVer, int fwId) {
410410
|| (hwVer==HW_ID.SHIMMER_GQ_802154_NR)
411411
|| (hwVer==HW_ID.SHIMMER_GQ_802154_LR)
412412
|| (hwVer==HW_ID.SHIMMER_2R_GQ)
413-
|| (hwVer==HW_ID.SHIMMER_4_SDK)){
413+
|| (hwVer==HW_ID.SHIMMER_4_SDK)
414+
|| (hwVer==HW_ID.SHIMMER_3R)){
414415
return true;
415416
}
416417
return false;
@@ -440,6 +441,7 @@ public static boolean isSupportedSdCardAccess(int hwVer, int fwId) {
440441
if ((hwVer==HW_ID.SHIMMER_3 && fwId == FW_ID.SDLOG)
441442
|| (hwVer==HW_ID.SHIMMER_3 && fwId == FW_ID.LOGANDSTREAM)
442443
|| (hwVer==HW_ID.SHIMMER_3 && fwId == FW_ID.STROKARE)
444+
|| (hwVer==HW_ID.SHIMMER_3R)
443445
|| (hwVer==HW_ID.SHIMMER_GQ_BLE && fwId == FW_ID.GQ_BLE)
444446
// || hwVer==HW_ID.SHIMMER_GQ_802154_NR
445447
// || hwVer==HW_ID.SHIMMER_GQ_802154_LR
@@ -504,6 +506,7 @@ public static boolean isSupportedSdDataImport(int hwVer) {
504506
|| hwVer == HW_ID.SHIMMER_2
505507
|| hwVer == HW_ID.SHIMMER_2R
506508
|| hwVer == HW_ID.SHIMMER_3
509+
|| hwVer == HW_ID.SHIMMER_3R
507510
|| hwVer == HW_ID.SHIMMER_GQ_BLE
508511
|| hwVer == HW_ID.SHIMMER_GQ_802154_LR
509512
|| hwVer == HW_ID.SHIMMER_GQ_802154_NR

ShimmerDriver/src/main/java/com/shimmerresearch/driverUtilities/UtilParseData.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,4 +308,53 @@ public static long calculatetwoscomplement(long signedData, int bitLength){
308308

309309
return newData;
310310
}
311+
312+
public static int countBytesFromDataTypes(String[] dataType) {
313+
int totalBytes = 0;
314+
315+
for (String type : dataType) {
316+
if(type==null) {
317+
continue;
318+
}
319+
switch (type) {
320+
case "u8":
321+
case "i8":
322+
totalBytes += 1;
323+
break;
324+
case "u12":
325+
case "u14":
326+
case "i12>":
327+
case "i12*>":
328+
case "u16":
329+
case "u16r":
330+
case "i16":
331+
case "i16r":
332+
totalBytes += 2;
333+
break;
334+
case "u24":
335+
case "u24r":
336+
case "i24r":
337+
totalBytes += 3;
338+
break;
339+
case "u32":
340+
case "u32r":
341+
case "i32":
342+
case "i32r":
343+
totalBytes += 4;
344+
break;
345+
case "u32signed":
346+
totalBytes += 5;
347+
break;
348+
case "u72":
349+
totalBytes += 9;
350+
break;
351+
default:
352+
throw new IllegalArgumentException("Unknown data type: " + type);
353+
}
354+
}
355+
356+
return totalBytes;
357+
}
358+
359+
311360
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.shimmerresearch.driverUtilities;
2+
import static org.junit.Assert.*;
3+
4+
import org.junit.Test;
5+
6+
public class API_XXXXX_UtilParseData {
7+
@Test
8+
public void testSingleByteTypes() {
9+
String[] types = {"u8", "i8"};
10+
assertEquals(2, UtilParseData.countBytesFromDataTypes(types));
11+
}
12+
13+
@Test
14+
public void testTwoByteTypes() {
15+
String[] types = {"u12", "u14", "i12>", "i12*>", "u16", "u16r", "i16", "i16r"};
16+
assertEquals(2 * types.length, UtilParseData.countBytesFromDataTypes(types));
17+
}
18+
19+
@Test
20+
public void testThreeByteTypes() {
21+
String[] types = {"u24", "u24r", "i24r"};
22+
assertEquals(9, UtilParseData.countBytesFromDataTypes(types));
23+
}
24+
25+
@Test
26+
public void testFourByteTypes() {
27+
String[] types = {"u32", "u32r", "i32", "i32r"};
28+
assertEquals(4 * types.length, UtilParseData.countBytesFromDataTypes(types));
29+
}
30+
31+
@Test
32+
public void testFiveByteType() {
33+
String[] types = {"u32signed"};
34+
assertEquals(5, UtilParseData.countBytesFromDataTypes(types));
35+
}
36+
37+
@Test
38+
public void testNineByteType() {
39+
String[] types = {"u72"};
40+
assertEquals(9, UtilParseData.countBytesFromDataTypes(types));
41+
}
42+
43+
@Test
44+
public void testMixedTypes() {
45+
String[] types = {"u8", "i8", "u16", "u24", "u32signed", "u72"};
46+
int expected = 1 + 1 + 2 + 3 + 5 + 9;
47+
assertEquals(expected, UtilParseData.countBytesFromDataTypes(types));
48+
}
49+
50+
@Test
51+
public void testEmptyInput() {
52+
String[] types = {};
53+
assertEquals(0, UtilParseData.countBytesFromDataTypes(types));
54+
}
55+
56+
@Test(expected = IllegalArgumentException.class)
57+
public void testUnknownTypeThrows() {
58+
String[] types = {"u8", "invalidType"};
59+
UtilParseData.countBytesFromDataTypes(types);
60+
}
61+
}

0 commit comments

Comments
 (0)