iNEMO inertial module: 3D accelerometer and 3D gyroscope.
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Dependents: X_NUCLEO_IKS01A3 X_NUCLEO_IKS01A3
Revision 2:4d14e9edf37e, committed 2019-06-03
- Comitter:
- cparata
- Date:
- Mon Jun 03 09:16:08 2019 +0000
- Parent:
- 1:888ac5f8d970
- Child:
- 3:4274d9103f1d
- Commit message:
- Disable by default I3C
Changed in this revision
--- a/LSM6DSOSensor.cpp Wed Mar 06 12:37:22 2019 +0000
+++ b/LSM6DSOSensor.cpp Mon Jun 03 09:16:08 2019 +0000
@@ -100,6 +100,12 @@
*/
int LSM6DSOSensor::init(void *init)
{
+ /* Disable I3C */
+ if (lsm6dso_i3c_disable_set(&_reg_ctx, LSM6DSO_I3C_DISABLE) != 0)
+ {
+ return 1;
+ }
+
/* Enable register address automatically incremented during a multiple byte
access with a serial interface. */
if (lsm6dso_auto_increment_set(&_reg_ctx, PROPERTY_ENABLE) != 0)
--- a/lsm6dso_reg.c Wed Mar 06 12:37:22 2019 +0000
+++ b/lsm6dso_reg.c Mon Jun 03 09:16:08 2019 +0000
@@ -100,59 +100,59 @@
* @{
*
*/
-float lsm6dso_from_fs2_to_mg(int16_t lsb)
-{
- return ((float)lsb) * 0.061f;
-}
-
-float lsm6dso_from_fs4_to_mg(int16_t lsb)
-{
- return ((float)lsb) * 0.122f;
-}
-
-float lsm6dso_from_fs8_to_mg(int16_t lsb)
-{
- return ((float)lsb) * 0.244f;
-}
-
-float lsm6dso_from_fs16_to_mg(int16_t lsb)
-{
- return ((float)lsb) *0.488f;
-}
-
-float lsm6dso_from_fs125_to_mdps(int16_t lsb)
-{
- return ((float)lsb) *4.375f;
-}
-
-float lsm6dso_from_fs500_to_mdps(int16_t lsb)
-{
- return ((float)lsb) *1.750f;
-}
-
-float lsm6dso_from_fs250_to_mdps(int16_t lsb)
-{
- return ((float)lsb) *0.875f;
-}
-
-float lsm6dso_from_fs1000_to_mdps(int16_t lsb)
-{
- return ((float)lsb) *0.035f;
-}
-
-float lsm6dso_from_fs2000_to_mdps(int16_t lsb)
-{
- return ((float)lsb) *0.070f;
-}
-
-float lsm6dso_from_lsb_to_celsius(int16_t lsb)
-{
- return (((float)lsb / 256.0f) + 25.0f);
-}
-
-float lsm6dso_from_lsb_to_nsec(int16_t lsb)
-{
- return ((float)lsb * 25000.0f);
+float_t lsm6dso_from_fs2_to_mg(int16_t lsb)
+{
+ return ((float_t)lsb) * 0.061f;
+}
+
+float_t lsm6dso_from_fs4_to_mg(int16_t lsb)
+{
+ return ((float_t)lsb) * 0.122f;
+}
+
+float_t lsm6dso_from_fs8_to_mg(int16_t lsb)
+{
+ return ((float_t)lsb) * 0.244f;
+}
+
+float_t lsm6dso_from_fs16_to_mg(int16_t lsb)
+{
+ return ((float_t)lsb) *0.488f;
+}
+
+float_t lsm6dso_from_fs125_to_mdps(int16_t lsb)
+{
+ return ((float_t)lsb) *4.375f;
+}
+
+float_t lsm6dso_from_fs500_to_mdps(int16_t lsb)
+{
+ return ((float_t)lsb) *17.50f;
+}
+
+float_t lsm6dso_from_fs250_to_mdps(int16_t lsb)
+{
+ return ((float_t)lsb) *8.750f;
+}
+
+float_t lsm6dso_from_fs1000_to_mdps(int16_t lsb)
+{
+ return ((float_t)lsb) *35.0f;
+}
+
+float_t lsm6dso_from_fs2000_to_mdps(int16_t lsb)
+{
+ return ((float_t)lsb) *70.0f;
+}
+
+float_t lsm6dso_from_lsb_to_celsius(int16_t lsb)
+{
+ return (((float_t)lsb / 256.0f) + 25.0f);
+}
+
+float_t lsm6dso_from_lsb_to_nsec(int16_t lsb)
+{
+ return ((float_t)lsb * 25000.0f);
}
/**
@@ -1275,7 +1275,7 @@
}
if (ret == 0) {
- page_sel.page_sel = (((uint8_t)address >> 8) & 0x0FU);
+ page_sel.page_sel = ((uint8_t)(address >> 8) & 0x0FU);
page_sel.not_used_01 = 1;
ret = lsm6dso_write_reg(ctx, LSM6DSO_PAGE_SEL, (uint8_t*) &page_sel, 1);
}
@@ -1316,12 +1316,11 @@
lsm6dso_page_rw_t page_rw;
lsm6dso_page_sel_t page_sel;
lsm6dso_page_address_t page_address;
- int32_t ret;
- uint8_t msb, lsb;
+ uint16_t addr_pointed;
+ int32_t ret;
uint8_t i ;
- msb = (((uint8_t)address >> 8) & 0x0fU);
- lsb = (uint8_t)address & 0xFFU;
+ addr_pointed = address;
ret = lsm6dso_mem_bank_set(ctx, LSM6DSO_EMBEDDED_FUNC_BANK);
if (ret == 0) {
@@ -1336,29 +1335,25 @@
ret = lsm6dso_read_reg(ctx, LSM6DSO_PAGE_SEL, (uint8_t*) &page_sel, 1);
}
if (ret == 0) {
- page_sel.page_sel = msb;
+ page_sel.page_sel = ((uint8_t)(addr_pointed >> 8) & 0x0FU);
page_sel.not_used_01 = 1;
ret = lsm6dso_write_reg(ctx, LSM6DSO_PAGE_SEL, (uint8_t*) &page_sel, 1);
}
if (ret == 0) {
- page_address.page_addr = lsb;
+ page_address.page_addr = (uint8_t)(addr_pointed & 0x00FFU);
ret = lsm6dso_write_reg(ctx, LSM6DSO_PAGE_ADDRESS,
(uint8_t*)&page_address, 1);
}
if (ret == 0) {
-
- for (i = 0; ( (i < len) && (ret == 0) ); i++)
- {
+ for (i = 0; ( (i < len) && (ret == 0) ); i++) {
ret = lsm6dso_write_reg(ctx, LSM6DSO_PAGE_VALUE, &buf[i], 1);
-
+ addr_pointed++;
/* Check if page wrap */
- if ( (lsb == 0x00U) && (ret == 0) ) {
- lsb++;
- msb++;
+ if ( ( (addr_pointed % 0x0100U) == 0x00U ) && (ret == 0) ) {
ret = lsm6dso_read_reg(ctx, LSM6DSO_PAGE_SEL, (uint8_t*)&page_sel, 1);
if (ret == 0) {
- page_sel.page_sel = msb;
+ page_sel.page_sel = ((uint8_t)(addr_pointed >> 8) & 0x0FU);
page_sel.not_used_01 = 1;
ret = lsm6dso_write_reg(ctx, LSM6DSO_PAGE_SEL,
(uint8_t*)&page_sel, 1);
@@ -1370,16 +1365,13 @@
ret = lsm6dso_write_reg(ctx, LSM6DSO_PAGE_SEL, (uint8_t*) &page_sel, 1);
}
if (ret == 0) {
-
ret = lsm6dso_read_reg(ctx, LSM6DSO_PAGE_RW, (uint8_t*) &page_rw, 1);
}
if (ret == 0) {
page_rw.page_rw = 0x00; /* page_write disable */
ret = lsm6dso_write_reg(ctx, LSM6DSO_PAGE_RW, (uint8_t*) &page_rw, 1);
}
-
- if (ret == 0) {
-
+ if (ret == 0) {
ret = lsm6dso_mem_bank_set(ctx, LSM6DSO_USER_BANK);
}
return ret;
@@ -1415,7 +1407,7 @@
ret = lsm6dso_read_reg(ctx, LSM6DSO_PAGE_SEL, (uint8_t*) &page_sel, 1);
}
if (ret == 0) {
- page_sel.page_sel = (((uint8_t)address >> 8) & 0x0FU);
+ page_sel.page_sel = ((uint8_t)(address >> 8) & 0x0FU);
page_sel.not_used_01 = 1;
ret = lsm6dso_write_reg(ctx, LSM6DSO_PAGE_SEL, (uint8_t*) &page_sel, 1);
}
@@ -3514,6 +3506,7 @@
int32_t lsm6dso_pin_int1_route_set(lsm6dso_ctx_t *ctx,
lsm6dso_pin_int1_route_t *val)
{
+ lsm6dso_pin_int2_route_t pin_int2_route;
lsm6dso_tap_cfg2_t tap_cfg2;
int32_t ret;
@@ -3533,27 +3526,28 @@
if (ret == 0) {
ret = lsm6dso_mem_bank_set(ctx, LSM6DSO_USER_BANK);
}
- if (ret == 0) {
- if ( (val->emb_func_int1.int1_fsm_lc |
- val->emb_func_int1.int1_sig_mot |
- val->emb_func_int1.int1_step_detector |
- val->emb_func_int1.int1_tilt |
- val->fsm_int1_a.int1_fsm1 |
- val->fsm_int1_a.int1_fsm2 |
- val->fsm_int1_a.int1_fsm3 |
- val->fsm_int1_a.int1_fsm4 |
- val->fsm_int1_a.int1_fsm5 |
- val->fsm_int1_a.int1_fsm6 |
- val->fsm_int1_a.int1_fsm7 |
- val->fsm_int1_a.int1_fsm8 |
- val->fsm_int1_b.int1_fsm9 |
- val->fsm_int1_b.int1_fsm10 |
- val->fsm_int1_b.int1_fsm11 |
- val->fsm_int1_b.int1_fsm12 |
- val->fsm_int1_b.int1_fsm13 |
- val->fsm_int1_b.int1_fsm14 |
- val->fsm_int1_b.int1_fsm15 |
- val->fsm_int1_b.int1_fsm16) != PROPERTY_DISABLE ){
+
+ if (ret == 0) {
+ if ( ( val->emb_func_int1.int1_fsm_lc
+ | val->emb_func_int1.int1_sig_mot
+ | val->emb_func_int1.int1_step_detector
+ | val->emb_func_int1.int1_tilt
+ | val->fsm_int1_a.int1_fsm1
+ | val->fsm_int1_a.int1_fsm2
+ | val->fsm_int1_a.int1_fsm3
+ | val->fsm_int1_a.int1_fsm4
+ | val->fsm_int1_a.int1_fsm5
+ | val->fsm_int1_a.int1_fsm6
+ | val->fsm_int1_a.int1_fsm7
+ | val->fsm_int1_a.int1_fsm8
+ | val->fsm_int1_b.int1_fsm9
+ | val->fsm_int1_b.int1_fsm10
+ | val->fsm_int1_b.int1_fsm11
+ | val->fsm_int1_b.int1_fsm12
+ | val->fsm_int1_b.int1_fsm13
+ | val->fsm_int1_b.int1_fsm14
+ | val->fsm_int1_b.int1_fsm15
+ | val->fsm_int1_b.int1_fsm16) != PROPERTY_DISABLE){
val->md1_cfg.int1_emb_func = PROPERTY_ENABLE;
}
else{
@@ -3568,23 +3562,38 @@
if (ret == 0) {
ret = lsm6dso_read_reg(ctx, LSM6DSO_TAP_CFG2, (uint8_t*) &tap_cfg2, 1);
}
- if (ret == 0) {
-
- if ( (val->int1_ctrl.den_drdy_flag |
- val->int1_ctrl.int1_boot |
- val->int1_ctrl.int1_cnt_bdr |
- val->int1_ctrl.int1_drdy_g |
- val->int1_ctrl.int1_drdy_xl |
- val->int1_ctrl.int1_fifo_full |
- val->int1_ctrl.int1_fifo_ovr |
- val->int1_ctrl.int1_fifo_th |
- val->md1_cfg.int1_6d |
- val->md1_cfg.int1_double_tap|
- val->md1_cfg.int1_ff |
- val->md1_cfg.int1_wu |
- val->md1_cfg.int1_single_tap |
- val->md1_cfg.int1_sleep_change) != PROPERTY_DISABLE)
- {
+
+ if (ret == 0) {
+ ret = lsm6dso_pin_int2_route_get(ctx, &pin_int2_route);
+ }
+ if (ret == 0) {
+ if ( ( pin_int2_route.int2_ctrl.int2_cnt_bdr
+ | pin_int2_route.int2_ctrl.int2_drdy_g
+ | pin_int2_route.int2_ctrl.int2_drdy_temp
+ | pin_int2_route.int2_ctrl.int2_drdy_xl
+ | pin_int2_route.int2_ctrl.int2_fifo_full
+ | pin_int2_route.int2_ctrl.int2_fifo_ovr
+ | pin_int2_route.int2_ctrl.int2_fifo_th
+ | pin_int2_route.md2_cfg.int2_6d
+ | pin_int2_route.md2_cfg.int2_double_tap
+ | pin_int2_route.md2_cfg.int2_ff
+ | pin_int2_route.md2_cfg.int2_wu
+ | pin_int2_route.md2_cfg.int2_single_tap
+ | pin_int2_route.md2_cfg.int2_sleep_change
+ | val->int1_ctrl.den_drdy_flag
+ | val->int1_ctrl.int1_boot
+ | val->int1_ctrl.int1_cnt_bdr
+ | val->int1_ctrl.int1_drdy_g
+ | val->int1_ctrl.int1_drdy_xl
+ | val->int1_ctrl.int1_fifo_full
+ | val->int1_ctrl.int1_fifo_ovr
+ | val->int1_ctrl.int1_fifo_th
+ | val->md1_cfg.int1_6d
+ | val->md1_cfg.int1_double_tap
+ | val->md1_cfg.int1_ff
+ | val->md1_cfg.int1_wu
+ | val->md1_cfg.int1_single_tap
+ | val->md1_cfg.int1_sleep_change) != PROPERTY_DISABLE) {
tap_cfg2.interrupts_enable = PROPERTY_ENABLE;
}
else{
@@ -3647,6 +3656,7 @@
int32_t lsm6dso_pin_int2_route_set(lsm6dso_ctx_t *ctx,
lsm6dso_pin_int2_route_t *val)
{
+ lsm6dso_pin_int1_route_t pin_int1_route;
lsm6dso_tap_cfg2_t tap_cfg2;
int32_t ret;
@@ -3666,28 +3676,28 @@
if (ret == 0) {
ret = lsm6dso_mem_bank_set(ctx, LSM6DSO_USER_BANK);
}
+
if (ret == 0) {
if (( val->emb_func_int2.int2_fsm_lc
- | val->emb_func_int2.int2_sig_mot
- | val->emb_func_int2.int2_step_detector
- | val->emb_func_int2.int2_tilt
- | val->fsm_int2_a.int2_fsm1
- | val->fsm_int2_a.int2_fsm2
- | val->fsm_int2_a.int2_fsm3
- | val->fsm_int2_a.int2_fsm4
- | val->fsm_int2_a.int2_fsm5
- | val->fsm_int2_a.int2_fsm6
- | val->fsm_int2_a.int2_fsm7
- | val->fsm_int2_a.int2_fsm8
- | val->fsm_int2_b.int2_fsm9
- | val->fsm_int2_b.int2_fsm10
- | val->fsm_int2_b.int2_fsm11
- | val->fsm_int2_b.int2_fsm12
- | val->fsm_int2_b.int2_fsm13
- | val->fsm_int2_b.int2_fsm14
- | val->fsm_int2_b.int2_fsm15
- | val->fsm_int2_b.int2_fsm16 )!= PROPERTY_DISABLE)
- {
+ | val->emb_func_int2.int2_sig_mot
+ | val->emb_func_int2.int2_step_detector
+ | val->emb_func_int2.int2_tilt
+ | val->fsm_int2_a.int2_fsm1
+ | val->fsm_int2_a.int2_fsm2
+ | val->fsm_int2_a.int2_fsm3
+ | val->fsm_int2_a.int2_fsm4
+ | val->fsm_int2_a.int2_fsm5
+ | val->fsm_int2_a.int2_fsm6
+ | val->fsm_int2_a.int2_fsm7
+ | val->fsm_int2_a.int2_fsm8
+ | val->fsm_int2_b.int2_fsm9
+ | val->fsm_int2_b.int2_fsm10
+ | val->fsm_int2_b.int2_fsm11
+ | val->fsm_int2_b.int2_fsm12
+ | val->fsm_int2_b.int2_fsm13
+ | val->fsm_int2_b.int2_fsm14
+ | val->fsm_int2_b.int2_fsm15
+ | val->fsm_int2_b.int2_fsm16 )!= PROPERTY_DISABLE ){
val->md2_cfg.int2_emb_func = PROPERTY_ENABLE;
}
else{
@@ -3702,6 +3712,11 @@
if (ret == 0) {
ret = lsm6dso_read_reg(ctx, LSM6DSO_TAP_CFG2, (uint8_t*) &tap_cfg2, 1);
}
+
+ if (ret == 0) {
+ ret = lsm6dso_pin_int1_route_get(ctx, &pin_int1_route);
+ }
+
if (ret == 0) {
if ( ( val->int2_ctrl.int2_cnt_bdr
| val->int2_ctrl.int2_drdy_g
@@ -3712,9 +3727,24 @@
| val->int2_ctrl.int2_fifo_th
| val->md2_cfg.int2_6d
| val->md2_cfg.int2_double_tap
- | val->md2_cfg.int2_ff | val->md2_cfg.int2_wu
+ | val->md2_cfg.int2_ff
+ | val->md2_cfg.int2_wu
| val->md2_cfg.int2_single_tap
- | val->md2_cfg.int2_sleep_change) != PROPERTY_DISABLE ){
+ | val->md2_cfg.int2_sleep_change
+ | pin_int1_route.int1_ctrl.den_drdy_flag
+ | pin_int1_route.int1_ctrl.int1_boot
+ | pin_int1_route.int1_ctrl.int1_cnt_bdr
+ | pin_int1_route.int1_ctrl.int1_drdy_g
+ | pin_int1_route.int1_ctrl.int1_drdy_xl
+ | pin_int1_route.int1_ctrl.int1_fifo_full
+ | pin_int1_route.int1_ctrl.int1_fifo_ovr
+ | pin_int1_route.int1_ctrl.int1_fifo_th
+ | pin_int1_route.md1_cfg.int1_6d
+ | pin_int1_route.md1_cfg.int1_double_tap
+ | pin_int1_route.md1_cfg.int1_ff
+ | pin_int1_route.md1_cfg.int1_wu
+ | pin_int1_route.md1_cfg.int1_single_tap
+ | pin_int1_route.md1_cfg.int1_sleep_change ) != PROPERTY_DISABLE) {
tap_cfg2.interrupts_enable = PROPERTY_ENABLE;
}
else{
@@ -7689,21 +7719,21 @@
}
if (ret == 0) {
if ( (val->fsm_enable_a.fsm1_en |
- val->fsm_enable_a.fsm2_en |
- val->fsm_enable_a.fsm3_en |
- val->fsm_enable_a.fsm4_en |
- val->fsm_enable_a.fsm5_en |
- val->fsm_enable_a.fsm6_en |
- val->fsm_enable_a.fsm7_en |
- val->fsm_enable_a.fsm8_en |
- val->fsm_enable_b.fsm9_en |
- val->fsm_enable_b.fsm10_en |
- val->fsm_enable_b.fsm11_en |
- val->fsm_enable_b.fsm12_en |
- val->fsm_enable_b.fsm13_en |
- val->fsm_enable_b.fsm14_en |
- val->fsm_enable_b.fsm15_en |
- val->fsm_enable_b.fsm16_en )
+ val->fsm_enable_a.fsm2_en |
+ val->fsm_enable_a.fsm3_en |
+ val->fsm_enable_a.fsm4_en |
+ val->fsm_enable_a.fsm5_en |
+ val->fsm_enable_a.fsm6_en |
+ val->fsm_enable_a.fsm7_en |
+ val->fsm_enable_a.fsm8_en |
+ val->fsm_enable_b.fsm9_en |
+ val->fsm_enable_b.fsm10_en |
+ val->fsm_enable_b.fsm11_en |
+ val->fsm_enable_b.fsm12_en |
+ val->fsm_enable_b.fsm13_en |
+ val->fsm_enable_b.fsm14_en |
+ val->fsm_enable_b.fsm15_en |
+ val->fsm_enable_b.fsm16_en )
!= PROPERTY_DISABLE)
{
reg.fsm_en = PROPERTY_ENABLE;
@@ -7874,7 +7904,7 @@
ret = lsm6dso_mem_bank_set(ctx, LSM6DSO_EMBEDDED_FUNC_BANK);
if (ret == 0) {
- ret = lsm6dso_read_reg(ctx, LSM6DSO_FSM_OUTS1, (uint8_t*) &val, 16);
+ ret = lsm6dso_read_reg(ctx, LSM6DSO_FSM_OUTS1, (uint8_t*)val, 16);
}
if (ret == 0) {
ret = lsm6dso_mem_bank_set(ctx, LSM6DSO_USER_BANK);
@@ -7902,7 +7932,7 @@
}
if (ret == 0) {
reg.not_used_01 = 3; /* set default values */
- reg.not_used_02 = 1; /* set default values */
+ reg.not_used_02 = 2; /* set default values */
reg.fsm_odr = (uint8_t)val;
ret = lsm6dso_write_reg(ctx, LSM6DSO_EMB_FUNC_ODR_CFG_B,
(uint8_t*)®, 1);
@@ -7944,12 +7974,6 @@
case LSM6DSO_ODR_FSM_104Hz:
*val = LSM6DSO_ODR_FSM_104Hz;
break;
- case LSM6DSO_ODR_FSM_208Hz:
- *val = LSM6DSO_ODR_FSM_208Hz;
- break;
- case LSM6DSO_ODR_FSM_416Hz:
- *val = LSM6DSO_ODR_FSM_416Hz;
- break;
default:
*val = LSM6DSO_ODR_FSM_12Hz5;
break;
@@ -8017,20 +8041,21 @@
* the FSM generates an interrupt.[set]
*
* @param ctx read / write interface definitions
- * @param buff buffer that contains data to write
- *
- */
-int32_t lsm6dso_long_cnt_int_value_set(lsm6dso_ctx_t *ctx, uint8_t *buff)
-{
- int32_t ret;
- uint8_t index;
-
- index = 0x00U;
- ret = lsm6dso_ln_pg_write_byte(ctx, LSM6DSO_FSM_LC_TIMEOUT_L, &buff[index]);
- if (ret == 0) {
- index++;
- ret = lsm6dso_ln_pg_write_byte(ctx, LSM6DSO_FSM_LC_TIMEOUT_H,
- &buff[index]);
+ * @param val the value of long counter
+ *
+ */
+int32_t lsm6dso_long_cnt_int_value_set(lsm6dso_ctx_t *ctx, uint16_t val)
+{
+ int32_t ret;
+ uint8_t add_l;
+ uint8_t add_h;
+
+ add_h = (uint8_t)( ( val & 0xFF00U ) >> 8 );
+ add_l = (uint8_t)( val & 0x00FFU );
+
+ ret = lsm6dso_ln_pg_write_byte(ctx, LSM6DSO_FSM_LC_TIMEOUT_L, &add_l);
+ if (ret == 0) {
+ ret = lsm6dso_ln_pg_write_byte(ctx, LSM6DSO_FSM_LC_TIMEOUT_H, &add_h);
}
return ret;
@@ -8042,21 +8067,22 @@
* When the long counter value reached this value,
* the FSM generates an interrupt.[get]
*
- * @param ctx read / write interface definitions
- * @param buff buffer that stores data read
- *
- */
-int32_t lsm6dso_long_cnt_int_value_get(lsm6dso_ctx_t *ctx, uint8_t *buff)
-{
- int32_t ret;
- uint8_t index;
-
- index = 0x00U;
- ret = lsm6dso_ln_pg_read_byte(ctx, LSM6DSO_FSM_LC_TIMEOUT_L, &buff[index]);
- if (ret == 0) {
- index++;
- ret = lsm6dso_ln_pg_read_byte(ctx, LSM6DSO_FSM_LC_TIMEOUT_H,
- &buff[index]);
+ * @param ctx read / write interface definitions
+ * @param val buffer that stores the value of long counter
+ *
+ */
+int32_t lsm6dso_long_cnt_int_value_get(lsm6dso_ctx_t *ctx, uint16_t *val)
+{
+ int32_t ret;
+ uint8_t add_l;
+ uint8_t add_h;
+
+ ret = lsm6dso_ln_pg_read_byte(ctx, LSM6DSO_FSM_LC_TIMEOUT_L, &add_l);
+ if (ret == 0) {
+ ret = lsm6dso_ln_pg_read_byte(ctx, LSM6DSO_FSM_LC_TIMEOUT_H, &add_h);
+ *val = add_h;
+ *val = *val << 8;
+ *val += add_l;
}
return ret;
@@ -8066,14 +8092,14 @@
* @brief FSM number of programs register.[set]
*
* @param ctx read / write interface definitions
- * @param buff buffer that contains data to write
- *
- */
-int32_t lsm6dso_fsm_number_of_programs_set(lsm6dso_ctx_t *ctx, uint8_t *buff)
-{
- int32_t ret;
-
- ret = lsm6dso_ln_pg_write_byte(ctx, LSM6DSO_FSM_PROGRAMS, buff);
+ * @param val value to write
+ *
+ */
+int32_t lsm6dso_fsm_number_of_programs_set(lsm6dso_ctx_t *ctx, uint8_t val)
+{
+ int32_t ret;
+
+ ret = lsm6dso_ln_pg_write_byte(ctx, LSM6DSO_FSM_PROGRAMS, &val);
return ret;
}
@@ -8082,14 +8108,14 @@
* @brief FSM number of programs register.[get]
*
* @param ctx read / write interface definitions
- * @param buff buffer that stores data read
- *
- */
-int32_t lsm6dso_fsm_number_of_programs_get(lsm6dso_ctx_t *ctx, uint8_t *buff)
-{
- int32_t ret;
-
- ret = lsm6dso_ln_pg_read_byte(ctx, LSM6DSO_FSM_PROGRAMS, buff);
+ * @param val buffer that stores data read.
+ *
+ */
+int32_t lsm6dso_fsm_number_of_programs_get(lsm6dso_ctx_t *ctx, uint8_t *val)
+{
+ int32_t ret;
+
+ ret = lsm6dso_ln_pg_read_byte(ctx, LSM6DSO_FSM_PROGRAMS, val);
return ret;
}
@@ -8099,20 +8125,21 @@
* First available address is 0x033C.[set]
*
* @param ctx read / write interface definitions
- * @param buff buffer that contains data to write
- *
- */
-int32_t lsm6dso_fsm_start_address_set(lsm6dso_ctx_t *ctx, uint8_t *buff)
-{
- int32_t ret;
- uint8_t index;
-
- index = 0x00U;
- ret = lsm6dso_ln_pg_write_byte(ctx, LSM6DSO_FSM_START_ADD_L, &buff[index]);
- if (ret == 0) {
- index++;
- ret = lsm6dso_ln_pg_write_byte(ctx, LSM6DSO_FSM_START_ADD_H,
- &buff[index]);
+ * @param val the value of start address
+ *
+ */
+int32_t lsm6dso_fsm_start_address_set(lsm6dso_ctx_t *ctx, uint16_t val)
+{
+ int32_t ret;
+ uint8_t add_l;
+ uint8_t add_h;
+
+ add_h = (uint8_t)( ( val & 0xFF00U ) >> 8 );
+ add_l = (uint8_t)( val & 0x00FFU );
+
+ ret = lsm6dso_ln_pg_write_byte(ctx, LSM6DSO_FSM_START_ADD_L, &add_l);
+ if (ret == 0) {
+ ret = lsm6dso_ln_pg_write_byte(ctx, LSM6DSO_FSM_START_ADD_H, &add_h);
}
return ret;
}
@@ -8122,19 +8149,21 @@
* First available address is 0x033C.[get]
*
* @param ctx read / write interface definitions
- * @param buff buffer that stores data read
- *
- */
-int32_t lsm6dso_fsm_start_address_get(lsm6dso_ctx_t *ctx, uint8_t *buff)
-{
- int32_t ret;
- uint8_t index;
-
- index = 0x00U;
- ret = lsm6dso_ln_pg_read_byte(ctx, LSM6DSO_FSM_START_ADD_L, buff);
- if (ret == 0) {
- index++;
- ret = lsm6dso_ln_pg_read_byte(ctx, LSM6DSO_FSM_START_ADD_H, buff);
+ * @param val buffer the value of start address.
+ *
+ */
+int32_t lsm6dso_fsm_start_address_get(lsm6dso_ctx_t *ctx, uint16_t *val)
+{
+ int32_t ret;
+ uint8_t add_l;
+ uint8_t add_h;
+
+ ret = lsm6dso_ln_pg_read_byte(ctx, LSM6DSO_FSM_START_ADD_L, &add_l);
+ if (ret == 0) {
+ ret = lsm6dso_ln_pg_read_byte(ctx, LSM6DSO_FSM_START_ADD_H, &add_h);
+ *val = add_h;
+ *val = *val << 8;
+ *val += add_l;
}
return ret;
}
@@ -8153,20 +8182,21 @@
*/
/**
-* @brief Sensor hub output registers.[get]
-*
-* @param ctx read / write interface definitions
-* @param val union of registers from SENSOR_HUB_1 to SENSOR_HUB_18
-*
- */
-int32_t lsm6dso_sh_read_data_raw_get(lsm6dso_ctx_t *ctx,
- lsm6dso_emb_sh_read_t *val)
+ * @brief Sensor hub output registers.[get]
+ *
+ * @param ctx read / write interface definitions
+ * @param val values read from registers SENSOR_HUB_1 to SENSOR_HUB_18
+ * @param len number of consecutive register to read (max 18)
+ *
+ */
+int32_t lsm6dso_sh_read_data_raw_get(lsm6dso_ctx_t *ctx, uint8_t *val,
+ uint8_t len)
{
int32_t ret;
ret = lsm6dso_mem_bank_set(ctx, LSM6DSO_SENSOR_HUB_BANK);
if (ret == 0) {
- ret = lsm6dso_read_reg(ctx, LSM6DSO_SENSOR_HUB_1, (uint8_t*) val, 18U);
+ ret = lsm6dso_read_reg(ctx, LSM6DSO_SENSOR_HUB_1, (uint8_t*) val, len);
}
if (ret == 0) {
ret = lsm6dso_mem_bank_set(ctx, LSM6DSO_USER_BANK);
--- a/lsm6dso_reg.h Wed Mar 06 12:37:22 2019 +0000
+++ b/lsm6dso_reg.h Mon Jun 03 09:16:08 2019 +0000
@@ -159,49 +159,6 @@
*
*/
-/**
- * @addtogroup LSM6DSO_Sensitivity
- * @brief These macro are maintained for back compatibility.
- * in order to convert data into engineering units please
- * use functions:
- * -> _from_fs2_to_mg(int16_t lsb);
- * -> _from_fs4_to_mg(int16_t lsb);
- * -> _from_fs8_to_mg(int16_t lsb);
- * -> _from_fs16_to_mg(int16_t lsb);
- * -> _from_fs125_to_mdps(int16_t lsb);
- * -> _from_fs500_to_mdps(int16_t lsb);
- * -> _from_fs250_to_mdps(int16_t lsb);
- * -> _from_fs1000_to_mdps(int16_t lsb);
- * -> _from_fs2000_to_mdps(int16_t lsb);
- * -> _from_lsb_to_celsius(int16_t lsb);
- * -> _from_lsb_to_nsec(int16_t lsb);
- *
- * REMOVING the MACRO you are compliant with:
- * MISRA-C 2012 [Dir 4.9] -> " avoid function-like macros "
- * @{
- *
- */
-
-#define LSM6DSO_FROM_FS_2g_TO_mg(lsb) (float)(lsb * 61.0f) / 1000.0f
-#define LSM6DSO_FROM_FS_4g_TO_mg(lsb) (float)(lsb * 122.0f) / 1000.0f
-#define LSM6DSO_FROM_FS_8g_TO_mg(lsb) (float)(lsb * 244.0f) / 1000.0f
-#define LSM6DSO_FROM_FS_16g_TO_mg(lsb) (float)(lsb * 488.0f) / 1000.0f
-
-#define LSM6DSO_FROM_FS_125dps_TO_mdps(lsb) (float)(lsb * 4375.0f) / 1000.0f
-#define LSM6DSO_FROM_FS_250dps_TO_mdps(lsb) (float)(lsb * 8750.0f) / 1000.0f
-#define LSM6DSO_FROM_FS_500dps_TO_mdps(lsb) (float)(lsb * 17500.0f) / 1000.0f
-#define LSM6DSO_FROM_FS_1000dps_TO_mdps(lsb) (float)(lsb * 35000.0f) / 1000.0f
-#define LSM6DSO_FROM_FS_2000dps_TO_mdps(lsb) (float)(lsb * 70000.0f) / 1000.0f
-
-#define LSM6DSO_FROM_LSB_TO_degC(lsb) ((float)((int16_t)lsb>>8)*1.0f + 25.0f)
-
-#define LSM6DSO_TIMESTAMP_LSB_TO_NSEC 25000ULL
-
-/**
- * @}
- *
- */
-
#define LSM6DSO_FUNC_CFG_ACCESS 0x01U
typedef struct {
uint8_t not_used_01 : 6;
@@ -1048,8 +1005,8 @@
#define LSM6DSO_EMB_FUNC_ODR_CFG_B 0x5FU
typedef struct {
uint8_t not_used_01 : 3;
- uint8_t fsm_odr : 3;
- uint8_t not_used_02 : 2;
+ uint8_t fsm_odr : 2;
+ uint8_t not_used_02 : 3;
} lsm6dso_emb_func_odr_cfg_b_t;
#define LSM6DSO_STEP_COUNTER_L 0x62U
@@ -1449,6 +1406,8 @@
uint8_t wr_once_done : 1;
} lsm6dso_status_master_t;
+#define LSM6DSO_START_FSM_ADD 0x0400U
+
/**
* @defgroup LSM6DSO_Register_Union
* @brief This union group all the registers that has a bitfield
@@ -1596,17 +1555,17 @@
int32_t lsm6dso_write_reg(lsm6dso_ctx_t *ctx, uint8_t reg, uint8_t* data,
uint16_t len);
-extern float lsm6dso_from_fs2_to_mg(int16_t lsb);
-extern float lsm6dso_from_fs4_to_mg(int16_t lsb);
-extern float lsm6dso_from_fs8_to_mg(int16_t lsb);
-extern float lsm6dso_from_fs16_to_mg(int16_t lsb);
-extern float lsm6dso_from_fs125_to_mdps(int16_t lsb);
-extern float lsm6dso_from_fs500_to_mdps(int16_t lsb);
-extern float lsm6dso_from_fs250_to_mdps(int16_t lsb);
-extern float lsm6dso_from_fs1000_to_mdps(int16_t lsb);
-extern float lsm6dso_from_fs2000_to_mdps(int16_t lsb);
-extern float lsm6dso_from_lsb_to_celsius(int16_t lsb);
-extern float lsm6dso_from_lsb_to_nsec(int16_t lsb);
+extern float_t lsm6dso_from_fs2_to_mg(int16_t lsb);
+extern float_t lsm6dso_from_fs4_to_mg(int16_t lsb);
+extern float_t lsm6dso_from_fs8_to_mg(int16_t lsb);
+extern float_t lsm6dso_from_fs16_to_mg(int16_t lsb);
+extern float_t lsm6dso_from_fs125_to_mdps(int16_t lsb);
+extern float_t lsm6dso_from_fs500_to_mdps(int16_t lsb);
+extern float_t lsm6dso_from_fs250_to_mdps(int16_t lsb);
+extern float_t lsm6dso_from_fs1000_to_mdps(int16_t lsb);
+extern float_t lsm6dso_from_fs2000_to_mdps(int16_t lsb);
+extern float_t lsm6dso_from_lsb_to_celsius(int16_t lsb);
+extern float_t lsm6dso_from_lsb_to_nsec(int16_t lsb);
typedef enum {
LSM6DSO_2g = 0,
@@ -1825,10 +1784,10 @@
LSM6DSO_VERY_LIGHT = 1,
LSM6DSO_LIGHT = 2,
LSM6DSO_MEDIUM = 3,
- LSM6DSO_STRONG = 4,
- LSM6DSO_VERY_STRONG = 5,
- LSM6DSO_AGGRESSIVE = 6,
- LSM6DSO_XTREME = 7,
+ LSM6DSO_STRONG = 4, /* not available for data rate > 1k670Hz */
+ LSM6DSO_VERY_STRONG = 5, /* not available for data rate > 1k670Hz */
+ LSM6DSO_AGGRESSIVE = 6, /* not available for data rate > 1k670Hz */
+ LSM6DSO_XTREME = 7, /* not available for data rate > 1k670Hz */
} lsm6dso_ftype_t;
int32_t lsm6dso_gy_lp1_bandwidth_set(lsm6dso_ctx_t *ctx,
lsm6dso_ftype_t val);
@@ -2077,11 +2036,11 @@
lsm6dso_i2c_disable_t *val);
typedef enum {
- LSM6DSO_I3C_DISABLE = 0x00,
- LSM6DSO_I3C_ENABLE_T_50us = 0x80,
- LSM6DSO_I3C_ENABLE_T_2us = 0x81,
- LSM6DSO_I3C_ENABLE_T_1ms = 0x82,
- LSM6DSO_I3C_ENABLE_T_25ms = 0x83,
+ LSM6DSO_I3C_DISABLE = 0x80,
+ LSM6DSO_I3C_ENABLE_T_50us = 0x00,
+ LSM6DSO_I3C_ENABLE_T_2us = 0x01,
+ LSM6DSO_I3C_ENABLE_T_1ms = 0x02,
+ LSM6DSO_I3C_ENABLE_T_25ms = 0x03,
} lsm6dso_i3c_disable_t;
int32_t lsm6dso_i3c_disable_set(lsm6dso_ctx_t *ctx,
lsm6dso_i3c_disable_t val);
@@ -2595,14 +2554,14 @@
lsm6dso_fsm_outs6_t fsm_outs6;
lsm6dso_fsm_outs7_t fsm_outs7;
lsm6dso_fsm_outs8_t fsm_outs8;
- lsm6dso_fsm_outs1_t fsm_outs9;
- lsm6dso_fsm_outs2_t fsm_outs10;
- lsm6dso_fsm_outs3_t fsm_outs11;
- lsm6dso_fsm_outs4_t fsm_outs12;
- lsm6dso_fsm_outs5_t fsm_outs13;
- lsm6dso_fsm_outs6_t fsm_outs14;
- lsm6dso_fsm_outs7_t fsm_outs15;
- lsm6dso_fsm_outs8_t fsm_outs16;
+ lsm6dso_fsm_outs9_t fsm_outs9;
+ lsm6dso_fsm_outs10_t fsm_outs10;
+ lsm6dso_fsm_outs11_t fsm_outs11;
+ lsm6dso_fsm_outs12_t fsm_outs12;
+ lsm6dso_fsm_outs13_t fsm_outs13;
+ lsm6dso_fsm_outs14_t fsm_outs14;
+ lsm6dso_fsm_outs15_t fsm_outs15;
+ lsm6dso_fsm_outs16_t fsm_outs16;
} lsm6dso_fsm_out_t;
int32_t lsm6dso_fsm_out_get(lsm6dso_ctx_t *ctx, lsm6dso_fsm_out_t *val);
@@ -2611,8 +2570,6 @@
LSM6DSO_ODR_FSM_26Hz = 1,
LSM6DSO_ODR_FSM_52Hz = 2,
LSM6DSO_ODR_FSM_104Hz = 3,
- LSM6DSO_ODR_FSM_208Hz = 4,
- LSM6DSO_ODR_FSM_416Hz = 5,
} lsm6dso_fsm_odr_t;
int32_t lsm6dso_fsm_data_rate_set(lsm6dso_ctx_t *ctx, lsm6dso_fsm_odr_t val);
int32_t lsm6dso_fsm_data_rate_get(lsm6dso_ctx_t *ctx, lsm6dso_fsm_odr_t *val);
@@ -2620,37 +2577,17 @@
int32_t lsm6dso_fsm_init_set(lsm6dso_ctx_t *ctx, uint8_t val);
int32_t lsm6dso_fsm_init_get(lsm6dso_ctx_t *ctx, uint8_t *val);
-int32_t lsm6dso_long_cnt_int_value_set(lsm6dso_ctx_t *ctx, uint8_t *buff);
-int32_t lsm6dso_long_cnt_int_value_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
+int32_t lsm6dso_long_cnt_int_value_set(lsm6dso_ctx_t *ctx, uint16_t val);
+int32_t lsm6dso_long_cnt_int_value_get(lsm6dso_ctx_t *ctx, uint16_t *val);
-int32_t lsm6dso_fsm_number_of_programs_set(lsm6dso_ctx_t *ctx, uint8_t *buff);
-int32_t lsm6dso_fsm_number_of_programs_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
-
-int32_t lsm6dso_fsm_start_address_set(lsm6dso_ctx_t *ctx, uint8_t *buff);
-int32_t lsm6dso_fsm_start_address_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
+int32_t lsm6dso_fsm_number_of_programs_set(lsm6dso_ctx_t *ctx, uint8_t val);
+int32_t lsm6dso_fsm_number_of_programs_get(lsm6dso_ctx_t *ctx, uint8_t *val);
-typedef struct {
- lsm6dso_sensor_hub_1_t sh_byte_1;
- lsm6dso_sensor_hub_2_t sh_byte_2;
- lsm6dso_sensor_hub_3_t sh_byte_3;
- lsm6dso_sensor_hub_4_t sh_byte_4;
- lsm6dso_sensor_hub_5_t sh_byte_5;
- lsm6dso_sensor_hub_6_t sh_byte_6;
- lsm6dso_sensor_hub_7_t sh_byte_7;
- lsm6dso_sensor_hub_8_t sh_byte_8;
- lsm6dso_sensor_hub_9_t sh_byte_9;
- lsm6dso_sensor_hub_10_t sh_byte_10;
- lsm6dso_sensor_hub_11_t sh_byte_11;
- lsm6dso_sensor_hub_12_t sh_byte_12;
- lsm6dso_sensor_hub_13_t sh_byte_13;
- lsm6dso_sensor_hub_14_t sh_byte_14;
- lsm6dso_sensor_hub_15_t sh_byte_15;
- lsm6dso_sensor_hub_16_t sh_byte_16;
- lsm6dso_sensor_hub_17_t sh_byte_17;
- lsm6dso_sensor_hub_18_t sh_byte_18;
-} lsm6dso_emb_sh_read_t;
-int32_t lsm6dso_sh_read_data_raw_get(lsm6dso_ctx_t *ctx,
- lsm6dso_emb_sh_read_t *val);
+int32_t lsm6dso_fsm_start_address_set(lsm6dso_ctx_t *ctx, uint16_t val);
+int32_t lsm6dso_fsm_start_address_get(lsm6dso_ctx_t *ctx, uint16_t *val);
+
+int32_t lsm6dso_sh_read_data_raw_get(lsm6dso_ctx_t *ctx, uint8_t *val,
+ uint8_t len);
typedef enum {
LSM6DSO_SLV_0 = 0,