iNEMO inertial module: 3D accelerometer and 3D gyroscope.

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

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