iNEMO inertial module: 3D accelerometer and 3D gyroscope.
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Dependents: X_NUCLEO_IKS01A3 X_NUCLEO_IKS01A3
Diff: lsm6dso_reg.c
- Revision:
- 2:4d14e9edf37e
- Parent:
- 0:6d69e896ce38
- Child:
- 3:4274d9103f1d
diff -r 888ac5f8d970 -r 4d14e9edf37e lsm6dso_reg.c
--- 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);