blob: 148a9f9252be841c8d4e7eb3479bd14d963586d7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
/*
* Copyright © 2012 Keith Packard <keithp@keithp.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
package org.altusmetrum.AltosLib;
public class AltosMs5607 {
public int reserved;
public int sens;
public int off;
public int tcs;
public int tco;
public int tref;
public int tempsens;
public int crc;
public int raw_pres;
public int raw_temp;
public int pa;
public int cc;
static final boolean ms5611 = false;
void convert() {
int dT;
int TEMP;
long OFF;
long SENS;
//int P;
dT = raw_temp - ((int) tref << 8);
TEMP = (int) (2000 + (((long) dT * (long) tempsens) >> 23));
if (ms5611) {
OFF = ((long) off << 16) + (((long) tco * (long) dT) >> 7);
SENS = ((long) sens << 15) + (((long) tcs * (long) dT) >> 8);
} else {
OFF = ((long) off << 17) + (((long) tco * (long) dT) >> 6);
SENS = ((long) sens << 16) + (((long) tcs * (long) dT) >> 7);
}
if (TEMP < 2000) {
int T2 = (int) (((long) dT * (long) dT) >> 31);
int TEMPM = TEMP - 2000;
long OFF2 = ((long) 61 * (long) TEMPM * (long) TEMPM) >> 4;
long SENS2 = (long) 2 * (long) TEMPM * (long) TEMPM;
if (TEMP < 1500) {
int TEMPP = TEMP + 1500;
long TEMPP2 = (long) TEMPP * (long) TEMPP;
OFF2 = OFF2 + 15 * TEMPP2;
SENS2 = SENS2 + 8 * TEMPP2;
}
TEMP -= T2;
OFF -= OFF2;
SENS -= SENS2;
}
pa = (int) (((((long) raw_pres * SENS) >> 21) - OFF) >> 15);
cc = TEMP;
}
public int set(int in_pres, int in_temp) {
raw_pres = in_pres;
raw_temp = in_temp;
convert();
return pa;
}
public AltosMs5607() {
raw_pres = AltosRecord.MISSING;
raw_temp = AltosRecord.MISSING;
pa = AltosRecord.MISSING;
cc = AltosRecord.MISSING;
}
}
|