double GetPressure()
{
lock (pressureLock)
{
Initialise();
int ut = 0, up = 0, compp = 0;
int x1, x2, b5, b6, x3, b3, p;
uint b4, b7;
/* Get the raw pressure and temperature values */
ut = readRawTemperature().Result;
up = readRawPressure().Result;
/* Temperature compensation */
b5 = computeB5(ut);
/* Pressure compensation */
b6 = b5 - 4000;
x1 = (_bmp085_coeffs.b2 * ((b6 * b6) >> 12)) >> 11;
x2 = (_bmp085_coeffs.ac2 * b6) >> 11;
x3 = x1 + x2;
b3 = (((((int)_bmp085_coeffs.ac1) * 4 + x3) << (byte)_bmp085Mode) + 2) >> 2;
x1 = (_bmp085_coeffs.ac3 * b6) >> 13;
x2 = (_bmp085_coeffs.b1 * ((b6 * b6) >> 12)) >> 16;
x3 = ((x1 + x2) + 2) >> 2;
b4 = (_bmp085_coeffs.ac4 * (uint)(x3 + 32768)) >> 15;
b7 = ((uint)(up - b3) * (uint)(50000 >> (byte)_bmp085Mode));
if (b7 < 0x80000000)
{
p = (int)((b7 << 1) / b4);
}
else
{
p = (int)((b7 / b4) << 1);
}
x1 = (p >> 8) * (p >> 8);
x1 = (x1 * 3038) >> 16;
x2 = (-7357 * p) >> 16;
compp = p + ((x1 + x2 + 3791) >> 4);
/* Assign compensated pressure value */
return compp;
}
}