Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.shimmerresearch.sensors.bmpX80;

import java.awt.EventQueue;
import java.util.HashMap;
import java.util.Map;

import com.shimmerresearch.driverUtilities.UtilParseData;
import com.shimmerresearch.driverUtilities.UtilShimmer;
Expand All @@ -9,6 +11,8 @@ public class CalibDetailsBmp390 extends CalibDetailsBmpX80 {

/** * */
private static final long serialVersionUID = 4602512529781344807L;
public static Map<String, Bmp3CalibCoefficients> calibCoefficientsBySensor = new HashMap<>();
public String mSensorMacID;

public class Bmp3Constants {
// Floating-point constants
Expand All @@ -25,22 +29,23 @@ public class Bmp3Constants {
public static final byte BMP3_W_MAX_PRES = 6;
}


public double Bmp3QuantizedCalibData_ParT1;
public double Bmp3QuantizedCalibData_ParT2;
public double Bmp3QuantizedCalibData_ParT3;
public double Bmp3QuantizedCalibData_ParP1;
public double Bmp3QuantizedCalibData_ParP2;
public double Bmp3QuantizedCalibData_ParP3;
public double Bmp3QuantizedCalibData_ParP4;
public double Bmp3QuantizedCalibData_ParP5;
public double Bmp3QuantizedCalibData_ParP6;
public double Bmp3QuantizedCalibData_ParP7;
public double Bmp3QuantizedCalibData_ParP8;
public double Bmp3QuantizedCalibData_ParP9;
public double Bmp3QuantizedCalibData_ParP10;
public double Bmp3QuantizedCalibData_ParP11;
public double Bmp3QuantizedCalibData_TLin;
public class Bmp3CalibCoefficients{
public double Bmp3QuantizedCalibData_ParT1;
public double Bmp3QuantizedCalibData_ParT2;
public double Bmp3QuantizedCalibData_ParT3;
public double Bmp3QuantizedCalibData_ParP1;
public double Bmp3QuantizedCalibData_ParP2;
public double Bmp3QuantizedCalibData_ParP3;
public double Bmp3QuantizedCalibData_ParP4;
public double Bmp3QuantizedCalibData_ParP5;
public double Bmp3QuantizedCalibData_ParP6;
public double Bmp3QuantizedCalibData_ParP7;
public double Bmp3QuantizedCalibData_ParP8;
public double Bmp3QuantizedCalibData_ParP9;
public double Bmp3QuantizedCalibData_ParP10;
public double Bmp3QuantizedCalibData_ParP11;
public double Bmp3QuantizedCalibData_TLin;
}


// Trim Variables
Expand Down Expand Up @@ -75,7 +80,11 @@ public class Bmp3Constants {
public double par_P10;
public double par_P11;

public void setPressureCalib(
public CalibDetailsBmp390(String mMacIdFromUart) {
mSensorMacID = mMacIdFromUart;
}

public void setPressureCalib(
double T1, double T2, double T3,
double P1, double P2, double P3,
double P4, double P5, double P6,
Expand All @@ -99,24 +108,26 @@ public void setPressureCalib(

@Override
public double[] calibratePressureSensorData(double UP, double UT) {
Bmp3CalibCoefficients calibCoefficientsPerSensor = calibCoefficientsBySensor.get(mSensorMacID);

byte rslt = Bmp3Constants.BMP3_OK;

double uncompTemp = UT;
double partialDataT1;
double partialDataT2;

partialDataT1 = uncompTemp - Bmp3QuantizedCalibData_ParT1;
partialDataT2 = partialDataT1 * Bmp3QuantizedCalibData_ParT2;
partialDataT1 = uncompTemp - calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParT1;
partialDataT2 = partialDataT1 * calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParT2;

Bmp3QuantizedCalibData_TLin = partialDataT2 + (partialDataT1 * partialDataT1) * Bmp3QuantizedCalibData_ParT3;
calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin = partialDataT2 + (partialDataT1 * partialDataT1) * calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParT3;

if (Bmp3QuantizedCalibData_TLin < Bmp3Constants.BMP3_MIN_TEMP_DOUBLE) {
Bmp3QuantizedCalibData_TLin = Bmp3Constants.BMP3_MIN_TEMP_DOUBLE;
if (calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin < Bmp3Constants.BMP3_MIN_TEMP_DOUBLE) {
calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin = Bmp3Constants.BMP3_MIN_TEMP_DOUBLE;
rslt = Bmp3Constants.BMP3_W_MIN_TEMP;
}

if (Bmp3QuantizedCalibData_TLin > Bmp3Constants.BMP3_MAX_TEMP_DOUBLE) {
Bmp3QuantizedCalibData_TLin = Bmp3Constants.BMP3_MAX_TEMP_DOUBLE;
if (calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin > Bmp3Constants.BMP3_MAX_TEMP_DOUBLE) {
calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin = Bmp3Constants.BMP3_MAX_TEMP_DOUBLE;
rslt = Bmp3Constants.BMP3_W_MAX_TEMP;
}

Expand All @@ -134,20 +145,20 @@ public double[] calibratePressureSensorData(double UP, double UT) {
double partialOut1;
double partialOut2;

partialData1 = Bmp3QuantizedCalibData_ParP6 * Bmp3QuantizedCalibData_TLin;
partialData2 = Bmp3QuantizedCalibData_ParP7 * powBmp3(Bmp3QuantizedCalibData_TLin, 2);
partialData3 = Bmp3QuantizedCalibData_ParP8 * powBmp3(Bmp3QuantizedCalibData_TLin, 3);
partialOut1 = Bmp3QuantizedCalibData_ParP5 + partialData1 + partialData2 + partialData3;
partialData1 = calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParP6 * calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin;
partialData2 = calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParP7 * powBmp3(calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin, 2);
partialData3 = calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParP8 * powBmp3(calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin, 3);
partialOut1 = calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParP5 + partialData1 + partialData2 + partialData3;

partialData1 = Bmp3QuantizedCalibData_ParP2 * Bmp3QuantizedCalibData_TLin;
partialData2 = Bmp3QuantizedCalibData_ParP3 * powBmp3(Bmp3QuantizedCalibData_TLin, 2);
partialData3 = Bmp3QuantizedCalibData_ParP4 * powBmp3(Bmp3QuantizedCalibData_TLin, 3);
partialOut2 = UP * (Bmp3QuantizedCalibData_ParP1 + partialData1 + partialData2 + partialData3);
partialData1 = calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParP2 * calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin;
partialData2 = calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParP3 * powBmp3(calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin, 2);
partialData3 = calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParP4 * powBmp3(calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin, 3);
partialOut2 = UP * (calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParP1 + partialData1 + partialData2 + partialData3);

partialData1 = powBmp3(UP, 2);
partialData2 = Bmp3QuantizedCalibData_ParP9 + Bmp3QuantizedCalibData_ParP10 * Bmp3QuantizedCalibData_TLin;
partialData2 = calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParP9 + calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParP10 * calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin;
partialData3 = partialData1 * partialData2;
partialData4 = partialData3 + powBmp3(UP, 3) * Bmp3QuantizedCalibData_ParP11;
partialData4 = partialData3 + powBmp3(UP, 3) * calibCoefficientsPerSensor.Bmp3QuantizedCalibData_ParP11;
compPress = partialOut1 + partialOut2 + partialData4;

if (compPress < Bmp3Constants.BMP3_MIN_PRES_DOUBLE) {
Expand All @@ -162,7 +173,7 @@ public double[] calibratePressureSensorData(double UP, double UT) {

double[] caldata = new double[2];
caldata[0]=compPress;
caldata[1]=Bmp3QuantizedCalibData_TLin;
caldata[1]=calibCoefficientsPerSensor.Bmp3QuantizedCalibData_TLin;
return caldata;
}

Expand All @@ -185,7 +196,8 @@ public void parseCalParamByteArray(byte[] bufferCalibrationParameters, CALIB_REA
||UtilShimmer.isAllZeros(bufferCalibrationParameters)){
return;
}

Bmp3CalibCoefficients calib = new Bmp3CalibCoefficients();

setPressureRawCoefficients(bufferCalibrationParameters);
setCalibReadSource(calibReadSource);
byte[] pressureResoResTest = bufferCalibrationParameters;
Expand All @@ -194,76 +206,78 @@ public void parseCalParamByteArray(byte[] bufferCalibrationParameters, CALIB_REA
// 1 / 2^8
tempVar = 0.00390625;
Bmp3RegCalibData_ParT1 = (short) concatenateBytes(pressureResoResTest[1], pressureResoResTest[0]);
Bmp3QuantizedCalibData_ParT1 = ((double) Bmp3RegCalibData_ParT1 / tempVar);
calib.Bmp3QuantizedCalibData_ParT1 = ((double) Bmp3RegCalibData_ParT1 / tempVar);

Bmp3RegCalibData_ParT2 = (short) concatenateBytes(pressureResoResTest[3], pressureResoResTest[2]);
tempVar = 1073741824.0;
Bmp3QuantizedCalibData_ParT2 = ((double) Bmp3RegCalibData_ParT2 / tempVar);
calib.Bmp3QuantizedCalibData_ParT2 = ((double) Bmp3RegCalibData_ParT2 / tempVar);

Bmp3RegCalibData_ParT3 = (byte) pressureResoResTest[4];
tempVar = 281474976710656.0;
Bmp3QuantizedCalibData_ParT3 = ((double) Bmp3RegCalibData_ParT3 / tempVar);
calib.Bmp3QuantizedCalibData_ParT3 = ((double) Bmp3RegCalibData_ParT3 / tempVar);

Bmp3RegCalibData_ParP1 = (short) concatenateBytes(pressureResoResTest[6], pressureResoResTest[5]);
tempVar = 1048576.0;
Bmp3QuantizedCalibData_ParP1 = ((double) (Bmp3RegCalibData_ParP1 - 16384) / tempVar);
calib.Bmp3QuantizedCalibData_ParP1 = ((double) (Bmp3RegCalibData_ParP1 - 16384) / tempVar);

Bmp3RegCalibData_ParP2 = (short) concatenateBytes(pressureResoResTest[8], pressureResoResTest[7]);
tempVar = 536870912.0;
Bmp3QuantizedCalibData_ParP2 = ((double) (Bmp3RegCalibData_ParP2 - 16384) / tempVar);
calib.Bmp3QuantizedCalibData_ParP2 = ((double) (Bmp3RegCalibData_ParP2 - 16384) / tempVar);

Bmp3RegCalibData_ParP3 = (byte) pressureResoResTest[9];
tempVar = 4294967296.0;
Bmp3QuantizedCalibData_ParP3 = ((double) Bmp3RegCalibData_ParP3 / tempVar);
calib.Bmp3QuantizedCalibData_ParP3 = ((double) Bmp3RegCalibData_ParP3 / tempVar);

Bmp3RegCalibData_ParP4 = (byte) pressureResoResTest[10];
tempVar = 137438953472.0;
Bmp3QuantizedCalibData_ParP4 = ((double) Bmp3RegCalibData_ParP4 / tempVar);
calib.Bmp3QuantizedCalibData_ParP4 = ((double) Bmp3RegCalibData_ParP4 / tempVar);

Bmp3RegCalibData_ParP5 = concatenateBytes(pressureResoResTest[12], pressureResoResTest[11]);

// 1 / 2^3
tempVar = 0.125;
Bmp3QuantizedCalibData_ParP5 = ((double) Bmp3RegCalibData_ParP5 / tempVar);
calib.Bmp3QuantizedCalibData_ParP5 = ((double) Bmp3RegCalibData_ParP5 / tempVar);

Bmp3RegCalibData_ParP6 = concatenateBytes(pressureResoResTest[14], pressureResoResTest[13]);
tempVar = 64.0;
Bmp3QuantizedCalibData_ParP6 = ((double) Bmp3RegCalibData_ParP6 / tempVar);
calib.Bmp3QuantizedCalibData_ParP6 = ((double) Bmp3RegCalibData_ParP6 / tempVar);

Bmp3RegCalibData_ParP7 = (byte) pressureResoResTest[15];
tempVar = 256.0;
Bmp3QuantizedCalibData_ParP7 = ((double) Bmp3RegCalibData_ParP7 / tempVar);
calib.Bmp3QuantizedCalibData_ParP7 = ((double) Bmp3RegCalibData_ParP7 / tempVar);

Bmp3RegCalibData_ParP8 = (byte) pressureResoResTest[16];
tempVar = 32768.0;
Bmp3QuantizedCalibData_ParP8 = ((double) Bmp3RegCalibData_ParP8 / tempVar);
calib.Bmp3QuantizedCalibData_ParP8 = ((double) Bmp3RegCalibData_ParP8 / tempVar);

Bmp3RegCalibData_ParP9 = (short) concatenateBytes(pressureResoResTest[18], pressureResoResTest[17]);
tempVar = 281474976710656.0;
Bmp3QuantizedCalibData_ParP9 = ((double) Bmp3RegCalibData_ParP9 / tempVar);
calib.Bmp3QuantizedCalibData_ParP9 = ((double) Bmp3RegCalibData_ParP9 / tempVar);

Bmp3RegCalibData_ParP10 = (byte) pressureResoResTest[19];
tempVar = 281474976710656.0;
Bmp3QuantizedCalibData_ParP10 = ((double) Bmp3RegCalibData_ParP10 / tempVar);
calib.Bmp3QuantizedCalibData_ParP10 = ((double) Bmp3RegCalibData_ParP10 / tempVar);

Bmp3RegCalibData_ParP11 = (byte) pressureResoResTest[20];
tempVar = 36893488147419103232.0;
Bmp3QuantizedCalibData_ParP11 = ((double) Bmp3RegCalibData_ParP11 / tempVar);

System.out.println("par_T1 = " + Bmp3QuantizedCalibData_ParT1);
System.out.println("par_T2 = " + Bmp3QuantizedCalibData_ParT2);
System.out.println("par_T3 = " + Bmp3QuantizedCalibData_ParT3);
System.out.println("par_P1 = " + Bmp3QuantizedCalibData_ParP1);
System.out.println("par_P2 = " + Bmp3QuantizedCalibData_ParP2);
System.out.println("par_P3 = " + Bmp3QuantizedCalibData_ParP3);
System.out.println("par_P4 = " + Bmp3QuantizedCalibData_ParP4);
System.out.println("par_P5 = " + Bmp3QuantizedCalibData_ParP5);
System.out.println("par_P6 = " + Bmp3QuantizedCalibData_ParP6);
System.out.println("par_P7 = " + Bmp3QuantizedCalibData_ParP7);
System.out.println("par_P8 = " + Bmp3QuantizedCalibData_ParP8);
System.out.println("par_P9 = " + Bmp3QuantizedCalibData_ParP9);
System.out.println("par_P10 = " + Bmp3QuantizedCalibData_ParP10);
System.out.println("par_P11 = " + Bmp3QuantizedCalibData_ParP11);
calib.Bmp3QuantizedCalibData_ParP11 = ((double) Bmp3RegCalibData_ParP11 / tempVar);

System.out.println("par_T1 = " + calib.Bmp3QuantizedCalibData_ParT1);
System.out.println("par_T2 = " + calib.Bmp3QuantizedCalibData_ParT2);
System.out.println("par_T3 = " + calib.Bmp3QuantizedCalibData_ParT3);
System.out.println("par_P1 = " + calib.Bmp3QuantizedCalibData_ParP1);
System.out.println("par_P2 = " + calib.Bmp3QuantizedCalibData_ParP2);
System.out.println("par_P3 = " + calib.Bmp3QuantizedCalibData_ParP3);
System.out.println("par_P4 = " + calib.Bmp3QuantizedCalibData_ParP4);
System.out.println("par_P5 = " + calib.Bmp3QuantizedCalibData_ParP5);
System.out.println("par_P6 = " + calib.Bmp3QuantizedCalibData_ParP6);
System.out.println("par_P7 = " + calib.Bmp3QuantizedCalibData_ParP7);
System.out.println("par_P8 = " + calib.Bmp3QuantizedCalibData_ParP8);
System.out.println("par_P9 = " + calib.Bmp3QuantizedCalibData_ParP9);
System.out.println("par_P10 = " + calib.Bmp3QuantizedCalibData_ParP10);
System.out.println("par_P11 = " + calib.Bmp3QuantizedCalibData_ParP11);

calibCoefficientsBySensor.put(mSensorMacID, calib);
}
}

Expand All @@ -282,7 +296,7 @@ public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CalibDetailsBmp390 calibDetailsBmp390 = new CalibDetailsBmp390();
CalibDetailsBmp390 calibDetailsBmp390 = new CalibDetailsBmp390("test");
byte[] pressureResoResTest = {
(byte) 0xE7, (byte) 0x6B, (byte) 0xF0, (byte) 0x4A, (byte) 0xF9,
(byte) 0xAB, (byte) 0x1C, (byte) 0x9B, (byte) 0x15, (byte) 0x06,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ public ObjectCluster processDataCustom(SensorDetails sensorDetails, byte[] rawDa

@Override
public void generateCalibMap() {
mCalibDetailsBmpX80 = new CalibDetailsBmp390();
mCalibDetailsBmpX80 = new CalibDetailsBmp390(mShimmerDevice.mMacIdFromUart);
mCalibDetailsBmp390Lcl = (CalibDetailsBmp390) mCalibDetailsBmpX80;
super.generateCalibMap();
}
Expand Down
Loading