14
#include "lps22hb_transfer.h"
16
#define LPS22HB_INTERRUPT_CFG 0x0b
17
#define LPS22HB_THS_P_L 0x0c
18
#define LPS22HB_THS_P_H 0x0d
19
#define LPS22HB_WHO_AM_I 0xf
20
#define LPS22HB_CTRL_REG(i) (0x10 + i - 1)
21
#define LPS22HB_FIFO_CTRL 0x14
22
#define LPS22HB_REF_P_XL 0x15
23
#define LPS22HB_REF_P_L 0x16
24
#define LPS22HB_REF_P_H 0x17
25
#define LPS22HB_RPDS_L 0x18
26
#define LPS22HB_RPDS_H 0x19
27
#define LPS22HB_RES_CONF 0x1a
28
#define LPS22HB_INT_SOURCE 0x25
29
#define LPS22HB_FIFO_STATUS 0x26
30
#define LPS22HB_STATUS_REG 0x27
31
#define LPS22HB_PRESS_OUT_XL 0x28
32
#define LPS22HB_PRESS_OUT_L 0x29
33
#define LPS22HB_PRESS_OUT_H 0x2a
34
#define LPS22HB_TEMP_OUT_L 0x2b
35
#define LPS22HB_TEMP_OUT_H 0x2c
36
#define LPS22HB_LPFP_RES 0x33
39
#define LPS22HB_WHO_AM_I_VALUE 0xb1
41
extern struct lps22hb_dev lps22hb_dev0;
43
int32_t lps22hb_get_pressure_4096(void) {
44
struct lps22hb_dev *dev = &lps22hb_dev0;
45
union {int32_t val; uint8_t b[4];} p;
47
lps22hb_readb(dev, LPS22HB_PRESS_OUT_XL,&(p.b[0]));
48
lps22hb_readb(dev, LPS22HB_PRESS_OUT_L, &(p.b[1]));
49
lps22hb_readb(dev, LPS22HB_PRESS_OUT_H, &(p.b[2]));
50
p.b[3] = (p.b[2] & 0x80)? 0xff: 0;
52
return le32toh(p.val);
55
int16_t lps22hb_get_temp_x100(void) {
56
struct lps22hb_dev *dev = &lps22hb_dev0;
57
union {int16_t val; uint8_t b[2];}t;
58
lps22hb_readb(dev, LPS22HB_TEMP_OUT_L, &(t.b[0]));
59
lps22hb_readb(dev, LPS22HB_TEMP_OUT_H, &(t.b[1]));
61
return le16toh(t.val);
64
int lps22hb_init(void) {
67
struct lps22hb_dev *dev = &lps22hb_dev0;
69
if (lps22hb_hw_init(dev) < 0) {
70
log_error("LPS22HB hw init failed!");
74
if (lps22hb_readb(dev, LPS22HB_WHO_AM_I, &tmp) < 0) {
75
log_error("LPS22HB readb failed!");
78
log_info("WHO_AM_I = 0x%02x", tmp);
79
if (tmp != LPS22HB_WHO_AM_I_VALUE) {
80
log_error("LPS22HB Device ID mismatch! %2x", tmp);
85
lps22hb_writeb(dev, LPS22HB_CTRL_REG(1), tmp);
87
for (i = 1; i <= 3; i++) {
88
lps22hb_readb(dev, LPS22HB_CTRL_REG(i), &tmp);
89
log_info("CTRL_REG%d = 0x%02x", i, tmp);
91
lps22hb_readb(dev, LPS22HB_STATUS_REG, &tmp);
92
log_info("STATUS_REG = 0x%02x", tmp);