11package com .shimmerresearch .sensors .bmpX80 ;
22
33import java .awt .EventQueue ;
4+ import java .util .HashMap ;
5+ import java .util .Map ;
46
57import com .shimmerresearch .driverUtilities .UtilParseData ;
68import com .shimmerresearch .driverUtilities .UtilShimmer ;
@@ -9,6 +11,8 @@ public class CalibDetailsBmp390 extends CalibDetailsBmpX80 {
911
1012 /** * */
1113 private static final long serialVersionUID = 4602512529781344807L ;
14+ public static Map <String , Bmp3CalibCoefficients > calibCoefficientsBySensor = new HashMap <>();
15+ public String mSensorMacID ;
1216
1317 public class Bmp3Constants {
1418 // Floating-point constants
@@ -25,22 +29,23 @@ public class Bmp3Constants {
2529 public static final byte BMP3_W_MAX_PRES = 6 ;
2630 }
2731
28-
29- public double Bmp3QuantizedCalibData_ParT1 ;
30- public double Bmp3QuantizedCalibData_ParT2 ;
31- public double Bmp3QuantizedCalibData_ParT3 ;
32- public double Bmp3QuantizedCalibData_ParP1 ;
33- public double Bmp3QuantizedCalibData_ParP2 ;
34- public double Bmp3QuantizedCalibData_ParP3 ;
35- public double Bmp3QuantizedCalibData_ParP4 ;
36- public double Bmp3QuantizedCalibData_ParP5 ;
37- public double Bmp3QuantizedCalibData_ParP6 ;
38- public double Bmp3QuantizedCalibData_ParP7 ;
39- public double Bmp3QuantizedCalibData_ParP8 ;
40- public double Bmp3QuantizedCalibData_ParP9 ;
41- public double Bmp3QuantizedCalibData_ParP10 ;
42- public double Bmp3QuantizedCalibData_ParP11 ;
43- public double Bmp3QuantizedCalibData_TLin ;
32+ public class Bmp3CalibCoefficients {
33+ public double Bmp3QuantizedCalibData_ParT1 ;
34+ public double Bmp3QuantizedCalibData_ParT2 ;
35+ public double Bmp3QuantizedCalibData_ParT3 ;
36+ public double Bmp3QuantizedCalibData_ParP1 ;
37+ public double Bmp3QuantizedCalibData_ParP2 ;
38+ public double Bmp3QuantizedCalibData_ParP3 ;
39+ public double Bmp3QuantizedCalibData_ParP4 ;
40+ public double Bmp3QuantizedCalibData_ParP5 ;
41+ public double Bmp3QuantizedCalibData_ParP6 ;
42+ public double Bmp3QuantizedCalibData_ParP7 ;
43+ public double Bmp3QuantizedCalibData_ParP8 ;
44+ public double Bmp3QuantizedCalibData_ParP9 ;
45+ public double Bmp3QuantizedCalibData_ParP10 ;
46+ public double Bmp3QuantizedCalibData_ParP11 ;
47+ public double Bmp3QuantizedCalibData_TLin ;
48+ }
4449
4550
4651 // Trim Variables
@@ -75,7 +80,11 @@ public class Bmp3Constants {
7580 public double par_P10 ;
7681 public double par_P11 ;
7782
78- public void setPressureCalib (
83+ public CalibDetailsBmp390 (String mMacIdFromUart ) {
84+ mSensorMacID = mMacIdFromUart ;
85+ }
86+
87+ public void setPressureCalib (
7988 double T1 , double T2 , double T3 ,
8089 double P1 , double P2 , double P3 ,
8190 double P4 , double P5 , double P6 ,
@@ -99,24 +108,26 @@ public void setPressureCalib(
99108
100109 @ Override
101110 public double [] calibratePressureSensorData (double UP , double UT ) {
111+ Bmp3CalibCoefficients calibCoefficientsPerSensor = calibCoefficientsBySensor .get (mSensorMacID );
112+
102113 byte rslt = Bmp3Constants .BMP3_OK ;
103114
104115 double uncompTemp = UT ;
105116 double partialDataT1 ;
106117 double partialDataT2 ;
107118
108- partialDataT1 = uncompTemp - Bmp3QuantizedCalibData_ParT1 ;
109- partialDataT2 = partialDataT1 * Bmp3QuantizedCalibData_ParT2 ;
119+ partialDataT1 = uncompTemp - calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParT1 ;
120+ partialDataT2 = partialDataT1 * calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParT2 ;
110121
111- Bmp3QuantizedCalibData_TLin = partialDataT2 + (partialDataT1 * partialDataT1 ) * Bmp3QuantizedCalibData_ParT3 ;
122+ calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin = partialDataT2 + (partialDataT1 * partialDataT1 ) * calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParT3 ;
112123
113- if (Bmp3QuantizedCalibData_TLin < Bmp3Constants .BMP3_MIN_TEMP_DOUBLE ) {
114- Bmp3QuantizedCalibData_TLin = Bmp3Constants .BMP3_MIN_TEMP_DOUBLE ;
124+ if (calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin < Bmp3Constants .BMP3_MIN_TEMP_DOUBLE ) {
125+ calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin = Bmp3Constants .BMP3_MIN_TEMP_DOUBLE ;
115126 rslt = Bmp3Constants .BMP3_W_MIN_TEMP ;
116127 }
117128
118- if (Bmp3QuantizedCalibData_TLin > Bmp3Constants .BMP3_MAX_TEMP_DOUBLE ) {
119- Bmp3QuantizedCalibData_TLin = Bmp3Constants .BMP3_MAX_TEMP_DOUBLE ;
129+ if (calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin > Bmp3Constants .BMP3_MAX_TEMP_DOUBLE ) {
130+ calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin = Bmp3Constants .BMP3_MAX_TEMP_DOUBLE ;
120131 rslt = Bmp3Constants .BMP3_W_MAX_TEMP ;
121132 }
122133
@@ -134,20 +145,20 @@ public double[] calibratePressureSensorData(double UP, double UT) {
134145 double partialOut1 ;
135146 double partialOut2 ;
136147
137- partialData1 = Bmp3QuantizedCalibData_ParP6 * Bmp3QuantizedCalibData_TLin ;
138- partialData2 = Bmp3QuantizedCalibData_ParP7 * powBmp3 (Bmp3QuantizedCalibData_TLin , 2 );
139- partialData3 = Bmp3QuantizedCalibData_ParP8 * powBmp3 (Bmp3QuantizedCalibData_TLin , 3 );
140- partialOut1 = Bmp3QuantizedCalibData_ParP5 + partialData1 + partialData2 + partialData3 ;
148+ partialData1 = calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParP6 * calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin ;
149+ partialData2 = calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParP7 * powBmp3 (calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin , 2 );
150+ partialData3 = calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParP8 * powBmp3 (calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin , 3 );
151+ partialOut1 = calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParP5 + partialData1 + partialData2 + partialData3 ;
141152
142- partialData1 = Bmp3QuantizedCalibData_ParP2 * Bmp3QuantizedCalibData_TLin ;
143- partialData2 = Bmp3QuantizedCalibData_ParP3 * powBmp3 (Bmp3QuantizedCalibData_TLin , 2 );
144- partialData3 = Bmp3QuantizedCalibData_ParP4 * powBmp3 (Bmp3QuantizedCalibData_TLin , 3 );
145- partialOut2 = UP * (Bmp3QuantizedCalibData_ParP1 + partialData1 + partialData2 + partialData3 );
153+ partialData1 = calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParP2 * calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin ;
154+ partialData2 = calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParP3 * powBmp3 (calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin , 2 );
155+ partialData3 = calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParP4 * powBmp3 (calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin , 3 );
156+ partialOut2 = UP * (calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParP1 + partialData1 + partialData2 + partialData3 );
146157
147158 partialData1 = powBmp3 (UP , 2 );
148- partialData2 = Bmp3QuantizedCalibData_ParP9 + Bmp3QuantizedCalibData_ParP10 * Bmp3QuantizedCalibData_TLin ;
159+ partialData2 = calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParP9 + calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParP10 * calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin ;
149160 partialData3 = partialData1 * partialData2 ;
150- partialData4 = partialData3 + powBmp3 (UP , 3 ) * Bmp3QuantizedCalibData_ParP11 ;
161+ partialData4 = partialData3 + powBmp3 (UP , 3 ) * calibCoefficientsPerSensor . Bmp3QuantizedCalibData_ParP11 ;
151162 compPress = partialOut1 + partialOut2 + partialData4 ;
152163
153164 if (compPress < Bmp3Constants .BMP3_MIN_PRES_DOUBLE ) {
@@ -162,7 +173,7 @@ public double[] calibratePressureSensorData(double UP, double UT) {
162173
163174 double [] caldata = new double [2 ];
164175 caldata [0 ]=compPress ;
165- caldata [1 ]=Bmp3QuantizedCalibData_TLin ;
176+ caldata [1 ]=calibCoefficientsPerSensor . Bmp3QuantizedCalibData_TLin ;
166177 return caldata ;
167178 }
168179
@@ -185,7 +196,8 @@ public void parseCalParamByteArray(byte[] bufferCalibrationParameters, CALIB_REA
185196 ||UtilShimmer .isAllZeros (bufferCalibrationParameters )){
186197 return ;
187198 }
188-
199+ Bmp3CalibCoefficients calib = new Bmp3CalibCoefficients ();
200+
189201 setPressureRawCoefficients (bufferCalibrationParameters );
190202 setCalibReadSource (calibReadSource );
191203 byte [] pressureResoResTest = bufferCalibrationParameters ;
@@ -194,76 +206,78 @@ public void parseCalParamByteArray(byte[] bufferCalibrationParameters, CALIB_REA
194206 // 1 / 2^8
195207 tempVar = 0.00390625 ;
196208 Bmp3RegCalibData_ParT1 = (short ) concatenateBytes (pressureResoResTest [1 ], pressureResoResTest [0 ]);
197- Bmp3QuantizedCalibData_ParT1 = ((double ) Bmp3RegCalibData_ParT1 / tempVar );
209+ calib . Bmp3QuantizedCalibData_ParT1 = ((double ) Bmp3RegCalibData_ParT1 / tempVar );
198210
199211 Bmp3RegCalibData_ParT2 = (short ) concatenateBytes (pressureResoResTest [3 ], pressureResoResTest [2 ]);
200212 tempVar = 1073741824.0 ;
201- Bmp3QuantizedCalibData_ParT2 = ((double ) Bmp3RegCalibData_ParT2 / tempVar );
213+ calib . Bmp3QuantizedCalibData_ParT2 = ((double ) Bmp3RegCalibData_ParT2 / tempVar );
202214
203215 Bmp3RegCalibData_ParT3 = (byte ) pressureResoResTest [4 ];
204216 tempVar = 281474976710656.0 ;
205- Bmp3QuantizedCalibData_ParT3 = ((double ) Bmp3RegCalibData_ParT3 / tempVar );
217+ calib . Bmp3QuantizedCalibData_ParT3 = ((double ) Bmp3RegCalibData_ParT3 / tempVar );
206218
207219 Bmp3RegCalibData_ParP1 = (short ) concatenateBytes (pressureResoResTest [6 ], pressureResoResTest [5 ]);
208220 tempVar = 1048576.0 ;
209- Bmp3QuantizedCalibData_ParP1 = ((double ) (Bmp3RegCalibData_ParP1 - 16384 ) / tempVar );
221+ calib . Bmp3QuantizedCalibData_ParP1 = ((double ) (Bmp3RegCalibData_ParP1 - 16384 ) / tempVar );
210222
211223 Bmp3RegCalibData_ParP2 = (short ) concatenateBytes (pressureResoResTest [8 ], pressureResoResTest [7 ]);
212224 tempVar = 536870912.0 ;
213- Bmp3QuantizedCalibData_ParP2 = ((double ) (Bmp3RegCalibData_ParP2 - 16384 ) / tempVar );
225+ calib . Bmp3QuantizedCalibData_ParP2 = ((double ) (Bmp3RegCalibData_ParP2 - 16384 ) / tempVar );
214226
215227 Bmp3RegCalibData_ParP3 = (byte ) pressureResoResTest [9 ];
216228 tempVar = 4294967296.0 ;
217- Bmp3QuantizedCalibData_ParP3 = ((double ) Bmp3RegCalibData_ParP3 / tempVar );
229+ calib . Bmp3QuantizedCalibData_ParP3 = ((double ) Bmp3RegCalibData_ParP3 / tempVar );
218230
219231 Bmp3RegCalibData_ParP4 = (byte ) pressureResoResTest [10 ];
220232 tempVar = 137438953472.0 ;
221- Bmp3QuantizedCalibData_ParP4 = ((double ) Bmp3RegCalibData_ParP4 / tempVar );
233+ calib . Bmp3QuantizedCalibData_ParP4 = ((double ) Bmp3RegCalibData_ParP4 / tempVar );
222234
223235 Bmp3RegCalibData_ParP5 = concatenateBytes (pressureResoResTest [12 ], pressureResoResTest [11 ]);
224236
225237 // 1 / 2^3
226238 tempVar = 0.125 ;
227- Bmp3QuantizedCalibData_ParP5 = ((double ) Bmp3RegCalibData_ParP5 / tempVar );
239+ calib . Bmp3QuantizedCalibData_ParP5 = ((double ) Bmp3RegCalibData_ParP5 / tempVar );
228240
229241 Bmp3RegCalibData_ParP6 = concatenateBytes (pressureResoResTest [14 ], pressureResoResTest [13 ]);
230242 tempVar = 64.0 ;
231- Bmp3QuantizedCalibData_ParP6 = ((double ) Bmp3RegCalibData_ParP6 / tempVar );
243+ calib . Bmp3QuantizedCalibData_ParP6 = ((double ) Bmp3RegCalibData_ParP6 / tempVar );
232244
233245 Bmp3RegCalibData_ParP7 = (byte ) pressureResoResTest [15 ];
234246 tempVar = 256.0 ;
235- Bmp3QuantizedCalibData_ParP7 = ((double ) Bmp3RegCalibData_ParP7 / tempVar );
247+ calib . Bmp3QuantizedCalibData_ParP7 = ((double ) Bmp3RegCalibData_ParP7 / tempVar );
236248
237249 Bmp3RegCalibData_ParP8 = (byte ) pressureResoResTest [16 ];
238250 tempVar = 32768.0 ;
239- Bmp3QuantizedCalibData_ParP8 = ((double ) Bmp3RegCalibData_ParP8 / tempVar );
251+ calib . Bmp3QuantizedCalibData_ParP8 = ((double ) Bmp3RegCalibData_ParP8 / tempVar );
240252
241253 Bmp3RegCalibData_ParP9 = (short ) concatenateBytes (pressureResoResTest [18 ], pressureResoResTest [17 ]);
242254 tempVar = 281474976710656.0 ;
243- Bmp3QuantizedCalibData_ParP9 = ((double ) Bmp3RegCalibData_ParP9 / tempVar );
255+ calib . Bmp3QuantizedCalibData_ParP9 = ((double ) Bmp3RegCalibData_ParP9 / tempVar );
244256
245257 Bmp3RegCalibData_ParP10 = (byte ) pressureResoResTest [19 ];
246258 tempVar = 281474976710656.0 ;
247- Bmp3QuantizedCalibData_ParP10 = ((double ) Bmp3RegCalibData_ParP10 / tempVar );
259+ calib . Bmp3QuantizedCalibData_ParP10 = ((double ) Bmp3RegCalibData_ParP10 / tempVar );
248260
249261 Bmp3RegCalibData_ParP11 = (byte ) pressureResoResTest [20 ];
250262 tempVar = 36893488147419103232.0 ;
251- Bmp3QuantizedCalibData_ParP11 = ((double ) Bmp3RegCalibData_ParP11 / tempVar );
252-
253- System .out .println ("par_T1 = " + Bmp3QuantizedCalibData_ParT1 );
254- System .out .println ("par_T2 = " + Bmp3QuantizedCalibData_ParT2 );
255- System .out .println ("par_T3 = " + Bmp3QuantizedCalibData_ParT3 );
256- System .out .println ("par_P1 = " + Bmp3QuantizedCalibData_ParP1 );
257- System .out .println ("par_P2 = " + Bmp3QuantizedCalibData_ParP2 );
258- System .out .println ("par_P3 = " + Bmp3QuantizedCalibData_ParP3 );
259- System .out .println ("par_P4 = " + Bmp3QuantizedCalibData_ParP4 );
260- System .out .println ("par_P5 = " + Bmp3QuantizedCalibData_ParP5 );
261- System .out .println ("par_P6 = " + Bmp3QuantizedCalibData_ParP6 );
262- System .out .println ("par_P7 = " + Bmp3QuantizedCalibData_ParP7 );
263- System .out .println ("par_P8 = " + Bmp3QuantizedCalibData_ParP8 );
264- System .out .println ("par_P9 = " + Bmp3QuantizedCalibData_ParP9 );
265- System .out .println ("par_P10 = " + Bmp3QuantizedCalibData_ParP10 );
266- System .out .println ("par_P11 = " + Bmp3QuantizedCalibData_ParP11 );
263+ calib .Bmp3QuantizedCalibData_ParP11 = ((double ) Bmp3RegCalibData_ParP11 / tempVar );
264+
265+ System .out .println ("par_T1 = " + calib .Bmp3QuantizedCalibData_ParT1 );
266+ System .out .println ("par_T2 = " + calib .Bmp3QuantizedCalibData_ParT2 );
267+ System .out .println ("par_T3 = " + calib .Bmp3QuantizedCalibData_ParT3 );
268+ System .out .println ("par_P1 = " + calib .Bmp3QuantizedCalibData_ParP1 );
269+ System .out .println ("par_P2 = " + calib .Bmp3QuantizedCalibData_ParP2 );
270+ System .out .println ("par_P3 = " + calib .Bmp3QuantizedCalibData_ParP3 );
271+ System .out .println ("par_P4 = " + calib .Bmp3QuantizedCalibData_ParP4 );
272+ System .out .println ("par_P5 = " + calib .Bmp3QuantizedCalibData_ParP5 );
273+ System .out .println ("par_P6 = " + calib .Bmp3QuantizedCalibData_ParP6 );
274+ System .out .println ("par_P7 = " + calib .Bmp3QuantizedCalibData_ParP7 );
275+ System .out .println ("par_P8 = " + calib .Bmp3QuantizedCalibData_ParP8 );
276+ System .out .println ("par_P9 = " + calib .Bmp3QuantizedCalibData_ParP9 );
277+ System .out .println ("par_P10 = " + calib .Bmp3QuantizedCalibData_ParP10 );
278+ System .out .println ("par_P11 = " + calib .Bmp3QuantizedCalibData_ParP11 );
279+
280+ calibCoefficientsBySensor .put (mSensorMacID , calib );
267281 }
268282 }
269283
@@ -282,7 +296,7 @@ public static void main(String[] args) {
282296 EventQueue .invokeLater (new Runnable () {
283297 public void run () {
284298 try {
285- CalibDetailsBmp390 calibDetailsBmp390 = new CalibDetailsBmp390 ();
299+ CalibDetailsBmp390 calibDetailsBmp390 = new CalibDetailsBmp390 ("test" );
286300 byte [] pressureResoResTest = {
287301 (byte ) 0xE7 , (byte ) 0x6B , (byte ) 0xF0 , (byte ) 0x4A , (byte ) 0xF9 ,
288302 (byte ) 0xAB , (byte ) 0x1C , (byte ) 0x9B , (byte ) 0x15 , (byte ) 0x06 ,
0 commit comments