From 263abf6f9af211ff127e0d17b9eaced0649ae80d Mon Sep 17 00:00:00 2001 From: Mas Azalya Date: Tue, 30 Dec 2025 12:32:18 +0800 Subject: [PATCH] fix 3r pressure temp start stop streaming issue --- .../sensors/bmpX80/CalibDetailsBmp390.java | 146 ++++++++++-------- .../sensors/bmpX80/SensorBMP390.java | 2 +- 2 files changed, 81 insertions(+), 67 deletions(-) diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/bmpX80/CalibDetailsBmp390.java b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/bmpX80/CalibDetailsBmp390.java index 1dbf75474..2307a8a36 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/bmpX80/CalibDetailsBmp390.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/bmpX80/CalibDetailsBmp390.java @@ -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; @@ -9,6 +11,8 @@ public class CalibDetailsBmp390 extends CalibDetailsBmpX80 { /** * */ private static final long serialVersionUID = 4602512529781344807L; + public static Map calibCoefficientsBySensor = new HashMap<>(); + public String mSensorMacID; public class Bmp3Constants { // Floating-point constants @@ -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 @@ -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, @@ -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; } @@ -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) { @@ -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; } @@ -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; @@ -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); } } @@ -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, diff --git a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/bmpX80/SensorBMP390.java b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/bmpX80/SensorBMP390.java index f0c393216..f2ae9e407 100644 --- a/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/bmpX80/SensorBMP390.java +++ b/ShimmerDriver/src/main/java/com/shimmerresearch/sensors/bmpX80/SensorBMP390.java @@ -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(); }