LELEC2811 - I&S / LSM6DSO

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   X_NUCLEO_IKS01A3

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers lsm6dso_reg.h Source File

lsm6dso_reg.h

00001 /*
00002  ******************************************************************************
00003  * @file    lsm6dso_reg.h
00004  * @author  Sensor Solutions Software Team
00005  * @brief   This file contains all the functions prototypes for the
00006  *          lsm6dso_reg.c driver.
00007  ******************************************************************************
00008  * @attention
00009  *
00010  * <h2><center>&copy; COPYRIGHT(c) 2018 STMicroelectronics</center></h2>
00011  *
00012  * Redistribution and use in source and binary forms, with or without
00013  * modification, are permitted provided that the following conditions
00014  * are met:
00015  *   1. Redistributions of source code must retain the above copyright notice,
00016  *      this list of conditions and the following disclaimer.
00017  *   2. Redistributions in binary form must reproduce the above copyright
00018  *      notice, this list of conditions and the following disclaimer in the
00019  *      documentation and/or other materials provided with the distribution.
00020  *   3. Neither the name of STMicroelectronics nor the names of its
00021  *      contributors may be used to endorse or promote products derived from
00022  *      this software without specific prior written permission.
00023  *
00024  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00025  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00026  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00027  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
00028  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00029  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00030  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00031  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00032  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00033  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00034  * POSSIBILITY OF SUCH DAMAGE.
00035  *
00036 */
00037 
00038 /* Define to prevent recursive inclusion -------------------------------------*/
00039 #ifndef LSM6DSO_DRIVER_H
00040 #define LSM6DSO_DRIVER_H
00041 
00042 #ifdef __cplusplus
00043 extern "C" {
00044 #endif
00045 
00046 /* Includes ------------------------------------------------------------------*/
00047 #include <stdint.h>
00048 #include <math.h>
00049 
00050 /** @addtogroup LSM6DSO
00051   * @{
00052   *
00053   */
00054 
00055 /** @defgroup LSM6DSO_sensors_common_types
00056   * @{
00057   *
00058   */
00059 
00060 #ifndef MEMS_SHARED_TYPES
00061 #define MEMS_SHARED_TYPES
00062 
00063 /**
00064   * @defgroup axisXbitXX_t
00065   * @brief    These unions are useful to represent different sensors data type.
00066   *           These unions are not need by the driver.
00067   *
00068   *           REMOVING the unions you are compliant with:
00069   *           MISRA-C 2012 [Rule 19.2] -> " Union are not allowed "
00070   *
00071   * @{
00072   *
00073   */
00074 
00075 typedef union {
00076     int16_t i16bit[3];
00077     uint8_t u8bit[6];
00078 } axis3bit16_t;
00079 
00080 typedef union {
00081     int16_t i16bit;
00082     uint8_t u8bit[2];
00083 } axis1bit16_t;
00084 
00085 typedef union {
00086     int32_t i32bit[3];
00087     uint8_t u8bit[12];
00088 } axis3bit32_t;
00089 
00090 typedef union {
00091     int32_t i32bit;
00092     uint8_t u8bit[4];
00093 } axis1bit32_t;
00094 
00095 /**
00096   * @}
00097   *
00098   */
00099 
00100 typedef struct {
00101     uint8_t bit0       : 1;
00102     uint8_t bit1       : 1;
00103     uint8_t bit2       : 1;
00104     uint8_t bit3       : 1;
00105     uint8_t bit4       : 1;
00106     uint8_t bit5       : 1;
00107     uint8_t bit6       : 1;
00108     uint8_t bit7       : 1;
00109 } bitwise_t;
00110 
00111 #define PROPERTY_DISABLE                (0U)
00112 #define PROPERTY_ENABLE                 (1U)
00113 
00114 #endif /* MEMS_SHARED_TYPES */
00115 
00116 /**
00117   * @}
00118   *
00119   */
00120 
00121 /** @addtogroup  LSM6DSO_Interfaces_Functions
00122   * @brief       This section provide a set of functions used to read and
00123   *              write a generic register of the device.
00124   *              MANDATORY: return 0 -> no Error.
00125   * @{
00126   *
00127   */
00128 
00129 typedef int32_t (*lsm6dso_write_ptr)(void *, uint8_t, uint8_t *, uint16_t);
00130 typedef int32_t (*lsm6dso_read_ptr)(void *, uint8_t, uint8_t *, uint16_t);
00131 
00132 typedef struct {
00133     /** Component mandatory fields **/
00134     lsm6dso_write_ptr  write_reg;
00135     lsm6dso_read_ptr   read_reg;
00136     /** Customizable optional pointer **/
00137     void *handle;
00138 } lsm6dso_ctx_t;
00139 
00140 /**
00141   * @}
00142   *
00143   */
00144 
00145 /** @defgroup LSM6DSO_Infos
00146   * @{
00147   *
00148   */
00149 
00150 /** I2C Device Address 8 bit format  if SA0=0 -> D5 if SA0=1 -> D7 **/
00151 #define LSM6DSO_I2C_ADD_L                    0xD5
00152 #define LSM6DSO_I2C_ADD_H                    0xD7
00153 
00154 /** Device Identification (Who am I) **/
00155 #define LSM6DSO_ID                           0x6C
00156 
00157 /**
00158   * @}
00159   *
00160   */
00161 
00162 #define LSM6DSO_FUNC_CFG_ACCESS              0x01U
00163 typedef struct {
00164     uint8_t not_used_01              : 6;
00165     uint8_t reg_access               : 2; /* shub_reg_access + func_cfg_access */
00166 } lsm6dso_func_cfg_access_t;
00167 
00168 #define LSM6DSO_PIN_CTRL                     0x02U
00169 typedef struct {
00170     uint8_t not_used_01              : 6;
00171     uint8_t sdo_pu_en                : 1;
00172     uint8_t ois_pu_dis               : 1;
00173 } lsm6dso_pin_ctrl_t;
00174 
00175 #define LSM6DSO_FIFO_CTRL1                   0x07U
00176 typedef struct {
00177     uint8_t wtm                      : 8;
00178 } lsm6dso_fifo_ctrl1_t;
00179 
00180 #define LSM6DSO_FIFO_CTRL2                   0x08U
00181 typedef struct {
00182     uint8_t wtm                      : 1;
00183     uint8_t uncoptr_rate             : 2;
00184     uint8_t not_used_01              : 1;
00185     uint8_t odrchg_en                : 1;
00186     uint8_t not_used_02              : 1;
00187     uint8_t fifo_compr_rt_en         : 1;
00188     uint8_t stop_on_wtm              : 1;
00189 } lsm6dso_fifo_ctrl2_t;
00190 
00191 #define LSM6DSO_FIFO_CTRL3                   0x09U
00192 typedef struct {
00193     uint8_t bdr_xl                   : 4;
00194     uint8_t bdr_gy                   : 4;
00195 } lsm6dso_fifo_ctrl3_t;
00196 
00197 #define LSM6DSO_FIFO_CTRL4                   0x0AU
00198 typedef struct {
00199     uint8_t fifo_mode                : 3;
00200     uint8_t not_used_01              : 1;
00201     uint8_t odr_t_batch              : 2;
00202     uint8_t odr_ts_batch             : 2;
00203 } lsm6dso_fifo_ctrl4_t;
00204 
00205 #define LSM6DSO_COUNTER_BDR_REG1             0x0BU
00206 typedef struct {
00207     uint8_t cnt_bdr_th               : 3;
00208     uint8_t not_used_01              : 2;
00209     uint8_t trig_counter_bdr         : 1;
00210     uint8_t rst_counter_bdr          : 1;
00211     uint8_t dataready_pulsed         : 1;
00212 } lsm6dso_counter_bdr_reg1_t;
00213 
00214 #define LSM6DSO_COUNTER_BDR_REG2             0x0CU
00215 typedef struct {
00216     uint8_t cnt_bdr_th               : 8;
00217 } lsm6dso_counter_bdr_reg2_t;
00218 
00219 #define LSM6DSO_INT1_CTRL  0x0D
00220 typedef struct {
00221     uint8_t int1_drdy_xl             : 1;
00222     uint8_t int1_drdy_g              : 1;
00223     uint8_t int1_boot                : 1;
00224     uint8_t int1_fifo_th             : 1;
00225     uint8_t int1_fifo_ovr            : 1;
00226     uint8_t int1_fifo_full           : 1;
00227     uint8_t int1_cnt_bdr             : 1;
00228     uint8_t den_drdy_flag            : 1;
00229 } lsm6dso_int1_ctrl_t;
00230 
00231 #define LSM6DSO_INT2_CTRL                    0x0EU
00232 typedef struct {
00233     uint8_t int2_drdy_xl             : 1;
00234     uint8_t int2_drdy_g              : 1;
00235     uint8_t int2_drdy_temp           : 1;
00236     uint8_t int2_fifo_th             : 1;
00237     uint8_t int2_fifo_ovr            : 1;
00238     uint8_t int2_fifo_full           : 1;
00239     uint8_t int2_cnt_bdr             : 1;
00240     uint8_t not_used_01              : 1;
00241 } lsm6dso_int2_ctrl_t;
00242 
00243 #define LSM6DSO_WHO_AM_I                     0x0FU
00244 #define LSM6DSO_CTRL1_XL                     0x10U
00245 typedef struct {
00246     uint8_t not_used_01              : 1;
00247     uint8_t lpf2_xl_en               : 1;
00248     uint8_t fs_xl                    : 2;
00249     uint8_t odr_xl                   : 4;
00250 } lsm6dso_ctrl1_xl_t;
00251 
00252 #define LSM6DSO_CTRL2_G                      0x11U
00253 typedef struct {
00254     uint8_t not_used_01              : 1;
00255     uint8_t fs_g                     : 3; /* fs_125 + fs_g */
00256     uint8_t odr_g                    : 4;
00257 } lsm6dso_ctrl2_g_t;
00258 
00259 #define LSM6DSO_CTRL3_C                      0x12U
00260 typedef struct {
00261     uint8_t sw_reset                 : 1;
00262     uint8_t not_used_01              : 1;
00263     uint8_t if_inc                   : 1;
00264     uint8_t sim                      : 1;
00265     uint8_t pp_od                    : 1;
00266     uint8_t h_lactive                : 1;
00267     uint8_t bdu                      : 1;
00268     uint8_t boot                     : 1;
00269 } lsm6dso_ctrl3_c_t;
00270 
00271 #define LSM6DSO_CTRL4_C                      0x13U
00272 typedef struct {
00273     uint8_t not_used_01              : 1;
00274     uint8_t lpf1_sel_g               : 1;
00275     uint8_t i2c_disable              : 1;
00276     uint8_t drdy_mask                : 1;
00277     uint8_t not_used_02              : 1;
00278     uint8_t int2_on_int1             : 1;
00279     uint8_t sleep_g                  : 1;
00280     uint8_t not_used_03              : 1;
00281 } lsm6dso_ctrl4_c_t;
00282 
00283 #define LSM6DSO_CTRL5_C                      0x14U
00284 typedef struct {
00285     uint8_t st_xl                    : 2;
00286     uint8_t st_g                     : 2;
00287     uint8_t not_used_01              : 1;
00288     uint8_t rounding                 : 2;
00289     uint8_t xl_ulp_en                : 1;
00290 } lsm6dso_ctrl5_c_t;
00291 
00292 #define LSM6DSO_CTRL6_C                      0x15U
00293 typedef struct {
00294     uint8_t ftype                    : 3;
00295     uint8_t usr_off_w                : 1;
00296     uint8_t xl_hm_mode               : 1;
00297     uint8_t den_mode                 : 3;   /* trig_en + lvl1_en + lvl2_en */
00298 } lsm6dso_ctrl6_c_t;
00299 
00300 #define LSM6DSO_CTRL7_G                      0x16U
00301 typedef struct {
00302     uint8_t ois_on                   : 1;
00303     uint8_t usr_off_on_out           : 1;
00304     uint8_t ois_on_en                : 1;
00305     uint8_t not_used_01              : 1;
00306     uint8_t hpm_g                    : 2;
00307     uint8_t hp_en_g                  : 1;
00308     uint8_t g_hm_mode                : 1;
00309 } lsm6dso_ctrl7_g_t;
00310 
00311 #define LSM6DSO_CTRL8_XL                     0x17U
00312 typedef struct {
00313     uint8_t low_pass_on_6d           : 1;
00314     uint8_t xl_fs_mode               : 1;
00315     uint8_t hp_slope_xl_en           : 1;
00316     uint8_t fastsettl_mode_xl        : 1;
00317     uint8_t hp_ref_mode_xl           : 1;
00318     uint8_t hpcf_xl                  : 3;
00319 } lsm6dso_ctrl8_xl_t;
00320 
00321 #define LSM6DSO_CTRL9_XL                     0x18U
00322 typedef struct {
00323     uint8_t not_used_01              : 1;
00324     uint8_t i3c_disable              : 1;
00325     uint8_t den_lh                   : 1;
00326     uint8_t den_xl_g                 : 2;   /* den_xl_en + den_xl_g */
00327     uint8_t den_z                    : 1;
00328     uint8_t den_y                    : 1;
00329     uint8_t den_x                    : 1;
00330 } lsm6dso_ctrl9_xl_t;
00331 
00332 #define LSM6DSO_CTRL10_C                     0x19U
00333 typedef struct {
00334     uint8_t not_used_01              : 5;
00335     uint8_t timestamp_en             : 1;
00336     uint8_t not_used_02              : 2;
00337 } lsm6dso_ctrl10_c_t;
00338 
00339 #define LSM6DSO_ALL_INT_SRC                  0x1AU
00340 typedef struct {
00341     uint8_t ff_ia                    : 1;
00342     uint8_t wu_ia                    : 1;
00343     uint8_t single_tap               : 1;
00344     uint8_t double_tap               : 1;
00345     uint8_t d6d_ia                   : 1;
00346     uint8_t sleep_change_ia          : 1;
00347     uint8_t not_used_01              : 1;
00348     uint8_t timestamp_endcount       : 1;
00349 } lsm6dso_all_int_src_t;
00350 
00351 #define LSM6DSO_WAKE_UP_SRC                  0x1BU
00352 typedef struct {
00353     uint8_t z_wu                     : 1;
00354     uint8_t y_wu                     : 1;
00355     uint8_t x_wu                     : 1;
00356     uint8_t wu_ia                    : 1;
00357     uint8_t sleep_state              : 1;
00358     uint8_t ff_ia                    : 1;
00359     uint8_t sleep_change_ia          : 1;
00360     uint8_t not_used_01              : 1;
00361 } lsm6dso_wake_up_src_t;
00362 
00363 #define LSM6DSO_TAP_SRC                      0x1CU
00364 typedef struct {
00365     uint8_t z_tap                    : 1;
00366     uint8_t y_tap                    : 1;
00367     uint8_t x_tap                    : 1;
00368     uint8_t tap_sign                 : 1;
00369     uint8_t double_tap               : 1;
00370     uint8_t single_tap               : 1;
00371     uint8_t tap_ia                   : 1;
00372     uint8_t not_used_02              : 1;
00373 } lsm6dso_tap_src_t;
00374 
00375 #define LSM6DSO_D6D_SRC                      0x1DU
00376 typedef struct {
00377     uint8_t xl                       : 1;
00378     uint8_t xh                       : 1;
00379     uint8_t yl                       : 1;
00380     uint8_t yh                       : 1;
00381     uint8_t zl                       : 1;
00382     uint8_t zh                       : 1;
00383     uint8_t d6d_ia                   : 1;
00384     uint8_t den_drdy                 : 1;
00385 } lsm6dso_d6d_src_t;
00386 
00387 #define LSM6DSO_STATUS_REG                   0x1EU
00388 typedef struct {
00389     uint8_t xlda                     : 1;
00390     uint8_t gda                      : 1;
00391     uint8_t tda                      : 1;
00392     uint8_t not_used_01              : 5;
00393 } lsm6dso_status_reg_t;
00394 
00395 #define LSM6DSO_STATUS_SPIAUX                0x1EU
00396 typedef struct {
00397     uint8_t xlda                     : 1;
00398     uint8_t gda                      : 1;
00399     uint8_t gyro_settling            : 1;
00400     uint8_t not_used_01              : 5;
00401 } lsm6dso_status_spiaux_t;
00402 
00403 #define LSM6DSO_OUT_TEMP_L                   0x20U
00404 #define LSM6DSO_OUT_TEMP_H                   0x21U
00405 #define LSM6DSO_OUTX_L_G                     0x22U
00406 #define LSM6DSO_OUTX_H_G                     0x23U
00407 #define LSM6DSO_OUTY_L_G                     0x24U
00408 #define LSM6DSO_OUTY_H_G                     0x25U
00409 #define LSM6DSO_OUTZ_L_G                     0x26U
00410 #define LSM6DSO_OUTZ_H_G                     0x27U
00411 #define LSM6DSO_OUTX_L_A                     0x28U
00412 #define LSM6DSO_OUTX_H_A                     0x29U
00413 #define LSM6DSO_OUTY_L_A                     0x2AU
00414 #define LSM6DSO_OUTY_H_A                     0x2BU
00415 #define LSM6DSO_OUTZ_L_A                     0x2CU
00416 #define LSM6DSO_OUTZ_H_A                     0x2DU
00417 #define LSM6DSO_EMB_FUNC_STATUS_MAINPAGE     0x35U
00418 typedef struct {
00419     uint8_t not_used_01             : 3;
00420     uint8_t is_step_det             : 1;
00421     uint8_t is_tilt                 : 1;
00422     uint8_t is_sigmot               : 1;
00423     uint8_t not_used_02             : 1;
00424     uint8_t is_fsm_lc               : 1;
00425 } lsm6dso_emb_func_status_mainpage_t;
00426 
00427 #define LSM6DSO_FSM_STATUS_A_MAINPAGE        0x36U
00428 typedef struct {
00429     uint8_t is_fsm1                 : 1;
00430     uint8_t is_fsm2                 : 1;
00431     uint8_t is_fsm3                 : 1;
00432     uint8_t is_fsm4                 : 1;
00433     uint8_t is_fsm5                 : 1;
00434     uint8_t is_fsm6                 : 1;
00435     uint8_t is_fsm7                 : 1;
00436     uint8_t is_fsm8                 : 1;
00437 } lsm6dso_fsm_status_a_mainpage_t;
00438 
00439 #define LSM6DSO_FSM_STATUS_B_MAINPAGE        0x37U
00440 typedef struct {
00441     uint8_t IS_FSM9                 : 1;
00442     uint8_t IS_FSM10                : 1;
00443     uint8_t IS_FSM11                : 1;
00444     uint8_t IS_FSM12                : 1;
00445     uint8_t IS_FSM13                : 1;
00446     uint8_t IS_FSM14                : 1;
00447     uint8_t IS_FSM15                : 1;
00448     uint8_t IS_FSM16                : 1;
00449 } lsm6dso_fsm_status_b_mainpage_t;
00450 
00451 #define LSM6DSO_STATUS_MASTER_MAINPAGE       0x39U
00452 typedef struct {
00453     uint8_t sens_hub_endop          : 1;
00454     uint8_t not_used_01             : 2;
00455     uint8_t slave0_nack             : 1;
00456     uint8_t slave1_nack             : 1;
00457     uint8_t slave2_nack             : 1;
00458     uint8_t slave3_nack             : 1;
00459     uint8_t wr_once_done            : 1;
00460 } lsm6dso_status_master_mainpage_t;
00461 
00462 #define LSM6DSO_FIFO_STATUS1                 0x3AU
00463 typedef struct {
00464     uint8_t diff_fifo                : 8;
00465 } lsm6dso_fifo_status1_t;
00466 
00467 #define LSM6DSO_FIFO_STATUS2                 0x3B
00468 typedef struct {
00469     uint8_t diff_fifo                : 2;
00470     uint8_t not_used_01              : 1;
00471     uint8_t over_run_latched         : 1;
00472     uint8_t counter_bdr_ia           : 1;
00473     uint8_t fifo_full_ia             : 1;
00474     uint8_t fifo_ovr_ia              : 1;
00475     uint8_t fifo_wtm_ia              : 1;
00476 } lsm6dso_fifo_status2_t;
00477 
00478 #define LSM6DSO_TIMESTAMP0                   0x40U
00479 #define LSM6DSO_TIMESTAMP1                   0x41U
00480 #define LSM6DSO_TIMESTAMP2                   0x42U
00481 #define LSM6DSO_TIMESTAMP3                   0x43U
00482 #define LSM6DSO_TAP_CFG0                     0x56U
00483 typedef struct {
00484     uint8_t lir                      : 1;
00485     uint8_t tap_z_en                 : 1;
00486     uint8_t tap_y_en                 : 1;
00487     uint8_t tap_x_en                 : 1;
00488     uint8_t slope_fds                : 1;
00489     uint8_t sleep_status_on_int      : 1;
00490     uint8_t int_clr_on_read          : 1;
00491     uint8_t not_used_01              : 1;
00492 } lsm6dso_tap_cfg0_t;
00493 
00494 #define LSM6DSO_TAP_CFG1                     0x57U
00495 typedef struct {
00496     uint8_t tap_ths_x                : 5;
00497     uint8_t tap_priority             : 3;
00498 } lsm6dso_tap_cfg1_t;
00499 
00500 #define LSM6DSO_TAP_CFG2                     0x58U
00501 typedef struct {
00502     uint8_t tap_ths_y                : 5;
00503     uint8_t inact_en                 : 2;
00504     uint8_t interrupts_enable        : 1;
00505 } lsm6dso_tap_cfg2_t;
00506 
00507 #define LSM6DSO_TAP_THS_6D                   0x59U
00508 typedef struct {
00509     uint8_t tap_ths_z                : 5;
00510     uint8_t sixd_ths                 : 2;
00511     uint8_t d4d_en                   : 1;
00512 } lsm6dso_tap_ths_6d_t;
00513 
00514 #define LSM6DSO_INT_DUR2                     0x5AU
00515 typedef struct {
00516     uint8_t shock                    : 2;
00517     uint8_t quiet                    : 2;
00518     uint8_t dur                      : 4;
00519 } lsm6dso_int_dur2_t;
00520 
00521 #define LSM6DSO_WAKE_UP_THS                  0x5BU
00522 typedef struct {
00523     uint8_t wk_ths                   : 6;
00524     uint8_t usr_off_on_wu            : 1;
00525     uint8_t single_double_tap        : 1;
00526 } lsm6dso_wake_up_ths_t;
00527 
00528 #define LSM6DSO_WAKE_UP_DUR                  0x5CU
00529 typedef struct {
00530     uint8_t sleep_dur                : 4;
00531     uint8_t wake_ths_w               : 1;
00532     uint8_t wake_dur                 : 2;
00533     uint8_t ff_dur                   : 1;
00534 } lsm6dso_wake_up_dur_t;
00535 
00536 #define LSM6DSO_FREE_FALL                    0x5DU
00537 typedef struct {
00538     uint8_t ff_ths                   : 3;
00539     uint8_t ff_dur                   : 5;
00540 } lsm6dso_free_fall_t;
00541 
00542 #define LSM6DSO_MD1_CFG                      0x5EU
00543 typedef struct {
00544     uint8_t int1_shub                : 1;
00545     uint8_t int1_emb_func            : 1;
00546     uint8_t int1_6d                  : 1;
00547     uint8_t int1_double_tap          : 1;
00548     uint8_t int1_ff                  : 1;
00549     uint8_t int1_wu                  : 1;
00550     uint8_t int1_single_tap          : 1;
00551     uint8_t int1_sleep_change        : 1;
00552 } lsm6dso_md1_cfg_t;
00553 
00554 #define LSM6DSO_MD2_CFG                      0x5FU
00555 typedef struct {
00556     uint8_t int2_timestamp           : 1;
00557     uint8_t int2_emb_func            : 1;
00558     uint8_t int2_6d                  : 1;
00559     uint8_t int2_double_tap          : 1;
00560     uint8_t int2_ff                  : 1;
00561     uint8_t int2_wu                  : 1;
00562     uint8_t int2_single_tap          : 1;
00563     uint8_t int2_sleep_change        : 1;
00564 } lsm6dso_md2_cfg_t;
00565 
00566 #define LSM6DSO_I3C_BUS_AVB                  0x62U
00567 typedef struct {
00568     uint8_t pd_dis_int1              : 1;
00569     uint8_t not_used_01              : 2;
00570     uint8_t i3c_bus_avb_sel          : 2;
00571     uint8_t not_used_02              : 3;
00572 } lsm6dso_i3c_bus_avb_t;
00573 
00574 #define LSM6DSO_INTERNAL_FREQ_FINE           0x63U
00575 typedef struct {
00576     uint8_t freq_fine                : 8;
00577 } lsm6dso_internal_freq_fine_t;
00578 
00579 #define LSM6DSO_INT_OIS                      0x6FU
00580 typedef struct {
00581     uint8_t st_xl_ois                : 2;
00582     uint8_t not_used_01              : 3;
00583     uint8_t den_lh_ois               : 1;
00584     uint8_t lvl2_ois                 : 1;
00585     uint8_t int2_drdy_ois            : 1;
00586 } lsm6dso_int_ois_t;
00587 
00588 #define LSM6DSO_CTRL1_OIS                    0x70U
00589 typedef struct {
00590     uint8_t ois_en_spi2              : 1;
00591     uint8_t fs_g_ois                 : 3; /* fs_125_ois + fs[1:0]_g_ois */
00592     uint8_t mode4_en                 : 1;
00593     uint8_t sim_ois                  : 1;
00594     uint8_t lvl1_ois                  : 1;
00595     uint8_t not_used_01              : 1;
00596 } lsm6dso_ctrl1_ois_t;
00597 
00598 #define LSM6DSO_CTRL2_OIS                    0x71U
00599 typedef struct {
00600     uint8_t hp_en_ois                : 1;
00601     uint8_t ftype_ois                : 2;
00602     uint8_t not_used_01              : 1;
00603     uint8_t hpm_ois                  : 2;
00604     uint8_t not_used_02              : 2;
00605 } lsm6dso_ctrl2_ois_t;
00606 
00607 #define LSM6DSO_CTRL3_OIS                    0x72U
00608 typedef struct {
00609     uint8_t st_ois_clampdis          : 1;
00610     uint8_t st_ois                   : 2;
00611     uint8_t filter_xl_conf_ois       : 3;
00612     uint8_t fs_xl_ois                : 2;
00613 } lsm6dso_ctrl3_ois_t;
00614 
00615 #define LSM6DSO_X_OFS_USR                    0x73U
00616 #define LSM6DSO_Y_OFS_USR                    0x74U
00617 #define LSM6DSO_Z_OFS_USR                    0x75U
00618 #define LSM6DSO_FIFO_DATA_OUT_TAG            0x78U
00619 typedef struct {
00620     uint8_t tag_parity               : 1;
00621     uint8_t tag_cnt                  : 2;
00622     uint8_t tag_sensor               : 5;
00623 } lsm6dso_fifo_data_out_tag_t;
00624 
00625 #define LSM6DSO_FIFO_DATA_OUT_X_L            0x79U
00626 #define LSM6DSO_FIFO_DATA_OUT_X_H            0x7AU
00627 #define LSM6DSO_FIFO_DATA_OUT_Y_L            0x7BU
00628 #define LSM6DSO_FIFO_DATA_OUT_Y_H            0x7CU
00629 #define LSM6DSO_FIFO_DATA_OUT_Z_L            0x7DU
00630 #define LSM6DSO_FIFO_DATA_OUT_Z_H            0x7EU
00631 #define LSM6DSO_PAGE_SEL                     0x02U
00632 typedef struct {
00633     uint8_t not_used_01              : 4;
00634     uint8_t page_sel                 : 4;
00635 } lsm6dso_page_sel_t;
00636 
00637 #define LSM6DSO_EMB_FUNC_EN_A                0x04U
00638 typedef struct {
00639     uint8_t not_used_01              : 3;
00640     uint8_t pedo_en                  : 1;
00641     uint8_t tilt_en                  : 1;
00642     uint8_t sign_motion_en           : 1;
00643     uint8_t not_used_02              : 2;
00644 } lsm6dso_emb_func_en_a_t;
00645 
00646 #define LSM6DSO_EMB_FUNC_EN_B                0x05U
00647 typedef struct {
00648     uint8_t fsm_en                   : 1;
00649     uint8_t not_used_01              : 2;
00650     uint8_t fifo_compr_en            : 1;
00651     uint8_t pedo_adv_en              : 1;
00652     uint8_t not_used_02              : 3;
00653 } lsm6dso_emb_func_en_b_t;
00654 
00655 #define LSM6DSO_PAGE_ADDRESS                 0x08U
00656 typedef struct {
00657     uint8_t page_addr                : 8;
00658 } lsm6dso_page_address_t;
00659 
00660 #define LSM6DSO_PAGE_VALUE                   0x09U
00661 typedef struct {
00662     uint8_t page_value               : 8;
00663 } lsm6dso_page_value_t;
00664 
00665 #define LSM6DSO_EMB_FUNC_INT1                0x0AU
00666 typedef struct {
00667     uint8_t not_used_01              : 3;
00668     uint8_t int1_step_detector       : 1;
00669     uint8_t int1_tilt                : 1;
00670     uint8_t int1_sig_mot             : 1;
00671     uint8_t not_used_02              : 1;
00672     uint8_t int1_fsm_lc              : 1;
00673 } lsm6dso_emb_func_int1_t;
00674 
00675 #define LSM6DSO_FSM_INT1_A                   0x0BU
00676 typedef struct {
00677     uint8_t int1_fsm1                : 1;
00678     uint8_t int1_fsm2                : 1;
00679     uint8_t int1_fsm3                : 1;
00680     uint8_t int1_fsm4                : 1;
00681     uint8_t int1_fsm5                : 1;
00682     uint8_t int1_fsm6                : 1;
00683     uint8_t int1_fsm7                : 1;
00684     uint8_t int1_fsm8                : 1;
00685 } lsm6dso_fsm_int1_a_t;
00686 
00687 #define LSM6DSO_FSM_INT1_B                   0x0CU
00688 typedef struct {
00689     uint8_t int1_fsm9                : 1;
00690     uint8_t int1_fsm10               : 1;
00691     uint8_t int1_fsm11               : 1;
00692     uint8_t int1_fsm12               : 1;
00693     uint8_t int1_fsm13               : 1;
00694     uint8_t int1_fsm14               : 1;
00695     uint8_t int1_fsm15               : 1;
00696     uint8_t int1_fsm16               : 1;
00697 } lsm6dso_fsm_int1_b_t;
00698 
00699 #define LSM6DSO_EMB_FUNC_INT2                0x0EU
00700 typedef struct {
00701     uint8_t not_used_01              : 3;
00702     uint8_t int2_step_detector       : 1;
00703     uint8_t int2_tilt                : 1;
00704     uint8_t int2_sig_mot             : 1;
00705     uint8_t not_used_02              : 1;
00706     uint8_t int2_fsm_lc              : 1;
00707 } lsm6dso_emb_func_int2_t;
00708 
00709 #define LSM6DSO_FSM_INT2_A                   0x0FU
00710 typedef struct {
00711     uint8_t int2_fsm1                : 1;
00712     uint8_t int2_fsm2                : 1;
00713     uint8_t int2_fsm3                : 1;
00714     uint8_t int2_fsm4                : 1;
00715     uint8_t int2_fsm5                : 1;
00716     uint8_t int2_fsm6                : 1;
00717     uint8_t int2_fsm7                : 1;
00718     uint8_t int2_fsm8                : 1;
00719 } lsm6dso_fsm_int2_a_t;
00720 
00721 #define LSM6DSO_FSM_INT2_B                   0x10U
00722 typedef struct {
00723     uint8_t int2_fsm9                : 1;
00724     uint8_t int2_fsm10               : 1;
00725     uint8_t int2_fsm11               : 1;
00726     uint8_t int2_fsm12               : 1;
00727     uint8_t int2_fsm13               : 1;
00728     uint8_t int2_fsm14               : 1;
00729     uint8_t int2_fsm15               : 1;
00730     uint8_t int2_fsm16               : 1;
00731 } lsm6dso_fsm_int2_b_t;
00732 
00733 #define LSM6DSO_EMB_FUNC_STATUS              0x12U
00734 typedef struct {
00735     uint8_t not_used_01              : 3;
00736     uint8_t is_step_det              : 1;
00737     uint8_t is_tilt                  : 1;
00738     uint8_t is_sigmot                : 1;
00739     uint8_t not_used_02              : 1;
00740     uint8_t is_fsm_lc                : 1;
00741 } lsm6dso_emb_func_status_t;
00742 
00743 #define LSM6DSO_FSM_STATUS_A                 0x13U
00744 typedef struct {
00745     uint8_t is_fsm1                  : 1;
00746     uint8_t is_fsm2                  : 1;
00747     uint8_t is_fsm3                  : 1;
00748     uint8_t is_fsm4                  : 1;
00749     uint8_t is_fsm5                  : 1;
00750     uint8_t is_fsm6                  : 1;
00751     uint8_t is_fsm7                  : 1;
00752     uint8_t is_fsm8                  : 1;
00753 } lsm6dso_fsm_status_a_t;
00754 
00755 #define LSM6DSO_FSM_STATUS_B                 0x14U
00756 typedef struct {
00757     uint8_t is_fsm9                  : 1;
00758     uint8_t is_fsm10                 : 1;
00759     uint8_t is_fsm11                 : 1;
00760     uint8_t is_fsm12                 : 1;
00761     uint8_t is_fsm13                 : 1;
00762     uint8_t is_fsm14                 : 1;
00763     uint8_t is_fsm15                 : 1;
00764     uint8_t is_fsm16                 : 1;
00765 } lsm6dso_fsm_status_b_t;
00766 
00767 #define LSM6DSO_PAGE_RW                      0x17U
00768 typedef struct {
00769     uint8_t not_used_01              : 5;
00770     uint8_t page_rw                  : 2;  /* page_write + page_read */
00771     uint8_t emb_func_lir             : 1;
00772 } lsm6dso_page_rw_t;
00773 
00774 #define LSM6DSO_EMB_FUNC_FIFO_CFG                  0x44U
00775 typedef struct {
00776     uint8_t not_used_00              : 6;
00777     uint8_t pedo_fifo_en             : 1;
00778     uint8_t not_used_01              : 1;
00779 } lsm6dso_emb_func_fifo_cfg_t;
00780 
00781 #define LSM6DSO_FSM_ENABLE_A                 0x46U
00782 typedef struct {
00783     uint8_t fsm1_en                  : 1;
00784     uint8_t fsm2_en                  : 1;
00785     uint8_t fsm3_en                  : 1;
00786     uint8_t fsm4_en                  : 1;
00787     uint8_t fsm5_en                  : 1;
00788     uint8_t fsm6_en                  : 1;
00789     uint8_t fsm7_en                  : 1;
00790     uint8_t fsm8_en                  : 1;
00791 } lsm6dso_fsm_enable_a_t;
00792 
00793 #define LSM6DSO_FSM_ENABLE_B                 0x47U
00794 typedef struct {
00795     uint8_t fsm9_en                  : 1;
00796     uint8_t fsm10_en                 : 1;
00797     uint8_t fsm11_en                 : 1;
00798     uint8_t fsm12_en                 : 1;
00799     uint8_t fsm13_en                 : 1;
00800     uint8_t fsm14_en                 : 1;
00801     uint8_t fsm15_en                 : 1;
00802     uint8_t fsm16_en                 : 1;
00803 } lsm6dso_fsm_enable_b_t;
00804 
00805 #define LSM6DSO_FSM_LONG_COUNTER_L           0x48U
00806 #define LSM6DSO_FSM_LONG_COUNTER_H           0x49U
00807 #define LSM6DSO_FSM_LONG_COUNTER_CLEAR       0x4AU
00808 typedef struct {
00809     uint8_t fsm_lc_clr               : 2;  /* fsm_lc_cleared + fsm_lc_clear */
00810     uint8_t not_used_01              : 6;
00811 } lsm6dso_fsm_long_counter_clear_t;
00812 
00813 #define LSM6DSO_FSM_OUTS1                    0x4CU
00814 typedef struct {
00815     uint8_t n_v                      : 1;
00816     uint8_t p_v                      : 1;
00817     uint8_t n_z                      : 1;
00818     uint8_t p_z                      : 1;
00819     uint8_t n_y                      : 1;
00820     uint8_t p_y                      : 1;
00821     uint8_t n_x                      : 1;
00822     uint8_t p_x                      : 1;
00823 } lsm6dso_fsm_outs1_t;
00824 
00825 #define LSM6DSO_FSM_OUTS2                    0x4DU
00826 typedef struct {
00827     uint8_t n_v                      : 1;
00828     uint8_t p_v                      : 1;
00829     uint8_t n_z                      : 1;
00830     uint8_t p_z                      : 1;
00831     uint8_t n_y                      : 1;
00832     uint8_t p_y                      : 1;
00833     uint8_t n_x                      : 1;
00834     uint8_t p_x                      : 1;
00835 } lsm6dso_fsm_outs2_t;
00836 
00837 #define LSM6DSO_FSM_OUTS3                    0x4EU
00838 typedef struct {
00839     uint8_t n_v                      : 1;
00840     uint8_t p_v                      : 1;
00841     uint8_t n_z                      : 1;
00842     uint8_t p_z                      : 1;
00843     uint8_t n_y                      : 1;
00844     uint8_t p_y                      : 1;
00845     uint8_t n_x                      : 1;
00846     uint8_t p_x                      : 1;
00847 } lsm6dso_fsm_outs3_t;
00848 
00849 #define LSM6DSO_FSM_OUTS4                    0x4FU
00850 typedef struct {
00851     uint8_t n_v                      : 1;
00852     uint8_t p_v                      : 1;
00853     uint8_t n_z                      : 1;
00854     uint8_t p_z                      : 1;
00855     uint8_t n_y                      : 1;
00856     uint8_t p_y                      : 1;
00857     uint8_t n_x                      : 1;
00858     uint8_t p_x                      : 1;
00859 } lsm6dso_fsm_outs4_t;
00860 
00861 #define LSM6DSO_FSM_OUTS5                    0x50U
00862 typedef struct {
00863     uint8_t n_v                      : 1;
00864     uint8_t p_v                      : 1;
00865     uint8_t n_z                      : 1;
00866     uint8_t p_z                      : 1;
00867     uint8_t n_y                      : 1;
00868     uint8_t p_y                      : 1;
00869     uint8_t n_x                      : 1;
00870     uint8_t p_x                      : 1;
00871 } lsm6dso_fsm_outs5_t;
00872 
00873 #define LSM6DSO_FSM_OUTS6                    0x51U
00874 typedef struct {
00875     uint8_t n_v                      : 1;
00876     uint8_t p_v                      : 1;
00877     uint8_t n_z                      : 1;
00878     uint8_t p_z                      : 1;
00879     uint8_t n_y                      : 1;
00880     uint8_t p_y                      : 1;
00881     uint8_t n_x                      : 1;
00882     uint8_t p_x                      : 1;
00883 } lsm6dso_fsm_outs6_t;
00884 
00885 #define LSM6DSO_FSM_OUTS7                    0x52U
00886 typedef struct {
00887     uint8_t n_v                      : 1;
00888     uint8_t p_v                      : 1;
00889     uint8_t n_z                      : 1;
00890     uint8_t p_z                      : 1;
00891     uint8_t n_y                      : 1;
00892     uint8_t p_y                      : 1;
00893     uint8_t n_x                      : 1;
00894     uint8_t p_x                      : 1;
00895 } lsm6dso_fsm_outs7_t;
00896 
00897 #define LSM6DSO_FSM_OUTS8                    0x53U
00898 typedef struct {
00899     uint8_t n_v                      : 1;
00900     uint8_t p_v                      : 1;
00901     uint8_t n_z                      : 1;
00902     uint8_t p_z                      : 1;
00903     uint8_t n_y                      : 1;
00904     uint8_t p_y                      : 1;
00905     uint8_t n_x                      : 1;
00906     uint8_t p_x                      : 1;
00907 } lsm6dso_fsm_outs8_t;
00908 
00909 #define LSM6DSO_FSM_OUTS9                    0x54U
00910 typedef struct {
00911     uint8_t n_v                      : 1;
00912     uint8_t p_v                      : 1;
00913     uint8_t n_z                      : 1;
00914     uint8_t p_z                      : 1;
00915     uint8_t n_y                      : 1;
00916     uint8_t p_y                      : 1;
00917     uint8_t n_x                      : 1;
00918     uint8_t p_x                      : 1;
00919 } lsm6dso_fsm_outs9_t;
00920 
00921 #define LSM6DSO_FSM_OUTS10                   0x55U
00922 typedef struct {
00923     uint8_t n_v                      : 1;
00924     uint8_t p_v                      : 1;
00925     uint8_t n_z                      : 1;
00926     uint8_t p_z                      : 1;
00927     uint8_t n_y                      : 1;
00928     uint8_t p_y                      : 1;
00929     uint8_t n_x                      : 1;
00930     uint8_t p_x                      : 1;
00931 } lsm6dso_fsm_outs10_t;
00932 
00933 #define LSM6DSO_FSM_OUTS11                   0x56U
00934 typedef struct {
00935     uint8_t n_v                      : 1;
00936     uint8_t p_v                      : 1;
00937     uint8_t n_z                      : 1;
00938     uint8_t p_z                      : 1;
00939     uint8_t n_y                      : 1;
00940     uint8_t p_y                      : 1;
00941     uint8_t n_x                      : 1;
00942     uint8_t p_x                      : 1;
00943 } lsm6dso_fsm_outs11_t;
00944 
00945 #define LSM6DSO_FSM_OUTS12                   0x57U
00946 typedef struct {
00947     uint8_t n_v                      : 1;
00948     uint8_t p_v                      : 1;
00949     uint8_t n_z                      : 1;
00950     uint8_t p_z                      : 1;
00951     uint8_t n_y                      : 1;
00952     uint8_t p_y                      : 1;
00953     uint8_t n_x                      : 1;
00954     uint8_t p_x                      : 1;
00955 } lsm6dso_fsm_outs12_t;
00956 
00957 #define LSM6DSO_FSM_OUTS13                   0x58U
00958 typedef struct {
00959     uint8_t n_v                      : 1;
00960     uint8_t p_v                      : 1;
00961     uint8_t n_z                      : 1;
00962     uint8_t p_z                      : 1;
00963     uint8_t n_y                      : 1;
00964     uint8_t p_y                      : 1;
00965     uint8_t n_x                      : 1;
00966     uint8_t p_x                      : 1;
00967 } lsm6dso_fsm_outs13_t;
00968 
00969 #define LSM6DSO_FSM_OUTS14                   0x59U
00970 typedef struct {
00971     uint8_t n_v                      : 1;
00972     uint8_t p_v                      : 1;
00973     uint8_t n_z                      : 1;
00974     uint8_t p_z                      : 1;
00975     uint8_t n_y                      : 1;
00976     uint8_t p_y                      : 1;
00977     uint8_t n_x                      : 1;
00978     uint8_t p_x                      : 1;
00979 } lsm6dso_fsm_outs14_t;
00980 
00981 #define LSM6DSO_FSM_OUTS15                   0x5AU
00982 typedef struct {
00983     uint8_t n_v                      : 1;
00984     uint8_t p_v                      : 1;
00985     uint8_t n_z                      : 1;
00986     uint8_t p_z                      : 1;
00987     uint8_t n_y                      : 1;
00988     uint8_t p_y                      : 1;
00989     uint8_t n_x                      : 1;
00990     uint8_t p_x                      : 1;
00991 } lsm6dso_fsm_outs15_t;
00992 
00993 #define LSM6DSO_FSM_OUTS16                   0x5BU
00994 typedef struct {
00995     uint8_t n_v                      : 1;
00996     uint8_t p_v                      : 1;
00997     uint8_t n_z                      : 1;
00998     uint8_t p_z                      : 1;
00999     uint8_t n_y                      : 1;
01000     uint8_t p_y                      : 1;
01001     uint8_t n_x                      : 1;
01002     uint8_t p_x                      : 1;
01003 } lsm6dso_fsm_outs16_t;
01004 
01005 #define LSM6DSO_EMB_FUNC_ODR_CFG_B           0x5FU
01006 typedef struct {
01007     uint8_t not_used_01              : 3;
01008     uint8_t fsm_odr                  : 2;
01009     uint8_t not_used_02              : 3;
01010 } lsm6dso_emb_func_odr_cfg_b_t;
01011 
01012 #define LSM6DSO_STEP_COUNTER_L               0x62U
01013 #define LSM6DSO_STEP_COUNTER_H               0x63U
01014 #define LSM6DSO_EMB_FUNC_SRC                 0x64U
01015 typedef struct {
01016     uint8_t not_used_01              : 2;
01017     uint8_t stepcounter_bit_set      : 1;
01018     uint8_t step_overflow            : 1;
01019     uint8_t step_count_delta_ia      : 1;
01020     uint8_t step_detected            : 1;
01021     uint8_t not_used_02              : 1;
01022     uint8_t pedo_rst_step            : 1;
01023 } lsm6dso_emb_func_src_t;
01024 
01025 #define LSM6DSO_EMB_FUNC_INIT_A              0x66U
01026 typedef struct {
01027     uint8_t not_used_01               : 3;
01028     uint8_t step_det_init             : 1;
01029     uint8_t tilt_init                 : 1;
01030     uint8_t sig_mot_init              : 1;
01031     uint8_t not_used_02               : 2;
01032 } lsm6dso_emb_func_init_a_t;
01033 
01034 #define LSM6DSO_EMB_FUNC_INIT_B              0x67U
01035 typedef struct {
01036     uint8_t fsm_init                 : 1;
01037     uint8_t not_used_01              : 2;
01038     uint8_t fifo_compr_init          : 1;
01039     uint8_t not_used_02              : 4;
01040 } lsm6dso_emb_func_init_b_t;
01041 
01042 #define LSM6DSO_MAG_SENSITIVITY_L            0xBAU
01043 #define LSM6DSO_MAG_SENSITIVITY_H            0xBBU
01044 #define LSM6DSO_MAG_OFFX_L                   0xC0U
01045 #define LSM6DSO_MAG_OFFX_H                   0xC1U
01046 #define LSM6DSO_MAG_OFFY_L                   0xC2U
01047 #define LSM6DSO_MAG_OFFY_H                   0xC3U
01048 #define LSM6DSO_MAG_OFFZ_L                   0xC4U
01049 #define LSM6DSO_MAG_OFFZ_H                   0xC5U
01050 #define LSM6DSO_MAG_SI_XX_L                  0xC6U
01051 #define LSM6DSO_MAG_SI_XX_H                  0xC7U
01052 #define LSM6DSO_MAG_SI_XY_L                  0xC8U
01053 #define LSM6DSO_MAG_SI_XY_H                  0xC9U
01054 #define LSM6DSO_MAG_SI_XZ_L                  0xCAU
01055 #define LSM6DSO_MAG_SI_XZ_H                  0xCBU
01056 #define LSM6DSO_MAG_SI_YY_L                  0xCCU
01057 #define LSM6DSO_MAG_SI_YY_H                  0xCDU
01058 #define LSM6DSO_MAG_SI_YZ_L                  0xCEU
01059 #define LSM6DSO_MAG_SI_YZ_H                  0xCFU
01060 #define LSM6DSO_MAG_SI_ZZ_L                  0xD0U
01061 #define LSM6DSO_MAG_SI_ZZ_H                  0xD1U
01062 #define LSM6DSO_MAG_CFG_A                    0xD4U
01063 typedef struct {
01064     uint8_t mag_z_axis               : 3;
01065     uint8_t not_used_01              : 1;
01066     uint8_t mag_y_axis               : 3;
01067     uint8_t not_used_02              : 1;
01068 } lsm6dso_mag_cfg_a_t;
01069 
01070 #define LSM6DSO_MAG_CFG_B                    0xD5U
01071 typedef struct {
01072     uint8_t mag_x_axis               : 3;
01073     uint8_t not_used_01              : 5;
01074 } lsm6dso_mag_cfg_b_t;
01075 
01076 #define LSM6DSO_FSM_LC_TIMEOUT_L             0x17AU
01077 #define LSM6DSO_FSM_LC_TIMEOUT_H             0x17BU
01078 #define LSM6DSO_FSM_PROGRAMS                 0x17CU
01079 #define LSM6DSO_FSM_START_ADD_L              0x17EU
01080 #define LSM6DSO_FSM_START_ADD_H              0x17FU
01081 #define LSM6DSO_PEDO_CMD_REG                 0x183U
01082 typedef struct {
01083     uint8_t ad_det_en                : 1;
01084     uint8_t not_used_01              : 1;
01085     uint8_t fp_rejection_en          : 1;
01086     uint8_t carry_count_en           : 1;
01087     uint8_t not_used_02              : 4;
01088 } lsm6dso_pedo_cmd_reg_t;
01089 
01090 #define LSM6DSO_PEDO_DEB_STEPS_CONF          0x184U
01091 #define LSM6DSO_PEDO_SC_DELTAT_L             0x1D0U
01092 #define LSM6DSO_PEDO_SC_DELTAT_H             0x1D1U
01093 #define LSM6DSO_SENSOR_HUB_1                 0x02U
01094 typedef struct {
01095     uint8_t bit0                    : 1;
01096     uint8_t bit1                    : 1;
01097     uint8_t bit2                    : 1;
01098     uint8_t bit3                    : 1;
01099     uint8_t bit4                    : 1;
01100     uint8_t bit5                    : 1;
01101     uint8_t bit6                    : 1;
01102     uint8_t bit7                    : 1;
01103 } lsm6dso_sensor_hub_1_t;
01104 
01105 #define LSM6DSO_SENSOR_HUB_2                 0x03U
01106 typedef struct {
01107     uint8_t bit0                    : 1;
01108     uint8_t bit1                    : 1;
01109     uint8_t bit2                    : 1;
01110     uint8_t bit3                    : 1;
01111     uint8_t bit4                    : 1;
01112     uint8_t bit5                    : 1;
01113     uint8_t bit6                    : 1;
01114     uint8_t bit7                    : 1;
01115 } lsm6dso_sensor_hub_2_t;
01116 
01117 #define LSM6DSO_SENSOR_HUB_3                 0x04U
01118 typedef struct {
01119     uint8_t bit0                    : 1;
01120     uint8_t bit1                    : 1;
01121     uint8_t bit2                    : 1;
01122     uint8_t bit3                    : 1;
01123     uint8_t bit4                    : 1;
01124     uint8_t bit5                    : 1;
01125     uint8_t bit6                    : 1;
01126     uint8_t bit7                    : 1;
01127 } lsm6dso_sensor_hub_3_t;
01128 
01129 #define LSM6DSO_SENSOR_HUB_4                 0x05U
01130 typedef struct {
01131     uint8_t bit0                    : 1;
01132     uint8_t bit1                    : 1;
01133     uint8_t bit2                    : 1;
01134     uint8_t bit3                    : 1;
01135     uint8_t bit4                    : 1;
01136     uint8_t bit5                    : 1;
01137     uint8_t bit6                    : 1;
01138     uint8_t bit7                    : 1;
01139 } lsm6dso_sensor_hub_4_t;
01140 
01141 #define LSM6DSO_SENSOR_HUB_5                 0x06U
01142 typedef struct {
01143     uint8_t bit0                    : 1;
01144     uint8_t bit1                    : 1;
01145     uint8_t bit2                    : 1;
01146     uint8_t bit3                    : 1;
01147     uint8_t bit4                    : 1;
01148     uint8_t bit5                    : 1;
01149     uint8_t bit6                    : 1;
01150     uint8_t bit7                    : 1;
01151 } lsm6dso_sensor_hub_5_t;
01152 
01153 #define LSM6DSO_SENSOR_HUB_6                 0x07U
01154 typedef struct {
01155     uint8_t bit0                    : 1;
01156     uint8_t bit1                    : 1;
01157     uint8_t bit2                    : 1;
01158     uint8_t bit3                    : 1;
01159     uint8_t bit4                    : 1;
01160     uint8_t bit5                    : 1;
01161     uint8_t bit6                    : 1;
01162     uint8_t bit7                    : 1;
01163 } lsm6dso_sensor_hub_6_t;
01164 
01165 #define LSM6DSO_SENSOR_HUB_7                 0x08U
01166 typedef struct {
01167     uint8_t bit0                    : 1;
01168     uint8_t bit1                    : 1;
01169     uint8_t bit2                    : 1;
01170     uint8_t bit3                    : 1;
01171     uint8_t bit4                    : 1;
01172     uint8_t bit5                    : 1;
01173     uint8_t bit6                    : 1;
01174     uint8_t bit7                    : 1;
01175 } lsm6dso_sensor_hub_7_t;
01176 
01177 #define LSM6DSO_SENSOR_HUB_8                 0x09U
01178 typedef struct {
01179     uint8_t bit0                    : 1;
01180     uint8_t bit1                    : 1;
01181     uint8_t bit2                    : 1;
01182     uint8_t bit3                    : 1;
01183     uint8_t bit4                    : 1;
01184     uint8_t bit5                    : 1;
01185     uint8_t bit6                    : 1;
01186     uint8_t bit7                    : 1;
01187 } lsm6dso_sensor_hub_8_t;
01188 
01189 #define LSM6DSO_SENSOR_HUB_9                 0x0AU
01190 typedef struct {
01191     uint8_t bit0                    : 1;
01192     uint8_t bit1                    : 1;
01193     uint8_t bit2                    : 1;
01194     uint8_t bit3                    : 1;
01195     uint8_t bit4                    : 1;
01196     uint8_t bit5                    : 1;
01197     uint8_t bit6                    : 1;
01198     uint8_t bit7                    : 1;
01199 } lsm6dso_sensor_hub_9_t;
01200 
01201 #define LSM6DSO_SENSOR_HUB_10                0x0BU
01202 typedef struct {
01203     uint8_t bit0                    : 1;
01204     uint8_t bit1                    : 1;
01205     uint8_t bit2                    : 1;
01206     uint8_t bit3                    : 1;
01207     uint8_t bit4                    : 1;
01208     uint8_t bit5                    : 1;
01209     uint8_t bit6                    : 1;
01210     uint8_t bit7                    : 1;
01211 } lsm6dso_sensor_hub_10_t;
01212 
01213 #define LSM6DSO_SENSOR_HUB_11                0x0CU
01214 typedef struct {
01215     uint8_t bit0                    : 1;
01216     uint8_t bit1                    : 1;
01217     uint8_t bit2                    : 1;
01218     uint8_t bit3                    : 1;
01219     uint8_t bit4                    : 1;
01220     uint8_t bit5                    : 1;
01221     uint8_t bit6                    : 1;
01222     uint8_t bit7                    : 1;
01223 } lsm6dso_sensor_hub_11_t;
01224 
01225 #define LSM6DSO_SENSOR_HUB_12                0x0DU
01226 typedef struct {
01227     uint8_t bit0                    : 1;
01228     uint8_t bit1                    : 1;
01229     uint8_t bit2                    : 1;
01230     uint8_t bit3                    : 1;
01231     uint8_t bit4                    : 1;
01232     uint8_t bit5                    : 1;
01233     uint8_t bit6                    : 1;
01234     uint8_t bit7                    : 1;
01235 } lsm6dso_sensor_hub_12_t;
01236 
01237 #define LSM6DSO_SENSOR_HUB_13                0x0EU
01238 typedef struct {
01239     uint8_t bit0                    : 1;
01240     uint8_t bit1                    : 1;
01241     uint8_t bit2                    : 1;
01242     uint8_t bit3                    : 1;
01243     uint8_t bit4                    : 1;
01244     uint8_t bit5                    : 1;
01245     uint8_t bit6                    : 1;
01246     uint8_t bit7                    : 1;
01247 } lsm6dso_sensor_hub_13_t;
01248 
01249 #define LSM6DSO_SENSOR_HUB_14                0x0FU
01250 typedef struct {
01251     uint8_t bit0                    : 1;
01252     uint8_t bit1                    : 1;
01253     uint8_t bit2                    : 1;
01254     uint8_t bit3                    : 1;
01255     uint8_t bit4                    : 1;
01256     uint8_t bit5                    : 1;
01257     uint8_t bit6                    : 1;
01258     uint8_t bit7                    : 1;
01259 } lsm6dso_sensor_hub_14_t;
01260 
01261 #define LSM6DSO_SENSOR_HUB_15                0x10U
01262 typedef struct {
01263     uint8_t bit0                    : 1;
01264     uint8_t bit1                    : 1;
01265     uint8_t bit2                    : 1;
01266     uint8_t bit3                    : 1;
01267     uint8_t bit4                    : 1;
01268     uint8_t bit5                    : 1;
01269     uint8_t bit6                    : 1;
01270     uint8_t bit7                    : 1;
01271 } lsm6dso_sensor_hub_15_t;
01272 
01273 #define LSM6DSO_SENSOR_HUB_16                0x11U
01274 typedef struct {
01275     uint8_t bit0                    : 1;
01276     uint8_t bit1                    : 1;
01277     uint8_t bit2                    : 1;
01278     uint8_t bit3                    : 1;
01279     uint8_t bit4                    : 1;
01280     uint8_t bit5                    : 1;
01281     uint8_t bit6                    : 1;
01282     uint8_t bit7                    : 1;
01283 } lsm6dso_sensor_hub_16_t;
01284 
01285 #define LSM6DSO_SENSOR_HUB_17                0x12U
01286 typedef struct {
01287     uint8_t bit0                    : 1;
01288     uint8_t bit1                    : 1;
01289     uint8_t bit2                    : 1;
01290     uint8_t bit3                    : 1;
01291     uint8_t bit4                    : 1;
01292     uint8_t bit5                    : 1;
01293     uint8_t bit6                    : 1;
01294     uint8_t bit7                    : 1;
01295 } lsm6dso_sensor_hub_17_t;
01296 
01297 #define LSM6DSO_SENSOR_HUB_18                0x13U
01298 typedef struct {
01299     uint8_t bit0                    : 1;
01300     uint8_t bit1                    : 1;
01301     uint8_t bit2                    : 1;
01302     uint8_t bit3                    : 1;
01303     uint8_t bit4                    : 1;
01304     uint8_t bit5                    : 1;
01305     uint8_t bit6                    : 1;
01306     uint8_t bit7                    : 1;
01307 } lsm6dso_sensor_hub_18_t;
01308 
01309 #define LSM6DSO_MASTER_CONFIG                0x14U
01310 typedef struct {
01311     uint8_t aux_sens_on              : 2;
01312     uint8_t master_on                : 1;
01313     uint8_t shub_pu_en               : 1;
01314     uint8_t pass_through_mode        : 1;
01315     uint8_t start_config             : 1;
01316     uint8_t write_once               : 1;
01317     uint8_t rst_master_regs          : 1;
01318 } lsm6dso_master_config_t;
01319 
01320 #define LSM6DSO_SLV0_ADD                     0x15U
01321 typedef struct {
01322     uint8_t rw_0                     : 1;
01323     uint8_t slave0                   : 7;
01324 } lsm6dso_slv0_add_t;
01325 
01326 #define LSM6DSO_SLV0_SUBADD                  0x16U
01327 typedef struct {
01328     uint8_t slave0_reg               : 8;
01329 } lsm6dso_slv0_subadd_t;
01330 
01331 #define LSM6DSO_SLV0_CONFIG                  0x17U
01332 typedef struct {
01333     uint8_t slave0_numop             : 3;
01334     uint8_t batch_ext_sens_0_en      : 1;
01335     uint8_t not_used_01              : 2;
01336     uint8_t shub_odr                 : 2;
01337 } lsm6dso_slv0_config_t;
01338 
01339 #define LSM6DSO_SLV1_ADD                     0x18U
01340 typedef struct {
01341     uint8_t r_1                      : 1;
01342     uint8_t slave1_add               : 7;
01343 } lsm6dso_slv1_add_t;
01344 
01345 #define LSM6DSO_SLV1_SUBADD                  0x19U
01346 typedef struct {
01347     uint8_t slave1_reg               : 8;
01348 } lsm6dso_slv1_subadd_t;
01349 
01350 #define LSM6DSO_SLV1_CONFIG                  0x1AU
01351 typedef struct {
01352     uint8_t slave1_numop             : 3;
01353     uint8_t batch_ext_sens_1_en      : 1;
01354     uint8_t not_used_01              : 4;
01355 } lsm6dso_slv1_config_t;
01356 
01357 #define LSM6DSO_SLV2_ADD                     0x1BU
01358 typedef struct {
01359     uint8_t r_2                      : 1;
01360     uint8_t slave2_add               : 7;
01361 } lsm6dso_slv2_add_t;
01362 
01363 #define LSM6DSO_SLV2_SUBADD                  0x1CU
01364 typedef struct {
01365     uint8_t slave2_reg               : 8;
01366 } lsm6dso_slv2_subadd_t;
01367 
01368 #define LSM6DSO_SLV2_CONFIG                  0x1DU
01369 typedef struct {
01370     uint8_t slave2_numop             : 3;
01371     uint8_t batch_ext_sens_2_en      : 1;
01372     uint8_t not_used_01              : 4;
01373 } lsm6dso_slv2_config_t;
01374 
01375 #define LSM6DSO_SLV3_ADD                     0x1EU
01376 typedef struct {
01377     uint8_t r_3                      : 1;
01378     uint8_t slave3_add               : 7;
01379 } lsm6dso_slv3_add_t;
01380 
01381 #define LSM6DSO_SLV3_SUBADD                  0x1FU
01382 typedef struct {
01383     uint8_t slave3_reg               : 8;
01384 } lsm6dso_slv3_subadd_t;
01385 
01386 #define LSM6DSO_SLV3_CONFIG                  0x20U
01387 typedef struct {
01388     uint8_t slave3_numop             : 3;
01389     uint8_t  batch_ext_sens_3_en     : 1;
01390     uint8_t not_used_01              : 4;
01391 } lsm6dso_slv3_config_t;
01392 
01393 #define LSM6DSO_DATAWRITE_SLV0               0x21U
01394 typedef struct {
01395     uint8_t slave0_dataw             : 8;
01396 } lsm6dso_datawrite_src_mode_sub_slv0_t;
01397 
01398 #define LSM6DSO_STATUS_MASTER                0x22U
01399 typedef struct {
01400     uint8_t sens_hub_endop           : 1;
01401     uint8_t not_used_01              : 2;
01402     uint8_t slave0_nack              : 1;
01403     uint8_t slave1_nack              : 1;
01404     uint8_t slave2_nack              : 1;
01405     uint8_t slave3_nack              : 1;
01406     uint8_t wr_once_done             : 1;
01407 } lsm6dso_status_master_t;
01408 
01409 #define LSM6DSO_START_FSM_ADD                0x0400U
01410 
01411 /**
01412   * @defgroup LSM6DSO_Register_Union
01413   * @brief    This union group all the registers that has a bitfield
01414   *           description.
01415   *           This union is useful but not need by the driver.
01416   *
01417   *           REMOVING this union you are compliant with:
01418   *           MISRA-C 2012 [Rule 19.2] -> " Union are not allowed "
01419   *
01420   * @{
01421   *
01422   */
01423 typedef union {
01424     lsm6dso_func_cfg_access_t               func_cfg_access;
01425     lsm6dso_pin_ctrl_t                      pin_ctrl;
01426     lsm6dso_fifo_ctrl1_t                    fifo_ctrl1;
01427     lsm6dso_fifo_ctrl2_t                    fifo_ctrl2;
01428     lsm6dso_fifo_ctrl3_t                    fifo_ctrl3;
01429     lsm6dso_fifo_ctrl4_t                    fifo_ctrl4;
01430     lsm6dso_counter_bdr_reg1_t              counter_bdr_reg1;
01431     lsm6dso_counter_bdr_reg2_t              counter_bdr_reg2;
01432     lsm6dso_int1_ctrl_t                     int1_ctrl;
01433     lsm6dso_int2_ctrl_t                     int2_ctrl;
01434     lsm6dso_ctrl1_xl_t                      ctrl1_xl;
01435     lsm6dso_ctrl2_g_t                       ctrl2_g;
01436     lsm6dso_ctrl3_c_t                       ctrl3_c;
01437     lsm6dso_ctrl4_c_t                       ctrl4_c;
01438     lsm6dso_ctrl5_c_t                       ctrl5_c;
01439     lsm6dso_ctrl6_c_t                       ctrl6_c;
01440     lsm6dso_ctrl7_g_t                       ctrl7_g;
01441     lsm6dso_ctrl8_xl_t                      ctrl8_xl;
01442     lsm6dso_ctrl9_xl_t                      ctrl9_xl;
01443     lsm6dso_ctrl10_c_t                      ctrl10_c;
01444     lsm6dso_all_int_src_t                   all_int_src;
01445     lsm6dso_wake_up_src_t                   wake_up_src;
01446     lsm6dso_tap_src_t                       tap_src;
01447     lsm6dso_d6d_src_t                       d6d_src;
01448     lsm6dso_status_reg_t                    status_reg;
01449     lsm6dso_status_spiaux_t                 status_spiaux;
01450     lsm6dso_fifo_status1_t                  fifo_status1;
01451     lsm6dso_fifo_status2_t                  fifo_status2;
01452     lsm6dso_tap_cfg0_t                      tap_cfg0;
01453     lsm6dso_tap_cfg1_t                      tap_cfg1;
01454     lsm6dso_tap_cfg2_t                      tap_cfg2;
01455     lsm6dso_tap_ths_6d_t                    tap_ths_6d;
01456     lsm6dso_int_dur2_t                      int_dur2;
01457     lsm6dso_wake_up_ths_t                   wake_up_ths;
01458     lsm6dso_wake_up_dur_t                   wake_up_dur;
01459     lsm6dso_free_fall_t                     free_fall;
01460     lsm6dso_md1_cfg_t                       md1_cfg;
01461     lsm6dso_md2_cfg_t                       md2_cfg;
01462     lsm6dso_i3c_bus_avb_t                   i3c_bus_avb;
01463     lsm6dso_internal_freq_fine_t            internal_freq_fine;
01464     lsm6dso_int_ois_t                       int_ois;
01465     lsm6dso_ctrl1_ois_t                     ctrl1_ois;
01466     lsm6dso_ctrl2_ois_t                     ctrl2_ois;
01467     lsm6dso_ctrl3_ois_t                     ctrl3_ois;
01468     lsm6dso_fifo_data_out_tag_t             fifo_data_out_tag;
01469     lsm6dso_page_sel_t                      page_sel;
01470     lsm6dso_emb_func_en_a_t                 emb_func_en_a;
01471     lsm6dso_emb_func_en_b_t                 emb_func_en_b;
01472     lsm6dso_page_address_t                  page_address;
01473     lsm6dso_page_value_t                    page_value;
01474     lsm6dso_emb_func_int1_t                 emb_func_int1;
01475     lsm6dso_fsm_int1_a_t                    fsm_int1_a;
01476     lsm6dso_fsm_int1_b_t                    fsm_int1_b;
01477     lsm6dso_emb_func_int2_t                 emb_func_int2;
01478     lsm6dso_fsm_int2_a_t                    fsm_int2_a;
01479     lsm6dso_fsm_int2_b_t                    fsm_int2_b;
01480     lsm6dso_emb_func_status_t               emb_func_status;
01481     lsm6dso_fsm_status_a_t                  fsm_status_a;
01482     lsm6dso_fsm_status_b_t                  fsm_status_b;
01483     lsm6dso_page_rw_t                       page_rw;
01484     lsm6dso_emb_func_fifo_cfg_t               emb_func_fifo_cfg;
01485     lsm6dso_fsm_enable_a_t                  fsm_enable_a;
01486     lsm6dso_fsm_enable_b_t                  fsm_enable_b;
01487     lsm6dso_fsm_long_counter_clear_t        fsm_long_counter_clear;
01488     lsm6dso_fsm_outs1_t                     fsm_outs1;
01489     lsm6dso_fsm_outs2_t                     fsm_outs2;
01490     lsm6dso_fsm_outs3_t                     fsm_outs3;
01491     lsm6dso_fsm_outs4_t                     fsm_outs4;
01492     lsm6dso_fsm_outs5_t                     fsm_outs5;
01493     lsm6dso_fsm_outs6_t                     fsm_outs6;
01494     lsm6dso_fsm_outs7_t                     fsm_outs7;
01495     lsm6dso_fsm_outs8_t                     fsm_outs8;
01496     lsm6dso_fsm_outs9_t                     fsm_outs9;
01497     lsm6dso_fsm_outs10_t                    fsm_outs10;
01498     lsm6dso_fsm_outs11_t                    fsm_outs11;
01499     lsm6dso_fsm_outs12_t                    fsm_outs12;
01500     lsm6dso_fsm_outs13_t                    fsm_outs13;
01501     lsm6dso_fsm_outs14_t                    fsm_outs14;
01502     lsm6dso_fsm_outs15_t                    fsm_outs15;
01503     lsm6dso_fsm_outs16_t                    fsm_outs16;
01504     lsm6dso_emb_func_odr_cfg_b_t            emb_func_odr_cfg_b;
01505     lsm6dso_emb_func_src_t                  emb_func_src;
01506     lsm6dso_emb_func_init_a_t               emb_func_init_a;
01507     lsm6dso_emb_func_init_b_t               emb_func_init_b;
01508     lsm6dso_mag_cfg_a_t                     mag_cfg_a;
01509     lsm6dso_mag_cfg_b_t                     mag_cfg_b;
01510     lsm6dso_pedo_cmd_reg_t                  pedo_cmd_reg;
01511     lsm6dso_sensor_hub_1_t                  sensor_hub_1;
01512     lsm6dso_sensor_hub_2_t                  sensor_hub_2;
01513     lsm6dso_sensor_hub_3_t                  sensor_hub_3;
01514     lsm6dso_sensor_hub_4_t                  sensor_hub_4;
01515     lsm6dso_sensor_hub_5_t                  sensor_hub_5;
01516     lsm6dso_sensor_hub_6_t                  sensor_hub_6;
01517     lsm6dso_sensor_hub_7_t                  sensor_hub_7;
01518     lsm6dso_sensor_hub_8_t                  sensor_hub_8;
01519     lsm6dso_sensor_hub_9_t                  sensor_hub_9;
01520     lsm6dso_sensor_hub_10_t                 sensor_hub_10;
01521     lsm6dso_sensor_hub_11_t                 sensor_hub_11;
01522     lsm6dso_sensor_hub_12_t                 sensor_hub_12;
01523     lsm6dso_sensor_hub_13_t                 sensor_hub_13;
01524     lsm6dso_sensor_hub_14_t                 sensor_hub_14;
01525     lsm6dso_sensor_hub_15_t                 sensor_hub_15;
01526     lsm6dso_sensor_hub_16_t                 sensor_hub_16;
01527     lsm6dso_sensor_hub_17_t                 sensor_hub_17;
01528     lsm6dso_sensor_hub_18_t                 sensor_hub_18;
01529     lsm6dso_master_config_t                 master_config;
01530     lsm6dso_slv0_add_t                      slv0_add;
01531     lsm6dso_slv0_subadd_t                   slv0_subadd;
01532     lsm6dso_slv0_config_t                   slv0_config;
01533     lsm6dso_slv1_add_t                      slv1_add;
01534     lsm6dso_slv1_subadd_t                   slv1_subadd;
01535     lsm6dso_slv1_config_t                   slv1_config;
01536     lsm6dso_slv2_add_t                      slv2_add;
01537     lsm6dso_slv2_subadd_t                   slv2_subadd;
01538     lsm6dso_slv2_config_t                   slv2_config;
01539     lsm6dso_slv3_add_t                      slv3_add;
01540     lsm6dso_slv3_subadd_t                   slv3_subadd;
01541     lsm6dso_slv3_config_t                   slv3_config;
01542     lsm6dso_datawrite_src_mode_sub_slv0_t   datawrite_src_mode_sub_slv0;
01543     lsm6dso_status_master_t                 status_master;
01544     bitwise_t                               bitwise;
01545     uint8_t                                 byte;
01546 } lsm6dso_reg_t;
01547 
01548 /**
01549   * @}
01550   *
01551   */
01552 
01553 int32_t lsm6dso_read_reg(lsm6dso_ctx_t *ctx, uint8_t reg, uint8_t *data,
01554                          uint16_t len);
01555 int32_t lsm6dso_write_reg(lsm6dso_ctx_t *ctx, uint8_t reg, uint8_t *data,
01556                           uint16_t len);
01557 
01558 extern float_t lsm6dso_from_fs2_to_mg(int16_t lsb);
01559 extern float_t lsm6dso_from_fs4_to_mg(int16_t lsb);
01560 extern float_t lsm6dso_from_fs8_to_mg(int16_t lsb);
01561 extern float_t lsm6dso_from_fs16_to_mg(int16_t lsb);
01562 extern float_t lsm6dso_from_fs125_to_mdps(int16_t lsb);
01563 extern float_t lsm6dso_from_fs500_to_mdps(int16_t lsb);
01564 extern float_t lsm6dso_from_fs250_to_mdps(int16_t lsb);
01565 extern float_t lsm6dso_from_fs1000_to_mdps(int16_t lsb);
01566 extern float_t lsm6dso_from_fs2000_to_mdps(int16_t lsb);
01567 extern float_t lsm6dso_from_lsb_to_celsius(int16_t lsb);
01568 extern float_t lsm6dso_from_lsb_to_nsec(int16_t lsb);
01569 
01570 typedef enum {
01571     LSM6DSO_2g   = 0,
01572     LSM6DSO_16g  = 1, /* if XL_FS_MODE = ‘1’ -> LSM6DSO_2g */
01573     LSM6DSO_4g   = 2,
01574     LSM6DSO_8g   = 3,
01575 } lsm6dso_fs_xl_t;
01576 int32_t lsm6dso_xl_full_scale_set(lsm6dso_ctx_t *ctx, lsm6dso_fs_xl_t val);
01577 int32_t lsm6dso_xl_full_scale_get(lsm6dso_ctx_t *ctx, lsm6dso_fs_xl_t *val);
01578 
01579 typedef enum {
01580     LSM6DSO_XL_ODR_OFF    = 0,
01581     LSM6DSO_XL_ODR_12Hz5  = 1,
01582     LSM6DSO_XL_ODR_26Hz   = 2,
01583     LSM6DSO_XL_ODR_52Hz   = 3,
01584     LSM6DSO_XL_ODR_104Hz  = 4,
01585     LSM6DSO_XL_ODR_208Hz  = 5,
01586     LSM6DSO_XL_ODR_417Hz  = 6,
01587     LSM6DSO_XL_ODR_833Hz  = 7,
01588     LSM6DSO_XL_ODR_1667Hz = 8,
01589     LSM6DSO_XL_ODR_3333Hz = 9,
01590     LSM6DSO_XL_ODR_6667Hz = 10,
01591     LSM6DSO_XL_ODR_6Hz5   = 11, /* (low power only) */
01592 } lsm6dso_odr_xl_t;
01593 int32_t lsm6dso_xl_data_rate_set(lsm6dso_ctx_t *ctx, lsm6dso_odr_xl_t val);
01594 int32_t lsm6dso_xl_data_rate_get(lsm6dso_ctx_t *ctx, lsm6dso_odr_xl_t *val);
01595 
01596 typedef enum {
01597     LSM6DSO_250dps   = 0,
01598     LSM6DSO_125dps   = 1,
01599     LSM6DSO_500dps   = 2,
01600     LSM6DSO_1000dps  = 4,
01601     LSM6DSO_2000dps  = 6,
01602 } lsm6dso_fs_g_t;
01603 int32_t lsm6dso_gy_full_scale_set(lsm6dso_ctx_t *ctx, lsm6dso_fs_g_t val);
01604 int32_t lsm6dso_gy_full_scale_get(lsm6dso_ctx_t *ctx, lsm6dso_fs_g_t *val);
01605 
01606 typedef enum {
01607     LSM6DSO_GY_ODR_OFF    = 0,
01608     LSM6DSO_GY_ODR_12Hz5  = 1,
01609     LSM6DSO_GY_ODR_26Hz   = 2,
01610     LSM6DSO_GY_ODR_52Hz   = 3,
01611     LSM6DSO_GY_ODR_104Hz  = 4,
01612     LSM6DSO_GY_ODR_208Hz  = 5,
01613     LSM6DSO_GY_ODR_417Hz  = 6,
01614     LSM6DSO_GY_ODR_833Hz  = 7,
01615     LSM6DSO_GY_ODR_1667Hz = 8,
01616     LSM6DSO_GY_ODR_3333Hz = 9,
01617     LSM6DSO_GY_ODR_6667Hz = 10,
01618 } lsm6dso_odr_g_t;
01619 int32_t lsm6dso_gy_data_rate_set(lsm6dso_ctx_t *ctx, lsm6dso_odr_g_t val);
01620 int32_t lsm6dso_gy_data_rate_get(lsm6dso_ctx_t *ctx, lsm6dso_odr_g_t *val);
01621 
01622 int32_t lsm6dso_block_data_update_set(lsm6dso_ctx_t *ctx, uint8_t val);
01623 int32_t lsm6dso_block_data_update_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01624 
01625 typedef enum {
01626     LSM6DSO_LSb_1mg  = 0,
01627     LSM6DSO_LSb_16mg = 1,
01628 } lsm6dso_usr_off_w_t;
01629 int32_t lsm6dso_xl_offset_weight_set(lsm6dso_ctx_t *ctx,
01630                                      lsm6dso_usr_off_w_t val);
01631 int32_t lsm6dso_xl_offset_weight_get(lsm6dso_ctx_t *ctx,
01632                                      lsm6dso_usr_off_w_t *val);
01633 
01634 typedef enum {
01635     LSM6DSO_HIGH_PERFORMANCE_MD  = 0,
01636     LSM6DSO_LOW_NORMAL_POWER_MD  = 1,
01637     LSM6DSO_ULTRA_LOW_POWER_MD   = 2,
01638 } lsm6dso_xl_hm_mode_t;
01639 int32_t lsm6dso_xl_power_mode_set(lsm6dso_ctx_t *ctx,
01640                                   lsm6dso_xl_hm_mode_t val);
01641 int32_t lsm6dso_xl_power_mode_get(lsm6dso_ctx_t *ctx,
01642                                   lsm6dso_xl_hm_mode_t *val);
01643 
01644 typedef enum {
01645     LSM6DSO_GY_HIGH_PERFORMANCE  = 0,
01646     LSM6DSO_GY_NORMAL            = 1,
01647 } lsm6dso_g_hm_mode_t;
01648 int32_t lsm6dso_gy_power_mode_set(lsm6dso_ctx_t *ctx,
01649                                   lsm6dso_g_hm_mode_t val);
01650 int32_t lsm6dso_gy_power_mode_get(lsm6dso_ctx_t *ctx,
01651                                   lsm6dso_g_hm_mode_t *val);
01652 
01653 typedef struct {
01654     lsm6dso_all_int_src_t       all_int_src;
01655     lsm6dso_wake_up_src_t       wake_up_src;
01656     lsm6dso_tap_src_t           tap_src;
01657     lsm6dso_d6d_src_t           d6d_src;
01658     lsm6dso_status_reg_t        status_reg;
01659     lsm6dso_emb_func_status_t   emb_func_status;
01660     lsm6dso_fsm_status_a_t      fsm_status_a;
01661     lsm6dso_fsm_status_b_t      fsm_status_b;
01662 } lsm6dso_all_sources_t;
01663 int32_t lsm6dso_all_sources_get(lsm6dso_ctx_t *ctx,
01664                                 lsm6dso_all_sources_t *val);
01665 
01666 int32_t lsm6dso_status_reg_get(lsm6dso_ctx_t *ctx,
01667                                lsm6dso_status_reg_t *val);
01668 
01669 int32_t lsm6dso_xl_flag_data_ready_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01670 
01671 int32_t lsm6dso_gy_flag_data_ready_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01672 
01673 int32_t lsm6dso_temp_flag_data_ready_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01674 
01675 int32_t lsm6dso_xl_usr_offset_x_set(lsm6dso_ctx_t *ctx, uint8_t *buff);
01676 int32_t lsm6dso_xl_usr_offset_x_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
01677 
01678 int32_t lsm6dso_xl_usr_offset_y_set(lsm6dso_ctx_t *ctx, uint8_t *buff);
01679 int32_t lsm6dso_xl_usr_offset_y_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
01680 
01681 int32_t lsm6dso_xl_usr_offset_z_set(lsm6dso_ctx_t *ctx, uint8_t *buff);
01682 int32_t lsm6dso_xl_usr_offset_z_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
01683 
01684 int32_t lsm6dso_xl_usr_offset_set(lsm6dso_ctx_t *ctx, uint8_t val);
01685 int32_t lsm6dso_xl_usr_offset_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01686 
01687 int32_t lsm6dso_timestamp_set(lsm6dso_ctx_t *ctx, uint8_t val);
01688 int32_t lsm6dso_timestamp_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01689 
01690 int32_t lsm6dso_timestamp_raw_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
01691 
01692 typedef enum {
01693     LSM6DSO_NO_ROUND      = 0,
01694     LSM6DSO_ROUND_XL      = 1,
01695     LSM6DSO_ROUND_GY      = 2,
01696     LSM6DSO_ROUND_GY_XL   = 3,
01697 } lsm6dso_rounding_t;
01698 int32_t lsm6dso_rounding_mode_set(lsm6dso_ctx_t *ctx,
01699                                   lsm6dso_rounding_t val);
01700 int32_t lsm6dso_rounding_mode_get(lsm6dso_ctx_t *ctx,
01701                                   lsm6dso_rounding_t *val);
01702 
01703 int32_t lsm6dso_temperature_raw_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
01704 
01705 int32_t lsm6dso_angular_rate_raw_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
01706 
01707 int32_t lsm6dso_acceleration_raw_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
01708 
01709 int32_t lsm6dso_fifo_out_raw_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
01710 
01711 int32_t lsm6dso_number_of_steps_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
01712 
01713 int32_t lsm6dso_steps_reset(lsm6dso_ctx_t *ctx);
01714 
01715 int32_t lsm6dso_odr_cal_reg_set(lsm6dso_ctx_t *ctx, uint8_t val);
01716 int32_t lsm6dso_odr_cal_reg_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01717 
01718 typedef enum {
01719     LSM6DSO_USER_BANK           = 0,
01720     LSM6DSO_SENSOR_HUB_BANK     = 1,
01721     LSM6DSO_EMBEDDED_FUNC_BANK  = 2,
01722 } lsm6dso_reg_access_t;
01723 int32_t lsm6dso_mem_bank_set(lsm6dso_ctx_t *ctx, lsm6dso_reg_access_t val);
01724 int32_t lsm6dso_mem_bank_get(lsm6dso_ctx_t *ctx, lsm6dso_reg_access_t *val);
01725 
01726 int32_t lsm6dso_ln_pg_write_byte(lsm6dso_ctx_t *ctx, uint16_t address,
01727                                  uint8_t *val);
01728 int32_t lsm6dso_ln_pg_read_byte(lsm6dso_ctx_t *ctx, uint16_t address,
01729                                 uint8_t *val);
01730 int32_t lsm6dso_ln_pg_write(lsm6dso_ctx_t *ctx, uint16_t address,
01731                             uint8_t *buf, uint8_t len);
01732 int32_t lsm6dso_ln_pg_read(lsm6dso_ctx_t *ctx, uint16_t address,
01733                            uint8_t *val);
01734 
01735 typedef enum {
01736     LSM6DSO_DRDY_LATCHED = 0,
01737     LSM6DSO_DRDY_PULSED  = 1,
01738 } lsm6dso_dataready_pulsed_t;
01739 int32_t lsm6dso_data_ready_mode_set(lsm6dso_ctx_t *ctx,
01740                                     lsm6dso_dataready_pulsed_t val);
01741 int32_t lsm6dso_data_ready_mode_get(lsm6dso_ctx_t *ctx,
01742                                     lsm6dso_dataready_pulsed_t *val);
01743 
01744 int32_t lsm6dso_device_id_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
01745 
01746 int32_t lsm6dso_reset_set(lsm6dso_ctx_t *ctx, uint8_t val);
01747 int32_t lsm6dso_reset_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01748 
01749 int32_t lsm6dso_auto_increment_set(lsm6dso_ctx_t *ctx, uint8_t val);
01750 int32_t lsm6dso_auto_increment_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01751 
01752 int32_t lsm6dso_boot_set(lsm6dso_ctx_t *ctx, uint8_t val);
01753 int32_t lsm6dso_boot_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01754 
01755 typedef enum {
01756     LSM6DSO_XL_ST_DISABLE  = 0,
01757     LSM6DSO_XL_ST_POSITIVE = 1,
01758     LSM6DSO_XL_ST_NEGATIVE = 2,
01759 } lsm6dso_st_xl_t;
01760 int32_t lsm6dso_xl_self_test_set(lsm6dso_ctx_t *ctx, lsm6dso_st_xl_t val);
01761 int32_t lsm6dso_xl_self_test_get(lsm6dso_ctx_t *ctx, lsm6dso_st_xl_t *val);
01762 
01763 typedef enum {
01764     LSM6DSO_GY_ST_DISABLE  = 0,
01765     LSM6DSO_GY_ST_POSITIVE = 1,
01766     LSM6DSO_GY_ST_NEGATIVE = 3,
01767 } lsm6dso_st_g_t;
01768 int32_t lsm6dso_gy_self_test_set(lsm6dso_ctx_t *ctx, lsm6dso_st_g_t val);
01769 int32_t lsm6dso_gy_self_test_get(lsm6dso_ctx_t *ctx, lsm6dso_st_g_t *val);
01770 
01771 int32_t lsm6dso_xl_filter_lp2_set(lsm6dso_ctx_t *ctx, uint8_t val);
01772 int32_t lsm6dso_xl_filter_lp2_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01773 
01774 int32_t lsm6dso_gy_filter_lp1_set(lsm6dso_ctx_t *ctx, uint8_t val);
01775 int32_t lsm6dso_gy_filter_lp1_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01776 
01777 int32_t lsm6dso_filter_settling_mask_set(lsm6dso_ctx_t *ctx,
01778                                          uint8_t val);
01779 int32_t lsm6dso_filter_settling_mask_get(lsm6dso_ctx_t *ctx,
01780                                          uint8_t *val);
01781 
01782 typedef enum {
01783     LSM6DSO_ULTRA_LIGHT  = 0,
01784     LSM6DSO_VERY_LIGHT   = 1,
01785     LSM6DSO_LIGHT        = 2,
01786     LSM6DSO_MEDIUM       = 3,
01787     LSM6DSO_STRONG       = 4, /* not available for data rate > 1k670Hz */
01788     LSM6DSO_VERY_STRONG  = 5, /* not available for data rate > 1k670Hz */
01789     LSM6DSO_AGGRESSIVE   = 6, /* not available for data rate > 1k670Hz */
01790     LSM6DSO_XTREME       = 7, /* not available for data rate > 1k670Hz */
01791 } lsm6dso_ftype_t;
01792 int32_t lsm6dso_gy_lp1_bandwidth_set(lsm6dso_ctx_t *ctx,
01793                                      lsm6dso_ftype_t val);
01794 int32_t lsm6dso_gy_lp1_bandwidth_get(lsm6dso_ctx_t *ctx,
01795                                      lsm6dso_ftype_t *val);
01796 
01797 int32_t lsm6dso_xl_lp2_on_6d_set(lsm6dso_ctx_t *ctx, uint8_t val);
01798 int32_t lsm6dso_xl_lp2_on_6d_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01799 
01800 typedef enum {
01801     LSM6DSO_HP_PATH_DISABLE_ON_OUT    = 0x00,
01802     LSM6DSO_SLOPE_ODR_DIV_4           = 0x10,
01803     LSM6DSO_HP_ODR_DIV_10             = 0x11,
01804     LSM6DSO_HP_ODR_DIV_20             = 0x12,
01805     LSM6DSO_HP_ODR_DIV_45             = 0x13,
01806     LSM6DSO_HP_ODR_DIV_100            = 0x14,
01807     LSM6DSO_HP_ODR_DIV_200            = 0x15,
01808     LSM6DSO_HP_ODR_DIV_400            = 0x16,
01809     LSM6DSO_HP_ODR_DIV_800            = 0x17,
01810     LSM6DSO_HP_REF_MD_ODR_DIV_10      = 0x31,
01811     LSM6DSO_HP_REF_MD_ODR_DIV_20      = 0x32,
01812     LSM6DSO_HP_REF_MD_ODR_DIV_45      = 0x33,
01813     LSM6DSO_HP_REF_MD_ODR_DIV_100     = 0x34,
01814     LSM6DSO_HP_REF_MD_ODR_DIV_200     = 0x35,
01815     LSM6DSO_HP_REF_MD_ODR_DIV_400     = 0x36,
01816     LSM6DSO_HP_REF_MD_ODR_DIV_800     = 0x37,
01817     LSM6DSO_LP_ODR_DIV_10             = 0x01,
01818     LSM6DSO_LP_ODR_DIV_20             = 0x02,
01819     LSM6DSO_LP_ODR_DIV_45             = 0x03,
01820     LSM6DSO_LP_ODR_DIV_100            = 0x04,
01821     LSM6DSO_LP_ODR_DIV_200            = 0x05,
01822     LSM6DSO_LP_ODR_DIV_400            = 0x06,
01823     LSM6DSO_LP_ODR_DIV_800            = 0x07,
01824 } lsm6dso_hp_slope_xl_en_t;
01825 int32_t lsm6dso_xl_hp_path_on_out_set(lsm6dso_ctx_t *ctx,
01826                                       lsm6dso_hp_slope_xl_en_t val);
01827 int32_t lsm6dso_xl_hp_path_on_out_get(lsm6dso_ctx_t *ctx,
01828                                       lsm6dso_hp_slope_xl_en_t *val);
01829 
01830 int32_t lsm6dso_xl_fast_settling_set(lsm6dso_ctx_t *ctx, uint8_t val);
01831 int32_t lsm6dso_xl_fast_settling_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01832 
01833 typedef enum {
01834     LSM6DSO_USE_SLOPE = 0,
01835     LSM6DSO_USE_HPF   = 1,
01836 } lsm6dso_slope_fds_t;
01837 int32_t lsm6dso_xl_hp_path_internal_set(lsm6dso_ctx_t *ctx,
01838                                         lsm6dso_slope_fds_t val);
01839 int32_t lsm6dso_xl_hp_path_internal_get(lsm6dso_ctx_t *ctx,
01840                                         lsm6dso_slope_fds_t *val);
01841 
01842 typedef enum {
01843     LSM6DSO_HP_FILTER_NONE     = 0x00,
01844     LSM6DSO_HP_FILTER_16mHz    = 0x80,
01845     LSM6DSO_HP_FILTER_65mHz    = 0x81,
01846     LSM6DSO_HP_FILTER_260mHz   = 0x82,
01847     LSM6DSO_HP_FILTER_1Hz04    = 0x83,
01848 } lsm6dso_hpm_g_t;
01849 int32_t lsm6dso_gy_hp_path_internal_set(lsm6dso_ctx_t *ctx,
01850                                         lsm6dso_hpm_g_t val);
01851 int32_t lsm6dso_gy_hp_path_internal_get(lsm6dso_ctx_t *ctx,
01852                                         lsm6dso_hpm_g_t *val);
01853 
01854 typedef enum {
01855     LSM6DSO_AUX_PULL_UP_DISC       = 0,
01856     LSM6DSO_AUX_PULL_UP_CONNECT    = 1,
01857 } lsm6dso_ois_pu_dis_t;
01858 int32_t lsm6dso_aux_sdo_ocs_mode_set(lsm6dso_ctx_t *ctx,
01859                                      lsm6dso_ois_pu_dis_t val);
01860 int32_t lsm6dso_aux_sdo_ocs_mode_get(lsm6dso_ctx_t *ctx,
01861                                      lsm6dso_ois_pu_dis_t *val);
01862 
01863 typedef enum {
01864     LSM6DSO_AUX_ON                    = 1,
01865     LSM6DSO_AUX_ON_BY_AUX_INTERFACE   = 0,
01866 } lsm6dso_ois_on_t;
01867 int32_t lsm6dso_aux_pw_on_ctrl_set(lsm6dso_ctx_t *ctx, lsm6dso_ois_on_t val);
01868 int32_t lsm6dso_aux_pw_on_ctrl_get(lsm6dso_ctx_t *ctx, lsm6dso_ois_on_t *val);
01869 
01870 typedef enum {
01871     LSM6DSO_USE_SAME_XL_FS        = 0,
01872     LSM6DSO_USE_DIFFERENT_XL_FS   = 1,
01873 } lsm6dso_xl_fs_mode_t;
01874 int32_t lsm6dso_aux_xl_fs_mode_set(lsm6dso_ctx_t *ctx,
01875                                    lsm6dso_xl_fs_mode_t val);
01876 int32_t lsm6dso_aux_xl_fs_mode_get(lsm6dso_ctx_t *ctx,
01877                                    lsm6dso_xl_fs_mode_t *val);
01878 
01879 int32_t lsm6dso_aux_status_reg_get(lsm6dso_ctx_t *ctx,
01880                                    lsm6dso_status_spiaux_t *val);
01881 
01882 int32_t lsm6dso_aux_xl_flag_data_ready_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01883 
01884 int32_t lsm6dso_aux_gy_flag_data_ready_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01885 
01886 int32_t lsm6dso_aux_gy_flag_settling_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01887 
01888 typedef enum {
01889     LSM6DSO_AUX_XL_DISABLE = 0,
01890     LSM6DSO_AUX_XL_POS     = 1,
01891     LSM6DSO_AUX_XL_NEG     = 2,
01892 } lsm6dso_st_xl_ois_t;
01893 int32_t lsm6dso_aux_xl_self_test_set(lsm6dso_ctx_t *ctx,
01894                                      lsm6dso_st_xl_ois_t val);
01895 int32_t lsm6dso_aux_xl_self_test_get(lsm6dso_ctx_t *ctx,
01896                                      lsm6dso_st_xl_ois_t *val);
01897 
01898 typedef enum {
01899     LSM6DSO_AUX_DEN_ACTIVE_LOW     = 0,
01900     LSM6DSO_AUX_DEN_ACTIVE_HIGH    = 1,
01901 } lsm6dso_den_lh_ois_t;
01902 int32_t lsm6dso_aux_den_polarity_set(lsm6dso_ctx_t *ctx,
01903                                      lsm6dso_den_lh_ois_t val);
01904 int32_t lsm6dso_aux_den_polarity_get(lsm6dso_ctx_t *ctx,
01905                                      lsm6dso_den_lh_ois_t *val);
01906 
01907 typedef enum {
01908     LSM6DSO_AUX_DEN_DISABLE         = 0,
01909     LSM6DSO_AUX_DEN_LEVEL_LATCH     = 3,
01910     LSM6DSO_AUX_DEN_LEVEL_TRIG      = 2,
01911 } lsm6dso_lvl2_ois_t;
01912 int32_t lsm6dso_aux_den_mode_set(lsm6dso_ctx_t *ctx, lsm6dso_lvl2_ois_t val);
01913 int32_t lsm6dso_aux_den_mode_get(lsm6dso_ctx_t *ctx, lsm6dso_lvl2_ois_t *val);
01914 
01915 int32_t lsm6dso_aux_drdy_on_int2_set(lsm6dso_ctx_t *ctx, uint8_t val);
01916 int32_t lsm6dso_aux_drdy_on_int2_get(lsm6dso_ctx_t *ctx, uint8_t *val);
01917 
01918 typedef enum {
01919     LSM6DSO_AUX_DISABLE  = 0,
01920     LSM6DSO_MODE_3_GY    = 1,
01921     LSM6DSO_MODE_4_GY_XL = 3,
01922 } lsm6dso_ois_en_spi2_t;
01923 int32_t lsm6dso_aux_mode_set(lsm6dso_ctx_t *ctx, lsm6dso_ois_en_spi2_t val);
01924 int32_t lsm6dso_aux_mode_get(lsm6dso_ctx_t *ctx, lsm6dso_ois_en_spi2_t *val);
01925 
01926 typedef enum {
01927     LSM6DSO_250dps_AUX  = 0,
01928     LSM6DSO_125dps_AUX  = 1,
01929     LSM6DSO_500dps_AUX  = 2,
01930     LSM6DSO_1000dps_AUX = 4,
01931     LSM6DSO_2000dps_AUX = 6,
01932 } lsm6dso_fs_g_ois_t;
01933 int32_t lsm6dso_aux_gy_full_scale_set(lsm6dso_ctx_t *ctx,
01934                                       lsm6dso_fs_g_ois_t val);
01935 int32_t lsm6dso_aux_gy_full_scale_get(lsm6dso_ctx_t *ctx,
01936                                       lsm6dso_fs_g_ois_t *val);
01937 
01938 typedef enum {
01939     LSM6DSO_AUX_SPI_4_WIRE = 0,
01940     LSM6DSO_AUX_SPI_3_WIRE = 1,
01941 } lsm6dso_sim_ois_t;
01942 int32_t lsm6dso_aux_spi_mode_set(lsm6dso_ctx_t *ctx, lsm6dso_sim_ois_t val);
01943 int32_t lsm6dso_aux_spi_mode_get(lsm6dso_ctx_t *ctx, lsm6dso_sim_ois_t *val);
01944 
01945 typedef enum {
01946     LSM6DSO_351Hz39 = 0,
01947     LSM6DSO_236Hz63 = 1,
01948     LSM6DSO_172Hz70 = 2,
01949     LSM6DSO_937Hz91 = 3,
01950 } lsm6dso_ftype_ois_t;
01951 int32_t lsm6dso_aux_gy_lp1_bandwidth_set(lsm6dso_ctx_t *ctx,
01952                                          lsm6dso_ftype_ois_t val);
01953 int32_t lsm6dso_aux_gy_lp1_bandwidth_get(lsm6dso_ctx_t *ctx,
01954                                          lsm6dso_ftype_ois_t *val);
01955 
01956 typedef enum {
01957     LSM6DSO_AUX_HP_DISABLE = 0x00,
01958     LSM6DSO_AUX_HP_Hz016   = 0x10,
01959     LSM6DSO_AUX_HP_Hz065   = 0x11,
01960     LSM6DSO_AUX_HP_Hz260   = 0x12,
01961     LSM6DSO_AUX_HP_1Hz040  = 0x13,
01962 } lsm6dso_hpm_ois_t;
01963 int32_t lsm6dso_aux_gy_hp_bandwidth_set(lsm6dso_ctx_t *ctx,
01964                                         lsm6dso_hpm_ois_t val);
01965 int32_t lsm6dso_aux_gy_hp_bandwidth_get(lsm6dso_ctx_t *ctx,
01966                                         lsm6dso_hpm_ois_t *val);
01967 
01968 typedef enum {
01969     LSM6DSO_ENABLE_CLAMP  = 0,
01970     LSM6DSO_DISABLE_CLAMP = 1,
01971 } lsm6dso_st_ois_clampdis_t;
01972 int32_t lsm6dso_aux_gy_clamp_set(lsm6dso_ctx_t *ctx,
01973                                  lsm6dso_st_ois_clampdis_t val);
01974 int32_t lsm6dso_aux_gy_clamp_get(lsm6dso_ctx_t *ctx,
01975                                  lsm6dso_st_ois_clampdis_t *val);
01976 
01977 typedef enum {
01978     LSM6DSO_AUX_GY_DISABLE = 0,
01979     LSM6DSO_AUX_GY_POS     = 1,
01980     LSM6DSO_AUX_GY_NEG     = 3,
01981 } lsm6dso_st_ois_t;
01982 int32_t lsm6dso_aux_gy_self_test_set(lsm6dso_ctx_t *ctx,
01983                                      lsm6dso_st_ois_t val);
01984 int32_t lsm6dso_aux_gy_self_test_get(lsm6dso_ctx_t *ctx,
01985                                      lsm6dso_st_ois_t *val);
01986 
01987 typedef enum {
01988     LSM6DSO_289Hz = 0,
01989     LSM6DSO_258Hz = 1,
01990     LSM6DSO_120Hz = 2,
01991     LSM6DSO_65Hz2 = 3,
01992     LSM6DSO_33Hz2 = 4,
01993     LSM6DSO_16Hz6 = 5,
01994     LSM6DSO_8Hz30 = 6,
01995     LSM6DSO_4Hz15 = 7,
01996 } lsm6dso_filter_xl_conf_ois_t;
01997 int32_t lsm6dso_aux_xl_bandwidth_set(lsm6dso_ctx_t *ctx,
01998                                      lsm6dso_filter_xl_conf_ois_t val);
01999 int32_t lsm6dso_aux_xl_bandwidth_get(lsm6dso_ctx_t *ctx,
02000                                      lsm6dso_filter_xl_conf_ois_t *val);
02001 
02002 typedef enum {
02003     LSM6DSO_AUX_2g  = 0,
02004     LSM6DSO_AUX_16g = 1,
02005     LSM6DSO_AUX_4g  = 2,
02006     LSM6DSO_AUX_8g  = 3,
02007 } lsm6dso_fs_xl_ois_t;
02008 int32_t lsm6dso_aux_xl_full_scale_set(lsm6dso_ctx_t *ctx,
02009                                       lsm6dso_fs_xl_ois_t val);
02010 int32_t lsm6dso_aux_xl_full_scale_get(lsm6dso_ctx_t *ctx,
02011                                       lsm6dso_fs_xl_ois_t *val);
02012 
02013 typedef enum {
02014     LSM6DSO_PULL_UP_DISC       = 0,
02015     LSM6DSO_PULL_UP_CONNECT    = 1,
02016 } lsm6dso_sdo_pu_en_t;
02017 int32_t lsm6dso_sdo_sa0_mode_set(lsm6dso_ctx_t *ctx,
02018                                  lsm6dso_sdo_pu_en_t val);
02019 int32_t lsm6dso_sdo_sa0_mode_get(lsm6dso_ctx_t *ctx,
02020                                  lsm6dso_sdo_pu_en_t *val);
02021 
02022 typedef enum {
02023     LSM6DSO_SPI_4_WIRE = 0,
02024     LSM6DSO_SPI_3_WIRE = 1,
02025 } lsm6dso_sim_t;
02026 int32_t lsm6dso_spi_mode_set(lsm6dso_ctx_t *ctx, lsm6dso_sim_t val);
02027 int32_t lsm6dso_spi_mode_get(lsm6dso_ctx_t *ctx, lsm6dso_sim_t *val);
02028 
02029 typedef enum {
02030     LSM6DSO_I2C_ENABLE  = 0,
02031     LSM6DSO_I2C_DISABLE = 1,
02032 } lsm6dso_i2c_disable_t;
02033 int32_t lsm6dso_i2c_interface_set(lsm6dso_ctx_t *ctx,
02034                                   lsm6dso_i2c_disable_t val);
02035 int32_t lsm6dso_i2c_interface_get(lsm6dso_ctx_t *ctx,
02036                                   lsm6dso_i2c_disable_t *val);
02037 
02038 typedef enum {
02039     LSM6DSO_I3C_DISABLE         = 0x80,
02040     LSM6DSO_I3C_ENABLE_T_50us   = 0x00,
02041     LSM6DSO_I3C_ENABLE_T_2us    = 0x01,
02042     LSM6DSO_I3C_ENABLE_T_1ms    = 0x02,
02043     LSM6DSO_I3C_ENABLE_T_25ms   = 0x03,
02044 } lsm6dso_i3c_disable_t;
02045 int32_t lsm6dso_i3c_disable_set(lsm6dso_ctx_t *ctx,
02046                                 lsm6dso_i3c_disable_t val);
02047 int32_t lsm6dso_i3c_disable_get(lsm6dso_ctx_t *ctx,
02048                                 lsm6dso_i3c_disable_t *val);
02049 
02050 typedef enum {
02051     LSM6DSO_PULL_DOWN_DISC       = 0,
02052     LSM6DSO_PULL_DOWN_CONNECT    = 1,
02053 } lsm6dso_int1_pd_en_t;
02054 int32_t lsm6dso_int1_mode_set(lsm6dso_ctx_t *ctx,
02055                               lsm6dso_int1_pd_en_t val);
02056 int32_t lsm6dso_int1_mode_get(lsm6dso_ctx_t *ctx,
02057                               lsm6dso_int1_pd_en_t *val);
02058 
02059 typedef struct {
02060     lsm6dso_int1_ctrl_t          int1_ctrl;
02061     lsm6dso_md1_cfg_t            md1_cfg;
02062     lsm6dso_emb_func_int1_t      emb_func_int1;
02063     lsm6dso_fsm_int1_a_t         fsm_int1_a;
02064     lsm6dso_fsm_int1_b_t         fsm_int1_b;
02065 } lsm6dso_pin_int1_route_t;
02066 int32_t lsm6dso_pin_int1_route_set(lsm6dso_ctx_t *ctx,
02067                                    lsm6dso_pin_int1_route_t *val);
02068 int32_t lsm6dso_pin_int1_route_get(lsm6dso_ctx_t *ctx,
02069                                    lsm6dso_pin_int1_route_t *val);
02070 
02071 typedef struct {
02072     lsm6dso_int2_ctrl_t          int2_ctrl;
02073     lsm6dso_md2_cfg_t            md2_cfg;
02074     lsm6dso_emb_func_int2_t      emb_func_int2;
02075     lsm6dso_fsm_int2_a_t         fsm_int2_a;
02076     lsm6dso_fsm_int2_b_t         fsm_int2_b;
02077 } lsm6dso_pin_int2_route_t;
02078 int32_t lsm6dso_pin_int2_route_set(lsm6dso_ctx_t *ctx,
02079                                    lsm6dso_pin_int2_route_t *val);
02080 int32_t lsm6dso_pin_int2_route_get(lsm6dso_ctx_t *ctx,
02081                                    lsm6dso_pin_int2_route_t *val);
02082 
02083 typedef enum {
02084     LSM6DSO_PUSH_PULL   = 0,
02085     LSM6DSO_OPEN_DRAIN  = 1,
02086 } lsm6dso_pp_od_t;
02087 int32_t lsm6dso_pin_mode_set(lsm6dso_ctx_t *ctx, lsm6dso_pp_od_t val);
02088 int32_t lsm6dso_pin_mode_get(lsm6dso_ctx_t *ctx, lsm6dso_pp_od_t *val);
02089 
02090 typedef enum {
02091     LSM6DSO_ACTIVE_HIGH = 0,
02092     LSM6DSO_ACTIVE_LOW  = 1,
02093 } lsm6dso_h_lactive_t;
02094 int32_t lsm6dso_pin_polarity_set(lsm6dso_ctx_t *ctx,
02095                                  lsm6dso_h_lactive_t val);
02096 int32_t lsm6dso_pin_polarity_get(lsm6dso_ctx_t *ctx,
02097                                  lsm6dso_h_lactive_t *val);
02098 
02099 int32_t lsm6dso_all_on_int1_set(lsm6dso_ctx_t *ctx, uint8_t val);
02100 int32_t lsm6dso_all_on_int1_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02101 
02102 typedef enum {
02103     LSM6DSO_ALL_INT_PULSED            = 0,
02104     LSM6DSO_BASE_LATCHED_EMB_PULSED   = 1,
02105     LSM6DSO_BASE_PULSED_EMB_LATCHED   = 2,
02106     LSM6DSO_ALL_INT_LATCHED           = 3,
02107 } lsm6dso_lir_t;
02108 int32_t lsm6dso_int_notification_set(lsm6dso_ctx_t *ctx, lsm6dso_lir_t val);
02109 int32_t lsm6dso_int_notification_get(lsm6dso_ctx_t *ctx, lsm6dso_lir_t *val);
02110 
02111 typedef enum {
02112     LSM6DSO_LSb_FS_DIV_64       = 0,
02113     LSM6DSO_LSb_FS_DIV_256      = 1,
02114 } lsm6dso_wake_ths_w_t;
02115 int32_t lsm6dso_wkup_ths_weight_set(lsm6dso_ctx_t *ctx,
02116                                     lsm6dso_wake_ths_w_t val);
02117 int32_t lsm6dso_wkup_ths_weight_get(lsm6dso_ctx_t *ctx,
02118                                     lsm6dso_wake_ths_w_t *val);
02119 
02120 int32_t lsm6dso_wkup_threshold_set(lsm6dso_ctx_t *ctx, uint8_t val);
02121 int32_t lsm6dso_wkup_threshold_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02122 
02123 int32_t lsm6dso_xl_usr_offset_on_wkup_set(lsm6dso_ctx_t *ctx, uint8_t val);
02124 int32_t lsm6dso_xl_usr_offset_on_wkup_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02125 
02126 int32_t lsm6dso_wkup_dur_set(lsm6dso_ctx_t *ctx, uint8_t val);
02127 int32_t lsm6dso_wkup_dur_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02128 
02129 int32_t lsm6dso_gy_sleep_mode_set(lsm6dso_ctx_t *ctx, uint8_t val);
02130 int32_t lsm6dso_gy_sleep_mode_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02131 
02132 typedef enum {
02133     LSM6DSO_DRIVE_SLEEP_CHG_EVENT = 0,
02134     LSM6DSO_DRIVE_SLEEP_STATUS    = 1,
02135 } lsm6dso_sleep_status_on_int_t;
02136 int32_t lsm6dso_act_pin_notification_set(lsm6dso_ctx_t *ctx,
02137                                          lsm6dso_sleep_status_on_int_t val);
02138 int32_t lsm6dso_act_pin_notification_get(lsm6dso_ctx_t *ctx,
02139                                          lsm6dso_sleep_status_on_int_t *val);
02140 
02141 typedef enum {
02142     LSM6DSO_XL_AND_GY_NOT_AFFECTED      = 0,
02143     LSM6DSO_XL_12Hz5_GY_NOT_AFFECTED    = 1,
02144     LSM6DSO_XL_12Hz5_GY_SLEEP           = 2,
02145     LSM6DSO_XL_12Hz5_GY_PD              = 3,
02146 } lsm6dso_inact_en_t;
02147 int32_t lsm6dso_act_mode_set(lsm6dso_ctx_t *ctx, lsm6dso_inact_en_t val);
02148 int32_t lsm6dso_act_mode_get(lsm6dso_ctx_t *ctx, lsm6dso_inact_en_t *val);
02149 
02150 int32_t lsm6dso_act_sleep_dur_set(lsm6dso_ctx_t *ctx, uint8_t val);
02151 int32_t lsm6dso_act_sleep_dur_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02152 
02153 int32_t lsm6dso_tap_detection_on_z_set(lsm6dso_ctx_t *ctx, uint8_t val);
02154 int32_t lsm6dso_tap_detection_on_z_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02155 
02156 int32_t lsm6dso_tap_detection_on_y_set(lsm6dso_ctx_t *ctx, uint8_t val);
02157 int32_t lsm6dso_tap_detection_on_y_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02158 
02159 int32_t lsm6dso_tap_detection_on_x_set(lsm6dso_ctx_t *ctx, uint8_t val);
02160 int32_t lsm6dso_tap_detection_on_x_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02161 
02162 int32_t lsm6dso_tap_threshold_x_set(lsm6dso_ctx_t *ctx, uint8_t val);
02163 int32_t lsm6dso_tap_threshold_x_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02164 
02165 typedef enum {
02166     LSM6DSO_XYZ = 0,
02167     LSM6DSO_YXZ = 1,
02168     LSM6DSO_XZY = 2,
02169     LSM6DSO_ZYX = 3,
02170     LSM6DSO_YZX = 5,
02171     LSM6DSO_ZXY = 6,
02172 } lsm6dso_tap_priority_t;
02173 int32_t lsm6dso_tap_axis_priority_set(lsm6dso_ctx_t *ctx,
02174                                       lsm6dso_tap_priority_t val);
02175 int32_t lsm6dso_tap_axis_priority_get(lsm6dso_ctx_t *ctx,
02176                                       lsm6dso_tap_priority_t *val);
02177 
02178 int32_t lsm6dso_tap_threshold_y_set(lsm6dso_ctx_t *ctx, uint8_t val);
02179 int32_t lsm6dso_tap_threshold_y_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02180 
02181 int32_t lsm6dso_tap_threshold_z_set(lsm6dso_ctx_t *ctx, uint8_t val);
02182 int32_t lsm6dso_tap_threshold_z_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02183 
02184 int32_t lsm6dso_tap_shock_set(lsm6dso_ctx_t *ctx, uint8_t val);
02185 int32_t lsm6dso_tap_shock_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02186 
02187 int32_t lsm6dso_tap_quiet_set(lsm6dso_ctx_t *ctx, uint8_t val);
02188 int32_t lsm6dso_tap_quiet_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02189 
02190 int32_t lsm6dso_tap_dur_set(lsm6dso_ctx_t *ctx, uint8_t val);
02191 int32_t lsm6dso_tap_dur_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02192 
02193 typedef enum {
02194     LSM6DSO_ONLY_SINGLE = 0,
02195     LSM6DSO_BOTH_SINGLE_DOUBLE = 1,
02196 } lsm6dso_single_double_tap_t;
02197 int32_t lsm6dso_tap_mode_set(lsm6dso_ctx_t *ctx,
02198                              lsm6dso_single_double_tap_t val);
02199 int32_t lsm6dso_tap_mode_get(lsm6dso_ctx_t *ctx,
02200                              lsm6dso_single_double_tap_t *val);
02201 
02202 typedef enum {
02203     LSM6DSO_DEG_80  = 0,
02204     LSM6DSO_DEG_70  = 1,
02205     LSM6DSO_DEG_60  = 2,
02206     LSM6DSO_DEG_50  = 3,
02207 } lsm6dso_sixd_ths_t;
02208 int32_t lsm6dso_6d_threshold_set(lsm6dso_ctx_t *ctx, lsm6dso_sixd_ths_t val);
02209 int32_t lsm6dso_6d_threshold_get(lsm6dso_ctx_t *ctx, lsm6dso_sixd_ths_t *val);
02210 
02211 int32_t lsm6dso_4d_mode_set(lsm6dso_ctx_t *ctx, uint8_t val);
02212 int32_t lsm6dso_4d_mode_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02213 
02214 typedef enum {
02215     LSM6DSO_FF_TSH_156mg = 0,
02216     LSM6DSO_FF_TSH_219mg = 1,
02217     LSM6DSO_FF_TSH_250mg = 2,
02218     LSM6DSO_FF_TSH_312mg = 3,
02219     LSM6DSO_FF_TSH_344mg = 4,
02220     LSM6DSO_FF_TSH_406mg = 5,
02221     LSM6DSO_FF_TSH_469mg = 6,
02222     LSM6DSO_FF_TSH_500mg = 7,
02223 } lsm6dso_ff_ths_t;
02224 int32_t lsm6dso_ff_threshold_set(lsm6dso_ctx_t *ctx, lsm6dso_ff_ths_t val);
02225 int32_t lsm6dso_ff_threshold_get(lsm6dso_ctx_t *ctx, lsm6dso_ff_ths_t *val);
02226 
02227 int32_t lsm6dso_ff_dur_set(lsm6dso_ctx_t *ctx, uint8_t val);
02228 int32_t lsm6dso_ff_dur_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02229 
02230 int32_t lsm6dso_fifo_watermark_set(lsm6dso_ctx_t *ctx, uint16_t val);
02231 int32_t lsm6dso_fifo_watermark_get(lsm6dso_ctx_t *ctx, uint16_t *val);
02232 
02233 int32_t lsm6dso_compression_algo_init_set(lsm6dso_ctx_t *ctx, uint8_t val);
02234 int32_t lsm6dso_compression_algo_init_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02235 
02236 typedef enum {
02237     LSM6DSO_CMP_DISABLE  = 0x00,
02238     LSM6DSO_CMP_ALWAYS   = 0x04,
02239     LSM6DSO_CMP_8_TO_1   = 0x05,
02240     LSM6DSO_CMP_16_TO_1  = 0x06,
02241     LSM6DSO_CMP_32_TO_1  = 0x07,
02242 } lsm6dso_uncoptr_rate_t;
02243 int32_t lsm6dso_compression_algo_set(lsm6dso_ctx_t *ctx,
02244                                      lsm6dso_uncoptr_rate_t val);
02245 int32_t lsm6dso_compression_algo_get(lsm6dso_ctx_t *ctx,
02246                                      lsm6dso_uncoptr_rate_t *val);
02247 
02248 int32_t lsm6dso_fifo_virtual_sens_odr_chg_set(lsm6dso_ctx_t *ctx,
02249                                               uint8_t val);
02250 int32_t lsm6dso_fifo_virtual_sens_odr_chg_get(lsm6dso_ctx_t *ctx,
02251                                               uint8_t *val);
02252 
02253 int32_t lsm6dso_compression_algo_real_time_set(lsm6dso_ctx_t *ctx,
02254                                                uint8_t val);
02255 int32_t lsm6dso_compression_algo_real_time_get(lsm6dso_ctx_t *ctx,
02256                                                uint8_t *val);
02257 
02258 int32_t lsm6dso_fifo_stop_on_wtm_set(lsm6dso_ctx_t *ctx, uint8_t val);
02259 int32_t lsm6dso_fifo_stop_on_wtm_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02260 
02261 typedef enum {
02262     LSM6DSO_XL_NOT_BATCHED        =  0,
02263     LSM6DSO_XL_BATCHED_AT_12Hz5   =  1,
02264     LSM6DSO_XL_BATCHED_AT_26Hz    =  2,
02265     LSM6DSO_XL_BATCHED_AT_52Hz    =  3,
02266     LSM6DSO_XL_BATCHED_AT_104Hz   =  4,
02267     LSM6DSO_XL_BATCHED_AT_208Hz   =  5,
02268     LSM6DSO_XL_BATCHED_AT_417Hz   =  6,
02269     LSM6DSO_XL_BATCHED_AT_833Hz   =  7,
02270     LSM6DSO_XL_BATCHED_AT_1667Hz  =  8,
02271     LSM6DSO_XL_BATCHED_AT_3333Hz  =  9,
02272     LSM6DSO_XL_BATCHED_AT_6667Hz  = 10,
02273     LSM6DSO_XL_BATCHED_AT_6Hz5    = 11,
02274 } lsm6dso_bdr_xl_t;
02275 int32_t lsm6dso_fifo_xl_batch_set(lsm6dso_ctx_t *ctx, lsm6dso_bdr_xl_t val);
02276 int32_t lsm6dso_fifo_xl_batch_get(lsm6dso_ctx_t *ctx, lsm6dso_bdr_xl_t *val);
02277 
02278 typedef enum {
02279     LSM6DSO_GY_NOT_BATCHED         = 0,
02280     LSM6DSO_GY_BATCHED_AT_12Hz5    = 1,
02281     LSM6DSO_GY_BATCHED_AT_26Hz     = 2,
02282     LSM6DSO_GY_BATCHED_AT_52Hz     = 3,
02283     LSM6DSO_GY_BATCHED_AT_104Hz    = 4,
02284     LSM6DSO_GY_BATCHED_AT_208Hz    = 5,
02285     LSM6DSO_GY_BATCHED_AT_417Hz    = 6,
02286     LSM6DSO_GY_BATCHED_AT_833Hz    = 7,
02287     LSM6DSO_GY_BATCHED_AT_1667Hz   = 8,
02288     LSM6DSO_GY_BATCHED_AT_3333Hz   = 9,
02289     LSM6DSO_GY_BATCHED_AT_6667Hz   = 10,
02290     LSM6DSO_GY_BATCHED_AT_6Hz5     = 11,
02291 } lsm6dso_bdr_gy_t;
02292 int32_t lsm6dso_fifo_gy_batch_set(lsm6dso_ctx_t *ctx, lsm6dso_bdr_gy_t val);
02293 int32_t lsm6dso_fifo_gy_batch_get(lsm6dso_ctx_t *ctx, lsm6dso_bdr_gy_t *val);
02294 
02295 typedef enum {
02296     LSM6DSO_BYPASS_MODE             = 0,
02297     LSM6DSO_FIFO_MODE               = 1,
02298     LSM6DSO_STREAM_TO_FIFO_MODE     = 3,
02299     LSM6DSO_BYPASS_TO_STREAM_MODE   = 4,
02300     LSM6DSO_STREAM_MODE             = 6,
02301     LSM6DSO_BYPASS_TO_FIFO_MODE     = 7,
02302 } lsm6dso_fifo_mode_t;
02303 int32_t lsm6dso_fifo_mode_set(lsm6dso_ctx_t *ctx, lsm6dso_fifo_mode_t val);
02304 int32_t lsm6dso_fifo_mode_get(lsm6dso_ctx_t *ctx, lsm6dso_fifo_mode_t *val);
02305 
02306 typedef enum {
02307     LSM6DSO_TEMP_NOT_BATCHED        = 0,
02308     LSM6DSO_TEMP_BATCHED_AT_1Hz6    = 1,
02309     LSM6DSO_TEMP_BATCHED_AT_12Hz5   = 2,
02310     LSM6DSO_TEMP_BATCHED_AT_52Hz    = 3,
02311 } lsm6dso_odr_t_batch_t;
02312 int32_t lsm6dso_fifo_temp_batch_set(lsm6dso_ctx_t *ctx,
02313                                     lsm6dso_odr_t_batch_t val);
02314 int32_t lsm6dso_fifo_temp_batch_get(lsm6dso_ctx_t *ctx,
02315                                     lsm6dso_odr_t_batch_t *val);
02316 
02317 typedef enum {
02318     LSM6DSO_NO_DECIMATION = 0,
02319     LSM6DSO_DEC_1         = 1,
02320     LSM6DSO_DEC_8         = 2,
02321     LSM6DSO_DEC_32        = 3,
02322 } lsm6dso_odr_ts_batch_t;
02323 int32_t lsm6dso_fifo_timestamp_decimation_set(lsm6dso_ctx_t *ctx,
02324                                               lsm6dso_odr_ts_batch_t val);
02325 int32_t lsm6dso_fifo_timestamp_decimation_get(lsm6dso_ctx_t *ctx,
02326                                               lsm6dso_odr_ts_batch_t *val);
02327 
02328 typedef enum {
02329     LSM6DSO_XL_BATCH_EVENT   = 0,
02330     LSM6DSO_GYRO_BATCH_EVENT = 1,
02331 } lsm6dso_trig_counter_bdr_t;
02332 
02333 typedef enum {
02334     LSM6DSO_GYRO_NC_TAG       = 1,
02335     LSM6DSO_XL_NC_TAG,
02336     LSM6DSO_TEMPERATURE_TAG,
02337     LSM6DSO_TIMESTAMP_TAG,
02338     LSM6DSO_CFG_CHANGE_TAG,
02339     LSM6DSO_XL_NC_T_2_TAG,
02340     LSM6DSO_XL_NC_T_1_TAG,
02341     LSM6DSO_XL_2XC_TAG,
02342     LSM6DSO_XL_3XC_TAG,
02343     LSM6DSO_GYRO_NC_T_2_TAG,
02344     LSM6DSO_GYRO_NC_T_1_TAG,
02345     LSM6DSO_GYRO_2XC_TAG,
02346     LSM6DSO_GYRO_3XC_TAG,
02347     LSM6DSO_SENSORHUB_SLAVE0_TAG,
02348     LSM6DSO_SENSORHUB_SLAVE1_TAG,
02349     LSM6DSO_SENSORHUB_SLAVE2_TAG,
02350     LSM6DSO_SENSORHUB_SLAVE3_TAG,
02351     LSM6DSO_STEP_CPUNTER_TAG,
02352     LSM6DSO_GAME_ROTATION_TAG,
02353     LSM6DSO_GEOMAG_ROTATION_TAG,
02354     LSM6DSO_ROTATION_TAG,
02355     LSM6DSO_SENSORHUB_NACK_TAG    = 0x19,
02356 } lsm6dso_fifo_tag_t;
02357 int32_t lsm6dso_fifo_cnt_event_batch_set(lsm6dso_ctx_t *ctx,
02358                                          lsm6dso_trig_counter_bdr_t val);
02359 int32_t lsm6dso_fifo_cnt_event_batch_get(lsm6dso_ctx_t *ctx,
02360                                          lsm6dso_trig_counter_bdr_t *val);
02361 
02362 int32_t lsm6dso_rst_batch_counter_set(lsm6dso_ctx_t *ctx, uint8_t val);
02363 int32_t lsm6dso_rst_batch_counter_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02364 
02365 int32_t lsm6dso_batch_counter_threshold_set(lsm6dso_ctx_t *ctx,
02366                                             uint16_t val);
02367 int32_t lsm6dso_batch_counter_threshold_get(lsm6dso_ctx_t *ctx,
02368                                             uint16_t *val);
02369 
02370 int32_t lsm6dso_fifo_data_level_get(lsm6dso_ctx_t *ctx, uint16_t *val);
02371 
02372 int32_t lsm6dso_fifo_status_get(lsm6dso_ctx_t *ctx,
02373                                 lsm6dso_fifo_status2_t *val);
02374 
02375 int32_t lsm6dso_fifo_full_flag_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02376 
02377 int32_t lsm6dso_fifo_ovr_flag_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02378 
02379 int32_t lsm6dso_fifo_wtm_flag_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02380 
02381 int32_t lsm6dso_fifo_sensor_tag_get(lsm6dso_ctx_t *ctx,
02382                                     lsm6dso_fifo_tag_t *val);
02383 
02384 int32_t lsm6dso_fifo_pedo_batch_set(lsm6dso_ctx_t *ctx, uint8_t val);
02385 int32_t lsm6dso_fifo_pedo_batch_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02386 
02387 int32_t lsm6dso_sh_batch_slave_0_set(lsm6dso_ctx_t *ctx, uint8_t val);
02388 int32_t lsm6dso_sh_batch_slave_0_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02389 
02390 int32_t lsm6dso_sh_batch_slave_1_set(lsm6dso_ctx_t *ctx, uint8_t val);
02391 int32_t lsm6dso_sh_batch_slave_1_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02392 
02393 int32_t lsm6dso_sh_batch_slave_2_set(lsm6dso_ctx_t *ctx, uint8_t val);
02394 int32_t lsm6dso_sh_batch_slave_2_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02395 
02396 int32_t lsm6dso_sh_batch_slave_3_set(lsm6dso_ctx_t *ctx, uint8_t val);
02397 int32_t lsm6dso_sh_batch_slave_3_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02398 
02399 typedef enum {
02400     LSM6DSO_DEN_DISABLE    = 0,
02401     LSM6DSO_LEVEL_FIFO     = 6,
02402     LSM6DSO_LEVEL_LETCHED  = 3,
02403     LSM6DSO_LEVEL_TRIGGER  = 2,
02404     LSM6DSO_EDGE_TRIGGER   = 4,
02405 } lsm6dso_den_mode_t;
02406 int32_t lsm6dso_den_mode_set(lsm6dso_ctx_t *ctx, lsm6dso_den_mode_t val);
02407 int32_t lsm6dso_den_mode_get(lsm6dso_ctx_t *ctx, lsm6dso_den_mode_t *val);
02408 
02409 typedef enum {
02410     LSM6DSO_DEN_ACT_LOW  = 0,
02411     LSM6DSO_DEN_ACT_HIGH = 1,
02412 } lsm6dso_den_lh_t;
02413 int32_t lsm6dso_den_polarity_set(lsm6dso_ctx_t *ctx, lsm6dso_den_lh_t val);
02414 int32_t lsm6dso_den_polarity_get(lsm6dso_ctx_t *ctx, lsm6dso_den_lh_t *val);
02415 
02416 typedef enum {
02417     LSM6DSO_STAMP_IN_GY_DATA     = 0,
02418     LSM6DSO_STAMP_IN_XL_DATA     = 1,
02419     LSM6DSO_STAMP_IN_GY_XL_DATA  = 2,
02420 } lsm6dso_den_xl_g_t;
02421 int32_t lsm6dso_den_enable_set(lsm6dso_ctx_t *ctx, lsm6dso_den_xl_g_t val);
02422 int32_t lsm6dso_den_enable_get(lsm6dso_ctx_t *ctx, lsm6dso_den_xl_g_t *val);
02423 
02424 int32_t lsm6dso_den_mark_axis_x_set(lsm6dso_ctx_t *ctx, uint8_t val);
02425 int32_t lsm6dso_den_mark_axis_x_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02426 
02427 int32_t lsm6dso_den_mark_axis_y_set(lsm6dso_ctx_t *ctx, uint8_t val);
02428 int32_t lsm6dso_den_mark_axis_y_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02429 
02430 int32_t lsm6dso_den_mark_axis_z_set(lsm6dso_ctx_t *ctx, uint8_t val);
02431 int32_t lsm6dso_den_mark_axis_z_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02432 
02433 typedef enum {
02434     LSM6DSO_PEDO_DISABLE              = 0x00,
02435     LSM6DSO_PEDO_BASE_MODE            = 0x01,
02436     LSM6DSO_PEDO_ADV_MODE             = 0x03,
02437     LSM6DSO_FALSE_STEP_REJ            = 0x13,
02438     LSM6DSO_FALSE_STEP_REJ_ADV_MODE   = 0x33,
02439 } lsm6dso_pedo_md_t;
02440 int32_t lsm6dso_pedo_sens_set(lsm6dso_ctx_t *ctx, lsm6dso_pedo_md_t val);
02441 int32_t lsm6dso_pedo_sens_get(lsm6dso_ctx_t *ctx, lsm6dso_pedo_md_t *val);
02442 
02443 int32_t lsm6dso_pedo_step_detect_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02444 
02445 int32_t lsm6dso_pedo_debounce_steps_set(lsm6dso_ctx_t *ctx,
02446                                         uint8_t *buff);
02447 int32_t lsm6dso_pedo_debounce_steps_get(lsm6dso_ctx_t *ctx,
02448                                         uint8_t *buff);
02449 
02450 int32_t lsm6dso_pedo_steps_period_set(lsm6dso_ctx_t *ctx, uint8_t *buff);
02451 int32_t lsm6dso_pedo_steps_period_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
02452 
02453 typedef enum {
02454     LSM6DSO_EVERY_STEP     = 0,
02455     LSM6DSO_COUNT_OVERFLOW = 1,
02456 } lsm6dso_carry_count_en_t;
02457 int32_t lsm6dso_pedo_int_mode_set(lsm6dso_ctx_t *ctx,
02458                                   lsm6dso_carry_count_en_t val);
02459 int32_t lsm6dso_pedo_int_mode_get(lsm6dso_ctx_t *ctx,
02460                                   lsm6dso_carry_count_en_t *val);
02461 
02462 int32_t lsm6dso_motion_sens_set(lsm6dso_ctx_t *ctx, uint8_t val);
02463 int32_t lsm6dso_motion_sens_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02464 
02465 int32_t lsm6dso_motion_flag_data_ready_get(lsm6dso_ctx_t *ctx,
02466                                            uint8_t *val);
02467 
02468 int32_t lsm6dso_tilt_sens_set(lsm6dso_ctx_t *ctx, uint8_t val);
02469 int32_t lsm6dso_tilt_sens_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02470 
02471 int32_t lsm6dso_tilt_flag_data_ready_get(lsm6dso_ctx_t *ctx,
02472                                          uint8_t *val);
02473 
02474 int32_t lsm6dso_mag_sensitivity_set(lsm6dso_ctx_t *ctx, uint8_t *buff);
02475 int32_t lsm6dso_mag_sensitivity_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
02476 
02477 int32_t lsm6dso_mag_offset_set(lsm6dso_ctx_t *ctx, uint8_t *buff);
02478 int32_t lsm6dso_mag_offset_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
02479 
02480 int32_t lsm6dso_mag_soft_iron_set(lsm6dso_ctx_t *ctx, uint8_t *buff);
02481 int32_t lsm6dso_mag_soft_iron_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
02482 
02483 typedef enum {
02484     LSM6DSO_Z_EQ_Y     = 0,
02485     LSM6DSO_Z_EQ_MIN_Y = 1,
02486     LSM6DSO_Z_EQ_X     = 2,
02487     LSM6DSO_Z_EQ_MIN_X = 3,
02488     LSM6DSO_Z_EQ_MIN_Z = 4,
02489     LSM6DSO_Z_EQ_Z     = 5,
02490 } lsm6dso_mag_z_axis_t;
02491 int32_t lsm6dso_mag_z_orient_set(lsm6dso_ctx_t *ctx,
02492                                  lsm6dso_mag_z_axis_t val);
02493 int32_t lsm6dso_mag_z_orient_get(lsm6dso_ctx_t *ctx,
02494                                  lsm6dso_mag_z_axis_t *val);
02495 
02496 typedef enum {
02497     LSM6DSO_Y_EQ_Y     = 0,
02498     LSM6DSO_Y_EQ_MIN_Y = 1,
02499     LSM6DSO_Y_EQ_X     = 2,
02500     LSM6DSO_Y_EQ_MIN_X = 3,
02501     LSM6DSO_Y_EQ_MIN_Z = 4,
02502     LSM6DSO_Y_EQ_Z     = 5,
02503 } lsm6dso_mag_y_axis_t;
02504 int32_t lsm6dso_mag_y_orient_set(lsm6dso_ctx_t *ctx,
02505                                  lsm6dso_mag_y_axis_t val);
02506 int32_t lsm6dso_mag_y_orient_get(lsm6dso_ctx_t *ctx,
02507                                  lsm6dso_mag_y_axis_t *val);
02508 
02509 typedef enum {
02510     LSM6DSO_X_EQ_Y     = 0,
02511     LSM6DSO_X_EQ_MIN_Y = 1,
02512     LSM6DSO_X_EQ_X     = 2,
02513     LSM6DSO_X_EQ_MIN_X = 3,
02514     LSM6DSO_X_EQ_MIN_Z = 4,
02515     LSM6DSO_X_EQ_Z     = 5,
02516 } lsm6dso_mag_x_axis_t;
02517 int32_t lsm6dso_mag_x_orient_set(lsm6dso_ctx_t *ctx,
02518                                  lsm6dso_mag_x_axis_t val);
02519 int32_t lsm6dso_mag_x_orient_get(lsm6dso_ctx_t *ctx,
02520                                  lsm6dso_mag_x_axis_t *val);
02521 
02522 int32_t lsm6dso_long_cnt_flag_data_ready_get(lsm6dso_ctx_t *ctx,
02523                                              uint8_t *val);
02524 
02525 int32_t lsm6dso_emb_fsm_en_set(lsm6dso_ctx_t *ctx, uint8_t val);
02526 int32_t lsm6dso_emb_fsm_en_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02527 
02528 typedef struct {
02529     lsm6dso_fsm_enable_a_t          fsm_enable_a;
02530     lsm6dso_fsm_enable_b_t          fsm_enable_b;
02531 } lsm6dso_emb_fsm_enable_t;
02532 int32_t lsm6dso_fsm_enable_set(lsm6dso_ctx_t *ctx,
02533                                lsm6dso_emb_fsm_enable_t *val);
02534 int32_t lsm6dso_fsm_enable_get(lsm6dso_ctx_t *ctx,
02535                                lsm6dso_emb_fsm_enable_t *val);
02536 
02537 int32_t lsm6dso_long_cnt_set(lsm6dso_ctx_t *ctx, uint8_t *buff);
02538 int32_t lsm6dso_long_cnt_get(lsm6dso_ctx_t *ctx, uint8_t *buff);
02539 
02540 typedef enum {
02541     LSM6DSO_LC_NORMAL     = 0,
02542     LSM6DSO_LC_CLEAR      = 1,
02543     LSM6DSO_LC_CLEAR_DONE = 2,
02544 } lsm6dso_fsm_lc_clr_t;
02545 int32_t lsm6dso_long_clr_set(lsm6dso_ctx_t *ctx, lsm6dso_fsm_lc_clr_t val);
02546 int32_t lsm6dso_long_clr_get(lsm6dso_ctx_t *ctx, lsm6dso_fsm_lc_clr_t *val);
02547 
02548 typedef struct {
02549     lsm6dso_fsm_outs1_t    fsm_outs1;
02550     lsm6dso_fsm_outs2_t    fsm_outs2;
02551     lsm6dso_fsm_outs3_t    fsm_outs3;
02552     lsm6dso_fsm_outs4_t    fsm_outs4;
02553     lsm6dso_fsm_outs5_t    fsm_outs5;
02554     lsm6dso_fsm_outs6_t    fsm_outs6;
02555     lsm6dso_fsm_outs7_t    fsm_outs7;
02556     lsm6dso_fsm_outs8_t    fsm_outs8;
02557     lsm6dso_fsm_outs9_t    fsm_outs9;
02558     lsm6dso_fsm_outs10_t   fsm_outs10;
02559     lsm6dso_fsm_outs11_t   fsm_outs11;
02560     lsm6dso_fsm_outs12_t   fsm_outs12;
02561     lsm6dso_fsm_outs13_t   fsm_outs13;
02562     lsm6dso_fsm_outs14_t   fsm_outs14;
02563     lsm6dso_fsm_outs15_t   fsm_outs15;
02564     lsm6dso_fsm_outs16_t   fsm_outs16;
02565 } lsm6dso_fsm_out_t;
02566 int32_t lsm6dso_fsm_out_get(lsm6dso_ctx_t *ctx, lsm6dso_fsm_out_t *val);
02567 
02568 typedef enum {
02569     LSM6DSO_ODR_FSM_12Hz5 = 0,
02570     LSM6DSO_ODR_FSM_26Hz  = 1,
02571     LSM6DSO_ODR_FSM_52Hz  = 2,
02572     LSM6DSO_ODR_FSM_104Hz = 3,
02573 } lsm6dso_fsm_odr_t;
02574 int32_t lsm6dso_fsm_data_rate_set(lsm6dso_ctx_t *ctx, lsm6dso_fsm_odr_t val);
02575 int32_t lsm6dso_fsm_data_rate_get(lsm6dso_ctx_t *ctx, lsm6dso_fsm_odr_t *val);
02576 
02577 int32_t lsm6dso_fsm_init_set(lsm6dso_ctx_t *ctx, uint8_t val);
02578 int32_t lsm6dso_fsm_init_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02579 
02580 int32_t lsm6dso_long_cnt_int_value_set(lsm6dso_ctx_t *ctx, uint16_t val);
02581 int32_t lsm6dso_long_cnt_int_value_get(lsm6dso_ctx_t *ctx, uint16_t *val);
02582 
02583 int32_t lsm6dso_fsm_number_of_programs_set(lsm6dso_ctx_t *ctx, uint8_t val);
02584 int32_t lsm6dso_fsm_number_of_programs_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02585 
02586 int32_t lsm6dso_fsm_start_address_set(lsm6dso_ctx_t *ctx, uint16_t val);
02587 int32_t lsm6dso_fsm_start_address_get(lsm6dso_ctx_t *ctx, uint16_t *val);
02588 
02589 int32_t lsm6dso_sh_read_data_raw_get(lsm6dso_ctx_t *ctx, uint8_t *val,
02590                                      uint8_t len);
02591 
02592 typedef enum {
02593     LSM6DSO_SLV_0       = 0,
02594     LSM6DSO_SLV_0_1     = 1,
02595     LSM6DSO_SLV_0_1_2   = 2,
02596     LSM6DSO_SLV_0_1_2_3 = 3,
02597 } lsm6dso_aux_sens_on_t;
02598 int32_t lsm6dso_sh_slave_connected_set(lsm6dso_ctx_t *ctx,
02599                                        lsm6dso_aux_sens_on_t val);
02600 int32_t lsm6dso_sh_slave_connected_get(lsm6dso_ctx_t *ctx,
02601                                        lsm6dso_aux_sens_on_t *val);
02602 
02603 int32_t lsm6dso_sh_master_set(lsm6dso_ctx_t *ctx, uint8_t val);
02604 int32_t lsm6dso_sh_master_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02605 
02606 typedef enum {
02607     LSM6DSO_EXT_PULL_UP      = 0,
02608     LSM6DSO_INTERNAL_PULL_UP = 1,
02609 } lsm6dso_shub_pu_en_t;
02610 int32_t lsm6dso_sh_pin_mode_set(lsm6dso_ctx_t *ctx, lsm6dso_shub_pu_en_t val);
02611 int32_t lsm6dso_sh_pin_mode_get(lsm6dso_ctx_t *ctx, lsm6dso_shub_pu_en_t *val);
02612 
02613 int32_t lsm6dso_sh_pass_through_set(lsm6dso_ctx_t *ctx, uint8_t val);
02614 int32_t lsm6dso_sh_pass_through_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02615 
02616 typedef enum {
02617     LSM6DSO_EXT_ON_INT2_PIN = 0,
02618     LSM6DSO_XL_GY_DRDY      = 1,
02619 } lsm6dso_start_config_t;
02620 int32_t lsm6dso_sh_syncro_mode_set(lsm6dso_ctx_t *ctx,
02621                                    lsm6dso_start_config_t val);
02622 int32_t lsm6dso_sh_syncro_mode_get(lsm6dso_ctx_t *ctx,
02623                                    lsm6dso_start_config_t *val);
02624 
02625 typedef enum {
02626     LSM6DSO_EACH_SH_CYCLE    = 0,
02627     LSM6DSO_ONLY_FIRST_CYCLE = 1,
02628 } lsm6dso_write_once_t;
02629 int32_t lsm6dso_sh_write_mode_set(lsm6dso_ctx_t *ctx,
02630                                   lsm6dso_write_once_t val);
02631 int32_t lsm6dso_sh_write_mode_get(lsm6dso_ctx_t *ctx,
02632                                   lsm6dso_write_once_t *val);
02633 
02634 int32_t lsm6dso_sh_reset_set(lsm6dso_ctx_t *ctx);
02635 int32_t lsm6dso_sh_reset_get(lsm6dso_ctx_t *ctx, uint8_t *val);
02636 
02637 typedef enum {
02638     LSM6DSO_SH_ODR_104Hz = 0,
02639     LSM6DSO_SH_ODR_52Hz  = 1,
02640     LSM6DSO_SH_ODR_26Hz  = 2,
02641     LSM6DSO_SH_ODR_13Hz  = 3,
02642 } lsm6dso_shub_odr_t;
02643 int32_t lsm6dso_sh_data_rate_set(lsm6dso_ctx_t *ctx, lsm6dso_shub_odr_t val);
02644 int32_t lsm6dso_sh_data_rate_get(lsm6dso_ctx_t *ctx, lsm6dso_shub_odr_t *val);
02645 
02646 typedef struct {
02647     uint8_t   slv0_add;
02648     uint8_t   slv0_subadd;
02649     uint8_t   slv0_data;
02650 } lsm6dso_sh_cfg_write_t;
02651 int32_t lsm6dso_sh_cfg_write(lsm6dso_ctx_t *ctx, lsm6dso_sh_cfg_write_t *val);
02652 
02653 typedef struct {
02654     uint8_t   slv_add;
02655     uint8_t   slv_subadd;
02656     uint8_t   slv_len;
02657 } lsm6dso_sh_cfg_read_t;
02658 int32_t lsm6dso_sh_slv0_cfg_read(lsm6dso_ctx_t *ctx,
02659                                  lsm6dso_sh_cfg_read_t *val);
02660 int32_t lsm6dso_sh_slv1_cfg_read(lsm6dso_ctx_t *ctx,
02661                                  lsm6dso_sh_cfg_read_t *val);
02662 int32_t lsm6dso_sh_slv2_cfg_read(lsm6dso_ctx_t *ctx,
02663                                  lsm6dso_sh_cfg_read_t *val);
02664 int32_t lsm6dso_sh_slv3_cfg_read(lsm6dso_ctx_t *ctx,
02665                                  lsm6dso_sh_cfg_read_t *val);
02666 
02667 int32_t lsm6dso_sh_status_get(lsm6dso_ctx_t *ctx,
02668                               lsm6dso_status_master_t *val);
02669 
02670 /**
02671   * @}
02672   *
02673   */
02674 
02675 #ifdef __cplusplus
02676 }
02677 #endif
02678 
02679 #endif /*LSM6DSO_DRIVER_H */
02680 
02681 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/