diff --git a/lis3dh.c b/lis3dh.c index 45b2c4e..dbcfcd5 100644 --- a/lis3dh.c +++ b/lis3dh.c @@ -47,16 +47,13 @@ int lis3dh_init(lis3dh_t *lis3dh) { } } + /* check WHO_AM_I to equal to 0x33 */ err |= lis3dh->dev.read(REG_WHO_AM_I, &result, 1); if (result != 0x33) { return 1; } - /* zero struct */ - lis3dh->acc.x = 0.0; - lis3dh->acc.y = 0.0; - lis3dh->acc.z = 0.0; - + /* zero device struct */ lis3dh->cfg.rate = 0; lis3dh->cfg.range = 0; lis3dh->cfg.mode = 0; @@ -65,29 +62,13 @@ int lis3dh_init(lis3dh_t *lis3dh) { lis3dh->cfg.fifo.trig = 0; lis3dh->cfg.fifo.fth = 31; /* default watermark level. */ + memset(&lis3dh->acc, 0, sizeof lis3dh->acc); + memset(&lis3dh->cfg.int1, 0, sizeof lis3dh->cfg.int1); + memset(&lis3dh->cfg.int2, 0, sizeof lis3dh->cfg.int2); + memset(&lis3dh->cfg.filter, 0, sizeof lis3dh->cfg.filter); + lis3dh->cfg.filter.mode = 0xFF; /* in use if neq 0xFF */ - lis3dh->cfg.filter.cutoff = 0; lis3dh->cfg.filter.fds = 1; /* bypass OFF by default */ - lis3dh->cfg.filter.click = 0; - lis3dh->cfg.filter.ia1 = 0; - lis3dh->cfg.filter.ia2 = 0; - - lis3dh->cfg.int1.click = 0; - lis3dh->cfg.int1.ia1 = 0; - lis3dh->cfg.int1.ia2 = 0; - lis3dh->cfg.int1.drdy_zyxda = 0; - lis3dh->cfg.int1.drdy_321 = 0; - lis3dh->cfg.int1.wtm = 0; - lis3dh->cfg.int1.overrun = 0; - lis3dh->cfg.int1.latch = 0; - - lis3dh->cfg.int2.click = 0; - lis3dh->cfg.int2.ia1 = 0; - lis3dh->cfg.int2.ia2 = 0; - lis3dh->cfg.int2.boot = 0; - lis3dh->cfg.int2.act = 0; - lis3dh->cfg.int2.polarity = 0; - lis3dh->cfg.int2.latch = 0; err |= lis3dh_reset(lis3dh); diff --git a/lis3dh.h b/lis3dh.h index e48de43..6d9bf2a 100644 --- a/lis3dh.h +++ b/lis3dh.h @@ -55,6 +55,7 @@ #define LIS3DH_FILTER_CUTOFF_1 0x03 /* lowest freq */ +/* user provided functions, init and deinit can be set to NULL and won't be used */ struct lis3dh_device { int (*init)(void); int (*read)(uint8_t reg, uint8_t *dst, uint32_t size); @@ -63,6 +64,7 @@ struct lis3dh_device { int (*deinit)(void); }; +/* config for INT2 trigger output */ struct lis3dh_int2_config { uint8_t click; /* CLICK interrupt */ uint8_t ia1; /* IA1 interrupt */ @@ -73,6 +75,7 @@ struct lis3dh_int2_config { uint8_t latch; /* latch interrupt until cleared */ }; +/* config for INT1 trigger output */ struct lis3dh_int1_config { uint8_t click; /* CLICK interrupt */ uint8_t ia1; /* IA1 interrupt */ @@ -84,6 +87,7 @@ struct lis3dh_int1_config { uint8_t latch; /* latch interrupt until cleared */ }; +/* config for high-pass filter */ struct lis3dh_filter_config { uint8_t mode; /* filter mode, reset behaviour */ uint8_t cutoff; /* high-pass filter cutoff freq (~ ODR) */ @@ -93,6 +97,7 @@ struct lis3dh_filter_config { uint8_t ia1; /* enable filter for AOI func on INT 1 */ }; +/* config for FIFO */ struct lis3dh_fifo_config { uint8_t fth; /* user-specified watermark level 0-32 */ uint8_t trig; /* pin to trigger when watermark/overrun occurs */ @@ -109,6 +114,7 @@ struct lis3dh_config { struct lis3dh_int2_config int2; }; +/* data read not from FIFO is put here */ struct lis3dh_acceleration { float x; float y; @@ -142,6 +148,4 @@ int lis3dh_clear_int1(lis3dh_t *lis3dh); int lis3dh_clear_int2(lis3dh_t *lis3dh); int lis3dh_reference(lis3dh_t *lis3dh); - - #endif \ No newline at end of file