diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/algorithms/orientation/OrientationModule9DOF.java b/ShimmerDriver/src/main/java/com/shimmerresearch/algorithms/orientation/OrientationModule9DOF.java index daceba170..06199eccf 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/algorithms/orientation/OrientationModule9DOF.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/algorithms/orientation/OrientationModule9DOF.java @@ -295,7 +295,7 @@ public static class DatabaseChannelHandles{ Configuration.Shimmer3.SENSOR_ID.SHIMMER_LSM303_MAG, Configuration.Shimmer3.SENSOR_ID.SHIMMER_LSM6DSV_ACCEL_LN, Configuration.Shimmer3.SENSOR_ID.SHIMMER_LSM6DSV_GYRO, - Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG), + Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG), CHANNEL_UNITS.NO_UNITS, SENSOR_CHECK_METHOD.ANY, listChannelsEuler9DOF_LN); @@ -318,7 +318,7 @@ public static class DatabaseChannelHandles{ Configuration.Shimmer3.SENSOR_ID.SHIMMER_LSM303_MAG, Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2DW12_ACCEL_WR, Configuration.Shimmer3.SENSOR_ID.SHIMMER_LSM6DSV_GYRO, - Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG), + Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG), CHANNEL_UNITS.NO_UNITS, SENSOR_CHECK_METHOD.ANY, listChannelsQuat9DOF_WR); diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java index d4ebc68b3..d70e5635d 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/Configuration.java @@ -84,8 +84,8 @@ import com.shimmerresearch.sensors.bmpX80.SensorBMP390; import com.shimmerresearch.sensors.kionix.SensorKionixAccel; import com.shimmerresearch.sensors.kionix.SensorKionixKXRB52042; -import com.shimmerresearch.sensors.lisxmdl.SensorLIS2MDL; import com.shimmerresearch.sensors.lisxmdl.SensorLIS3MDL; +import com.shimmerresearch.sensors.lisxmdl.SensorLIS2MDL; import com.shimmerresearch.sensors.lsm303.SensorLSM303; import com.shimmerresearch.sensors.lsm303.SensorLSM303DLHC; import com.shimmerresearch.sensors.mpu9x50.SensorMPU9150; @@ -730,8 +730,8 @@ public class SENSOR_ID{ public static final int SHIMMER_LSM6DSV_GYRO = 38; public static final int SHIMMER_LIS2DW12_ACCEL_WR = 39; public static final int SHIMMER_ADXL371_ACCEL_HIGHG = 40; - public static final int SHIMMER_LIS3MDL_MAG = 41; - public static final int SHIMMER_LIS2MDL_MAG_WR = 42; + public static final int SHIMMER_LIS2MDL_MAG = 42; + public static final int SHIMMER_LIS3MDL_MAG_ALT = 41; public static final int SHIMMER_BMP390_PRESSURE = 43; // public static final int SHIMMER_EXG1_24BIT = 3; @@ -923,8 +923,8 @@ public enum LABEL_SENSOR_TILE{ GYRO(SensorMPU9X50.LABEL_SENSOR_TILE.GYRO), GYRO_3R(SensorLSM6DSV.LABEL_SENSOR_TILE.GYRO), MAG(SensorLSM303.LABEL_SENSOR_TILE.MAG), - MAG_3R(SensorLIS3MDL.LABEL_SENSOR_TILE.MAG), - WIDE_RANGE_MAG_3R(SensorLIS2MDL.LABEL_SENSOR_TILE.WIDE_RANGE_MAG), + MAG_3R(SensorLIS2MDL.LABEL_SENSOR_TILE.MAG), + ALT_MAG_3R(SensorLIS3MDL.LABEL_SENSOR_TILE.ALT_MAG), PRESSURE_TEMPERATURE_BMP180(SensorBMP180.LABEL_SENSOR_TILE.PRESSURE_TEMPERATURE), PRESSURE_TEMPERATURE_BMP280(SensorBMP280.LABEL_SENSOR_TILE.PRESSURE_TEMPERATURE), PRESSURE_TEMPERATURE_BMP390(SensorBMP390.LABEL_SENSOR_TILE.PRESSURE_TEMPERATURE), @@ -982,7 +982,7 @@ public class GuiLabelSensors{ // public static final String ACCEL_WR = SensorLSM303.GuiLabelSensors.ACCEL_WR; public static final String MAG = SensorLSM303DLHC.GuiLabelSensors.MAG; - public static final String WR_MAG_3R = SensorLIS2MDL.GuiLabelSensors.MAG_WR; + public static final String WR_MAG_3R = SensorLIS3MDL.GuiLabelSensors.MAG_ALT; // public static final String PRESS_TEMP_BMP180 = SensorBMP180.GuiLabelSensors.PRESS_TEMP_BMP180; @@ -1122,9 +1122,9 @@ public static class ObjectClusterSensorName{ public static String ACCEL_HIGHG_X = SensorADXL371.ObjectClusterSensorName.ACCEL_HIGHG_X; public static String ACCEL_HIGHG_Y = SensorADXL371.ObjectClusterSensorName.ACCEL_HIGHG_Y; public static String ACCEL_HIGHG_Z= SensorADXL371.ObjectClusterSensorName.ACCEL_HIGHG_Z; - public static String MAG_WR_X = SensorLIS2MDL.ObjectClusterSensorName.MAG_WR_X; - public static String MAG_WR_Y = SensorLIS2MDL.ObjectClusterSensorName.MAG_WR_Y; - public static String MAG_WR_Z= SensorLIS2MDL.ObjectClusterSensorName.MAG_WR_Z; + public static String ALT_MAG_X = SensorLIS3MDL.ObjectClusterSensorName.MAG_ALT_X; + public static String ALT_MAG_Y = SensorLIS3MDL.ObjectClusterSensorName.MAG_ALT_Y; + public static String ALT_MAG_Z= SensorLIS3MDL.ObjectClusterSensorName.MAG_ALT_Z; public static String BRIDGE_AMP_HIGH = SensorBridgeAmp.ObjectClusterSensorName.BRIDGE_AMP_HIGH; public static String BRIDGE_AMP_LOW = SensorBridgeAmp.ObjectClusterSensorName.BRIDGE_AMP_LOW; @@ -1504,7 +1504,7 @@ public static class CompatibilityInfoForMaps{ svoProto3DeluxeNewImuSdLog, svoProto3DeluxeNewImuLogAndStream); //Shimmer3r Mag - public static final List listOfCompatibleVersionInfoLISM3MDL = Arrays.asList( + public static final List listOfCompatibleVersionInfoLIS2MDL = Arrays.asList( svoShimmer3RImuLogAndStream, svoShimmer3RLogAndStream, svoShimmer3RImuAnyExpBrdLogAndStream, svoShimmer3RGsrUnifiedLogAndStream, @@ -1513,7 +1513,7 @@ public static class CompatibilityInfoForMaps{ svoShimmer3RProto3DeluxeLogAndStream); //Shimmer3r WR Mag - public static final List listOfCompatibleVersionInfoLIS2MDL = Arrays.asList( + public static final List listOfCompatibleVersionInfoLIS3MDL = Arrays.asList( svoShimmer3RImuLogAndStream, svoShimmer3RLogAndStream, svoShimmer3RImuAnyExpBrdLogAndStream, svoShimmer3RGsrUnifiedLogAndStream, diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java index dfb0f073c..67d4df4f1 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerObject.java @@ -78,8 +78,8 @@ import com.shimmerresearch.sensors.kionix.SensorKionixAccel; import com.shimmerresearch.sensors.kionix.SensorKionixKXRB52042; import com.shimmerresearch.sensors.kionix.SensorKionixKXTC92050; -import com.shimmerresearch.sensors.lisxmdl.SensorLIS2MDL; import com.shimmerresearch.sensors.lisxmdl.SensorLIS3MDL; +import com.shimmerresearch.sensors.lisxmdl.SensorLIS2MDL; import com.shimmerresearch.sensors.lsm6dsv.SensorLSM6DSV; import com.shimmerresearch.sensors.lis2dw12.SensorLIS2DW12; import com.shimmerresearch.sensors.lsm303.SensorLSM303; @@ -673,9 +673,9 @@ public String toString() { public SensorBMPX80 mSensorBMPX80 = new SensorBMP180(this); // Shimmer3r - Mag - private SensorLIS3MDL mSensorLIS3MDL = new SensorLIS3MDL(this); - // Shimmer3r - Wide-range Mag - private SensorLIS2MDL mSensorLIS2MDL = new SensorLIS2MDL(this); + private SensorLIS2MDL mSensorLIS2MDL = new SensorLIS2MDL(this); + // Shimmer3r - Alt Mag + private SensorLIS3MDL mSensorLIS3MDL = new SensorLIS3MDL(this); // Shimmer3R - WR Accel private SensorLIS2DW12 mSensorLIS2DW12 = new SensorLIS2DW12(this); // Shimmer3r - Accel LN & Gyro @@ -1150,15 +1150,15 @@ else if (isShimmerGen3()) { } 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); + int iMagX=getSignalIndex(Shimmer3.ObjectClusterSensorName.ALT_MAG_X); + int iMagY=getSignalIndex(Shimmer3.ObjectClusterSensorName.ALT_MAG_Y); + int iMagZ=getSignalIndex(Shimmer3.ObjectClusterSensorName.ALT_MAG_Z); tempData[0]=(double)newPacketInt[iMagX]; tempData[1]=(double)newPacketInt[iMagY]; tempData[2]=(double)newPacketInt[iMagZ]; - objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_WR_X,CHANNEL_TYPE.UNCAL.toString(),CHANNEL_UNITS.NO_UNITS,(double)newPacketInt[iMagX]); - objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_WR_Y,CHANNEL_TYPE.UNCAL.toString(),CHANNEL_UNITS.NO_UNITS,(double)newPacketInt[iMagY]); - objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_WR_Z,CHANNEL_TYPE.UNCAL.toString(),CHANNEL_UNITS.NO_UNITS,(double)newPacketInt[iMagZ]); + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.ALT_MAG_X,CHANNEL_TYPE.UNCAL.toString(),CHANNEL_UNITS.NO_UNITS,(double)newPacketInt[iMagX]); + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.ALT_MAG_Y,CHANNEL_TYPE.UNCAL.toString(),CHANNEL_UNITS.NO_UNITS,(double)newPacketInt[iMagY]); + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.ALT_MAG_Z,CHANNEL_TYPE.UNCAL.toString(),CHANNEL_UNITS.NO_UNITS,(double)newPacketInt[iMagZ]); uncalibratedData[iMagX]=(double)newPacketInt[iMagX]; uncalibratedData[iMagY]=(double)newPacketInt[iMagY]; uncalibratedData[iMagZ]=(double)newPacketInt[iMagZ]; @@ -1166,21 +1166,21 @@ else if (isShimmerGen3()) { uncalibratedDataUnits[iMagY]=CHANNEL_UNITS.NO_UNITS; uncalibratedDataUnits[iMagZ]=CHANNEL_UNITS.NO_UNITS; if (mEnableCalibration){ - double[] wrMagCalibratedData; + double[] altMagCalibratedData; // magCalibratedData=UtilCalibration.calibrateInertialSensorData(tempData, mAlignmentMatrixMagnetometer, mSensitivityMatrixMagnetometer, mOffsetVectorMagnetometer); - wrMagCalibratedData=UtilCalibration.calibrateInertialSensorData(tempData, getCurrentCalibDetailsMagWr()); - calibratedData[iMagX]=wrMagCalibratedData[0]; - calibratedData[iMagY]=wrMagCalibratedData[1]; - calibratedData[iMagZ]=wrMagCalibratedData[2]; + altMagCalibratedData=UtilCalibration.calibrateInertialSensorData(tempData, getCurrentCalibDetailsMagAlt()); + calibratedData[iMagX]=altMagCalibratedData[0]; + calibratedData[iMagY]=altMagCalibratedData[1]; + calibratedData[iMagZ]=altMagCalibratedData[2]; if(isShimmerGen3R()) { - objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_WR_X,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,wrMagCalibratedData[0],mSensorLIS2MDL.mIsUsingDefaultWRMagParam); - objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_WR_Y,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,wrMagCalibratedData[1],mSensorLIS2MDL.mIsUsingDefaultWRMagParam); - objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_WR_Z,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,wrMagCalibratedData[2],mSensorLIS2MDL.mIsUsingDefaultWRMagParam); + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.ALT_MAG_X,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,altMagCalibratedData[0],mSensorLIS3MDL.mIsUsingDefaultAltMagParam); + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.ALT_MAG_Y,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,altMagCalibratedData[1],mSensorLIS3MDL.mIsUsingDefaultAltMagParam); + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.ALT_MAG_Z,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,altMagCalibratedData[2],mSensorLIS3MDL.mIsUsingDefaultAltMagParam); } - magnetometer.x=wrMagCalibratedData[0]; - magnetometer.y=wrMagCalibratedData[1]; - magnetometer.z=wrMagCalibratedData[2]; + magnetometer.x=altMagCalibratedData[0]; + magnetometer.y=altMagCalibratedData[1]; + magnetometer.z=altMagCalibratedData[2]; calibratedDataUnits[iMagX]=CHANNEL_UNITS.MAG_CAL_UNIT; calibratedDataUnits[iMagY]=CHANNEL_UNITS.MAG_CAL_UNIT; calibratedDataUnits[iMagZ]=CHANNEL_UNITS.MAG_CAL_UNIT; @@ -1290,9 +1290,9 @@ else if (isShimmerGen3()) { calibratedData[iMagZ]=magCalibratedData[2]; if(isShimmerGen3R()) { - objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_X,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,magCalibratedData[0],mSensorLIS3MDL.mIsUsingDefaultMagParam); - objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_Y,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,magCalibratedData[1],mSensorLIS3MDL.mIsUsingDefaultMagParam); - objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_Z,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,magCalibratedData[2],mSensorLIS3MDL.mIsUsingDefaultMagParam); + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_X,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,magCalibratedData[0],mSensorLIS2MDL.mIsUsingDefaultMagParam); + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_Y,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,magCalibratedData[1],mSensorLIS2MDL.mIsUsingDefaultMagParam); + objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_Z,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,magCalibratedData[2],mSensorLIS2MDL.mIsUsingDefaultMagParam); } else { objectCluster.addDataToMap(Shimmer3.ObjectClusterSensorName.MAG_X,CHANNEL_TYPE.CAL.toString(),CHANNEL_UNITS.MAG_CAL_UNIT,magCalibratedData[0],mSensorLSM303.mIsUsingDefaultMagParam); @@ -3408,7 +3408,7 @@ else if ((byte)signalId[i]==(byte)0x16){ } else if ((byte)signalId[i]==(byte)0x17){ if (getHardwareVersion()==HW_ID.SHIMMER_3R){ - signalNameArray[i+1]=Shimmer3.ObjectClusterSensorName.MAG_WR_X; + signalNameArray[i+1]=Shimmer3.ObjectClusterSensorName.ALT_MAG_X; signalDataTypeArray[i+1] = "i16"; packetSize=packetSize+2; enabledSensors |= Configuration.Shimmer3.SensorBitmap.SENSOR_ALT_MAG; @@ -3416,7 +3416,7 @@ else if ((byte)signalId[i]==(byte)0x17){ } else if ((byte)signalId[i]==(byte)0x18){ if (getHardwareVersion()==HW_ID.SHIMMER_3R){ - signalNameArray[i+1]=Shimmer3.ObjectClusterSensorName.MAG_WR_Y; + signalNameArray[i+1]=Shimmer3.ObjectClusterSensorName.ALT_MAG_Y; signalDataTypeArray[i+1] = "i16"; packetSize=packetSize+2; enabledSensors |= Configuration.Shimmer3.SensorBitmap.SENSOR_ALT_MAG; @@ -3424,7 +3424,7 @@ else if ((byte)signalId[i]==(byte)0x18){ } else if ((byte)signalId[i]==(byte)0x19){ if (getHardwareVersion()==HW_ID.SHIMMER_3R){ - signalNameArray[i+1]=Shimmer3.ObjectClusterSensorName.MAG_WR_Z; + signalNameArray[i+1]=Shimmer3.ObjectClusterSensorName.ALT_MAG_Z; signalDataTypeArray[i+1] = "i16"; packetSize=packetSize+2; enabledSensors |= Configuration.Shimmer3.SensorBitmap.SENSOR_ALT_MAG; @@ -3966,7 +3966,8 @@ else if (getHardwareVersion()==HW_ID.SHIMMER_3R) { int msbGyroRange = (int)((mConfigByte0 >> 34) & 1); gyroRange = gyroRange + (msbGyroRange << 2); setGyroRange(gyroRange); - setLSM303MagRange(((int)(mConfigByte0 & 14680064))>>21); + //setLSM303MagRange(((int)(mConfigByte0 & 14680064))>>21); + setAltMagRange(((int)(mConfigByte0 & 14680064))>>21); setLIS2DW12DigitalAccelRate(((int)(mConfigByte0 & 0xF0))>>4); setLowPowerAccelWR((getLIS2DW12DigitalAccelRate()==1)? true:false); @@ -3974,10 +3975,12 @@ else if (getHardwareVersion()==HW_ID.SHIMMER_3R) { checkLowPowerGyro(); int magSamplingRate = (int)((mConfigByte0 >> 18) & 0x07); - int MSB_MAG_RATE = (int)((mConfigByte0 >> 43) & 0x07); //8+8+8+8+8+3 - magSamplingRate = magSamplingRate + (MSB_MAG_RATE << 3); + int altMagSamplingRate = (int)((mConfigByte0 >> 40) & 0x3F); //8+8+8+8+8 + //int MSB_MAG_RATE = (int)((mConfigByte0 >> 43) & 0x07); //8+8+8+8+8+3 + //magSamplingRate = magSamplingRate + (MSB_MAG_RATE << 3); setMagRate(magSamplingRate); - + setAltMagRate(altMagSamplingRate); + checkLowPowerMag(); // setPressureResolution((((int)(mConfigByte0 >>28)) & 3)); @@ -6612,7 +6615,7 @@ public void getCurrentCalibDetailsAccelAlt(byte[] bufferCalibrationParameters, C } public void getCurrentCalibDetailsMagWr(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { - getCurrentCalibDetailsMagWr().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); + getCurrentCalibDetailsMagAlt().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); } public void parseCalibParamFromPacketMag(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { @@ -6653,14 +6656,14 @@ protected CalibDetailsKinematic getCurrentCalibDetailsMag() { } else if(isShimmerGen3() || isShimmerGenGq()) { //GQ FOR LEGACY SUPPORT return mSensorLSM303.getCurrentCalibDetailsMag(); } else if(isShimmerGen3R()) { - return mSensorLIS3MDL.getCurrentCalibDetailsMag(); + return mSensorLIS2MDL.getCurrentCalibDetailsMag(); } return null; } - protected CalibDetailsKinematic getCurrentCalibDetailsMagWr() { + protected CalibDetailsKinematic getCurrentCalibDetailsMagAlt() { if(isShimmerGen3R()) { - return mSensorLIS2MDL.getCurrentCalibDetailsMagWr(); + return mSensorLIS3MDL.getCurrentCalibDetailsMagAlt(); } return null; } @@ -6705,7 +6708,7 @@ public void updateCurrentAccelLnCalibInUse(){ public void updateCurrentMagCalibInUse(){ if(isShimmerGen3R()) { - mSensorLIS3MDL.updateCurrentMagCalibInUse(); + mSensorLIS2MDL.updateCurrentMagCalibInUse(); } else { mSensorLSM303.updateCurrentMagCalibInUse(); } @@ -8512,12 +8515,19 @@ public void setLIS2DW12DigitalAccelRate(int mLIS2DW12DigitalAccelRate) { } } + public void setAltMagRange(int i){ + mSensorLIS3MDL.setLIS3MDLAltMagRange(i); + } + + public void setAltMagRate(int i){ + mSensorLIS3MDL.setLIS3MDLAltMagRate(i); + } public void setMagRange(int i){ if(isShimmerGen3()) { mSensorLSM303.setLSM303MagRange(i); } else if(isShimmerGen3R()) { - mSensorLIS3MDL.setLISMagRange(i); + mSensorLIS2MDL.setLISMagRange(i); } } @@ -8529,7 +8539,7 @@ public void setLSM303MagRange(int i){ if(isShimmerGen3()) { mSensorLSM303.setLSM303MagRange(i); } else if(isShimmerGen3R()) { - mSensorLIS3MDL.setLISMagRange(i); + mSensorLIS2MDL.setLISMagRange(i); } } @@ -8542,7 +8552,7 @@ public void setLSM303MagRange(int i){ */ private int setLSM303MagRateFromFreq(double freq) { if(isShimmerGen3R()) { - return mSensorLIS3MDL.setLIS3MDLMagRateFromFreq(freq); + return mSensorLIS2MDL.setLIS2MDLAltMagRateFromFreq(freq); } else{ return mSensorLSM303.setLSM303MagRateFromFreq(freq); } @@ -8554,7 +8564,7 @@ public void setMagRate(int magRate) { } else if (isShimmerGen3()){ mSensorLSM303.setLSM303MagRate(magRate); } else if (isShimmerGen3R()) { - mSensorLIS3MDL.setLISMagRate(magRate); + mSensorLIS2MDL.setLISMagRateInternal(magRate); } } @@ -8587,7 +8597,7 @@ public int getMagRate() { } else if (isShimmerGen3()){ return mSensorLSM303.getLSM303MagRate(); } else if (isShimmerGen3R()) { - return mSensorLIS3MDL.getLIS3MDLMagRate(); + return mSensorLIS2MDL.getLIS2MDLMagRate(); } return 0; } @@ -8687,7 +8697,7 @@ public boolean isUsingValidWRAccelParam(){ public double getCalibTimeMag() { if(isShimmerGen3R()) { - return mSensorLIS3MDL.getCalibTimeMag(); + return mSensorLIS2MDL.getCalibTimeMag(); } else { return mSensorLSM303.getCalibTimeMag(); } @@ -8695,7 +8705,7 @@ public double getCalibTimeMag() { public boolean isUsingDefaultMagParam(){ if(isShimmerGen3R()) { - return mSensorLIS3MDL.isUsingDefaultMagParam(); + return mSensorLIS2MDL.isUsingDefaultMagParam(); } else { return mSensorLSM303.isUsingDefaultMagParam(); } @@ -8703,18 +8713,18 @@ public boolean isUsingDefaultMagParam(){ public boolean isUsingValidMagParam(){ if (isShimmerGen3R()) { - return mSensorLIS3MDL.isUsingValidMagParam(); + return mSensorLIS2MDL.isUsingValidMagParam(); } else { return mSensorLSM303.isUsingValidMagParam(); } } - public boolean isUsingDefaultMagWRParam() { - return mSensorLIS2MDL.isUsingDefaultMagWRParam(); + public boolean isUsingDefaultMagAltParam() { + return mSensorLIS3MDL.isUsingDefaultMagAltParam(); } - public boolean isUsingValidMagWRParam() { - return mSensorLIS2MDL.isUsingValidMagWRParam(); + public boolean isUsingValidMagAltParam() { + return mSensorLIS3MDL.isUsingValidMagAltParam(); } /** @@ -8768,7 +8778,7 @@ public int getLowPowerAccelEnabled(){ public int getLowPowerMagEnabled() { if (isShimmerGen3R()) { - return mSensorLIS3MDL.getLowPowerMagEnabled(); + return mSensorLIS2MDL.getLowPowerMagEnabled(); } else { return mSensorLSM303.getLowPowerMagEnabled(); } @@ -8804,7 +8814,7 @@ public int getMagRange(){ } else if (isShimmerGen3()){ return mSensorLSM303.getMagRange(); } else if (isShimmerGen3R()) { - return mSensorLIS3MDL.getMagRange(); + return mSensorLIS2MDL.getMagRange(); } return 0; } @@ -8849,7 +8859,7 @@ public double[][] getOffsetVectorMatrixWRAccel(){ public double[][] getAlignmentMatrixMag(){ if (isShimmerGen3R()) { - return mSensorLIS3MDL.getAlignmentMatrixMag(); + return mSensorLIS2MDL.getAlignmentMatrixMag(); } else { return mSensorLSM303.getAlignmentMatrixMag(); } @@ -8857,7 +8867,7 @@ public double[][] getAlignmentMatrixMag(){ public double[][] getSensitivityMatrixMag(){ if (isShimmerGen3R()) { - return mSensorLIS3MDL.getSensitivityMatrixMag(); + return mSensorLIS2MDL.getSensitivityMatrixMag(); } else { return mSensorLSM303.getSensitivityMatrixMag(); } @@ -8865,7 +8875,7 @@ public double[][] getSensitivityMatrixMag(){ public double[][] getOffsetVectorMatrixMag(){ if (isShimmerGen3R()) { - return mSensorLIS3MDL.getOffsetVectorMatrixMag(); + return mSensorLIS2MDL.getOffsetVectorMatrixMag(); } else { return mSensorLSM303.getOffsetVectorMatrixMag(); } @@ -8892,23 +8902,23 @@ public double[][] getSensitivityMatrixHighGAccel(){ return null; } - public double[][] getOffsetVectorMatrixWRMag(){ + public double[][] getOffsetVectorMatrixAltMag(){ if (isShimmerGen3R()) { - return mSensorLIS2MDL.getOffsetVectorMatrixMagWr(); + return mSensorLIS3MDL.getOffsetVectorMatrixMagAlt(); } return null; } - public double[][] getAlignmentMatrixWRMag(){ + public double[][] getAlignmentMatrixAltMag(){ if (isShimmerGen3R()) { - return mSensorLIS2MDL.getAlignmentMatrixMagWr(); + return mSensorLIS3MDL.getAlignmentMatrixMagAlt(); } return null; } - public double[][] getSensitivityMatrixWRMag(){ + public double[][] getSensitivityMatrixAltMag(){ if (isShimmerGen3R()) { - return mSensorLIS2MDL.getSensitivityMatrixMagWr(); + return mSensorLIS3MDL.getSensitivityMatrixMagAlt(); } return null; } @@ -10823,7 +10833,7 @@ protected void determineCalibrationParamsForIMU(){ } else if(isShimmerGen3R()) { mSensorLSM6DSV.updateIsUsingDefaultLNAccelParam(); mSensorLIS2DW12.updateIsUsingDefaultWRAccelParam(); - mSensorLIS3MDL.updateIsUsingDefaultMagParam(); + mSensorLIS2MDL.updateIsUsingDefaultMagParam(); mSensorLSM6DSV.updateIsUsingDefaultGyroParam(); } } diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/shimmer2r3/ConfigByteLayoutShimmer3.java b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/shimmer2r3/ConfigByteLayoutShimmer3.java index bde1fd96a..8ee3783d1 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/driver/shimmer2r3/ConfigByteLayoutShimmer3.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/driver/shimmer2r3/ConfigByteLayoutShimmer3.java @@ -66,7 +66,7 @@ public class ConfigByteLayoutShimmer3 extends ConfigByteLayout implements Serial public int idxLSM303DLHCMagCalibration = 73; public int idxLSM303DLHCAccelCalibration = 94; //94->114 public int idxADXL371AltAccelCalibration = 256; - public int idxLIS2MDLAltMagCalibration = 285; + public int idxLIS3MDLAltMagCalibration = 285; // Derived Channels - used by SW not FW public int idxDerivedSensors0 = 0; @@ -157,16 +157,16 @@ public class ConfigByteLayoutShimmer3 extends ConfigByteLayout implements Serial public int maskEXPPowerEnable = 0x01; //Unused bits 3-0 //Config Byte4 - public int bitShiftLIS2MDLAltMagSamplingRate = 4; - public int maskLIS2MDLAltMagSamplingRate = 0x03; + public int bitShiftLIS3MDLAltMagSamplingRate = 0; + public int maskLIS3MDLAltMagSamplingRate = 0x3F; public int bitShiftADXL371AltAccelSamplingRate = 6; public int maskADXL371AltAccelSamplingRate = 0x03; public int bitShiftLSM6DSVGyroRangeMSB = 2; public int maskLSM6DSVGyroRangeMSB = 0x01; //Config Byte5 - public int maskLIS3MDLMagRateMSB = 0x07; - public int bitShiftLIS3MDLMagRateMSB = 3; + public int maskLIS2MDLMagRateMSB = 0x07; + public int bitShiftLIS2MDLMagRateMSB = 3; // Derived Channels - used by SW not FW public int maskDerivedChannelsByte = 0xFF; @@ -356,7 +356,7 @@ public ConfigByteLayoutShimmer3(int firmwareIdentifier, int firmwareVersionMajor idxLSM303DLHCMagCalibration = 76; idxLSM303DLHCAccelCalibration = 97; idxADXL371AltAccelCalibration = 256; - idxLIS2MDLAltMagCalibration = 285; + idxLIS3MDLAltMagCalibration = 285; } if(mShimmerVerObject.mHardwareVersion == HW_ID.SHIMMER_3R @@ -482,7 +482,7 @@ public HashMap getMapOfByteDescriptions(){ mapOfByteDescriptions.put(idxLSM303DLHCMagCalibration, "idxLSM303DLHCMagCalibration"); mapOfByteDescriptions.put(idxLSM303DLHCAccelCalibration, "idxLSM303DLHCAccelCalibration"); mapOfByteDescriptions.put(idxADXL371AltAccelCalibration, "idxADXL371AccelCalibration"); - mapOfByteDescriptions.put(idxLIS2MDLAltMagCalibration, "idxLIS2MDLMagCalibration"); + mapOfByteDescriptions.put(idxLIS3MDLAltMagCalibration, "idxLIS3MDLMagCalibration"); if(idxDerivedSensors0>0){ mapOfByteDescriptions.put(idxDerivedSensors0, "DerivedSensors0"); diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/lisxmdl/SensorLIS2MDL.java b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/lisxmdl/SensorLIS2MDL.java index c76e4cb05..f72dc5a52 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/lisxmdl/SensorLIS2MDL.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/lisxmdl/SensorLIS2MDL.java @@ -9,23 +9,24 @@ import org.apache.commons.lang3.ArrayUtils; -import com.shimmerresearch.bluetooth.BtCommandDetails; -import com.shimmerresearch.driver.ConfigByteLayout; -import com.shimmerresearch.driver.Configuration; -import com.shimmerresearch.driver.FormatCluster; import com.shimmerresearch.driver.Configuration.CHANNEL_UNITS; import com.shimmerresearch.driver.Configuration.COMMUNICATION_TYPE; import com.shimmerresearch.driver.Configuration.Shimmer3.CompatibilityInfoForMaps; import com.shimmerresearch.driver.ObjectCluster; -import com.shimmerresearch.driver.ShimmerDevice; -import com.shimmerresearch.driver.ShimmerObject; import com.shimmerresearch.driver.calibration.CalibDetails; import com.shimmerresearch.driver.calibration.CalibDetailsKinematic; import com.shimmerresearch.driver.calibration.UtilCalibration; import com.shimmerresearch.driver.calibration.CalibDetails.CALIB_READ_SOURCE; import com.shimmerresearch.driver.shimmer2r3.ConfigByteLayoutShimmer3; +import com.shimmerresearch.bluetooth.BtCommandDetails; +import com.shimmerresearch.driver.ConfigByteLayout; +import com.shimmerresearch.driver.Configuration; +import com.shimmerresearch.driver.FormatCluster; +import com.shimmerresearch.driver.ShimmerDevice; +import com.shimmerresearch.driver.ShimmerObject; import com.shimmerresearch.driverUtilities.ChannelDetails; import com.shimmerresearch.driverUtilities.ConfigOptionDetailsSensor; +import com.shimmerresearch.driverUtilities.ConfigOptionObject; import com.shimmerresearch.driverUtilities.SensorDetails; import com.shimmerresearch.driverUtilities.SensorDetailsRef; import com.shimmerresearch.driverUtilities.SensorGroupingDetails; @@ -37,124 +38,131 @@ import com.shimmerresearch.sensors.ActionSetting; public class SensorLIS2MDL extends AbstractSensor{ - + /** * */ - private static final long serialVersionUID = 4028368641088628178L; - - protected int mWRMagRange = 0; - public boolean mIsUsingDefaultWRMagParam = true; - protected int mLISWRMagRate = 4; - protected int mSensorIdWRMag = -1; + private static final long serialVersionUID = -2366590050010873738L; - public CalibDetailsKinematic mCurrentCalibDetailsMagWr = null; + protected int mMagRange = 0; + protected int mLISMagRate = 0; + public boolean mIsUsingDefaultMagParam = true; + protected int mSensorIdMag = -1; + protected boolean mLowPowerMag = false; + + public CalibDetailsKinematic mCurrentCalibDetailsMag = null; + //--------- Sensor specific variables start -------------- public static final double[][] DefaultAlignmentLIS2MDL = {{-1,0,0},{0,-1,0},{0,0,-1}}; // ---------- Mag start --------------- - public static final double[][] DefaultAlignmentMatrixWRMagShimmer3r = DefaultAlignmentLIS2MDL; - public static final double[][] DefaultOffsetVectorWRMagShimmer3r = {{0},{0},{0}}; + public static final double[][] DefaultAlignmentMatrixMagShimmer3r = DefaultAlignmentLIS2MDL; + public static final double[][] DefaultOffsetVectorMagShimmer3r = {{0},{0},{0}}; - public static final double[][] DefaultSensitivityMatrixWRMagShimmer3r = {{667,0,0},{0,667,0},{0,0,667}}; + public static final double[][] DefaultSensitivityMatrixMagShimmer3r = {{667,0,0},{0,667,0},{0,0,667}}; - private CalibDetailsKinematic calibDetailsMagWr = new CalibDetailsKinematic( - ListofLIS2MDLWRMagRangeConfigValues[0], - ListofLIS2MDLWRMagRange[0], - DefaultAlignmentMatrixWRMagShimmer3r, - DefaultSensitivityMatrixWRMagShimmer3r, - DefaultOffsetVectorWRMagShimmer3r); + private CalibDetailsKinematic calibDetailsMag = new CalibDetailsKinematic( + ListofLIS2MDLMagRangeConfigValues[0], + ListofLIS2MDLMagRange[0], + DefaultAlignmentMatrixMagShimmer3r, + DefaultSensitivityMatrixMagShimmer3r, + DefaultOffsetVectorMagShimmer3r); // ---------- Mag end --------------- public static class DatabaseChannelHandles{ - public static final String WR_MAG_X = "LIS2MDL_MAG_X"; - public static final String WR_MAG_Y = "LIS2MDL_MAG_Y"; - public static final String WR_MAG_Z = "LIS2MDL_MAG_Z"; + public static final String MAG_X = "LIS2MDL_MAG_X"; + public static final String MAG_Y = "LIS2MDL_MAG_Y"; + public static final String MAG_Z = "LIS2MDL_MAG_Z"; } public static final class DatabaseConfigHandle{ - public static final String WR_MAG_RATE = "LIS2MDL_WR_Mag_Rate"; - public static final String WR_MAG_RANGE = "LIS2MDL_WR_Mag_Range"; + public static final String MAG_RANGE = "LIS2MDL_Mag_Range"; + public static final String MAG_RATE = "LIS2MDL_Mag_Rate"; - public static final String MAG_WR_CALIB_TIME = "LIS2MDL_Mag_WR_Calib_Time"; - public static final String MAG_WR_OFFSET_X = "LIS2MDL_Mag_WR_Offset_X"; - public static final String MAG_WR_OFFSET_Y = "LIS2MDL_Mag_WR_Offset_Y"; - public static final String MAG_WR_OFFSET_Z = "LIS2MDL_Mag_WR_Offset_Z"; - public static final String MAG_WR_GAIN_X = "LIS2MDL_Mag_WR_Gain_X"; - public static final String MAG_WR_GAIN_Y = "LIS2MDL_Mag_WR_Gain_Y"; - public static final String MAG_WR_GAIN_Z = "LIS2MDL_Mag_WR_Gain_Z"; - public static final String MAG_WR_ALIGN_XX = "LIS2MDL_Mag_WR_Align_XX"; - public static final String MAG_WR_ALIGN_XY = "LIS2MDL_Mag_WR_Align_XY"; - public static final String MAG_WR_ALIGN_XZ = "LIS2MDL_Mag_WR_Align_XZ"; - public static final String MAG_WR_ALIGN_YX = "LIS2MDL_Mag_WR_Align_YX"; - public static final String MAG_WR_ALIGN_YY = "LIS2MDL_Mag_WR_Align_YY"; - public static final String MAG_WR_ALIGN_YZ = "LIS2MDL_Mag_WR_Align_YZ"; - public static final String MAG_WR_ALIGN_ZX = "LIS2MDL_Mag_WR_Align_ZX"; - public static final String MAG_WR_ALIGN_ZY = "LIS2MDL_Mag_WR_Align_ZY"; - public static final String MAG_WR_ALIGN_ZZ = "LIS2MDL_Mag_WR_Align_ZZ"; + public static final String MAG_LPM = "LIS2MDL_Mag_LPM"; - public static final List LIST_OF_CALIB_HANDLES_MAG = Arrays.asList( - DatabaseConfigHandle.MAG_WR_OFFSET_X, DatabaseConfigHandle.MAG_WR_OFFSET_Y, DatabaseConfigHandle.MAG_WR_OFFSET_Z, - DatabaseConfigHandle.MAG_WR_GAIN_X, DatabaseConfigHandle.MAG_WR_GAIN_Y, DatabaseConfigHandle.MAG_WR_GAIN_Z, - DatabaseConfigHandle.MAG_WR_ALIGN_XX, DatabaseConfigHandle.MAG_WR_ALIGN_XY, DatabaseConfigHandle.MAG_WR_ALIGN_XZ, - DatabaseConfigHandle.MAG_WR_ALIGN_YX, DatabaseConfigHandle.MAG_WR_ALIGN_YY, DatabaseConfigHandle.MAG_WR_ALIGN_YZ, - DatabaseConfigHandle.MAG_WR_ALIGN_ZX, DatabaseConfigHandle.MAG_WR_ALIGN_ZY, DatabaseConfigHandle.MAG_WR_ALIGN_ZZ); +// public static final String MAG = "LIS2MDL_Mag"; + public static final String MAG_CALIB_TIME = "LIS2MDL_Mag_Calib_Time"; + public static final String MAG_OFFSET_X = "LIS2MDL_Mag_Offset_X"; + public static final String MAG_OFFSET_Y = "LIS2MDL_Mag_Offset_Y"; + public static final String MAG_OFFSET_Z = "LIS2MDL_Mag_Offset_Z"; + public static final String MAG_GAIN_X = "LIS2MDL_Mag_Gain_X"; + public static final String MAG_GAIN_Y = "LIS2MDL_Mag_Gain_Y"; + public static final String MAG_GAIN_Z = "LIS2MDL_Mag_Gain_Z"; + public static final String MAG_ALIGN_XX = "LIS2MDL_Mag_Align_XX"; + public static final String MAG_ALIGN_XY = "LIS2MDL_Mag_Align_XY"; + public static final String MAG_ALIGN_XZ = "LIS2MDL_Mag_Align_XZ"; + public static final String MAG_ALIGN_YX = "LIS2MDL_Mag_Align_YX"; + public static final String MAG_ALIGN_YY = "LIS2MDL_Mag_Align_YY"; + public static final String MAG_ALIGN_YZ = "LIS2MDL_Mag_Align_YZ"; + public static final String MAG_ALIGN_ZX = "LIS2MDL_Mag_Align_ZX"; + public static final String MAG_ALIGN_ZY = "LIS2MDL_Mag_Align_ZY"; + public static final String MAG_ALIGN_ZZ = "LIS2MDL_Mag_Align_ZZ"; + + public static final List LIST_OF_CALIB_HANDLES_MAG = Arrays.asList( + DatabaseConfigHandle.MAG_OFFSET_X, DatabaseConfigHandle.MAG_OFFSET_Y, DatabaseConfigHandle.MAG_OFFSET_Z, + DatabaseConfigHandle.MAG_GAIN_X, DatabaseConfigHandle.MAG_GAIN_Y, DatabaseConfigHandle.MAG_GAIN_Z, + DatabaseConfigHandle.MAG_ALIGN_XX, DatabaseConfigHandle.MAG_ALIGN_XY, DatabaseConfigHandle.MAG_ALIGN_XZ, + DatabaseConfigHandle.MAG_ALIGN_YX, DatabaseConfigHandle.MAG_ALIGN_YY, DatabaseConfigHandle.MAG_ALIGN_YZ, + DatabaseConfigHandle.MAG_ALIGN_ZX, DatabaseConfigHandle.MAG_ALIGN_ZY, DatabaseConfigHandle.MAG_ALIGN_ZZ); } public class GuiLabelConfig{ - - public static final String LIS2MDL_WR_MAG_RANGE = "Wide Range Mag Range"; - public static final String LIS2MDL_WR_MAG_RATE = "Wide Range Mag Rate"; + + public static final String LIS2MDL_MAG_RANGE = "Mag Range"; + public static final String LIS2MDL_MAG_RATE = "Mag Rate"; - public static final String LIS2MDL_WR_MAG_DEFAULT_CALIB = "Wide Range Mag Default Calibration"; + public static final String LIS2MDL_MAG_LP = "Mag Low-Power Mode"; + public static final String LIS2MDL_MAG_DEFAULT_CALIB = "Mag Default Calibration"; //NEW - public static final String LIS2MDL_WR_MAG_CALIB_PARAM = "Wide Range Mag Calibration Details"; - public static final String LIS2MDL_WR_MAG_VALID_CALIB = "Wide Range Mag Valid Calibration"; + public static final String LIS2MDL_MAG_CALIB_PARAM = "Mag Calibration Details"; + public static final String LIS2MDL_MAG_VALID_CALIB = "Mag Valid Calibration"; + } public static class ObjectClusterSensorName{ - public static String MAG_WR_X = "Mag_WR_X"; - public static String MAG_WR_Y = "Mag_WR_Y"; - public static String MAG_WR_Z = "Mag_WR_Z"; + public static String MAG_X = "Mag_X"; + public static String MAG_Y = "Mag_Y"; + public static String MAG_Z = "Mag_Z"; } public class GuiLabelSensors{ - public static final String MAG_WR = "Wide-Range Magnetometer"; + public static final String MAG = "Magnetometer"; } public class LABEL_SENSOR_TILE{ - public static final String WIDE_RANGE_MAG = GuiLabelSensors.MAG_WR; + public static final String MAG = GuiLabelSensors.MAG; } - + //--------- Sensor specific variables end -------------- //--------- Configuration options start -------------- - public static final String[] ListofLIS2MDLWRMagRate={"10.0Hz","20.0Hz","50.0Hz","100.0Hz"}; - public static final Integer[] ListofLIS2MDLWRMagRateConfigValues={0,1,2,3}; - - public static final String[] ListofLIS2MDLWRMagRange={"+/- 49.152Ga"}; - public static final Integer[] ListofLIS2MDLWRMagRangeConfigValues={0}; - + public static final String[] ListofLIS2MDLMagRate={"10.0Hz","20.0Hz","50.0Hz","100.0Hz"}; + public static final Integer[] ListofLIS2MDLMagRateConfigValues={0,1,2,3}; + + public static final String[] ListofLIS2MDLMagRange ={"+/- 49.152Ga"}; + public static final Integer[] ListofLIS2MDLMagRangeConfigValues={0}; + public static final ConfigOptionDetailsSensor configOptionMagRange = new ConfigOptionDetailsSensor( - SensorLIS2MDL.GuiLabelConfig.LIS2MDL_WR_MAG_RANGE, - SensorLIS2MDL.DatabaseConfigHandle.WR_MAG_RANGE, - ListofLIS2MDLWRMagRange, - ListofLIS2MDLWRMagRangeConfigValues, + SensorLIS2MDL.GuiLabelConfig.LIS2MDL_MAG_RANGE, + SensorLIS2MDL.DatabaseConfigHandle.MAG_RANGE, + ListofLIS2MDLMagRange, + ListofLIS2MDLMagRangeConfigValues, ConfigOptionDetailsSensor.GUI_COMPONENT_TYPE.COMBOBOX, CompatibilityInfoForMaps.listOfCompatibleVersionInfoLIS2MDL); - + public static final ConfigOptionDetailsSensor configOptionMagRate = new ConfigOptionDetailsSensor( - SensorLIS2MDL.GuiLabelConfig.LIS2MDL_WR_MAG_RATE, - SensorLIS2MDL.DatabaseConfigHandle.WR_MAG_RATE, - ListofLIS2MDLWRMagRate, - ListofLIS2MDLWRMagRateConfigValues, + SensorLIS2MDL.GuiLabelConfig.LIS2MDL_MAG_RATE, + SensorLIS2MDL.DatabaseConfigHandle.MAG_RATE, + ListofLIS2MDLMagRate, + ListofLIS2MDLMagRateConfigValues, ConfigOptionDetailsSensor.GUI_COMPONENT_TYPE.COMBOBOX, CompatibilityInfoForMaps.listOfCompatibleVersionInfoLIS2MDL); @@ -163,96 +171,105 @@ public class LABEL_SENSOR_TILE{ //--------- Sensor info start -------------- public static final SensorDetailsRef sensorLIS2MDLMag = new SensorDetailsRef( - 0x200000, //== Configuration.Shimmer3.SensorBitmap.SENSOR_MAG will be: SensorBitmap.SENSOR_MAG, - 0x200000, //== Configuration.Shimmer3.SensorBitmap.SENSOR_MAG will be: SensorBitmap.SENSOR_MAG, - GuiLabelSensors.MAG_WR, + 0x20, //== Configuration.Shimmer3.SensorBitmap.SENSOR_MAG will be: SensorBitmap.SENSOR_MAG, + 0x20, //== Configuration.Shimmer3.SensorBitmap.SENSOR_MAG will be: SensorBitmap.SENSOR_MAG, + GuiLabelSensors.MAG, CompatibilityInfoForMaps.listOfCompatibleVersionInfoLIS2MDL, - Arrays.asList(GuiLabelConfig.LIS2MDL_WR_MAG_RANGE, - GuiLabelConfig.LIS2MDL_WR_MAG_RATE), - Arrays.asList(ObjectClusterSensorName.MAG_WR_X, - ObjectClusterSensorName.MAG_WR_Y, - ObjectClusterSensorName.MAG_WR_Z)); + Arrays.asList(GuiLabelConfig.LIS2MDL_MAG_RANGE, + GuiLabelConfig.LIS2MDL_MAG_RATE), + //MAG channel parsing order is XZY instead of XYZ but it would be better to represent it on the GUI in XYZ + Arrays.asList(ObjectClusterSensorName.MAG_X, + ObjectClusterSensorName.MAG_Y, + ObjectClusterSensorName.MAG_Z)); public static final Map mSensorMapRef; static { - Map aMap = new LinkedHashMap(); - aMap.put(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG_WR, SensorLIS2MDL.sensorLIS2MDLMag); + Map aMap = new LinkedHashMap(); + aMap.put(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG, SensorLIS2MDL.sensorLIS2MDLMag); mSensorMapRef = Collections.unmodifiableMap(aMap); } + //--------- Sensor info end -------------- - //--------- Channel info start -------------- + //--------- Channel info start -------------- public static final ChannelDetails channelLIS2MDLMagX = new ChannelDetails( - ObjectClusterSensorName.MAG_WR_X, - ObjectClusterSensorName.MAG_WR_X, - DatabaseChannelHandles.WR_MAG_X, - CHANNEL_DATA_TYPE.INT12, 2, CHANNEL_DATA_ENDIAN.LSB, + ObjectClusterSensorName.MAG_X, + ObjectClusterSensorName.MAG_X, + DatabaseChannelHandles.MAG_X, + CHANNEL_DATA_TYPE.INT16, 2, CHANNEL_DATA_ENDIAN.MSB, CHANNEL_UNITS.LOCAL_FLUX, Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL), - 0x17); + 0x07); public static final ChannelDetails channelLIS2MDLMagY = new ChannelDetails( - ObjectClusterSensorName.MAG_WR_Y, - ObjectClusterSensorName.MAG_WR_Y, - DatabaseChannelHandles.WR_MAG_Y, - CHANNEL_DATA_TYPE.INT12, 2, CHANNEL_DATA_ENDIAN.LSB, + ObjectClusterSensorName.MAG_Y, + ObjectClusterSensorName.MAG_Y, + DatabaseChannelHandles.MAG_Y, + CHANNEL_DATA_TYPE.INT16, 2, CHANNEL_DATA_ENDIAN.MSB, CHANNEL_UNITS.LOCAL_FLUX, Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL), - 0x18); + 0x08); public static final ChannelDetails channelLIS2MDLMagZ = new ChannelDetails( - ObjectClusterSensorName.MAG_WR_Z, - ObjectClusterSensorName.MAG_WR_Z, - DatabaseChannelHandles.WR_MAG_Z, - CHANNEL_DATA_TYPE.INT12, 2, CHANNEL_DATA_ENDIAN.LSB, + ObjectClusterSensorName.MAG_Z, + ObjectClusterSensorName.MAG_Z, + DatabaseChannelHandles.MAG_Z, + CHANNEL_DATA_TYPE.INT16, 2, CHANNEL_DATA_ENDIAN.MSB, CHANNEL_UNITS.LOCAL_FLUX, Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL), - 0x19); + 0x09); public static final Map mChannelMapRef; static { Map aMap = new LinkedHashMap(); - aMap.put(SensorLIS2MDL.ObjectClusterSensorName.MAG_WR_X, SensorLIS2MDL.channelLIS2MDLMagX); - aMap.put(SensorLIS2MDL.ObjectClusterSensorName.MAG_WR_Z, SensorLIS2MDL.channelLIS2MDLMagZ); - aMap.put(SensorLIS2MDL.ObjectClusterSensorName.MAG_WR_Y, SensorLIS2MDL.channelLIS2MDLMagY); + aMap.put(SensorLIS2MDL.ObjectClusterSensorName.MAG_X, SensorLIS2MDL.channelLIS2MDLMagX); + aMap.put(SensorLIS2MDL.ObjectClusterSensorName.MAG_Z, SensorLIS2MDL.channelLIS2MDLMagZ); + aMap.put(SensorLIS2MDL.ObjectClusterSensorName.MAG_Y, SensorLIS2MDL.channelLIS2MDLMagY); mChannelMapRef = Collections.unmodifiableMap(aMap); } - //--------- Channel info end -------------- - + + //--------- Channel info end -------------- + public static final SensorGroupingDetails sensorGroupLisMag = new SensorGroupingDetails( - LABEL_SENSOR_TILE.WIDE_RANGE_MAG, - Arrays.asList(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG_WR), + LABEL_SENSOR_TILE.MAG, + Arrays.asList(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG), CompatibilityInfoForMaps.listOfCompatibleVersionInfoLIS2MDL); - //--------- Bluetooth commands start -------------- - //still not being implemented for wr mag sensor due to unavailability in docs - public static final byte SET_ALT_MAG_CALIBRATION_COMMAND = (byte) 0xAF; - public static final byte ALT_MAG_CALIBRATION_RESPONSE = (byte) 0xB0; - public static final byte GET_ALT_MAG_CALIBRATION_COMMAND = (byte) 0xB1; - - public static final byte SET_ALT_MAG_SAMPLING_RATE_COMMAND = (byte) 0xB2; - public static final byte ALT_MAG_SAMPLING_RATE_RESPONSE = (byte) 0xB3; - public static final byte GET_ALT_MAG_SAMPLING_RATE_COMMAND = (byte) 0xB4; - - public static final Map mBtGetCommandMap; - static { - Map aMap = new LinkedHashMap(); - aMap.put(GET_ALT_MAG_CALIBRATION_COMMAND, new BtCommandDetails(GET_ALT_MAG_CALIBRATION_COMMAND, "GET_ALT_MAG_CALIBRATION_COMMAND", ALT_MAG_CALIBRATION_RESPONSE)); - aMap.put(GET_ALT_MAG_SAMPLING_RATE_COMMAND, new BtCommandDetails(GET_ALT_MAG_SAMPLING_RATE_COMMAND, "GET_ALT_MAG_SAMPLING_RATE_COMMAND", ALT_MAG_SAMPLING_RATE_RESPONSE)); - mBtGetCommandMap = Collections.unmodifiableMap(aMap); - } + //--------- Bluetooth commands start -------------- + public static final byte SET_MAG_CALIBRATION_COMMAND = (byte) 0x17; + public static final byte MAG_CALIBRATION_RESPONSE = (byte) 0x18; + public static final byte GET_MAG_CALIBRATION_COMMAND = (byte) 0x19; + + public static final byte SET_MAG_GAIN_COMMAND = (byte) 0x37; + public static final byte MAG_GAIN_RESPONSE = (byte) 0x38; + public static final byte GET_MAG_GAIN_COMMAND = (byte) 0x39; + + public static final byte SET_MAG_SAMPLING_RATE_COMMAND = (byte) 0x3A; + public static final byte MAG_SAMPLING_RATE_RESPONSE = (byte) 0x3B; + public static final byte GET_MAG_SAMPLING_RATE_COMMAND = (byte) 0x3C; + + public static final Map mBtGetCommandMap; + static { + Map aMap = new LinkedHashMap(); + aMap.put(GET_MAG_CALIBRATION_COMMAND, new BtCommandDetails(GET_MAG_CALIBRATION_COMMAND, "GET_MAG_CALIBRATION_COMMAND", MAG_CALIBRATION_RESPONSE)); + aMap.put(GET_MAG_GAIN_COMMAND, new BtCommandDetails(GET_MAG_GAIN_COMMAND, "GET_MAG_GAIN_COMMAND", MAG_GAIN_RESPONSE)); + aMap.put(GET_MAG_SAMPLING_RATE_COMMAND, new BtCommandDetails(GET_MAG_SAMPLING_RATE_COMMAND, "GET_MAG_SAMPLING_RATE_COMMAND", MAG_SAMPLING_RATE_RESPONSE)); + mBtGetCommandMap = Collections.unmodifiableMap(aMap); + } + + public static final Map mBtSetCommandMap; + static { + Map aMap = new LinkedHashMap(); + aMap.put(SET_MAG_CALIBRATION_COMMAND, new BtCommandDetails(SET_MAG_CALIBRATION_COMMAND, "SET_MAG_CALIBRATION_COMMAND")); + aMap.put(SET_MAG_GAIN_COMMAND, new BtCommandDetails(SET_MAG_GAIN_COMMAND, "SET_MAG_GAIN_COMMAND")); + aMap.put(SET_MAG_SAMPLING_RATE_COMMAND, new BtCommandDetails(SET_MAG_SAMPLING_RATE_COMMAND, "SET_MAG_SAMPLING_RATE_COMMAND")); + mBtSetCommandMap = Collections.unmodifiableMap(aMap); + } + //--------- Bluetooth commands end -------------- - public static final Map mBtSetCommandMap; - static { - Map aMap = new LinkedHashMap(); - aMap.put(SET_ALT_MAG_CALIBRATION_COMMAND, new BtCommandDetails(SET_ALT_MAG_CALIBRATION_COMMAND, "SET_ALT_MAG_CALIBRATION_COMMAND")); - aMap.put(SET_ALT_MAG_SAMPLING_RATE_COMMAND, new BtCommandDetails(SET_ALT_MAG_SAMPLING_RATE_COMMAND, "SET_ALT_MAG_SAMPLING_RATE_COMMAND")); - mBtSetCommandMap = Collections.unmodifiableMap(aMap); - } - //--------- Bluetooth commands end -------------- + //--------- Constructors for this class start -------------- - //--------- Constructors for this class start -------------- public SensorLIS2MDL() { super(SENSORS.LIS2MDL); initialise(); @@ -267,7 +284,8 @@ public SensorLIS2MDL(ShimmerDevice shimmerDevice) { super(SENSORS.LIS2MDL, shimmerDevice); initialise(); } - //--------- Constructors for this class end -------------- + + //--------- Constructors for this class end -------------- //--------- Abstract methods implemented start -------------- @@ -278,6 +296,7 @@ public void generateSensorMap() { @Override public void generateConfigOptionsMap() { + mConfigOptionsMap.clear(); addConfigOption(configOptionMagRange); addConfigOption(configOptionMagRate); } @@ -285,87 +304,98 @@ public void generateConfigOptionsMap() { @Override public void generateSensorGroupMapping() { mSensorGroupingMap = new LinkedHashMap(); - mSensorGroupingMap.put(Configuration.Shimmer3.LABEL_SENSOR_TILE.WIDE_RANGE_MAG_3R.ordinal(), sensorGroupLisMag); + mSensorGroupingMap.put(Configuration.Shimmer3.LABEL_SENSOR_TILE.MAG_3R.ordinal(), sensorGroupLisMag); super.updateSensorGroupingMap(); - } - - @Override + } + + @Override public Object getSettings(String componentName, COMMUNICATION_TYPE commType) { // TODO Auto-generated method stub + //XXX - RS: Also returning null in BMP180 and GSR sensors classes return null; } - @Override + @Override public ActionSetting setSettings(String componentName, Object valueToSet, COMMUNICATION_TYPE commType) { + // Object returnValue = null; ActionSetting actionsetting = new ActionSetting(commType); - + return actionsetting; + } - + @Override public LinkedHashMap generateConfigMap() { - LinkedHashMap mapOfConfig = new LinkedHashMap(); - - mapOfConfig.put(SensorLIS2MDL.DatabaseConfigHandle.WR_MAG_RANGE, getWRMagRange()); - mapOfConfig.put(SensorLIS2MDL.DatabaseConfigHandle.WR_MAG_RATE, getLIS2MDLWRMagRate()); - +LinkedHashMap mapOfConfig = new LinkedHashMap(); + + mapOfConfig.put(SensorLIS2MDL.DatabaseConfigHandle.MAG_RATE, getLIS2MDLMagRate()); + mapOfConfig.put(SensorLIS2MDL.DatabaseConfigHandle.MAG_RANGE, getMagRange()); + super.addCalibDetailsToDbMap(mapOfConfig, - getCurrentCalibDetailsMagWr(), + getCurrentCalibDetailsMag(), SensorLIS2MDL.DatabaseConfigHandle.LIST_OF_CALIB_HANDLES_MAG, - SensorLIS2MDL.DatabaseConfigHandle.MAG_WR_CALIB_TIME); + SensorLIS2MDL.DatabaseConfigHandle.MAG_CALIB_TIME); return mapOfConfig; } - public CalibDetailsKinematic getCurrentCalibDetailsMagWr(){ - return mCurrentCalibDetailsMagWr; + public CalibDetailsKinematic getCurrentCalibDetailsMag(){ +// return getCurrentCalibDetails(mSensorIdMag, getMagRange()); + if(mCurrentCalibDetailsMag==null){ + updateCurrentMagCalibInUse(); + } + return mCurrentCalibDetailsMag; } - public void updateCurrentMagWrCalibInUse(){ + public void updateCurrentMagCalibInUse(){ // mCurrentCalibDetailsMag = getCurrentCalibDetailsMag(); - mCurrentCalibDetailsMagWr = getCurrentCalibDetailsIfKinematic(mSensorIdWRMag, getWRMagRange()); + mCurrentCalibDetailsMag = getCurrentCalibDetailsIfKinematic(mSensorIdMag, getMagRange()); } - public int getWRMagRange() { - return mWRMagRange; + public int getMagRange() { + return mMagRange; } - public int getLIS2MDLWRMagRate() { - return mLISWRMagRate; + public int getLIS2MDLMagRate() { + return mLISMagRate; } - public void setLIS2MDLWRMagRate(int valueToSet){ - mLISWRMagRate = valueToSet; + public void setLISMagRange(int valueToSet){ + if(ArrayUtils.contains(ListofLIS2MDLMagRangeConfigValues, valueToSet)){ + mMagRange = valueToSet; + updateCurrentMagCalibInUse(); + } } - public void setWRMagRange(int valueToSet) { - setLIS2MDLWRMagRange(valueToSet); + public void setLIS2MDLMagRate(int valueToSet){ + mLISMagRate = valueToSet; } - public void setLIS2MDLWRMagRange(int i) { - if(ArrayUtils.contains(ListofLIS2MDLWRMagRateConfigValues, i)){ - mWRMagRange = i; - updateCurrentMagWrCalibInUse(); - } - + public void setLISMagRateInternal(int samplingRateHz){ + mLISMagRate = samplingRateHz; } - + @Override public void parseConfigMap(LinkedHashMap mapOfConfigPerShimmer) { - - if(mapOfConfigPerShimmer.containsKey(SensorLIS2MDL.DatabaseConfigHandle.WR_MAG_RANGE)){ - setWRMagRange(((Double) mapOfConfigPerShimmer.get(SensorLIS2MDL.DatabaseConfigHandle.WR_MAG_RANGE)).intValue()); + + if (mapOfConfigPerShimmer.containsKey(SensorLIS2MDL.DatabaseConfigHandle.MAG_LPM)) { + setLowPowerMag( + ((Double) mapOfConfigPerShimmer.get(SensorLIS2MDL.DatabaseConfigHandle.MAG_LPM)) > 0 ? true + : false); } - if(mapOfConfigPerShimmer.containsKey(SensorLIS2MDL.DatabaseConfigHandle.WR_MAG_RATE)){ - setLIS2MDLWRMagRate(((Double) mapOfConfigPerShimmer.get(SensorLIS2MDL.DatabaseConfigHandle.WR_MAG_RATE)).intValue()); + if(mapOfConfigPerShimmer.containsKey(SensorLIS2MDL.DatabaseConfigHandle.MAG_RANGE)){ + setLISMagRange(((Double) mapOfConfigPerShimmer.get(SensorLIS2MDL.DatabaseConfigHandle.MAG_RANGE)).intValue()); + } + if(mapOfConfigPerShimmer.containsKey(SensorLIS2MDL.DatabaseConfigHandle.MAG_RATE)){ + setLIS2MDLMagRate(((Double) mapOfConfigPerShimmer.get(SensorLIS2MDL.DatabaseConfigHandle.MAG_RATE)).intValue()); } //Magnetometer Calibration Configuration parseCalibDetailsKinematicFromDb(mapOfConfigPerShimmer, - Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG_WR, - getWRMagRange(), + Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG, + getMagRange(), SensorLIS2MDL.DatabaseConfigHandle.LIST_OF_CALIB_HANDLES_MAG, - SensorLIS2MDL.DatabaseConfigHandle.MAG_WR_CALIB_TIME); + SensorLIS2MDL.DatabaseConfigHandle.MAG_CALIB_TIME); } @Override @@ -373,70 +403,94 @@ public boolean processResponse(int responseCommand, Object parsedResponse, COMMU // TODO Auto-generated method stub return false; } - + //--------- Abstract methods implemented end -------------- - + //--------- Optional methods to override in Sensor Class start -------- @Override public void initialise() { - mSensorIdWRMag = Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG_WR; + mSensorIdMag = Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG; super.initialise(); - mWRMagRange = ListofLIS2MDLWRMagRangeConfigValues[0]; + mMagRange = ListofLIS2MDLMagRangeConfigValues[0]; - updateCurrentMagWrCalibInUse(); + updateCurrentMagCalibInUse(); } @Override public void generateCalibMap() { super.generateCalibMap(); - TreeMap calibMapMagWr = new TreeMap(); - calibMapMagWr.put(calibDetailsMagWr.mRangeValue, calibDetailsMagWr); - setCalibrationMapPerSensor(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG_WR, calibMapMagWr); + TreeMap calibMapMag = new TreeMap(); + calibMapMag.put(calibDetailsMag.mRangeValue, calibDetailsMag); + setCalibrationMapPerSensor(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG, calibMapMag); - updateCurrentMagWrCalibInUse(); + updateCurrentMagCalibInUse(); } //--------- Optional methods to override in Sensor Class end -------- //--------- Sensor specific methods start -------------- + + public int setLIS2MDLAltMagRateFromFreq(double freq) { + boolean isEnabled = isSensorEnabled(mSensorIdMag); +// System.out.println("Setting Sampling Rate: " + freq + "\tmLowPowerAccelAlt:" + mLowPowerAccelAlt); + //setLISMagRateInternal(getMagRateFromFreqForSensor(isEnabled, freq)); + if (isLowPowerMagEnabled()) { + mLISMagRate = getMagRateFromFreqForSensor(isEnabled, freq, 0); + } else { + mLISMagRate = getMagRateFromFreqForSensor(isEnabled, freq, -1); + } + return mLISMagRate; + } - public double getCalibTimeMagWR() { - return mCurrentCalibDetailsMagWr.getCalibTimeMs(); + public boolean checkLowPowerMag() { + setLowPowerMag((getLIS2MDLMagRate() == 0) ? true : false); // 10Hz + return isLowPowerMagEnabled(); } - public boolean isUsingValidMagWRParam() { - if(!UtilShimmer.isAllZeros(getAlignmentMatrixMagWr()) && !UtilShimmer.isAllZeros(getSensitivityMatrixMagWr())){ - return true; - }else{ - return false; - } + public boolean isLowPowerMagEnabled() { + return mLowPowerMag; + } + + public int getLowPowerMagEnabled() { + return (isLowPowerMagEnabled() ? 1 : 0); } - public void updateIsUsingDefaultWRMagParam() { - mIsUsingDefaultWRMagParam = getCurrentCalibDetailsMagWr().isUsingDefaultParameters(); + public void setLowPowerMag(boolean enable) { + mLowPowerMag = enable; + if (mShimmerDevice != null) { + setLIS2MDLAltMagRateFromFreq(getSamplingRateShimmer()); + } } - public int getMagRateFromFreqForSensor(boolean isEnabled, double freq) { + public int getMagRateFromFreqForSensor(boolean isEnabled, double freq, int powerMode) { int magRate = 0; // 10Hz - - if (freq<10.0){ - magRate = 0; // 10Hz - } else if (freq<20.0){ - magRate = 1; // 20Hz - } else if (freq<50.0) { - magRate = 2; // 50Hz - } else { - magRate = 3; // 100Hz + + if (isEnabled) { + if (powerMode == 0) // low power mode enabled + { + magRate = 0; // 10Hz + } else { + if (freq<10.0){ + magRate = 0; // 10Hz + } else if (freq<20.0){ + magRate = 1; // 20Hz + } else if (freq<50.0) { + magRate = 2; // 50Hz + } else { + magRate = 3; // 100Hz + } + } } + return magRate; } - + public static String parseFromDBColumnToGUIChannel(String databaseChannelHandle) { return AbstractSensor.parseFromDBColumnToGUIChannel(mChannelMapRef, databaseChannelHandle); } - + public static String parseFromGUIChannelsToDBColumn(String objectClusterName) { return AbstractSensor.parseFromGUIChannelsToDBColumn(mChannelMapRef, objectClusterName); } @@ -450,36 +504,34 @@ public ObjectCluster processDataCustom(SensorDetails sensorDetails, byte[] rawDa //Calibration if(mEnableCalibration){ - // get uncalibrated data for each (sub)sensor - if(sensorDetails.mSensorDetailsRef.mGuiFriendlyLabel.equals(GuiLabelSensors.MAG_WR) && mCurrentCalibDetailsMagWr!=null){ - double[] unCalibratedMagWrData = new double[3]; + if(sensorDetails.mSensorDetailsRef.mGuiFriendlyLabel.equals(GuiLabelSensors.MAG) && mCurrentCalibDetailsMag!=null){ + double[] unCalibratedMagData = new double[3]; for (ChannelDetails channelDetails:sensorDetails.mListOfChannels){ - //Uncalibrated Mag WR data - if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_WR_X)){ - unCalibratedMagWrData[0] = ((FormatCluster)ObjectCluster.returnFormatCluster(objectCluster.getCollectionOfFormatClusters(channelDetails.mObjectClusterName), channelDetails.mChannelFormatDerivedFromShimmerDataPacket.toString())).mData; - } - else if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_WR_Y)){ - unCalibratedMagWrData[1] = ((FormatCluster)ObjectCluster.returnFormatCluster(objectCluster.getCollectionOfFormatClusters(channelDetails.mObjectClusterName), channelDetails.mChannelFormatDerivedFromShimmerDataPacket.toString())).mData; + //Uncalibrated Magnetometer data + if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_X)){ + unCalibratedMagData[0] = ((FormatCluster)ObjectCluster.returnFormatCluster(objectCluster.getCollectionOfFormatClusters(channelDetails.mObjectClusterName), channelDetails.mChannelFormatDerivedFromShimmerDataPacket.toString())).mData; } - else if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_WR_Z)){ - unCalibratedMagWrData[2] = ((FormatCluster)ObjectCluster.returnFormatCluster(objectCluster.getCollectionOfFormatClusters(channelDetails.mObjectClusterName), channelDetails.mChannelFormatDerivedFromShimmerDataPacket.toString())).mData; + else if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_Y)){ + unCalibratedMagData[1] = ((FormatCluster)ObjectCluster.returnFormatCluster(objectCluster.getCollectionOfFormatClusters(channelDetails.mObjectClusterName), channelDetails.mChannelFormatDerivedFromShimmerDataPacket.toString())).mData; } + else if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_Z)){ + unCalibratedMagData[2] = ((FormatCluster)ObjectCluster.returnFormatCluster(objectCluster.getCollectionOfFormatClusters(channelDetails.mObjectClusterName), channelDetails.mChannelFormatDerivedFromShimmerDataPacket.toString())).mData; + } } - double[] calibratedMagWrData = UtilCalibration.calibrateInertialSensorData(unCalibratedMagWrData, mCurrentCalibDetailsMagWr); -// double[] calibratedAccelWrData = UtilCalibration.calibrateInertialSensorData(unCalibratedAccelWrData, mAlignmentMatrixWRAccel, mSensitivityMatrixWRAccel, mOffsetVectorWRAccel); - - //Add calibrated data to Object cluster - if(sensorDetails.mSensorDetailsRef.mGuiFriendlyLabel.equals(GuiLabelSensors.MAG_WR)){ +// double[] calibratedMagData = UtilCalibration.calibrateInertialSensorData(unCalibratedMagData, mAlignmentMatrixMagnetometer, mSensitivityMatrixMagnetometer, mOffsetVectorMagnetometer); + double[] calibratedMagData = UtilCalibration.calibrateInertialSensorData(unCalibratedMagData, mCurrentCalibDetailsMag); + + if(sensorDetails.mSensorDetailsRef.mGuiFriendlyLabel.equals(GuiLabelSensors.MAG)){ for (ChannelDetails channelDetails:sensorDetails.mListOfChannels){ - if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_WR_X)){ - objectCluster.addCalData(channelDetails, calibratedMagWrData[0], objectCluster.getIndexKeeper()-3, isUsingDefaultMagWRParam()); + if(channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_X)){ + objectCluster.addCalData(channelDetails, calibratedMagData[0], objectCluster.getIndexKeeper()-3, isUsingDefaultMagParam()); } - else if(channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_WR_Y)){ - objectCluster.addCalData(channelDetails, calibratedMagWrData[1], objectCluster.getIndexKeeper()-2, isUsingDefaultMagWRParam()); + else if(channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_Y)){ + objectCluster.addCalData(channelDetails, calibratedMagData[1], objectCluster.getIndexKeeper()-2, isUsingDefaultMagParam()); } - else if(channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_WR_Z)){ - objectCluster.addCalData(channelDetails, calibratedMagWrData[2], objectCluster.getIndexKeeper()-1, isUsingDefaultMagWRParam()); + else if(channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_Z)){ + objectCluster.addCalData(channelDetails, calibratedMagData[2], objectCluster.getIndexKeeper()-1, isUsingDefaultMagParam()); } } } @@ -487,29 +539,27 @@ else if(channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_WR_ //Debugging if(mIsDebugOutput){ super.consolePrintChannelsCal(objectCluster, Arrays.asList( - new String[]{ObjectClusterSensorName.MAG_WR_X, CHANNEL_TYPE.UNCAL.toString()}, - new String[]{ObjectClusterSensorName.MAG_WR_Y, CHANNEL_TYPE.UNCAL.toString()}, - new String[]{ObjectClusterSensorName.MAG_WR_Z, CHANNEL_TYPE.UNCAL.toString()}, - new String[]{ObjectClusterSensorName.MAG_WR_X, CHANNEL_TYPE.CAL.toString()}, - new String[]{ObjectClusterSensorName.MAG_WR_Y, CHANNEL_TYPE.CAL.toString()}, - new String[]{ObjectClusterSensorName.MAG_WR_Z, CHANNEL_TYPE.CAL.toString()})); + new String[]{ObjectClusterSensorName.MAG_X, CHANNEL_TYPE.UNCAL.toString()}, + new String[]{ObjectClusterSensorName.MAG_Y, CHANNEL_TYPE.UNCAL.toString()}, + new String[]{ObjectClusterSensorName.MAG_Z, CHANNEL_TYPE.UNCAL.toString()}, + new String[]{ObjectClusterSensorName.MAG_X, CHANNEL_TYPE.CAL.toString()}, + new String[]{ObjectClusterSensorName.MAG_Y, CHANNEL_TYPE.CAL.toString()}, + new String[]{ObjectClusterSensorName.MAG_Z, CHANNEL_TYPE.CAL.toString()})); } - } } return objectCluster; } - public boolean isUsingDefaultMagWRParam(){ - return getCurrentCalibDetailsMagWr().isUsingDefaultParameters(); + public boolean isUsingDefaultMagParam(){ + return getCurrentCalibDetailsMag().isUsingDefaultParameters(); } @Override public void checkShimmerConfigBeforeConfiguring() { - if(!isSensorEnabled(mSensorIdWRMag)) { - setDefaultLisMagWrSensorConfig(false); + if(!isSensorEnabled(mSensorIdMag)) { + setDefaultLisMagSensorConfig(false); } - } @Override @@ -518,67 +568,84 @@ public void configBytesGenerate(ShimmerDevice shimmerDevice, byte[] configBytes, if(configByteLayout instanceof ConfigByteLayoutShimmer3){ ConfigByteLayoutShimmer3 configByteLayoutCast = (ConfigByteLayoutShimmer3) configByteLayout; - configBytes[configByteLayoutCast.idxConfigSetupByte4] |= (byte) ((getLIS2MDLWRMagRate() & configByteLayoutCast.maskLIS2MDLAltMagSamplingRate) << configByteLayoutCast.bitShiftLIS2MDLAltMagSamplingRate); + //configBytes[configByteLayoutCast.idxConfigSetupByte2] |= (byte) ((getMagRange() & configByteLayoutCast.maskLSM303DLHCMagRange) << configByteLayoutCast.bitShiftLSM303DLHCMagRange); + configBytes[configByteLayoutCast.idxConfigSetupByte2] |= (byte) ((getLIS2MDLMagRate() & configByteLayoutCast.maskLSM303DLHCMagSamplingRate) << configByteLayoutCast.bitShiftLSM303DLHCMagSamplingRate); + //configBytes[configByteLayoutCast.idxConfigSetupByte5] |= (byte) ((getLIS2MDLMagRate() >> 3 & configByteLayoutCast.maskLIS2MDLMagRateMSB) << configByteLayoutCast.bitShiftLIS2MDLMagRateMSB); + // LISM3MDL Magnetometer Calibration Parameters byte[] bufferCalibrationParameters = generateCalParamLIS2MDLMag(); - System.arraycopy(bufferCalibrationParameters, 0, configBytes, configByteLayoutCast.idxLIS2MDLAltMagCalibration, configByteLayoutCast.lengthGeneralCalibrationBytes); + System.arraycopy(bufferCalibrationParameters, 0, configBytes, configByteLayoutCast.idxLSM303DLHCMagCalibration, configByteLayoutCast.lengthGeneralCalibrationBytes); } } - + public byte[] generateCalParamLIS2MDLMag(){ - return mCurrentCalibDetailsMagWr.generateCalParamByteArray(); + return getCurrentCalibDetailsMag().generateCalParamByteArray(); } @Override public void configBytesParse(ShimmerDevice shimmerDevice, byte[] configBytes, COMMUNICATION_TYPE commType) { - //still not being implemented for wr mag sensor ConfigByteLayout configByteLayout = shimmerDevice.getConfigByteLayout(); if(configByteLayout instanceof ConfigByteLayoutShimmer3){ ConfigByteLayoutShimmer3 configByteLayoutCast = (ConfigByteLayoutShimmer3) configByteLayout; - setLIS2MDLWRMagRate((configBytes[configByteLayoutCast.idxConfigSetupByte4] >> configByteLayoutCast.bitShiftLIS2MDLAltMagSamplingRate) & configByteLayoutCast.maskLIS2MDLAltMagSamplingRate); - + //setLISMagRange((configBytes[configByteLayoutCast.idxConfigSetupByte2] >> configByteLayoutCast.bitShiftLSM303DLHCMagRange) & configByteLayoutCast.maskLSM303DLHCMagRange); + //setLISMagRate((configBytes[configByteLayoutCast.idxConfigSetupByte2] >> configByteLayoutCast.bitShiftLSM303DLHCMagSamplingRate) & configByteLayoutCast.maskLSM303DLHCMagSamplingRate); + int magRate = (configBytes[configByteLayoutCast.idxConfigSetupByte2] >> configByteLayoutCast.bitShiftLSM303DLHCMagSamplingRate) & configByteLayoutCast.maskLSM303DLHCMagSamplingRate; + //int msbMagRate = (configBytes[configByteLayoutCast.idxConfigSetupByte5] >> configByteLayoutCast.bitShiftLIS2MDLMagRateMSB) & configByteLayoutCast.maskLIS2MDLMagRateMSB; + setLIS2MDLMagRate(magRate); + checkLowPowerMag(); // check rate to determine if Sensor is in LPM mode + if (shimmerDevice.isConnected()){ - getCurrentCalibDetailsMagWr().mCalibReadSource=CALIB_READ_SOURCE.INFOMEM; + getCurrentCalibDetailsMag().mCalibReadSource=CALIB_READ_SOURCE.INFOMEM; } + // LSM303DLHC Magnetometer Calibration Parameters byte[] bufferCalibrationParameters = new byte[configByteLayoutCast.lengthGeneralCalibrationBytes]; - System.arraycopy(configBytes, configByteLayoutCast.idxLIS2MDLAltMagCalibration, bufferCalibrationParameters, 0 , configByteLayoutCast.lengthGeneralCalibrationBytes); - parseCalibParamFromPacketMagWr(bufferCalibrationParameters, CALIB_READ_SOURCE.INFOMEM); + System.arraycopy(configBytes, configByteLayoutCast.idxLSM303DLHCMagCalibration, bufferCalibrationParameters, 0 , configByteLayoutCast.lengthGeneralCalibrationBytes); + parseCalibParamFromPacketMag(bufferCalibrationParameters, CALIB_READ_SOURCE.INFOMEM); } } - - public void parseCalibParamFromPacketMagWr(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { - mCurrentCalibDetailsMagWr.parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); - } + public void parseCalibParamFromPacketMag(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { + getCurrentCalibDetailsMag().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); + } + @Override public Object setConfigValueUsingConfigLabel(Integer sensorId, String configLabel, Object valueToSet) { Object returnValue = null; switch(configLabel){ - case(GuiLabelConfig.LIS2MDL_WR_MAG_RANGE): - setLIS2MDLWRMagRange((int)valueToSet); - break; - case(GuiLabelConfig.LIS2MDL_WR_MAG_RATE): - setLIS2MDLWRMagRate((int)valueToSet); - break; + case (GuiLabelConfig.LIS2MDL_MAG_LP): + setLowPowerMag((boolean) valueToSet); + break; + case(GuiLabelConfig.LIS2MDL_MAG_RANGE): + setLISMagRange((int)valueToSet); + break; + case(GuiLabelConfig.LIS2MDL_MAG_RATE): + setLIS2MDLMagRate((int)valueToSet); + break; + +// case(GuiLabelConfigCommon.KINEMATIC_CALIBRATION_ALL): +// TreeMap> mapOfKinematicSensorCalibration = (TreeMap>) valueToSet; +// setCalibration(mapOfKinematicSensorCalibration); +// returnValue = valueToSet; +// break; case(GuiLabelConfigCommon.RANGE): - if(sensorId==mSensorIdWRMag){ - this.setConfigValueUsingConfigLabel(GuiLabelConfig.LIS2MDL_WR_MAG_RANGE, valueToSet); - break; + if(sensorId==mSensorIdMag){ + this.setConfigValueUsingConfigLabel(GuiLabelConfig.LIS2MDL_MAG_RANGE, valueToSet); } + break; case(GuiLabelConfigCommon.RATE): - if(sensorId==mSensorIdWRMag){ - this.setConfigValueUsingConfigLabel(GuiLabelConfig.LIS2MDL_WR_MAG_RATE, valueToSet); - break; + if(sensorId==mSensorIdMag){ + this.setConfigValueUsingConfigLabel(GuiLabelConfig.LIS2MDL_MAG_RATE, valueToSet); } + break; default: returnValue = super.setConfigValueUsingConfigLabelCommon(sensorId, configLabel, valueToSet); break; } - if(configLabel.equals(SensorLIS2MDL.GuiLabelConfig.LIS2MDL_WR_MAG_RATE)){ + if(configLabel.equals(SensorLIS2MDL.GuiLabelConfig.LIS2MDL_MAG_RATE)){ checkConfigOptionValues(configLabel); } @@ -589,29 +656,34 @@ public Object setConfigValueUsingConfigLabel(Integer sensorId, String configLabe public Object getConfigValueUsingConfigLabel(Integer sensorId, String configLabel) { Object returnValue = null; - if(configLabel.equals(GuiLabelConfig.LIS2MDL_WR_MAG_RATE)){ + if(configLabel.equals(GuiLabelConfig.LIS2MDL_MAG_RATE)){ checkConfigOptionValues(configLabel); } switch(configLabel){ - case(GuiLabelConfig.LIS2MDL_WR_MAG_RANGE): - returnValue = getWRMagRange(); - break; - case(GuiLabelConfig.LIS2MDL_WR_MAG_RATE): - int configValue = getLIS2MDLWRMagRate(); - returnValue = configValue; + case (GuiLabelConfig.LIS2MDL_MAG_LP): + returnValue = isLowPowerMagEnabled(); break; + case(GuiLabelConfig.LIS2MDL_MAG_RATE): + returnValue = getLIS2MDLMagRate(); + break; + case(GuiLabelConfig.LIS2MDL_MAG_RANGE): + //TODO check below and commented out code (RS (20/5/2016): Same as in ShimmerObject.) + returnValue = getMagRange(); + +// case(Configuration.Shimmer3.GuiLabelConfig.KINEMATIC_CALIBRATION_ALL): +// returnValue = getKinematicCalibration(); +// break; case(GuiLabelConfigCommon.RANGE): - if(sensorId==mSensorIdWRMag){ - returnValue = this.getConfigValueUsingConfigLabel(GuiLabelConfig.LIS2MDL_WR_MAG_RANGE); -// returnValue = 0; - break; + if(sensorId==mSensorIdMag){ + returnValue = this.getConfigValueUsingConfigLabel(GuiLabelConfig.LIS2MDL_MAG_RANGE); } + break; case(GuiLabelConfigCommon.RATE): - if(sensorId==mSensorIdWRMag){ - returnValue = this.getConfigValueUsingConfigLabel(GuiLabelConfig.LIS2MDL_WR_MAG_RATE); - break; + if(sensorId==mSensorIdMag){ + returnValue = this.getConfigValueUsingConfigLabel(GuiLabelConfig.LIS2MDL_MAG_RATE); } + break; default: returnValue = super.getConfigValueUsingConfigLabelCommon(sensorId, configLabel); break; @@ -622,38 +694,25 @@ public Object getConfigValueUsingConfigLabel(Integer sensorId, String configLabe @Override public void setSensorSamplingRate(double samplingRateHz) { - setLISWRMagRateFromFreq(samplingRateHz); - } - - public int setLISWRMagRateFromFreq(double freq) { - boolean isEnabled = isSensorEnabled(mSensorIdWRMag); -// System.out.println("Setting Sampling Rate: " + freq + "\tmLowPowerAccelWR:" + mLowPowerAccelWR); - setLISWRMagRateInternal(getMagRateFromFreqForSensor(isEnabled, freq)); - return mLISWRMagRate; + setLIS2MDLAltMagRateFromFreq(samplingRateHz); } - public void setLISWRMagRateInternal(int valueToSet) { - //System.out.println("Accel Rate:\t" + valueToSet); - //UtilShimmer.consolePrintCurrentStackTrace(); - mLISWRMagRate = valueToSet; + public void setDefaultLisMagSensorConfig(boolean isSensorEnabled) { + if(isSensorEnabled) { + setLISMagRange(0); + } } @Override public boolean setDefaultConfigForSensor(int sensorId, boolean isSensorEnabled) { if(mSensorMap.containsKey(sensorId)){ - if(sensorId==mSensorIdWRMag) { - setDefaultLisMagWrSensorConfig(isSensorEnabled); + if(sensorId==mSensorIdMag) { + setDefaultLisMagSensorConfig(isSensorEnabled); } return true; } return false; } - - public void setDefaultLisMagWrSensorConfig(boolean isSensorEnabled) { - if(isSensorEnabled) { - setLIS2MDLWRMagRange(0); - } - } @Override public boolean checkConfigOptionValues(String stringKey) { @@ -661,18 +720,34 @@ public boolean checkConfigOptionValues(String stringKey) { return false; } - public double[][] getAlignmentMatrixMagWr(){ - return mCurrentCalibDetailsMagWr.getValidAlignmentMatrix(); + //--------- Sensor specific methods end -------------- + + public double getCalibTimeMag() { + return mCurrentCalibDetailsMag.getCalibTimeMs(); + } + + public boolean isUsingValidMagParam() { + if(!UtilShimmer.isAllZeros(getAlignmentMatrixMag()) && !UtilShimmer.isAllZeros(getSensitivityMatrixMag())){ + return true; + }else{ + return false; + } + } + + public double[][] getAlignmentMatrixMag(){ + return getCurrentCalibDetailsMag().getValidAlignmentMatrix(); } - public double[][] getSensitivityMatrixMagWr(){ - return mCurrentCalibDetailsMagWr.getValidSensitivityMatrix(); + public void updateIsUsingDefaultMagParam() { + mIsUsingDefaultMagParam = getCurrentCalibDetailsMag().isUsingDefaultParameters(); } - public double[][] getOffsetVectorMatrixMagWr(){ - return mCurrentCalibDetailsMagWr.getValidOffsetVector(); + public double[][] getSensitivityMatrixMag(){ + return getCurrentCalibDetailsMag().getValidSensitivityMatrix(); + } + + public double[][] getOffsetVectorMatrixMag(){ + return getCurrentCalibDetailsMag().getValidOffsetVector(); } - - //--------- Sensor specific methods end -------------- } diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/lisxmdl/SensorLIS3MDL.java b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/lisxmdl/SensorLIS3MDL.java index d701b31fa..7b0ede344 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/lisxmdl/SensorLIS3MDL.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/lisxmdl/SensorLIS3MDL.java @@ -9,24 +9,23 @@ import org.apache.commons.lang3.ArrayUtils; +import com.shimmerresearch.bluetooth.BtCommandDetails; +import com.shimmerresearch.driver.ConfigByteLayout; +import com.shimmerresearch.driver.Configuration; +import com.shimmerresearch.driver.FormatCluster; import com.shimmerresearch.driver.Configuration.CHANNEL_UNITS; import com.shimmerresearch.driver.Configuration.COMMUNICATION_TYPE; import com.shimmerresearch.driver.Configuration.Shimmer3.CompatibilityInfoForMaps; import com.shimmerresearch.driver.ObjectCluster; +import com.shimmerresearch.driver.ShimmerDevice; +import com.shimmerresearch.driver.ShimmerObject; import com.shimmerresearch.driver.calibration.CalibDetails; import com.shimmerresearch.driver.calibration.CalibDetailsKinematic; import com.shimmerresearch.driver.calibration.UtilCalibration; import com.shimmerresearch.driver.calibration.CalibDetails.CALIB_READ_SOURCE; import com.shimmerresearch.driver.shimmer2r3.ConfigByteLayoutShimmer3; -import com.shimmerresearch.bluetooth.BtCommandDetails; -import com.shimmerresearch.driver.ConfigByteLayout; -import com.shimmerresearch.driver.Configuration; -import com.shimmerresearch.driver.FormatCluster; -import com.shimmerresearch.driver.ShimmerDevice; -import com.shimmerresearch.driver.ShimmerObject; import com.shimmerresearch.driverUtilities.ChannelDetails; import com.shimmerresearch.driverUtilities.ConfigOptionDetailsSensor; -import com.shimmerresearch.driverUtilities.ConfigOptionObject; import com.shimmerresearch.driverUtilities.SensorDetails; import com.shimmerresearch.driverUtilities.SensorDetailsRef; import com.shimmerresearch.driverUtilities.SensorGroupingDetails; @@ -37,293 +36,265 @@ import com.shimmerresearch.sensors.AbstractSensor; import com.shimmerresearch.sensors.ActionSetting; -public class SensorLIS3MDL extends AbstractSensor{ - +public class SensorLIS3MDL extends AbstractSensor { + /** * */ - private static final long serialVersionUID = -2366590050010873738L; - - protected int mMagRange = 0; - protected int mLISMagRate = 4; - public boolean mIsUsingDefaultMagParam = true; + private static final long serialVersionUID = 4028368641088628178L; + + protected int mAltMagRange = 0; + public boolean mIsUsingDefaultAltMagParam = true; + protected int mLISAltMagRate = 4; + protected int mSensorIdAltMag = -1; protected boolean mLowPowerMag = false; protected boolean mMedPowerMag = false; protected boolean mHighPowerMag = false; protected boolean mUltraHighPowerMag = false; - protected int mSensorIdMag = -1; - - //--------- Sensor specific variables start -------------- - - public static final double[][] DefaultAlignmentLIS3MDL = {{1,0,0},{0,-1,0},{0,0,-1}}; - // ---------- Mag start --------------- - public static final double[][] DefaultAlignmentMatrixMagShimmer3 = DefaultAlignmentLIS3MDL; - public static final double[][] DefaultOffsetVectorMagShimmer3 = {{0},{0},{0}}; - // Manufacturer stated: X any Y any Z axis @ 6842 LSB/gauss - public static final double[][] DefaultSensitivityMatrixMag4GaShimmer3 = {{6842,0,0},{0,6842,0},{0,0,6842}}; - // Manufacturer stated: X any Y any Z axis @ 3421 LSB/gauss - public static final double[][] DefaultSensitivityMatrixMag8GaShimmer3 = {{3421 ,0,0},{0,3421 ,0},{0,0,3421 }}; - // Manufacturer stated: X any Y any Z axis @ 2281 LSB/gauss - public static final double[][] DefaultSensitivityMatrixMag12GaShimmer3 = {{2281 ,0,0},{0,2281 ,0},{0,0,2281 }}; - // Manufacturer stated: X any Y any Z axis @ 1711 LSB/gauss - public static final double[][] DefaultSensitivityMatrixMag16GaShimmer3 = {{1711 ,0,0},{0,1711 ,0},{0,0,1711 }}; - - private CalibDetailsKinematic calibDetailsMag4 = new CalibDetailsKinematic( - ListofLIS3MDLMagRangeConfigValues[0], - ListofLIS3MDLMagRange[0], - DefaultAlignmentMatrixMagShimmer3, - DefaultSensitivityMatrixMag4GaShimmer3, - DefaultOffsetVectorMagShimmer3); - - private CalibDetailsKinematic calibDetailsMag8 = new CalibDetailsKinematic( - ListofLIS3MDLMagRangeConfigValues[1], - ListofLIS3MDLMagRange[1], - DefaultAlignmentMatrixMagShimmer3, - DefaultSensitivityMatrixMag8GaShimmer3, - DefaultOffsetVectorMagShimmer3); - - private CalibDetailsKinematic calibDetailsMag12 = new CalibDetailsKinematic( - ListofLIS3MDLMagRangeConfigValues[2], - ListofLIS3MDLMagRange[2], - DefaultAlignmentMatrixMagShimmer3, - DefaultSensitivityMatrixMag12GaShimmer3, - DefaultOffsetVectorMagShimmer3); - - private CalibDetailsKinematic calibDetailsMag16 = new CalibDetailsKinematic( - ListofLIS3MDLMagRangeConfigValues[3], - ListofLIS3MDLMagRange[3], - DefaultAlignmentMatrixMagShimmer3, - DefaultSensitivityMatrixMag16GaShimmer3, - DefaultOffsetVectorMagShimmer3); - - public CalibDetailsKinematic mCurrentCalibDetailsMag = calibDetailsMag4; + // public CalibDetailsKinematic mCurrentCalibDetailsMagAlt = null; - // ---------- Mag end --------------- - - public static class DatabaseChannelHandles{ - public static final String MAG_X = "LIS3MDL_MAG_X"; - public static final String MAG_Y = "LIS3MDL_MAG_Y"; - public static final String MAG_Z = "LIS3MDL_MAG_Z"; - } - - public static final class DatabaseConfigHandle{ - public static final String MAG_RANGE = "LIS3MDL_Mag_Range"; - public static final String MAG_RATE = "LIS3MDL_Mag_Rate"; -// public static final String MAG = "LIS3MDL_Mag"; - - public static final String MAG_LPM = "LIS3MDL_Mag_LPM"; - public static final String MAG_MPM = "LIS3MDL_Mag_MPM"; - public static final String MAG_HPM = "LIS3MDL_Mag_HPM"; - public static final String MAG_UPM = "LIS3MDL_Mag_UPM"; - - public static final String MAG_CALIB_TIME = "LIS3MDL_Mag_Calib_Time"; - public static final String MAG_OFFSET_X = "LIS3MDL_Mag_Offset_X"; - public static final String MAG_OFFSET_Y = "LIS3MDL_Mag_Offset_Y"; - public static final String MAG_OFFSET_Z = "LIS3MDL_Mag_Offset_Z"; - public static final String MAG_GAIN_X = "LIS3MDL_Mag_Gain_X"; - public static final String MAG_GAIN_Y = "LIS3MDL_Mag_Gain_Y"; - public static final String MAG_GAIN_Z = "LIS3MDL_Mag_Gain_Z"; - public static final String MAG_ALIGN_XX = "LIS3MDL_Mag_Align_XX"; - public static final String MAG_ALIGN_XY = "LIS3MDL_Mag_Align_XY"; - public static final String MAG_ALIGN_XZ = "LIS3MDL_Mag_Align_XZ"; - public static final String MAG_ALIGN_YX = "LIS3MDL_Mag_Align_YX"; - public static final String MAG_ALIGN_YY = "LIS3MDL_Mag_Align_YY"; - public static final String MAG_ALIGN_YZ = "LIS3MDL_Mag_Align_YZ"; - public static final String MAG_ALIGN_ZX = "LIS3MDL_Mag_Align_ZX"; - public static final String MAG_ALIGN_ZY = "LIS3MDL_Mag_Align_ZY"; - public static final String MAG_ALIGN_ZZ = "LIS3MDL_Mag_Align_ZZ"; + // --------- Sensor specific variables start -------------- + + public static final double[][] DefaultAlignmentLIS3MDL = { { 1, 0, 0 }, { 0, -1, 0 }, { 0, 0, -1 } }; + + // ---------- Mag start --------------- + public static final double[][] DefaultAlignmentMatrixAltMagShimmer3r = DefaultAlignmentLIS3MDL; + public static final double[][] DefaultOffsetVectorAltMagShimmer3r = { { 0 }, { 0 }, { 0 } }; + // Manufacturer stated: X any Y any Z axis @ 6842 LSB/gauss + public static final double[][] DefaultSensitivityMatrixAltMag4GaShimmer3r = { { 6842, 0, 0 }, { 0, 6842, 0 }, + { 0, 0, 6842 } }; + // Manufacturer stated: X any Y any Z axis @ 3421 LSB/gauss + public static final double[][] DefaultSensitivityMatrixAltMag8GaShimmer3r = { { 3421, 0, 0 }, { 0, 3421, 0 }, + { 0, 0, 3421 } }; + // Manufacturer stated: X any Y any Z axis @ 2281 LSB/gauss + public static final double[][] DefaultSensitivityMatrixAltMag12GaShimmer3r = { { 2281, 0, 0 }, { 0, 2281, 0 }, + { 0, 0, 2281 } }; + // Manufacturer stated: X any Y any Z axis @ 1711 LSB/gauss + public static final double[][] DefaultSensitivityMatrixAltMag16GaShimmer3r = { { 1711, 0, 0 }, { 0, 1711, 0 }, + { 0, 0, 1711 } }; + + private CalibDetailsKinematic calibDetailsMag4 = new CalibDetailsKinematic(ListofLIS3MDLAltMagRangeConfigValues[0], + ListofLIS3MDLAltMagRange[0], DefaultAlignmentMatrixAltMagShimmer3r, + DefaultSensitivityMatrixAltMag4GaShimmer3r, DefaultOffsetVectorAltMagShimmer3r); + + private CalibDetailsKinematic calibDetailsMag8 = new CalibDetailsKinematic(ListofLIS3MDLAltMagRangeConfigValues[1], + ListofLIS3MDLAltMagRange[1], DefaultAlignmentMatrixAltMagShimmer3r, + DefaultSensitivityMatrixAltMag8GaShimmer3r, DefaultOffsetVectorAltMagShimmer3r); + + private CalibDetailsKinematic calibDetailsMag12 = new CalibDetailsKinematic(ListofLIS3MDLAltMagRangeConfigValues[2], + ListofLIS3MDLAltMagRange[2], DefaultAlignmentMatrixAltMagShimmer3r, + DefaultSensitivityMatrixAltMag12GaShimmer3r, DefaultOffsetVectorAltMagShimmer3r); + + private CalibDetailsKinematic calibDetailsMag16 = new CalibDetailsKinematic(ListofLIS3MDLAltMagRangeConfigValues[3], + ListofLIS3MDLAltMagRange[3], DefaultAlignmentMatrixAltMagShimmer3r, + DefaultSensitivityMatrixAltMag16GaShimmer3r, DefaultOffsetVectorAltMagShimmer3r); + + public CalibDetailsKinematic mCurrentCalibDetailsMagAlt = calibDetailsMag4; + + // ---------- Mag end --------------- + + public static class DatabaseChannelHandles { + public static final String ALT_MAG_X = "LIS3MDL_MAG_X"; + public static final String ALT_MAG_Y = "LIS3MDL_MAG_Y"; + public static final String ALT_MAG_Z = "LIS3MDL_MAG_Z"; + } + + public static final class DatabaseConfigHandle { + public static final String ALT_MAG_RATE = "LIS3MDL_ALT_Mag_Rate"; + public static final String ALT_MAG_RANGE = "LIS3MDL_ALT_Mag_Range"; + + public static final String ALT_MAG_LPM = "LIS3MDL_Mag_LPM"; + public static final String ALT_MAG_MPM = "LIS3MDL_Mag_MPM"; + public static final String ALT_MAG_HPM = "LIS3MDL_Mag_HPM"; + public static final String ALT_MAG_UPM = "LIS3MDL_Mag_UPM"; + + public static final String MAG_ALT_CALIB_TIME = "LIS3MDL_Mag_ALT_Calib_Time"; + public static final String MAG_ALT_OFFSET_X = "LIS3MDL_Mag_ALT_Offset_X"; + public static final String MAG_ALT_OFFSET_Y = "LIS3MDL_Mag_ALT_Offset_Y"; + public static final String MAG_ALT_OFFSET_Z = "LIS3MDL_Mag_ALT_Offset_Z"; + public static final String MAG_ALT_GAIN_X = "LIS3MDL_Mag_ALT_Gain_X"; + public static final String MAG_ALT_GAIN_Y = "LIS3MDL_Mag_ALT_Gain_Y"; + public static final String MAG_ALT_GAIN_Z = "LIS3MDL_Mag_ALT_Gain_Z"; + public static final String MAG_ALT_ALIGN_XX = "LIS3MDL_Mag_ALT_Align_XX"; + public static final String MAG_ALT_ALIGN_XY = "LIS3MDL_Mag_ALT_Align_XY"; + public static final String MAG_ALT_ALIGN_XZ = "LIS3MDL_Mag_ALT_Align_XZ"; + public static final String MAG_ALT_ALIGN_YX = "LIS3MDL_Mag_ALT_Align_YX"; + public static final String MAG_ALT_ALIGN_YY = "LIS3MDL_Mag_ALT_Align_YY"; + public static final String MAG_ALT_ALIGN_YZ = "LIS3MDL_Mag_ALT_Align_YZ"; + public static final String MAG_ALT_ALIGN_ZX = "LIS3MDL_Mag_ALT_Align_ZX"; + public static final String MAG_ALT_ALIGN_ZY = "LIS3MDL_Mag_ALT_Align_ZY"; + public static final String MAG_ALT_ALIGN_ZZ = "LIS3MDL_Mag_ALT_Align_ZZ"; public static final List LIST_OF_CALIB_HANDLES_MAG = Arrays.asList( - DatabaseConfigHandle.MAG_OFFSET_X, DatabaseConfigHandle.MAG_OFFSET_Y, DatabaseConfigHandle.MAG_OFFSET_Z, - DatabaseConfigHandle.MAG_GAIN_X, DatabaseConfigHandle.MAG_GAIN_Y, DatabaseConfigHandle.MAG_GAIN_Z, - DatabaseConfigHandle.MAG_ALIGN_XX, DatabaseConfigHandle.MAG_ALIGN_XY, DatabaseConfigHandle.MAG_ALIGN_XZ, - DatabaseConfigHandle.MAG_ALIGN_YX, DatabaseConfigHandle.MAG_ALIGN_YY, DatabaseConfigHandle.MAG_ALIGN_YZ, - DatabaseConfigHandle.MAG_ALIGN_ZX, DatabaseConfigHandle.MAG_ALIGN_ZY, DatabaseConfigHandle.MAG_ALIGN_ZZ); + DatabaseConfigHandle.MAG_ALT_OFFSET_X, DatabaseConfigHandle.MAG_ALT_OFFSET_Y, + DatabaseConfigHandle.MAG_ALT_OFFSET_Z, DatabaseConfigHandle.MAG_ALT_GAIN_X, + DatabaseConfigHandle.MAG_ALT_GAIN_Y, DatabaseConfigHandle.MAG_ALT_GAIN_Z, + DatabaseConfigHandle.MAG_ALT_ALIGN_XX, DatabaseConfigHandle.MAG_ALT_ALIGN_XY, + DatabaseConfigHandle.MAG_ALT_ALIGN_XZ, DatabaseConfigHandle.MAG_ALT_ALIGN_YX, + DatabaseConfigHandle.MAG_ALT_ALIGN_YY, DatabaseConfigHandle.MAG_ALT_ALIGN_YZ, + DatabaseConfigHandle.MAG_ALT_ALIGN_ZX, DatabaseConfigHandle.MAG_ALT_ALIGN_ZY, + DatabaseConfigHandle.MAG_ALT_ALIGN_ZZ); + } - - public class GuiLabelConfig{ - - public static final String LIS3MDL_MAG_RANGE = "Mag Range"; - public static final String LIS3MDL_MAG_RATE = "Mag Rate"; - - public static final String LIS3MDL_MAG_LP = "Mag Low-Power Mode"; - public static final String LIS3MDL_MAG_MP = "Mag Med-Power Mode"; - public static final String LIS3MDL_MAG_HP = "Mag High-Power Mode"; - public static final String LIS3MDL_MAG_UP = "Mag Ultra High-Power Mode"; - public static final String LIS3MDL_MAG_DEFAULT_CALIB = "Mag Default Calibration"; + public class GuiLabelConfig { - //NEW - public static final String LIS3MDL_MAG_CALIB_PARAM = "Mag Calibration Details"; - public static final String LIS3MDL_MAG_VALID_CALIB = "Mag Valid Calibration"; - + public static final String LIS3MDL_ALT_MAG_RANGE = "Alternate Mag Range"; + public static final String LIS3MDL_ALT_MAG_RATE = "Alternate Mag Rate"; + + public static final String LIS3MDL_ALT_MAG_LP = "Alt Mag Low-Power Mode"; + public static final String LIS3MDL_ALT_MAG_MP = "Alt Mag Med-Power Mode"; + public static final String LIS3MDL_ALT_MAG_HP = "Alt Mag High-Power Mode"; + public static final String LIS3MDL_ALT_MAG_UP = "Alt Mag Ultra High-Power Mode"; + + public static final String LIS3MDL_ALT_MAG_DEFAULT_CALIB = "Alternate Mag Default Calibration"; + + // NEW + public static final String LIS3MDL_ALT_MAG_CALIB_PARAM = "Alternate Mag Calibration Details"; + public static final String LIS3MDL_ALT_MAG_VALID_CALIB = "Alternate Mag Valid Calibration"; } - - public static class ObjectClusterSensorName{ - - public static String MAG_X = "Mag_X"; - public static String MAG_Y = "Mag_Y"; - public static String MAG_Z = "Mag_Z"; + + public static class ObjectClusterSensorName { + + public static String MAG_ALT_X = "Mag_Alt_X"; + public static String MAG_ALT_Y = "Mag_Alt_Y"; + public static String MAG_ALT_Z = "Mag_Alt_Z"; } - - public class GuiLabelSensors{ - public static final String MAG = "Magnetometer"; + + public class GuiLabelSensors { + public static final String MAG_ALT = "Alternate Magnetometer"; } - - public class LABEL_SENSOR_TILE{ - public static final String MAG = GuiLabelSensors.MAG; + + public class LABEL_SENSOR_TILE { + public static final String ALT_MAG = GuiLabelSensors.MAG_ALT; } - - //--------- Sensor specific variables end -------------- - - //--------- Configuration options start -------------- - - public static final String[] ListofLIS3MDLMagRate={"1000Hz","560Hz","300Hz","155Hz","80Hz","20Hz", "10Hz"}; - public static final Integer[] ListofLIS3MDLMagRateConfigValues = {0x01, 0x11, 0x21, 0x31, 0x3E, 0x3A, 0x08}; - public static final String[] ListofLIS3MDLMagRange={"+/- 4Ga","+/- 8Ga","+/- 12Ga","+/- 16Ga"}; - public static final Integer[] ListofLIS3MDLMagRangeConfigValues={0,1,2,3}; + // --------- Sensor specific variables end -------------- + + // --------- Configuration options start -------------- - public static final ConfigOptionDetailsSensor configOptionMagRange = new ConfigOptionDetailsSensor( - SensorLIS3MDL.GuiLabelConfig.LIS3MDL_MAG_RANGE, - SensorLIS3MDL.DatabaseConfigHandle.MAG_RANGE, - ListofLIS3MDLMagRange, - ListofLIS3MDLMagRangeConfigValues, + public static final String[] ListofLIS3MDLAltMagRate = { "1000Hz", "560Hz", "300Hz", "155Hz", "80Hz", "20Hz","10Hz" }; + public static final Integer[] ListofLIS3MDLAltMagRateConfigValues = { 0x01, 0x11, 0x21, 0x31, 0x3E, 0x3A, 0x08 }; + public static final String[] ListofLIS3MDLAltMagRange = { "+/- 4Ga", "+/- 8Ga", "+/- 12Ga", "+/- 16Ga" }; + public static final Integer[] ListofLIS3MDLAltMagRangeConfigValues = { 0, 1, 2, 3 }; + + public static final ConfigOptionDetailsSensor configOptionAltMagRange = new ConfigOptionDetailsSensor( + SensorLIS3MDL.GuiLabelConfig.LIS3MDL_ALT_MAG_RANGE, SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_RANGE, + ListofLIS3MDLAltMagRange, ListofLIS3MDLAltMagRangeConfigValues, ConfigOptionDetailsSensor.GUI_COMPONENT_TYPE.COMBOBOX, - CompatibilityInfoForMaps.listOfCompatibleVersionInfoLISM3MDL); - - public static final ConfigOptionDetailsSensor configOptionMagRate = new ConfigOptionDetailsSensor( - SensorLIS3MDL.GuiLabelConfig.LIS3MDL_MAG_RATE, - SensorLIS3MDL.DatabaseConfigHandle.MAG_RATE, - ListofLIS3MDLMagRate, - ListofLIS3MDLMagRateConfigValues, + CompatibilityInfoForMaps.listOfCompatibleVersionInfoLIS3MDL); + + public static final ConfigOptionDetailsSensor configOptionAltMagRate = new ConfigOptionDetailsSensor( + SensorLIS3MDL.GuiLabelConfig.LIS3MDL_ALT_MAG_RATE, SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_RATE, + ListofLIS3MDLAltMagRate, ListofLIS3MDLAltMagRateConfigValues, ConfigOptionDetailsSensor.GUI_COMPONENT_TYPE.COMBOBOX, - CompatibilityInfoForMaps.listOfCompatibleVersionInfoLISM3MDL); + CompatibilityInfoForMaps.listOfCompatibleVersionInfoLIS3MDL); + + // --------- Configuration options end -------------- + + // --------- Sensor info start -------------- + + public static final SensorDetailsRef sensorLIS3MDLAltMag = new SensorDetailsRef(0x200000, // == + // Configuration.Shimmer3.SensorBitmap.SENSOR_MAG + // will be: + // SensorBitmap.SENSOR_MAG, + 0x200000, // == Configuration.Shimmer3.SensorBitmap.SENSOR_MAG will be: + // SensorBitmap.SENSOR_MAG, + GuiLabelSensors.MAG_ALT, CompatibilityInfoForMaps.listOfCompatibleVersionInfoLIS3MDL, + Arrays.asList(GuiLabelConfig.LIS3MDL_ALT_MAG_RANGE, GuiLabelConfig.LIS3MDL_ALT_MAG_RATE), + Arrays.asList(ObjectClusterSensorName.MAG_ALT_X, ObjectClusterSensorName.MAG_ALT_Y, + ObjectClusterSensorName.MAG_ALT_Z)); - //--------- Configuration options end -------------- - - //--------- Sensor info start -------------- - - public static final SensorDetailsRef sensorLIS3MDLMag = new SensorDetailsRef( - 0x20, //== Configuration.Shimmer3.SensorBitmap.SENSOR_MAG will be: SensorBitmap.SENSOR_MAG, - 0x20, //== Configuration.Shimmer3.SensorBitmap.SENSOR_MAG will be: SensorBitmap.SENSOR_MAG, - GuiLabelSensors.MAG, - CompatibilityInfoForMaps.listOfCompatibleVersionInfoLISM3MDL, - Arrays.asList(GuiLabelConfig.LIS3MDL_MAG_RANGE, - GuiLabelConfig.LIS3MDL_MAG_RATE), - //MAG channel parsing order is XZY instead of XYZ but it would be better to represent it on the GUI in XYZ - Arrays.asList(ObjectClusterSensorName.MAG_X, - ObjectClusterSensorName.MAG_Y, - ObjectClusterSensorName.MAG_Z)); - public static final Map mSensorMapRef; - static { - Map aMap = new LinkedHashMap(); - aMap.put(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG, SensorLIS3MDL.sensorLIS3MDLMag); + static { + Map aMap = new LinkedHashMap(); + aMap.put(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG_ALT, SensorLIS3MDL.sensorLIS3MDLAltMag); mSensorMapRef = Collections.unmodifiableMap(aMap); - } - - //--------- Sensor info end -------------- - - //--------- Channel info start -------------- - - public static final ChannelDetails channelLIS3MDLMagX = new ChannelDetails( - ObjectClusterSensorName.MAG_X, - ObjectClusterSensorName.MAG_X, - DatabaseChannelHandles.MAG_X, - CHANNEL_DATA_TYPE.INT16, 2, CHANNEL_DATA_ENDIAN.MSB, - CHANNEL_UNITS.LOCAL_FLUX, - Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL), - 0x07); - - public static final ChannelDetails channelLIS3MDLMagY = new ChannelDetails( - ObjectClusterSensorName.MAG_Y, - ObjectClusterSensorName.MAG_Y, - DatabaseChannelHandles.MAG_Y, - CHANNEL_DATA_TYPE.INT16, 2, CHANNEL_DATA_ENDIAN.MSB, - CHANNEL_UNITS.LOCAL_FLUX, - Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL), - 0x08); - - public static final ChannelDetails channelLIS3MDLMagZ = new ChannelDetails( - ObjectClusterSensorName.MAG_Z, - ObjectClusterSensorName.MAG_Z, - DatabaseChannelHandles.MAG_Z, - CHANNEL_DATA_TYPE.INT16, 2, CHANNEL_DATA_ENDIAN.MSB, - CHANNEL_UNITS.LOCAL_FLUX, - Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL), - 0x09); - - public static final Map mChannelMapRef; - static { - Map aMap = new LinkedHashMap(); - aMap.put(SensorLIS3MDL.ObjectClusterSensorName.MAG_X, SensorLIS3MDL.channelLIS3MDLMagX); - aMap.put(SensorLIS3MDL.ObjectClusterSensorName.MAG_Z, SensorLIS3MDL.channelLIS3MDLMagZ); - aMap.put(SensorLIS3MDL.ObjectClusterSensorName.MAG_Y, SensorLIS3MDL.channelLIS3MDLMagY); + } + // --------- Sensor info end -------------- + + // --------- Channel info start -------------- + + public static final ChannelDetails channelLIS3MDLAltMagX = new ChannelDetails(ObjectClusterSensorName.MAG_ALT_X, + ObjectClusterSensorName.MAG_ALT_X, DatabaseChannelHandles.ALT_MAG_X, CHANNEL_DATA_TYPE.INT12, 2, + CHANNEL_DATA_ENDIAN.LSB, CHANNEL_UNITS.LOCAL_FLUX, Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL), + 0x17); + + public static final ChannelDetails channelLIS3MDLAltMagY = new ChannelDetails(ObjectClusterSensorName.MAG_ALT_Y, + ObjectClusterSensorName.MAG_ALT_Y, DatabaseChannelHandles.ALT_MAG_Y, CHANNEL_DATA_TYPE.INT12, 2, + CHANNEL_DATA_ENDIAN.LSB, CHANNEL_UNITS.LOCAL_FLUX, Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL), + 0x18); + + public static final ChannelDetails channelLIS3MDLAltMagZ = new ChannelDetails(ObjectClusterSensorName.MAG_ALT_Z, + ObjectClusterSensorName.MAG_ALT_Z, DatabaseChannelHandles.ALT_MAG_Z, CHANNEL_DATA_TYPE.INT12, 2, + CHANNEL_DATA_ENDIAN.LSB, CHANNEL_UNITS.LOCAL_FLUX, Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL), + 0x19); + + public static final Map mChannelMapRef; + static { + Map aMap = new LinkedHashMap(); + aMap.put(SensorLIS3MDL.ObjectClusterSensorName.MAG_ALT_X, SensorLIS3MDL.channelLIS3MDLAltMagX); + aMap.put(SensorLIS3MDL.ObjectClusterSensorName.MAG_ALT_Z, SensorLIS3MDL.channelLIS3MDLAltMagZ); + aMap.put(SensorLIS3MDL.ObjectClusterSensorName.MAG_ALT_Y, SensorLIS3MDL.channelLIS3MDLAltMagY); mChannelMapRef = Collections.unmodifiableMap(aMap); - } - - //--------- Channel info end -------------- - - public static final SensorGroupingDetails sensorGroupLisMag = new SensorGroupingDetails( - LABEL_SENSOR_TILE.MAG, - Arrays.asList(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG), - CompatibilityInfoForMaps.listOfCompatibleVersionInfoLISM3MDL); - - //--------- Bluetooth commands start -------------- - public static final byte SET_MAG_CALIBRATION_COMMAND = (byte) 0x17; - public static final byte MAG_CALIBRATION_RESPONSE = (byte) 0x18; - public static final byte GET_MAG_CALIBRATION_COMMAND = (byte) 0x19; - - public static final byte SET_MAG_GAIN_COMMAND = (byte) 0x37; - public static final byte MAG_GAIN_RESPONSE = (byte) 0x38; - public static final byte GET_MAG_GAIN_COMMAND = (byte) 0x39; - - public static final byte SET_MAG_SAMPLING_RATE_COMMAND = (byte) 0x3A; - public static final byte MAG_SAMPLING_RATE_RESPONSE = (byte) 0x3B; - public static final byte GET_MAG_SAMPLING_RATE_COMMAND = (byte) 0x3C; - - public static final Map mBtGetCommandMap; - static { - Map aMap = new LinkedHashMap(); - aMap.put(GET_MAG_CALIBRATION_COMMAND, new BtCommandDetails(GET_MAG_CALIBRATION_COMMAND, "GET_MAG_CALIBRATION_COMMAND", MAG_CALIBRATION_RESPONSE)); - aMap.put(GET_MAG_GAIN_COMMAND, new BtCommandDetails(GET_MAG_GAIN_COMMAND, "GET_MAG_GAIN_COMMAND", MAG_GAIN_RESPONSE)); - aMap.put(GET_MAG_SAMPLING_RATE_COMMAND, new BtCommandDetails(GET_MAG_SAMPLING_RATE_COMMAND, "GET_MAG_SAMPLING_RATE_COMMAND", MAG_SAMPLING_RATE_RESPONSE)); - mBtGetCommandMap = Collections.unmodifiableMap(aMap); - } - - public static final Map mBtSetCommandMap; - static { - Map aMap = new LinkedHashMap(); - aMap.put(SET_MAG_CALIBRATION_COMMAND, new BtCommandDetails(SET_MAG_CALIBRATION_COMMAND, "SET_MAG_CALIBRATION_COMMAND")); - aMap.put(SET_MAG_GAIN_COMMAND, new BtCommandDetails(SET_MAG_GAIN_COMMAND, "SET_MAG_GAIN_COMMAND")); - aMap.put(SET_MAG_SAMPLING_RATE_COMMAND, new BtCommandDetails(SET_MAG_SAMPLING_RATE_COMMAND, "SET_MAG_SAMPLING_RATE_COMMAND")); - mBtSetCommandMap = Collections.unmodifiableMap(aMap); - } - //--------- Bluetooth commands end -------------- - - //--------- Constructors for this class start -------------- - + } + // --------- Channel info end -------------- + + public static final SensorGroupingDetails sensorGroupLisAltMag = new SensorGroupingDetails(LABEL_SENSOR_TILE.ALT_MAG, + Arrays.asList(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG_ALT), + CompatibilityInfoForMaps.listOfCompatibleVersionInfoLIS3MDL); + + // --------- Bluetooth commands start -------------- + // still not being implemented for ALTt mag sensor due to unavailability in docs + public static final byte SET_ALT_MAG_CALIBRATION_COMMAND = (byte) 0xAF; + public static final byte ALT_MAG_CALIBRATION_RESPONSE = (byte) 0xB0; + public static final byte GET_ALT_MAG_CALIBRATION_COMMAND = (byte) 0xB1; + + public static final byte SET_ALT_MAG_SAMPLING_RATE_COMMAND = (byte) 0xB2; + public static final byte ALT_MAG_SAMPLING_RATE_RESPONSE = (byte) 0xB3; + public static final byte GET_ALT_MAG_SAMPLING_RATE_COMMAND = (byte) 0xB4; + + public static final Map mBtGetCommandMap; + static { + Map aMap = new LinkedHashMap(); + aMap.put(GET_ALT_MAG_CALIBRATION_COMMAND, new BtCommandDetails(GET_ALT_MAG_CALIBRATION_COMMAND, + "GET_ALT_MAG_CALIBRATION_COMMAND", ALT_MAG_CALIBRATION_RESPONSE)); + aMap.put(GET_ALT_MAG_SAMPLING_RATE_COMMAND, new BtCommandDetails(GET_ALT_MAG_SAMPLING_RATE_COMMAND, + "GET_ALT_MAG_SAMPLING_RATE_COMMAND", ALT_MAG_SAMPLING_RATE_RESPONSE)); + mBtGetCommandMap = Collections.unmodifiableMap(aMap); + } + + public static final Map mBtSetCommandMap; + static { + Map aMap = new LinkedHashMap(); + aMap.put(SET_ALT_MAG_CALIBRATION_COMMAND, + new BtCommandDetails(SET_ALT_MAG_CALIBRATION_COMMAND, "SET_ALT_MAG_CALIBRATION_COMMAND")); + aMap.put(SET_ALT_MAG_SAMPLING_RATE_COMMAND, + new BtCommandDetails(SET_ALT_MAG_SAMPLING_RATE_COMMAND, "SET_ALT_MAG_SAMPLING_RATE_COMMAND")); + mBtSetCommandMap = Collections.unmodifiableMap(aMap); + } + // --------- Bluetooth commands end -------------- + + // --------- Constructors for this class start -------------- public SensorLIS3MDL() { super(SENSORS.LIS3MDL); initialise(); } - + public SensorLIS3MDL(ShimmerObject obj) { super(SENSORS.LIS3MDL, obj); initialise(); } - + public SensorLIS3MDL(ShimmerDevice shimmerDevice) { super(SENSORS.LIS3MDL, shimmerDevice); initialise(); } - - //--------- Constructors for this class end -------------- - - //--------- Abstract methods implemented start -------------- - + // --------- Constructors for this class end -------------- + + // --------- Abstract methods implemented start -------------- + @Override public void generateSensorMap() { super.createLocalSensorMapWithCustomParser(mSensorMapRef, mChannelMapRef); @@ -332,393 +303,409 @@ public void generateSensorMap() { @Override public void generateConfigOptionsMap() { mConfigOptionsMap.clear(); - addConfigOption(configOptionMagRange); - addConfigOption(configOptionMagRate); + addConfigOption(configOptionAltMagRange); + addConfigOption(configOptionAltMagRate); } @Override public void generateSensorGroupMapping() { mSensorGroupingMap = new LinkedHashMap(); - mSensorGroupingMap.put(Configuration.Shimmer3.LABEL_SENSOR_TILE.MAG_3R.ordinal(), sensorGroupLisMag); - super.updateSensorGroupingMap(); - } - - @Override + mSensorGroupingMap.put(Configuration.Shimmer3.LABEL_SENSOR_TILE.ALT_MAG_3R.ordinal(), sensorGroupLisAltMag); + super.updateSensorGroupingMap(); + } + + @Override public Object getSettings(String componentName, COMMUNICATION_TYPE commType) { // TODO Auto-generated method stub - //XXX - RS: Also returning null in BMP180 and GSR sensors classes return null; } - @Override + @Override public ActionSetting setSettings(String componentName, Object valueToSet, COMMUNICATION_TYPE commType) { - // Object returnValue = null; ActionSetting actionsetting = new ActionSetting(commType); - + return actionsetting; - } - + @Override public LinkedHashMap generateConfigMap() { -LinkedHashMap mapOfConfig = new LinkedHashMap(); - - mapOfConfig.put(SensorLIS3MDL.DatabaseConfigHandle.MAG_RATE, getLIS3MDLMagRate()); - mapOfConfig.put(SensorLIS3MDL.DatabaseConfigHandle.MAG_RANGE, getMagRange()); - mapOfConfig.put(SensorLIS3MDL.DatabaseConfigHandle.MAG_LPM, getLowPowerMagEnabled()); - mapOfConfig.put(SensorLIS3MDL.DatabaseConfigHandle.MAG_MPM, getMedPowerMagEnabled()); - mapOfConfig.put(SensorLIS3MDL.DatabaseConfigHandle.MAG_HPM, getHighPowerMagEnabled()); - mapOfConfig.put(SensorLIS3MDL.DatabaseConfigHandle.MAG_UPM, getUltraHighPowerMagEnabled()); - - super.addCalibDetailsToDbMap(mapOfConfig, - getCurrentCalibDetailsMag(), + LinkedHashMap mapOfConfig = new LinkedHashMap(); + + mapOfConfig.put(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_RANGE, getAltMagRange()); + mapOfConfig.put(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_RATE, getLIS3MDLAltMagRate()); + mapOfConfig.put(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_LPM, getLowPowerMagEnabled()); + mapOfConfig.put(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_MPM, getMedPowerMagEnabled()); + mapOfConfig.put(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_HPM, getHighPowerMagEnabled()); + mapOfConfig.put(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_UPM, getUltraHighPowerMagEnabled()); + + super.addCalibDetailsToDbMap(mapOfConfig, getCurrentCalibDetailsMagAlt(), SensorLIS3MDL.DatabaseConfigHandle.LIST_OF_CALIB_HANDLES_MAG, - SensorLIS3MDL.DatabaseConfigHandle.MAG_CALIB_TIME); + SensorLIS3MDL.DatabaseConfigHandle.MAG_ALT_CALIB_TIME); return mapOfConfig; } - - public CalibDetailsKinematic getCurrentCalibDetailsMag(){ -// return getCurrentCalibDetails(mSensorIdMag, getMagRange()); - if(mCurrentCalibDetailsMag==null){ - updateCurrentMagCalibInUse(); - } - return mCurrentCalibDetailsMag; + + public CalibDetailsKinematic getCurrentCalibDetailsMagAlt() { + return mCurrentCalibDetailsMagAlt; } - - public void updateCurrentMagCalibInUse(){ + + public void updateCurrentMagAltCalibInUse() { // mCurrentCalibDetailsMag = getCurrentCalibDetailsMag(); - mCurrentCalibDetailsMag = getCurrentCalibDetailsIfKinematic(mSensorIdMag, getMagRange()); + mCurrentCalibDetailsMagAlt = getCurrentCalibDetailsIfKinematic(mSensorIdAltMag, getAltMagRange()); } - - public int getMagRange() { - return mMagRange; + + public int getAltMagRange() { + return mAltMagRange; } - - public int getLIS3MDLMagRate() { - return mLISMagRate; + + public int getLIS3MDLAltMagRate() { + return mLISAltMagRate; } - public void setLISMagRange(int valueToSet){ - if(ArrayUtils.contains(ListofLIS3MDLMagRangeConfigValues, valueToSet)){ - mMagRange = valueToSet; - updateCurrentMagCalibInUse(); + public double getLIS3MDLAltMagRateInHz() { + + if(ArrayUtils.contains(ListofLIS3MDLAltMagRateConfigValues, mLISAltMagRate)){ + return ListofLIS3MDLAltMagRateConfigValues[mLISAltMagRate]; } + + return mLISAltMagRate; } - - public void setLISMagRate(int valueToSet){ - mLISMagRate = valueToSet; + + public void setLIS3MDLAltMagRate(int valueToSet) { + mLISAltMagRate = valueToSet; } - - public int getLowPowerMagEnabled(){ - return (isLowPowerMagEnabled()? 1:0); + + public void setAltMagRange(int valueToSet) { + setLIS3MDLAltMagRange(valueToSet); } - - public int getMedPowerMagEnabled(){ - return (isMedPowerMagEnabled()? 1:0); + + public void setLIS3MDLAltMagRange(int i) { + if (ArrayUtils.contains(ListofLIS3MDLAltMagRangeConfigValues, i)) { + + mAltMagRange = i; + updateCurrentMagAltCalibInUse(); + } + } - - public int getHighPowerMagEnabled(){ - return (isHighPowerMagEnabled()? 1:0); + + public int getLowPowerMagEnabled() { + return (isLowPowerMagEnabled() ? 1 : 0); } - - public int getUltraHighPowerMagEnabled(){ - return (isUltraHighPowerMagEnabled()? 1:0); + + public int getMedPowerMagEnabled() { + return (isMedPowerMagEnabled() ? 1 : 0); } - - public void setLowPowerMag(boolean enable){ + + public int getHighPowerMagEnabled() { + return (isHighPowerMagEnabled() ? 1 : 0); + } + + public int getUltraHighPowerMagEnabled() { + return (isUltraHighPowerMagEnabled() ? 1 : 0); + } + + public void setLowPowerMag(boolean enable) { mLowPowerMag = enable; - if(mShimmerDevice!=null){ - setLIS3MDLMagRateFromFreq(getSamplingRateShimmer()); + if (mShimmerDevice != null) { + setLIS3MDLAltMagRateFromFreq(getSamplingRateShimmer()); } } - - public void setMedPowerMag(boolean enable){ + + public void setMedPowerMag(boolean enable) { mMedPowerMag = enable; - if(mShimmerDevice!=null){ - setLIS3MDLMagRateFromFreq(getSamplingRateShimmer()); + if (mShimmerDevice != null) { + setLIS3MDLAltMagRateFromFreq(getSamplingRateShimmer()); } } - - public void setHighPowerMag(boolean enable){ + + public void setHighPowerMag(boolean enable) { mHighPowerMag = enable; - if(mShimmerDevice!=null){ - setLIS3MDLMagRateFromFreq(getSamplingRateShimmer()); + if (mShimmerDevice != null) { + setLIS3MDLAltMagRateFromFreq(getSamplingRateShimmer()); } } - - public void setUltraHighPowerMag(boolean enable){ + + public void setUltraHighPowerMag(boolean enable) { mUltraHighPowerMag = enable; - if(mShimmerDevice!=null){ - setLIS3MDLMagRateFromFreq(getSamplingRateShimmer()); + if (mShimmerDevice != null) { + setLIS3MDLAltMagRateFromFreq(getSamplingRateShimmer()); } } - - public boolean isLowPowerMagEnabled(){ + + public boolean isLowPowerMagEnabled() { return mLowPowerMag; } - - public boolean isMedPowerMagEnabled(){ + + public boolean isMedPowerMagEnabled() { return mMedPowerMag; } - - public boolean isHighPowerMagEnabled(){ + + public boolean isHighPowerMagEnabled() { return mHighPowerMag; } - - public boolean isUltraHighPowerMagEnabled(){ + + public boolean isUltraHighPowerMagEnabled() { return mUltraHighPowerMag; } @Override public void parseConfigMap(LinkedHashMap mapOfConfigPerShimmer) { - - if(mapOfConfigPerShimmer.containsKey(SensorLIS3MDL.DatabaseConfigHandle.MAG_LPM)){ - setLowPowerMag(((Double) mapOfConfigPerShimmer.get(SensorLIS3MDL.DatabaseConfigHandle.MAG_LPM))>0? true:false); + + if (mapOfConfigPerShimmer.containsKey(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_LPM)) { + setLowPowerMag( + ((Double) mapOfConfigPerShimmer.get(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_LPM)) > 0 ? true + : false); } - if(mapOfConfigPerShimmer.containsKey(SensorLIS3MDL.DatabaseConfigHandle.MAG_MPM)){ - setMedPowerMag(((Double) mapOfConfigPerShimmer.get(SensorLIS3MDL.DatabaseConfigHandle.MAG_MPM))>0? true:false); + if (mapOfConfigPerShimmer.containsKey(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_MPM)) { + setMedPowerMag( + ((Double) mapOfConfigPerShimmer.get(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_MPM)) > 0 ? true + : false); } - if(mapOfConfigPerShimmer.containsKey(SensorLIS3MDL.DatabaseConfigHandle.MAG_HPM)){ - setHighPowerMag(((Double) mapOfConfigPerShimmer.get(SensorLIS3MDL.DatabaseConfigHandle.MAG_HPM))>0? true:false); + if (mapOfConfigPerShimmer.containsKey(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_HPM)) { + setHighPowerMag( + ((Double) mapOfConfigPerShimmer.get(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_HPM)) > 0 ? true + : false); } - if(mapOfConfigPerShimmer.containsKey(SensorLIS3MDL.DatabaseConfigHandle.MAG_UPM)){ - setUltraHighPowerMag(((Double) mapOfConfigPerShimmer.get(SensorLIS3MDL.DatabaseConfigHandle.MAG_UPM))>0? true:false); + if (mapOfConfigPerShimmer.containsKey(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_UPM)) { + setUltraHighPowerMag( + ((Double) mapOfConfigPerShimmer.get(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_UPM)) > 0 ? true + : false); } - if(mapOfConfigPerShimmer.containsKey(SensorLIS3MDL.DatabaseConfigHandle.MAG_RANGE)){ - setLISMagRate(((Double) mapOfConfigPerShimmer.get(SensorLIS3MDL.DatabaseConfigHandle.MAG_RANGE)).intValue()); + if (mapOfConfigPerShimmer.containsKey(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_RANGE)) { + setAltMagRange( + ((Double) mapOfConfigPerShimmer.get(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_RANGE)).intValue()); } - if(mapOfConfigPerShimmer.containsKey(SensorLIS3MDL.DatabaseConfigHandle.MAG_RATE)){ - setLISMagRange(((Double) mapOfConfigPerShimmer.get(SensorLIS3MDL.DatabaseConfigHandle.MAG_RATE)).intValue()); + if (mapOfConfigPerShimmer.containsKey(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_RATE)) { + setLIS3MDLAltMagRate( + ((Double) mapOfConfigPerShimmer.get(SensorLIS3MDL.DatabaseConfigHandle.ALT_MAG_RATE)).intValue()); } - - //Magnetometer Calibration Configuration - parseCalibDetailsKinematicFromDb(mapOfConfigPerShimmer, - Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG, - getMagRange(), + + // Magnetometer Calibration Configuration + parseCalibDetailsKinematicFromDb(mapOfConfigPerShimmer, + Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG_ALT, getAltMagRange(), SensorLIS3MDL.DatabaseConfigHandle.LIST_OF_CALIB_HANDLES_MAG, - SensorLIS3MDL.DatabaseConfigHandle.MAG_CALIB_TIME); + SensorLIS3MDL.DatabaseConfigHandle.MAG_ALT_CALIB_TIME); } - + @Override public boolean processResponse(int responseCommand, Object parsedResponse, COMMUNICATION_TYPE commType) { // TODO Auto-generated method stub return false; } - - //--------- Abstract methods implemented end -------------- - - //--------- Optional methods to override in Sensor Class start -------- + + // --------- Abstract methods implemented end -------------- + + // --------- Optional methods to override in Sensor Class start -------- @Override public void initialise() { - mSensorIdMag = Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG; + mSensorIdAltMag = Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG_ALT; super.initialise(); - - mMagRange = ListofLIS3MDLMagRangeConfigValues[0]; - - updateCurrentMagCalibInUse(); + + mAltMagRange = ListofLIS3MDLAltMagRangeConfigValues[0]; + + updateCurrentMagAltCalibInUse(); } @Override public void generateCalibMap() { super.generateCalibMap(); - TreeMap calibMapMag = new TreeMap(); - calibMapMag.put(calibDetailsMag4.mRangeValue, calibDetailsMag4); - calibMapMag.put(calibDetailsMag8.mRangeValue, calibDetailsMag8); - calibMapMag.put(calibDetailsMag12.mRangeValue, calibDetailsMag12); - calibMapMag.put(calibDetailsMag16.mRangeValue, calibDetailsMag16); - setCalibrationMapPerSensor(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG, calibMapMag); - - updateCurrentMagCalibInUse(); + TreeMap calibMapMagAlt = new TreeMap(); + calibMapMagAlt.put(calibDetailsMag4.mRangeValue, calibDetailsMag4); + calibMapMagAlt.put(calibDetailsMag8.mRangeValue, calibDetailsMag8); + calibMapMagAlt.put(calibDetailsMag12.mRangeValue, calibDetailsMag12); + calibMapMagAlt.put(calibDetailsMag16.mRangeValue, calibDetailsMag16); + setCalibrationMapPerSensor(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG_ALT, calibMapMagAlt); + + updateCurrentMagAltCalibInUse(); } - - //--------- Optional methods to override in Sensor Class end -------- - - //--------- Sensor specific methods start -------------- - - public int setLIS3MDLMagRateFromFreq(double freq) { - boolean isEnabled = isSensorEnabled(mSensorIdMag); - - if(isLowPowerMagEnabled()) { - mLISMagRate = getMagRateFromFreqForSensor(isEnabled, freq, 0); + + // --------- Optional methods to override in Sensor Class end -------- + + // --------- Sensor specific methods start -------------- + + public double getCalibTimeMagAlt() { + return mCurrentCalibDetailsMagAlt.getCalibTimeMs(); + } + + public boolean isUsingValidMagAltParam() { + if (!UtilShimmer.isAllZeros(getAlignmentMatrixMagAlt()) + && !UtilShimmer.isAllZeros(getSensitivityMatrixMagAlt())) { + return true; } else { - mLISMagRate = getMagRateFromFreqForSensor(isEnabled, freq, -1); - } - return mLISMagRate; + return false; + } } - + + public void updateIsUsingDefaultAltMagParam() { + mIsUsingDefaultAltMagParam = getCurrentCalibDetailsMagAlt().isUsingDefaultParameters(); + } + + public int setLIS3MDLAltMagRateFromFreq(double freq) { + boolean isEnabled = isSensorEnabled(mSensorIdAltMag); + + if (isLowPowerMagEnabled()) { + mLISAltMagRate = getMagRateFromFreqForSensor(isEnabled, freq, 0); + } else { + mLISAltMagRate = getMagRateFromFreqForSensor(isEnabled, freq, -1); + } + return mLISAltMagRate; + } + public boolean checkLowPowerMag() { - setLowPowerMag((getLIS3MDLMagRate() == 0x08)? true:false); //10Hz + setLowPowerMag((getLIS3MDLAltMagRate() == 0x08) ? true : false); // 10Hz return isLowPowerMagEnabled(); } - + public boolean checkMedPowerMag() { - setMedPowerMag((getLIS3MDLMagRate() >= 17 && getLIS3MDLMagRate() <= 30)? true:false); + setMedPowerMag((getLIS3MDLAltMagRate() >= 17 && getLIS3MDLAltMagRate() <= 30) ? true : false); return isMedPowerMagEnabled(); } - + public boolean checkHighPowerMag() { - setHighPowerMag((getLIS3MDLMagRate() >= 33 && getLIS3MDLMagRate() <= 46)? true:false); + setHighPowerMag((getLIS3MDLAltMagRate() >= 33 && getLIS3MDLAltMagRate() <= 46) ? true : false); return isHighPowerMagEnabled(); } - + public boolean checkUltraHighPowerMag() { - setUltraHighPowerMag((getLIS3MDLMagRate() >= 49 && getLIS3MDLMagRate() <= 62)? true:false); + setUltraHighPowerMag((getLIS3MDLAltMagRate() >= 49 && getLIS3MDLAltMagRate() <= 62) ? true : false); return isUltraHighPowerMagEnabled(); } - + public int getMagRateFromFreqForSensor(boolean isEnabled, double freq, int powerMode) { return SensorLIS3MDL.getMagRateFromFreq(isEnabled, freq, powerMode); } - + public static int getMagRateFromFreq(boolean isEnabled, double freq, int powerMode) { int magRate = 0; // 0.625Hz - - if(isEnabled){ - if(powerMode == 0) //low power mode enabled + + if (isEnabled) { + if (powerMode == 0) // low power mode enabled { magRate = 0x08; - } - else - { - if (freq > 560) - { - magRate = 0x01; //Low Power Mode (1000Hz) - } - else if (freq > 300) - { - magRate = 0x11; //Medium (560Hz) - } - else if (freq > 155) - { - magRate = 0x21; //High (300Hz) - } - else if (freq > 100) - { - magRate = 0x31; //Ultra High (155Hz) - } - else if (freq > 50) - { - magRate = 0x31; //Ultra High (155Hz) - } - else if (freq > 20) - { - magRate = 0x3E; //Ultra High (80Hz) - } - else if (freq > 10) - { - magRate = 0x3A; //Ultra High (20Hz) - } - else - { - magRate = 0x08; //Ultra High (10Hz) + } else { + if (freq > 560) { + magRate = 0x01; // Low Power Mode (1000Hz) + } else if (freq > 300) { + magRate = 0x11; // Medium (560Hz) + } else if (freq > 155) { + magRate = 0x21; // High (300Hz) + } else if (freq > 100) { + magRate = 0x31; // Ultra High (155Hz) + } else if (freq > 50) { + magRate = 0x31; // Ultra High (155Hz) + } else if (freq > 20) { + magRate = 0x3E; // Ultra High (80Hz) + } else if (freq > 10) { + magRate = 0x3A; // Ultra High (20Hz) + } else { + magRate = 0x08; // Ultra High (10Hz) } } } - + return magRate; } - + public static int lowPowerMode(double freq) { int magRate = 0; - - if (freq<=0.625){ - magRate = 0; - } else if (freq<=1.25){ + + if (freq <= 0.625) { + magRate = 0; + } else if (freq <= 1.25) { magRate = 2; - } else if (freq<=2.5) { + } else if (freq <= 2.5) { magRate = 4; - } else if (freq<=5) { + } else if (freq <= 5) { magRate = 6; - } else if (freq<=10) { + } else if (freq <= 10) { magRate = 8; - } else if (freq<=20) { + } else if (freq <= 20) { magRate = 10; - } else if (freq<=40) { + } else if (freq <= 40) { magRate = 12; - } else if (freq<=80) { + } else if (freq <= 80) { magRate = 14; - } else if (freq<=1000) { + } else if (freq <= 1000) { magRate = 1; } - + return magRate; } - + public static int medPowerMode(double freq) { int magRate = 18; - - if (freq<=1.25){ + + if (freq <= 1.25) { magRate = 18; - } else if (freq<=2.5) { + } else if (freq <= 2.5) { magRate = 20; - } else if (freq<=5) { + } else if (freq <= 5) { magRate = 22; - } else if (freq<=10) { + } else if (freq <= 10) { magRate = 24; - } else if (freq<=20) { + } else if (freq <= 20) { magRate = 26; - } else if (freq<=40) { + } else if (freq <= 40) { magRate = 28; - } else if (freq<=80) { + } else if (freq <= 80) { magRate = 30; - } else if (freq<=560) { + } else if (freq <= 560) { magRate = 17; } return magRate; } - + public static int highPowerMode(double freq) { int magRate = 34; - - if (freq<=1.25){ + + if (freq <= 1.25) { magRate = 34; - } else if (freq<=2.5) { + } else if (freq <= 2.5) { magRate = 36; - } else if (freq<=5) { + } else if (freq <= 5) { magRate = 38; - } else if (freq<=10) { + } else if (freq <= 10) { magRate = 40; - } else if (freq<=20) { + } else if (freq <= 20) { magRate = 42; - } else if (freq<=40) { + } else if (freq <= 40) { magRate = 44; - } else if (freq<=80) { + } else if (freq <= 80) { magRate = 46; - } else if (freq<=300) { + } else if (freq <= 300) { magRate = 33; } return magRate; } - + public static int ultraHighPowerMode(double freq) { int magRate = 50; - - if (freq<=1.25){ + + if (freq <= 1.25) { magRate = 50; - } else if (freq<=2.5) { + } else if (freq <= 2.5) { magRate = 52; - } else if (freq<=5) { + } else if (freq <= 5) { magRate = 54; - } else if (freq<=10) { + } else if (freq <= 10) { magRate = 56; - } else if (freq<=20) { + } else if (freq <= 20) { magRate = 58; - } else if (freq<=40) { + } else if (freq <= 40) { magRate = 60; - } else if (freq<=80) { + } else if (freq <= 80) { magRate = 62; - } else if (freq<=155) { + } else if (freq <= 155) { magRate = 49; } return magRate; } - + public static String parseFromDBColumnToGUIChannel(String databaseChannelHandle) { return AbstractSensor.parseFromDBColumnToGUIChannel(mChannelMapRef, databaseChannelHandle); } - + public static String parseFromGUIChannelsToDBColumn(String objectClusterName) { return AbstractSensor.parseFromGUIChannelsToDBColumn(mChannelMapRef, objectClusterName); } @@ -728,280 +715,268 @@ public ObjectCluster processDataCustom(SensorDetails sensorDetails, byte[] rawDa ObjectCluster objectCluster, boolean isTimeSyncEnabled, double pcTimestampMs) { // process data originating from the Shimmer - objectCluster = sensorDetails.processDataCommon(rawData, commType, objectCluster, isTimeSyncEnabled, pcTimestampMs); - - //Calibration - if(mEnableCalibration){ - if(sensorDetails.mSensorDetailsRef.mGuiFriendlyLabel.equals(GuiLabelSensors.MAG) && mCurrentCalibDetailsMag!=null){ - double[] unCalibratedMagData = new double[3]; - for (ChannelDetails channelDetails:sensorDetails.mListOfChannels){ - //Uncalibrated Magnetometer data - if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_X)){ - unCalibratedMagData[0] = ((FormatCluster)ObjectCluster.returnFormatCluster(objectCluster.getCollectionOfFormatClusters(channelDetails.mObjectClusterName), channelDetails.mChannelFormatDerivedFromShimmerDataPacket.toString())).mData; + objectCluster = sensorDetails.processDataCommon(rawData, commType, objectCluster, isTimeSyncEnabled, + pcTimestampMs); + + // Calibration + if (mEnableCalibration) { + // get uncalibrated data for each (sub)sensor + if (sensorDetails.mSensorDetailsRef.mGuiFriendlyLabel.equals(GuiLabelSensors.MAG_ALT) + && mCurrentCalibDetailsMagAlt != null) { + double[] unCalibratedMagAltData = new double[3]; + for (ChannelDetails channelDetails : sensorDetails.mListOfChannels) { + // Uncalibrated Mag ALT data + if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_ALT_X)) { + unCalibratedMagAltData[0] = ((FormatCluster) ObjectCluster.returnFormatCluster( + objectCluster.getCollectionOfFormatClusters(channelDetails.mObjectClusterName), + channelDetails.mChannelFormatDerivedFromShimmerDataPacket.toString())).mData; + } else if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_ALT_Y)) { + unCalibratedMagAltData[1] = ((FormatCluster) ObjectCluster.returnFormatCluster( + objectCluster.getCollectionOfFormatClusters(channelDetails.mObjectClusterName), + channelDetails.mChannelFormatDerivedFromShimmerDataPacket.toString())).mData; + } else if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_ALT_Z)) { + unCalibratedMagAltData[2] = ((FormatCluster) ObjectCluster.returnFormatCluster( + objectCluster.getCollectionOfFormatClusters(channelDetails.mObjectClusterName), + channelDetails.mChannelFormatDerivedFromShimmerDataPacket.toString())).mData; } - else if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_Y)){ - unCalibratedMagData[1] = ((FormatCluster)ObjectCluster.returnFormatCluster(objectCluster.getCollectionOfFormatClusters(channelDetails.mObjectClusterName), channelDetails.mChannelFormatDerivedFromShimmerDataPacket.toString())).mData; - } - else if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_Z)){ - unCalibratedMagData[2] = ((FormatCluster)ObjectCluster.returnFormatCluster(objectCluster.getCollectionOfFormatClusters(channelDetails.mObjectClusterName), channelDetails.mChannelFormatDerivedFromShimmerDataPacket.toString())).mData; - } } - -// double[] calibratedMagData = UtilCalibration.calibrateInertialSensorData(unCalibratedMagData, mAlignmentMatrixMagnetometer, mSensitivityMatrixMagnetometer, mOffsetVectorMagnetometer); - double[] calibratedMagData = UtilCalibration.calibrateInertialSensorData(unCalibratedMagData, mCurrentCalibDetailsMag); - - if(sensorDetails.mSensorDetailsRef.mGuiFriendlyLabel.equals(GuiLabelSensors.MAG)){ - for (ChannelDetails channelDetails:sensorDetails.mListOfChannels){ - if(channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_X)){ - objectCluster.addCalData(channelDetails, calibratedMagData[0], objectCluster.getIndexKeeper()-3, isUsingDefaultMagParam()); - } - else if(channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_Y)){ - objectCluster.addCalData(channelDetails, calibratedMagData[1], objectCluster.getIndexKeeper()-2, isUsingDefaultMagParam()); - } - else if(channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_Z)){ - objectCluster.addCalData(channelDetails, calibratedMagData[2], objectCluster.getIndexKeeper()-1, isUsingDefaultMagParam()); + + double[] calibratedMagAltData = UtilCalibration.calibrateInertialSensorData(unCalibratedMagAltData, + mCurrentCalibDetailsMagAlt); +// double[] calibratedAccelAltData = UtilCalibration.calibrateInertialSensorData(unCalibratedAccelAltData, mAlignmentMatrixAltAccel, mSensitivityMatrixAltAccel, mOffsetVectorAltAccel); + + // Add calibrated data to Object cluster + if (sensorDetails.mSensorDetailsRef.mGuiFriendlyLabel.equals(GuiLabelSensors.MAG_ALT)) { + for (ChannelDetails channelDetails : sensorDetails.mListOfChannels) { + if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_ALT_X)) { + objectCluster.addCalData(channelDetails, calibratedMagAltData[0], + objectCluster.getIndexKeeper() - 3, isUsingDefaultMagAltParam()); + } else if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_ALT_Y)) { + objectCluster.addCalData(channelDetails, calibratedMagAltData[1], + objectCluster.getIndexKeeper() - 2, isUsingDefaultMagAltParam()); + } else if (channelDetails.mObjectClusterName.equals(ObjectClusterSensorName.MAG_ALT_Z)) { + objectCluster.addCalData(channelDetails, calibratedMagAltData[2], + objectCluster.getIndexKeeper() - 1, isUsingDefaultMagAltParam()); } } } - - //Debugging - if(mIsDebugOutput){ - super.consolePrintChannelsCal(objectCluster, Arrays.asList( - new String[]{ObjectClusterSensorName.MAG_X, CHANNEL_TYPE.UNCAL.toString()}, - new String[]{ObjectClusterSensorName.MAG_Y, CHANNEL_TYPE.UNCAL.toString()}, - new String[]{ObjectClusterSensorName.MAG_Z, CHANNEL_TYPE.UNCAL.toString()}, - new String[]{ObjectClusterSensorName.MAG_X, CHANNEL_TYPE.CAL.toString()}, - new String[]{ObjectClusterSensorName.MAG_Y, CHANNEL_TYPE.CAL.toString()}, - new String[]{ObjectClusterSensorName.MAG_Z, CHANNEL_TYPE.CAL.toString()})); + + // Debugging + if (mIsDebugOutput) { + super.consolePrintChannelsCal(objectCluster, + Arrays.asList( + new String[] { ObjectClusterSensorName.MAG_ALT_X, CHANNEL_TYPE.UNCAL.toString() }, + new String[] { ObjectClusterSensorName.MAG_ALT_Y, CHANNEL_TYPE.UNCAL.toString() }, + new String[] { ObjectClusterSensorName.MAG_ALT_Z, CHANNEL_TYPE.UNCAL.toString() }, + new String[] { ObjectClusterSensorName.MAG_ALT_X, CHANNEL_TYPE.CAL.toString() }, + new String[] { ObjectClusterSensorName.MAG_ALT_Y, CHANNEL_TYPE.CAL.toString() }, + new String[] { ObjectClusterSensorName.MAG_ALT_Z, CHANNEL_TYPE.CAL.toString() })); } + } } return objectCluster; } - - public boolean isUsingDefaultMagParam(){ - return getCurrentCalibDetailsMag().isUsingDefaultParameters(); + + public boolean isUsingDefaultMagAltParam() { + return getCurrentCalibDetailsMagAlt().isUsingDefaultParameters(); } @Override public void checkShimmerConfigBeforeConfiguring() { - if(!isSensorEnabled(mSensorIdMag)) { - setDefaultLisMagSensorConfig(false); + if (!isSensorEnabled(mSensorIdAltMag)) { + setDefaultLisMagAltSensorConfig(false); } + } @Override public void configBytesGenerate(ShimmerDevice shimmerDevice, byte[] configBytes, COMMUNICATION_TYPE commType) { ConfigByteLayout configByteLayout = shimmerDevice.getConfigByteLayout(); - if(configByteLayout instanceof ConfigByteLayoutShimmer3){ + if (configByteLayout instanceof ConfigByteLayoutShimmer3) { ConfigByteLayoutShimmer3 configByteLayoutCast = (ConfigByteLayoutShimmer3) configByteLayout; + configBytes[configByteLayoutCast.idxConfigSetupByte2] |= (byte) ((getAltMagRange() + & configByteLayoutCast.maskLSM303DLHCMagRange) << configByteLayoutCast.bitShiftLSM303DLHCMagRange); + + configBytes[configByteLayoutCast.idxConfigSetupByte5] |= (byte) ((getLIS3MDLAltMagRate() + & configByteLayoutCast.maskLIS3MDLAltMagSamplingRate) << configByteLayoutCast.bitShiftLIS3MDLAltMagSamplingRate); - configBytes[configByteLayoutCast.idxConfigSetupByte2] |= (byte) ((getMagRange() & configByteLayoutCast.maskLSM303DLHCMagRange) << configByteLayoutCast.bitShiftLSM303DLHCMagRange); - configBytes[configByteLayoutCast.idxConfigSetupByte2] |= (byte) ((getLIS3MDLMagRate() & configByteLayoutCast.maskLSM303DLHCMagSamplingRate) << configByteLayoutCast.bitShiftLSM303DLHCMagSamplingRate); - configBytes[configByteLayoutCast.idxConfigSetupByte5] |= (byte) ((getLIS3MDLMagRate() >> 3 & configByteLayoutCast.maskLIS3MDLMagRateMSB) << configByteLayoutCast.bitShiftLIS3MDLMagRateMSB); - - // LISM3MDL Magnetometer Calibration Parameters byte[] bufferCalibrationParameters = generateCalParamLIS3MDLMag(); - System.arraycopy(bufferCalibrationParameters, 0, configBytes, configByteLayoutCast.idxLSM303DLHCMagCalibration, configByteLayoutCast.lengthGeneralCalibrationBytes); + System.arraycopy(bufferCalibrationParameters, 0, configBytes, + configByteLayoutCast.idxLIS3MDLAltMagCalibration, + configByteLayoutCast.lengthGeneralCalibrationBytes); } } - - public byte[] generateCalParamLIS3MDLMag(){ - return getCurrentCalibDetailsMag().generateCalParamByteArray(); + + public byte[] generateCalParamLIS3MDLMag() { + return mCurrentCalibDetailsMagAlt.generateCalParamByteArray(); } @Override public void configBytesParse(ShimmerDevice shimmerDevice, byte[] configBytes, COMMUNICATION_TYPE commType) { ConfigByteLayout configByteLayout = shimmerDevice.getConfigByteLayout(); - if(configByteLayout instanceof ConfigByteLayoutShimmer3){ + if (configByteLayout instanceof ConfigByteLayoutShimmer3) { ConfigByteLayoutShimmer3 configByteLayoutCast = (ConfigByteLayoutShimmer3) configByteLayout; - - setLISMagRange((configBytes[configByteLayoutCast.idxConfigSetupByte2] >> configByteLayoutCast.bitShiftLSM303DLHCMagRange) & configByteLayoutCast.maskLSM303DLHCMagRange); - //setLISMagRate((configBytes[configByteLayoutCast.idxConfigSetupByte2] >> configByteLayoutCast.bitShiftLSM303DLHCMagSamplingRate) & configByteLayoutCast.maskLSM303DLHCMagSamplingRate); - int lsbMagRate = (configBytes[configByteLayoutCast.idxConfigSetupByte2] >> configByteLayoutCast.bitShiftLSM303DLHCMagSamplingRate) & configByteLayoutCast.maskLSM303DLHCMagSamplingRate; - int msbMagRate = (configBytes[configByteLayoutCast.idxConfigSetupByte5] >> configByteLayoutCast.bitShiftLIS3MDLMagRateMSB) & configByteLayoutCast.maskLIS3MDLMagRateMSB; - setLISMagRate((msbMagRate << 3) | lsbMagRate); + setLIS3MDLAltMagRange((configBytes[configByteLayoutCast.idxConfigSetupByte2] >> configByteLayoutCast.bitShiftLSM303DLHCMagRange) + & configByteLayoutCast.maskLSM303DLHCMagRange); + setLIS3MDLAltMagRate( + (configBytes[configByteLayoutCast.idxConfigSetupByte5] >> configByteLayoutCast.bitShiftLIS3MDLAltMagSamplingRate) + & configByteLayoutCast.maskLIS3MDLAltMagSamplingRate); checkLowPowerMag(); // check rate to determine if Sensor is in LPM mode - - if (shimmerDevice.isConnected()){ - getCurrentCalibDetailsMag().mCalibReadSource=CALIB_READ_SOURCE.INFOMEM; + + if (shimmerDevice.isConnected()) { + getCurrentCalibDetailsMagAlt().mCalibReadSource = CALIB_READ_SOURCE.INFOMEM; } - // LSM303DLHC Magnetometer Calibration Parameters byte[] bufferCalibrationParameters = new byte[configByteLayoutCast.lengthGeneralCalibrationBytes]; - System.arraycopy(configBytes, configByteLayoutCast.idxLSM303DLHCMagCalibration, bufferCalibrationParameters, 0 , configByteLayoutCast.lengthGeneralCalibrationBytes); - parseCalibParamFromPacketMag(bufferCalibrationParameters, CALIB_READ_SOURCE.INFOMEM); + System.arraycopy(configBytes, configByteLayoutCast.idxLIS3MDLAltMagCalibration, bufferCalibrationParameters, + 0, configByteLayoutCast.lengthGeneralCalibrationBytes); + parseCalibParamFromPacketMagAlt(bufferCalibrationParameters, CALIB_READ_SOURCE.INFOMEM); } } - public void parseCalibParamFromPacketMag(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { - getCurrentCalibDetailsMag().parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); + public void parseCalibParamFromPacketMagAlt(byte[] bufferCalibrationParameters, CALIB_READ_SOURCE calibReadSource) { + mCurrentCalibDetailsMagAlt.parseCalParamByteArray(bufferCalibrationParameters, calibReadSource); } - + @Override public Object setConfigValueUsingConfigLabel(Integer sensorId, String configLabel, Object valueToSet) { Object returnValue = null; - - switch(configLabel){ - case(GuiLabelConfig.LIS3MDL_MAG_LP): - setLowPowerMag((boolean)valueToSet); - break; - case(GuiLabelConfig.LIS3MDL_MAG_MP): - setMedPowerMag((boolean)valueToSet); - break; - case(GuiLabelConfig.LIS3MDL_MAG_HP): - setHighPowerMag((boolean)valueToSet); - break; - case(GuiLabelConfig.LIS3MDL_MAG_UP): - setUltraHighPowerMag((boolean)valueToSet); - break; - case(GuiLabelConfig.LIS3MDL_MAG_RANGE): - setLISMagRange((int)valueToSet); - break; - case(GuiLabelConfig.LIS3MDL_MAG_RATE): - setLISMagRate((int)valueToSet); - break; - -// case(GuiLabelConfigCommon.KINEMATIC_CALIBRATION_ALL): -// TreeMap> mapOfKinematicSensorCalibration = (TreeMap>) valueToSet; -// setCalibration(mapOfKinematicSensorCalibration); -// returnValue = valueToSet; -// break; - case(GuiLabelConfigCommon.RANGE): - if(sensorId==mSensorIdMag){ - this.setConfigValueUsingConfigLabel(GuiLabelConfig.LIS3MDL_MAG_RANGE, valueToSet); - } - break; - case(GuiLabelConfigCommon.RATE): - if(sensorId==mSensorIdMag){ - this.setConfigValueUsingConfigLabel(GuiLabelConfig.LIS3MDL_MAG_RATE, valueToSet); - } + + switch (configLabel) { + case (GuiLabelConfig.LIS3MDL_ALT_MAG_LP): + setLowPowerMag((boolean) valueToSet); + break; + case (GuiLabelConfig.LIS3MDL_ALT_MAG_MP): + setMedPowerMag((boolean) valueToSet); + break; + case (GuiLabelConfig.LIS3MDL_ALT_MAG_HP): + setHighPowerMag((boolean) valueToSet); + break; + case (GuiLabelConfig.LIS3MDL_ALT_MAG_UP): + setUltraHighPowerMag((boolean) valueToSet); + break;//LIS2MDL_MAG_RANGE + case (GuiLabelConfig.LIS3MDL_ALT_MAG_RANGE): + setLIS3MDLAltMagRange((int) valueToSet); + break; + case (GuiLabelConfig.LIS3MDL_ALT_MAG_RATE): + setLIS3MDLAltMagRate((int) valueToSet); + break; + case (GuiLabelConfigCommon.RANGE): + if (sensorId == mSensorIdAltMag) { + this.setConfigValueUsingConfigLabel(GuiLabelConfig.LIS3MDL_ALT_MAG_RANGE, valueToSet); break; - default: - returnValue = super.setConfigValueUsingConfigLabelCommon(sensorId, configLabel, valueToSet); + } + case (GuiLabelConfigCommon.RATE): + if (sensorId == mSensorIdAltMag) { + this.setConfigValueUsingConfigLabel(GuiLabelConfig.LIS3MDL_ALT_MAG_RATE, valueToSet); break; - } - - if(configLabel.equals(SensorLIS3MDL.GuiLabelConfig.LIS3MDL_MAG_RATE)){ - checkConfigOptionValues(configLabel); - } - + } + default: + returnValue = super.setConfigValueUsingConfigLabelCommon(sensorId, configLabel, valueToSet); + break; + } + + if (configLabel.equals(SensorLIS3MDL.GuiLabelConfig.LIS3MDL_ALT_MAG_RATE)) { + checkConfigOptionValues(configLabel); + } + return returnValue; } @Override public Object getConfigValueUsingConfigLabel(Integer sensorId, String configLabel) { Object returnValue = null; - - if(configLabel.equals(GuiLabelConfig.LIS3MDL_MAG_RATE)){ - checkConfigOptionValues(configLabel); - } - - switch(configLabel){ - case(GuiLabelConfig.LIS3MDL_MAG_LP): - returnValue = isLowPowerMagEnabled(); - break; - case(GuiLabelConfig.LIS3MDL_MAG_MP): - returnValue = isMedPowerMagEnabled(); - break; - case(GuiLabelConfig.LIS3MDL_MAG_HP): - returnValue = isHighPowerMagEnabled(); - break; - case(GuiLabelConfig.LIS3MDL_MAG_UP): - returnValue = isUltraHighPowerMagEnabled(); - break; - case(GuiLabelConfig.LIS3MDL_MAG_RATE): - returnValue = getLIS3MDLMagRate(); - break; - case(GuiLabelConfig.LIS3MDL_MAG_RANGE): - //TODO check below and commented out code (RS (20/5/2016): Same as in ShimmerObject.) - returnValue = getMagRange(); - -// case(Configuration.Shimmer3.GuiLabelConfig.KINEMATIC_CALIBRATION_ALL): -// returnValue = getKinematicCalibration(); -// break; - case(GuiLabelConfigCommon.RANGE): - if(sensorId==mSensorIdMag){ - returnValue = this.getConfigValueUsingConfigLabel(GuiLabelConfig.LIS3MDL_MAG_RANGE); - } - break; - case(GuiLabelConfigCommon.RATE): - if(sensorId==mSensorIdMag){ - returnValue = this.getConfigValueUsingConfigLabel(GuiLabelConfig.LIS3MDL_MAG_RATE); - } + + if (configLabel.equals(GuiLabelConfig.LIS3MDL_ALT_MAG_RATE)) { + checkConfigOptionValues(configLabel); + } + + switch (configLabel) { + case (GuiLabelConfig.LIS3MDL_ALT_MAG_LP): + returnValue = isLowPowerMagEnabled(); + break; + case (GuiLabelConfig.LIS3MDL_ALT_MAG_MP): + returnValue = isMedPowerMagEnabled(); + break; + case (GuiLabelConfig.LIS3MDL_ALT_MAG_HP): + returnValue = isHighPowerMagEnabled(); + break; + case (GuiLabelConfig.LIS3MDL_ALT_MAG_UP): + returnValue = isUltraHighPowerMagEnabled(); + break; + case (GuiLabelConfig.LIS3MDL_ALT_MAG_RANGE): + returnValue = getAltMagRange(); + break; + case (GuiLabelConfig.LIS3MDL_ALT_MAG_RATE): + int configValue = getLIS3MDLAltMagRate(); + //int configValue = (int) getLIS3MDLAltMagRateInHz(); + returnValue = configValue; + break; + case (GuiLabelConfigCommon.RANGE): + if (sensorId == mSensorIdAltMag) { + returnValue = this.getConfigValueUsingConfigLabel(GuiLabelConfig.LIS3MDL_ALT_MAG_RANGE); +// returnValue = 0; break; - default: - returnValue = super.getConfigValueUsingConfigLabelCommon(sensorId, configLabel); + } + case (GuiLabelConfigCommon.RATE): + if (sensorId == mSensorIdAltMag) { + returnValue = this.getConfigValueUsingConfigLabel(GuiLabelConfig.LIS3MDL_ALT_MAG_RATE); break; - + } + default: + returnValue = super.getConfigValueUsingConfigLabelCommon(sensorId, configLabel); + break; + } return returnValue; } @Override public void setSensorSamplingRate(double samplingRateHz) { - //set sampling rate of the sensors as close to the Shimmer sampling rate as possible (sensor sampling rate >= shimmer sampling rate) - - setLIS3MDLMagRateFromFreq(samplingRateHz); + // set sampling rate of the sensors as close to the Shimmer sampling rate as + // possible (sensor sampling rate >= shimmer sampling rate) + + setLIS3MDLAltMagRateFromFreq(samplingRateHz); checkLowPowerMag(); } - - public void setDefaultLisMagSensorConfig(boolean isSensorEnabled) { - if(isSensorEnabled) { - setLowPowerMag(false); - } - else { - setLISMagRange(1); - setLowPowerMag(true); - } - } @Override public boolean setDefaultConfigForSensor(int sensorId, boolean isSensorEnabled) { - if(mSensorMap.containsKey(sensorId)){ - if(sensorId==mSensorIdMag) { - setDefaultLisMagSensorConfig(isSensorEnabled); + if (mSensorMap.containsKey(sensorId)) { + if (sensorId == mSensorIdAltMag) { + setDefaultLisMagAltSensorConfig(isSensorEnabled); } return true; } return false; } + public void setDefaultLisMagAltSensorConfig(boolean isSensorEnabled) { + if (isSensorEnabled) { + setLIS3MDLAltMagRange(0); + } + } + @Override public boolean checkConfigOptionValues(String stringKey) { // TODO Auto-generated method stub return false; } - - //--------- Sensor specific methods end -------------- - - public double getCalibTimeMag() { - return mCurrentCalibDetailsMag.getCalibTimeMs(); - } - - public boolean isUsingValidMagParam() { - if(!UtilShimmer.isAllZeros(getAlignmentMatrixMag()) && !UtilShimmer.isAllZeros(getSensitivityMatrixMag())){ - return true; - }else{ - return false; - } - } - - public double[][] getAlignmentMatrixMag(){ - return getCurrentCalibDetailsMag().getValidAlignmentMatrix(); - } - - public void updateIsUsingDefaultMagParam() { - mIsUsingDefaultMagParam = getCurrentCalibDetailsMag().isUsingDefaultParameters(); + + public double[][] getAlignmentMatrixMagAlt() { + return mCurrentCalibDetailsMagAlt.getValidAlignmentMatrix(); } - - public double[][] getSensitivityMatrixMag(){ - return getCurrentCalibDetailsMag().getValidSensitivityMatrix(); + + public double[][] getSensitivityMatrixMagAlt() { + return mCurrentCalibDetailsMagAlt.getValidSensitivityMatrix(); } - - public double[][] getOffsetVectorMatrixMag(){ - return getCurrentCalibDetailsMag().getValidOffsetVector(); + + public double[][] getOffsetVectorMatrixMagAlt() { + return mCurrentCalibDetailsMagAlt.getValidOffsetVector(); } + // --------- Sensor specific methods end -------------- + } diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/lsm6dsv/SensorLSM6DSV.java b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/lsm6dsv/SensorLSM6DSV.java index cf8f1c1f5..4d546a036 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/lsm6dsv/SensorLSM6DSV.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/lsm6dsv/SensorLSM6DSV.java @@ -1088,7 +1088,8 @@ public Object getConfigValueUsingConfigLabel(Integer sensorId, String configLabe case(GuiLabelConfig.LSM6DSV_GYRO_RATE): //returnValue = Double.toString((double)Math.round(getLSM6DSVGyroAccelRateInHz() * 100) / 100); // round sampling rate to two decimal places int configValue = getLSM6DSVGyroAccelRate(); - returnValue = configValue; break; + returnValue = configValue; + break; case(GuiLabelConfig.LSM6DSV_GYRO_RATE_HZ): returnValue = getLSM6DSVGyroAccelRateInHz(); break; diff --git a/ShimmerDriverPC/src/main/java/com/shimmerresearch/guiUtilities/configuration/EnableLowPowerModeDialog.java b/ShimmerDriverPC/src/main/java/com/shimmerresearch/guiUtilities/configuration/EnableLowPowerModeDialog.java index e5cb7cb50..a832bb26f 100644 --- a/ShimmerDriverPC/src/main/java/com/shimmerresearch/guiUtilities/configuration/EnableLowPowerModeDialog.java +++ b/ShimmerDriverPC/src/main/java/com/shimmerresearch/guiUtilities/configuration/EnableLowPowerModeDialog.java @@ -21,6 +21,7 @@ import com.shimmerresearch.driverUtilities.ShimmerVerDetails.HW_ID; import com.shimmerresearch.managers.bluetoothManager.ShimmerBluetoothManager; import com.shimmerresearch.sensors.lis2dw12.SensorLIS2DW12; +import com.shimmerresearch.sensors.lisxmdl.SensorLIS2MDL; import com.shimmerresearch.sensors.lisxmdl.SensorLIS3MDL; import com.shimmerresearch.sensors.lsm6dsv.SensorLSM6DSV; import com.shimmerresearch.tools.bluetooth.BasicShimmerBluetoothManagerPc; @@ -83,8 +84,8 @@ public void actionPerformed(ActionEvent e) { } } if (connected) { - clone.setConfigValueUsingConfigLabel(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG, - SensorLIS3MDL.GuiLabelConfig.LIS3MDL_MAG_LP, cbEnableMagLP.isSelected()); + clone.setConfigValueUsingConfigLabel(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG, + SensorLIS2MDL.GuiLabelConfig.LIS2MDL_MAG_LP, cbEnableMagLP.isSelected()); clone.setConfigValueUsingConfigLabel(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LSM6DSV_GYRO, SensorLSM6DSV.GuiLabelConfig.LSM6DSV_GYRO_LPM, cbEnableGyroLP.isSelected()); clone.setConfigValueUsingConfigLabel(Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2DW12_ACCEL_WR, @@ -123,7 +124,7 @@ protected void initialize() { cbEnableGyroLP.setText("Enable LN Accel and Gyro LP Mode"); } boolean isLowPowerMagEnabled = Boolean.valueOf(clone.getConfigGuiValueUsingConfigLabel( - Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS3MDL_MAG, SensorLIS3MDL.GuiLabelConfig.LIS3MDL_MAG_LP)); + Configuration.Shimmer3.SENSOR_ID.SHIMMER_LIS2MDL_MAG, SensorLIS2MDL.GuiLabelConfig.LIS2MDL_MAG_LP)); cbEnableMagLP.setSelected(isLowPowerMagEnabled); boolean isLowPowerGyroEnabled = Boolean.valueOf(clone.getConfigGuiValueUsingConfigLabel( diff --git a/ShimmerDriverPC/src/main/java/com/shimmerresearch/guiUtilities/configuration/SensorConfigDialog.java b/ShimmerDriverPC/src/main/java/com/shimmerresearch/guiUtilities/configuration/SensorConfigDialog.java index 176d46c43..a3a7d5f26 100644 --- a/ShimmerDriverPC/src/main/java/com/shimmerresearch/guiUtilities/configuration/SensorConfigDialog.java +++ b/ShimmerDriverPC/src/main/java/com/shimmerresearch/guiUtilities/configuration/SensorConfigDialog.java @@ -240,6 +240,8 @@ public void showDialog() { displayButDisableFilterList.add("Wide Range Accel Rate"); displayButDisableFilterList.add("Mag Rate"); displayButDisableFilterList.add("Gyro Sampling Rate"); + displayButDisableFilterList.add("Alternate Mag Rate"); + displayButDisableFilterList.add("High G Accel Rate"); setSensorDisplayButDisableKeysFilter(displayButDisableFilterList, true); createFrame(); 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 31faa7a00..8458e9341 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 @@ -26,8 +26,8 @@ import com.shimmerresearch.sensors.adxl371.SensorADXL371; import com.shimmerresearch.sensors.bmpX80.CalibDetailsBmp390; import com.shimmerresearch.sensors.lis2dw12.SensorLIS2DW12; -import com.shimmerresearch.sensors.lisxmdl.SensorLIS2MDL; import com.shimmerresearch.sensors.lisxmdl.SensorLIS3MDL; +import com.shimmerresearch.sensors.lisxmdl.SensorLIS2MDL; import com.shimmerresearch.sensors.lsm303.SensorLSM303; import com.shimmerresearch.sensors.lsm6dsv.SensorLSM6DSV; import com.shimmerresearch.sensors.AbstractSensor; @@ -315,26 +315,18 @@ public void test006_ConnectandTestDefaultMagCalibParam() { if (!mDevice.isConnected()) { assert(false); } - //SHIMMER_LIS3MDL_MAG - mDevice.setDefaultCalibrationShimmer3StandardImus(); + //SHIMMER_LIS2MDL_MAG + + mDevice.setDefaultCalibrationShimmer3StandardImus(); double[][] magOffset = mDevice.getOffsetVectorMatrixMag(); - assertTrue(Arrays.deepEquals(magOffset, SensorLIS3MDL.DefaultOffsetVectorMagShimmer3)); + assertTrue(Arrays.deepEquals(magOffset, SensorLIS2MDL.DefaultOffsetVectorMagShimmer3r)); double[][] magAlignment = mDevice.getAlignmentMatrixMag(); - assertTrue(Arrays.deepEquals(magAlignment, SensorLIS3MDL.DefaultAlignmentMatrixMagShimmer3)); + assertTrue(Arrays.deepEquals(magAlignment, SensorLIS2MDL.DefaultAlignmentMatrixMagShimmer3r)); + double[][] magSensitivity = mDevice.getSensitivityMatrixMag(); + assertTrue(Arrays.deepEquals(magSensitivity, SensorLIS2MDL.DefaultSensitivityMatrixMagShimmer3r)); + - mDevice.setLSM303MagRange(0); - double[][] magSensitivity0 = mDevice.getSensitivityMatrixMag(); - assertTrue(Arrays.deepEquals(magSensitivity0, SensorLIS3MDL.DefaultSensitivityMatrixMag4GaShimmer3)); - mDevice.setLSM303MagRange(1); - double[][] magSensitivity1 = mDevice.getSensitivityMatrixMag(); - assertTrue(Arrays.deepEquals(magSensitivity1, SensorLIS3MDL.DefaultSensitivityMatrixMag8GaShimmer3)); - mDevice.setLSM303MagRange(2); - double[][] magSensitivity2 = mDevice.getSensitivityMatrixMag(); - assertTrue(Arrays.deepEquals(magSensitivity2, SensorLIS3MDL.DefaultSensitivityMatrixMag12GaShimmer3)); - mDevice.setLSM303MagRange(3); - double[][] magSensitivity3 = mDevice.getSensitivityMatrixMag(); - assertTrue(Arrays.deepEquals(magSensitivity3, SensorLIS3MDL.DefaultSensitivityMatrixMag16GaShimmer3)); } @Test public void test007_ConnectandTestDefaultHighGAccelCalibParam() { @@ -365,7 +357,7 @@ public void test007_ConnectandTestDefaultHighGAccelCalibParam() { } @Test - public void test008_ConnectandTestDefaultWRMagCalibParam() { + public void test008_ConnectandTestDefaultAltMagCalibParam() { mWaitTask = new TaskCompletionSource(); mDevice.connect("",""); @@ -380,16 +372,27 @@ public void test008_ConnectandTestDefaultWRMagCalibParam() { if (!mDevice.isConnected()) { assert(false); } - //SHIMMER_LIS2MDL_MAG_WR - mDevice.setDefaultCalibrationShimmer3StandardImus(); + //SHIMMER_LIS3MDL_MAG + mDevice.setDefaultCalibrationShimmer3StandardImus(); - double[][] wrMagOffset = mDevice.getOffsetVectorMatrixWRMag(); - assertTrue(Arrays.deepEquals(wrMagOffset, SensorLIS2MDL.DefaultOffsetVectorWRMagShimmer3r)); - double[][] wrMagAlignment = mDevice.getAlignmentMatrixWRMag(); - assertTrue(Arrays.deepEquals(wrMagAlignment, SensorLIS2MDL.DefaultAlignmentMatrixWRMagShimmer3r)); - double[][] wrMagSensitivity = mDevice.getSensitivityMatrixWRMag(); - assertTrue(Arrays.deepEquals(wrMagSensitivity, SensorLIS2MDL.DefaultSensitivityMatrixWRMagShimmer3r)); + double[][] altMagOffset = mDevice.getOffsetVectorMatrixAltMag(); + assertTrue(Arrays.deepEquals(altMagOffset, SensorLIS3MDL.DefaultOffsetVectorAltMagShimmer3r)); + double[][] altMagAlignment = mDevice.getAlignmentMatrixAltMag(); + assertTrue(Arrays.deepEquals(altMagAlignment, SensorLIS3MDL.DefaultAlignmentMatrixAltMagShimmer3r)); + + mDevice.setAltMagRange(0); + double[][] altMagSensitivity0 = mDevice.getSensitivityMatrixAltMag(); + assertTrue(Arrays.deepEquals(altMagSensitivity0, SensorLIS3MDL.DefaultSensitivityMatrixAltMag4GaShimmer3r)); + mDevice.setAltMagRange(1); + double[][] altMagSensitivity1 = mDevice.getSensitivityMatrixAltMag(); + assertTrue(Arrays.deepEquals(altMagSensitivity1, SensorLIS3MDL.DefaultSensitivityMatrixAltMag8GaShimmer3r)); + mDevice.setAltMagRange(2); + double[][] altMagSensitivity2 = mDevice.getSensitivityMatrixAltMag(); + assertTrue(Arrays.deepEquals(altMagSensitivity2, SensorLIS3MDL.DefaultSensitivityMatrixAltMag12GaShimmer3r)); + mDevice.setAltMagRange(3); + double[][] altMagSensitivity3 = mDevice.getSensitivityMatrixAltMag(); + assertTrue(Arrays.deepEquals(altMagSensitivity3, SensorLIS3MDL.DefaultSensitivityMatrixAltMag16GaShimmer3r)); } public static void compareTwoCalibDetails(CalibDetails calibDetails1, CalibDetails calibDetails2) { diff --git a/ShimmerPCBasicExamples/src/main/java/com/shimmerresearch/simpleexamples/SensorMapsExample.java b/ShimmerPCBasicExamples/src/main/java/com/shimmerresearch/simpleexamples/SensorMapsExample.java index c857be85a..41b98690f 100644 --- a/ShimmerPCBasicExamples/src/main/java/com/shimmerresearch/simpleexamples/SensorMapsExample.java +++ b/ShimmerPCBasicExamples/src/main/java/com/shimmerresearch/simpleexamples/SensorMapsExample.java @@ -23,7 +23,7 @@ import com.shimmerresearch.guiUtilities.plot.BasicPlotManagerPC; import com.shimmerresearch.pcDriver.ShimmerPC; import com.shimmerresearch.sensors.lis2dw12.SensorLIS2DW12; -import com.shimmerresearch.sensors.lisxmdl.SensorLIS3MDL; +import com.shimmerresearch.sensors.lisxmdl.SensorLIS2MDL; import com.shimmerresearch.sensors.lsm6dsv.SensorLSM6DSV; import com.shimmerresearch.tools.LoggingPC; import com.shimmerresearch.tools.bluetooth.BasicShimmerBluetoothManagerPc;