1 /**
2   ******************************************************************************
3   * @file    lsm6dsv16bx_reg.h
4   * @author  Sensors Software Solution Team
5   * @brief   This file contains all the functions prototypes for the
6   *          lsm6dsv16bx_reg.c driver.
7   ******************************************************************************
8   * @attention
9   *
10   * <h2><center>&copy; Copyright (c) 2024 STMicroelectronics.
11   * All rights reserved.</center></h2>
12   *
13   * This software component is licensed by ST under BSD 3-Clause license,
14   * the "License"; You may not use this file except in compliance with the
15   * License. You may obtain a copy of the License at:
16   *                        opensource.org/licenses/BSD-3-Clause
17   *
18   ******************************************************************************
19   */
20 
21 /* Define to prevent recursive inclusion -------------------------------------*/
22 #ifndef LSM6DSV16BX_REGS_H
23 #define LSM6DSV16BX_REGS_H
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 /* Includes ------------------------------------------------------------------*/
30 #include <stdint.h>
31 #include <stddef.h>
32 #include <math.h>
33 
34 /** @addtogroup LSM6DSV16BX
35   * @{
36   *
37   */
38 
39 /** @defgroup  Endianness definitions
40   * @{
41   *
42   */
43 
44 #ifndef DRV_BYTE_ORDER
45 #ifndef __BYTE_ORDER__
46 
47 #define DRV_LITTLE_ENDIAN 1234
48 #define DRV_BIG_ENDIAN    4321
49 
50 /** if _BYTE_ORDER is not defined, choose the endianness of your architecture
51   * by uncommenting the define which fits your platform endianness
52   */
53 //#define DRV_BYTE_ORDER    DRV_BIG_ENDIAN
54 #define DRV_BYTE_ORDER    DRV_LITTLE_ENDIAN
55 
56 #else /* defined __BYTE_ORDER__ */
57 
58 #define DRV_LITTLE_ENDIAN  __ORDER_LITTLE_ENDIAN__
59 #define DRV_BIG_ENDIAN     __ORDER_BIG_ENDIAN__
60 #define DRV_BYTE_ORDER     __BYTE_ORDER__
61 
62 #endif /* __BYTE_ORDER__*/
63 #endif /* DRV_BYTE_ORDER */
64 
65 /**
66   * @}
67   *
68   */
69 
70 /** @defgroup STMicroelectronics sensors common types
71   * @{
72   *
73   */
74 
75 #ifndef MEMS_SHARED_TYPES
76 #define MEMS_SHARED_TYPES
77 
78 typedef struct
79 {
80 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
81   uint8_t bit0                          : 1;
82   uint8_t bit1                          : 1;
83   uint8_t bit2                          : 1;
84   uint8_t bit3                          : 1;
85   uint8_t bit4                          : 1;
86   uint8_t bit5                          : 1;
87   uint8_t bit6                          : 1;
88   uint8_t bit7                          : 1;
89 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
90   uint8_t bit7                          : 1;
91   uint8_t bit6                          : 1;
92   uint8_t bit5                          : 1;
93   uint8_t bit4                          : 1;
94   uint8_t bit3                          : 1;
95   uint8_t bit2                          : 1;
96   uint8_t bit1                          : 1;
97   uint8_t bit0                          : 1;
98 #endif /* DRV_BYTE_ORDER */
99 } bitwise_t;
100 
101 #define PROPERTY_DISABLE                (0U)
102 #define PROPERTY_ENABLE                 (1U)
103 
104 /** @addtogroup  Interfaces_Functions
105   * @brief       This section provide a set of functions used to read and
106   *              write a generic register of the device.
107   *              MANDATORY: return 0 -> no Error.
108   * @{
109   *
110   */
111 
112 typedef int32_t (*stmdev_write_ptr)(void *, uint8_t, const uint8_t *, uint16_t);
113 typedef int32_t (*stmdev_read_ptr)(void *, uint8_t, uint8_t *, uint16_t);
114 typedef void (*stmdev_mdelay_ptr)(uint32_t millisec);
115 
116 typedef struct
117 {
118   /** Component mandatory fields **/
119   stmdev_write_ptr  write_reg;
120   stmdev_read_ptr   read_reg;
121   /** Component optional fields **/
122   stmdev_mdelay_ptr   mdelay;
123   /** Customizable optional pointer **/
124   void *handle;
125 } stmdev_ctx_t;
126 
127 /**
128   * @}
129   *
130   */
131 
132 #endif /* MEMS_SHARED_TYPES */
133 
134 #ifndef MEMS_UCF_SHARED_TYPES
135 #define MEMS_UCF_SHARED_TYPES
136 
137 /** @defgroup    Generic address-data structure definition
138   * @brief       This structure is useful to load a predefined configuration
139   *              of a sensor.
140   *              You can create a sensor configuration by your own or using
141   *              Unico / Unicleo tools available on STMicroelectronics
142   *              web site.
143   *
144   * @{
145   *
146   */
147 
148 typedef struct
149 {
150   uint8_t address;
151   uint8_t data;
152 } ucf_line_t;
153 
154 /**
155   * @}
156   *
157   */
158 
159 #endif /* MEMS_UCF_SHARED_TYPES */
160 
161 /**
162   * @}
163   *
164   */
165 
166 /** @defgroup LSM6DSV16BX_Infos
167   * @{
168   *
169   */
170 
171 /** I2C Device Address 8 bit format  if SA0=0 -> D5 if SA0=1 -> D7 **/
172 #define LSM6DSV16BX_I2C_ADD_L                     0xD5U
173 #define LSM6DSV16BX_I2C_ADD_H                     0xD7U
174 
175 /** Device Identification (Who am I) **/
176 #define LSM6DSV16BX_ID                            0x71U
177 
178 /**
179   * @}
180   *
181   */
182 
183 /** @defgroup bitfields page main
184   * @{
185   *
186   */
187 
188 #define LSM6DSV16BX_FUNC_CFG_ACCESS               0x1U
189 typedef struct
190 {
191 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
192   uint8_t not_used0                     : 2;
193   uint8_t sw_por                        : 1;
194   uint8_t fsm_wr_ctrl_en                : 1;
195   uint8_t not_used1                     : 3;
196   uint8_t emb_func_reg_access           : 1;
197 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
198   uint8_t emb_func_reg_access           : 1;
199   uint8_t not_used1                     : 3;
200   uint8_t fsm_wr_ctrl_en                : 1;
201   uint8_t sw_por                        : 1;
202   uint8_t not_used0                     : 2;
203 #endif /* DRV_BYTE_ORDER */
204 } lsm6dsv16bx_func_cfg_access_t;
205 
206 #define LSM6DSV16BX_PIN_CTRL                      0x2U
207 typedef struct
208 {
209 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
210   uint8_t not_used0                     : 5;
211   uint8_t ibhr_por_en                   : 1;
212   uint8_t sdo_pu_en                     : 1;
213   uint8_t tdm_wclk_pu_dis               : 1;
214 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
215   uint8_t tdm_wclk_pu_dis               : 1;
216   uint8_t sdo_pu_en                     : 1;
217   uint8_t ibhr_por_en                   : 1;
218   uint8_t not_used0                     : 5;
219 #endif /* DRV_BYTE_ORDER */
220 } lsm6dsv16bx_pin_ctrl_t;
221 
222 #define LSM6DSV16BX_IF_CFG                        0x3U
223 typedef struct
224 {
225 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
226   uint8_t i2c_i3c_disable               : 1;
227   uint8_t not_used0                     : 1;
228   uint8_t sim                           : 1;
229   uint8_t pp_od                         : 1;
230   uint8_t h_lactive                     : 1;
231   uint8_t asf_ctrl                      : 1;
232   uint8_t tdm_out_pu_en                 : 1;
233   uint8_t sda_pu_en                     : 1;
234 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
235   uint8_t sda_pu_en                     : 1;
236   uint8_t tdm_out_pu_en                 : 1;
237   uint8_t asf_ctrl                      : 1;
238   uint8_t h_lactive                     : 1;
239   uint8_t pp_od                         : 1;
240   uint8_t sim                           : 1;
241   uint8_t not_used0                     : 1;
242   uint8_t i2c_i3c_disable               : 1;
243 #endif /* DRV_BYTE_ORDER */
244 } lsm6dsv16bx_if_cfg_t;
245 
246 #define LSM6DSV16BX_FIFO_CTRL1                    0x7U
247 typedef struct
248 {
249 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
250   uint8_t wtm                           : 8;
251 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
252   uint8_t wtm                           : 8;
253 #endif /* DRV_BYTE_ORDER */
254 } lsm6dsv16bx_fifo_ctrl1_t;
255 
256 #define LSM6DSV16BX_FIFO_CTRL2                    0x8U
257 typedef struct
258 {
259 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
260   uint8_t xl_dualc_batch_from_fsm       : 1;
261   uint8_t uncompr_rate                  : 2;
262   uint8_t not_used0                     : 1;
263   uint8_t odr_chg_en                    : 1;
264   uint8_t not_used1                     : 1;
265   uint8_t fifo_compr_rt_en              : 1;
266   uint8_t stop_on_wtm                   : 1;
267 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
268   uint8_t stop_on_wtm                   : 1;
269   uint8_t fifo_compr_rt_en              : 1;
270   uint8_t not_used1                     : 1;
271   uint8_t odr_chg_en                    : 1;
272   uint8_t not_used0                     : 1;
273   uint8_t uncompr_rate                  : 2;
274   uint8_t xl_dualc_batch_from_fsm       : 1;
275 #endif /* DRV_BYTE_ORDER */
276 } lsm6dsv16bx_fifo_ctrl2_t;
277 
278 #define LSM6DSV16BX_FIFO_CTRL3                    0x9U
279 typedef struct
280 {
281 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
282   uint8_t bdr_xl                        : 4;
283   uint8_t bdr_gy                        : 4;
284 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
285   uint8_t bdr_gy                        : 4;
286   uint8_t bdr_xl                        : 4;
287 #endif /* DRV_BYTE_ORDER */
288 } lsm6dsv16bx_fifo_ctrl3_t;
289 
290 #define LSM6DSV16BX_FIFO_CTRL4                    0x0AU
291 typedef struct
292 {
293 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
294   uint8_t fifo_mode                     : 3;
295   uint8_t not_used0                     : 1;
296   uint8_t odr_t_batch                   : 2;
297   uint8_t dec_ts_batch                  : 2;
298 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
299   uint8_t dec_ts_batch                  : 2;
300   uint8_t odr_t_batch                   : 2;
301   uint8_t not_used0                     : 1;
302   uint8_t fifo_mode                     : 3;
303 #endif /* DRV_BYTE_ORDER */
304 } lsm6dsv16bx_fifo_ctrl4_t;
305 
306 #define LSM6DSV16BX_COUNTER_BDR_REG1              0x0BU
307 typedef struct
308 {
309 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
310   uint8_t cnt_bdr_th                    : 2;
311   uint8_t ah_qvar_batch_en              : 1;
312   uint8_t not_used0                     : 2;
313   uint8_t trig_counter_bdr              : 2;
314   uint8_t not_used1                     : 1;
315 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
316   uint8_t not_used1                     : 1;
317   uint8_t trig_counter_bdr              : 2;
318   uint8_t not_used0                     : 2;
319   uint8_t ah_qvar_batch_en              : 1;
320   uint8_t cnt_bdr_th                    : 2;
321 #endif /* DRV_BYTE_ORDER */
322 } lsm6dsv16bx_counter_bdr_reg1_t;
323 
324 #define LSM6DSV16BX_COUNTER_BDR_REG2              0x0CU
325 typedef struct
326 {
327 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
328   uint8_t cnt_bdr_th                    : 8;
329 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
330   uint8_t cnt_bdr_th                    : 8;
331 #endif /* DRV_BYTE_ORDER */
332 } lsm6dsv16bx_counter_bdr_reg2_t;
333 
334 #define LSM6DSV16BX_INT1_CTRL                     0x0DU
335 typedef struct
336 {
337 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
338   uint8_t int1_drdy_xl                  : 1;
339   uint8_t int1_drdy_g                   : 1;
340   uint8_t not_used0                     : 1;
341   uint8_t int1_fifo_th                  : 1;
342   uint8_t int1_fifo_ovr                 : 1;
343   uint8_t int1_fifo_full                : 1;
344   uint8_t int1_cnt_bdr                  : 1;
345   uint8_t not_used1                     : 1;
346 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
347   uint8_t not_used1                     : 1;
348   uint8_t int1_cnt_bdr                  : 1;
349   uint8_t int1_fifo_full                : 1;
350   uint8_t int1_fifo_ovr                 : 1;
351   uint8_t int1_fifo_th                  : 1;
352   uint8_t not_used0                     : 1;
353   uint8_t int1_drdy_g                   : 1;
354   uint8_t int1_drdy_xl                  : 1;
355 #endif /* DRV_BYTE_ORDER */
356 } lsm6dsv16bx_int1_ctrl_t;
357 
358 #define LSM6DSV16BX_INT2_CTRL                     0x0EU
359 typedef struct
360 {
361 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
362   uint8_t int2_drdy_xl                  : 1;
363   uint8_t int2_drdy_g                   : 1;
364   uint8_t not_used0                     : 1;
365   uint8_t int2_fifo_th                  : 1;
366   uint8_t int2_fifo_ovr                 : 1;
367   uint8_t int2_fifo_full                : 1;
368   uint8_t int2_cnt_bdr                  : 1;
369   uint8_t int2_emb_func_endop           : 1;
370 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
371   uint8_t int2_emb_func_endop           : 1;
372   uint8_t int2_cnt_bdr                  : 1;
373   uint8_t int2_fifo_full                : 1;
374   uint8_t int2_fifo_ovr                 : 1;
375   uint8_t int2_fifo_th                  : 1;
376   uint8_t not_used0                     : 1;
377   uint8_t int2_drdy_g                   : 1;
378   uint8_t int2_drdy_xl                  : 1;
379 #endif /* DRV_BYTE_ORDER */
380 } lsm6dsv16bx_int2_ctrl_t;
381 
382 #define LSM6DSV16BX_WHO_AM_I                      0x0FU
383 typedef struct
384 {
385 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
386   uint8_t id                            : 8;
387 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
388   uint8_t id                            : 8;
389 #endif /* DRV_BYTE_ORDER */
390 } lsm6dsv16bx_who_am_i_t;
391 
392 #define LSM6DSV16BX_CTRL1                         0x10U
393 typedef struct
394 {
395 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
396   uint8_t odr_xl                        : 4;
397   uint8_t op_mode_xl                    : 3;
398   uint8_t not_used0                     : 1;
399 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
400   uint8_t not_used0                     : 1;
401   uint8_t op_mode_xl                    : 3;
402   uint8_t odr_xl                        : 4;
403 #endif /* DRV_BYTE_ORDER */
404 } lsm6dsv16bx_ctrl1_t;
405 
406 #define LSM6DSV16BX_CTRL2                         0x11U
407 typedef struct
408 {
409 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
410   uint8_t odr_g                         : 4;
411   uint8_t op_mode_g                     : 3;
412   uint8_t not_used0                     : 1;
413 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
414   uint8_t not_used0                     : 1;
415   uint8_t op_mode_g                     : 3;
416   uint8_t odr_g                         : 4;
417 #endif /* DRV_BYTE_ORDER */
418 } lsm6dsv16bx_ctrl2_t;
419 
420 #define LSM6DSV16BX_CTRL3                         0x12U
421 typedef struct
422 {
423 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
424   uint8_t sw_reset                      : 1;
425   uint8_t not_used0                     : 1;
426   uint8_t if_inc                        : 1;
427   uint8_t not_used1                     : 3;
428   uint8_t bdu                           : 1;
429   uint8_t boot                          : 1;
430 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
431   uint8_t boot                          : 1;
432   uint8_t bdu                           : 1;
433   uint8_t not_used1                     : 3;
434   uint8_t if_inc                        : 1;
435   uint8_t not_used0                     : 1;
436   uint8_t sw_reset                      : 1;
437 #endif /* DRV_BYTE_ORDER */
438 } lsm6dsv16bx_ctrl3_t;
439 
440 #define LSM6DSV16BX_CTRL4                         0x13U
441 typedef struct
442 {
443 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
444   uint8_t not_used1                     : 1;
445   uint8_t drdy_pulsed                   : 1;
446   uint8_t int2_drdy_temp                : 1;
447   uint8_t drdy_mask                     : 1;
448   uint8_t int2_on_int1                  : 1;
449   uint8_t not_used0                     : 3;
450 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
451   uint8_t not_used0                     : 3;
452   uint8_t int2_on_int1                  : 1;
453   uint8_t drdy_mask                     : 1;
454   uint8_t int2_drdy_temp                : 1;
455   uint8_t drdy_pulsed                   : 1;
456   uint8_t not_used1                     : 1;
457 #endif /* DRV_BYTE_ORDER */
458 } lsm6dsv16bx_ctrl4_t;
459 
460 #define LSM6DSV16BX_CTRL5                         0x14U
461 typedef struct
462 {
463 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
464   uint8_t int_en_i3c                    : 1;
465   uint8_t bus_act_sel                   : 2;
466   uint8_t not_used0                     : 5;
467 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
468   uint8_t not_used0                     : 5;
469   uint8_t bus_act_sel                   : 2;
470   uint8_t int_en_i3c                    : 1;
471 #endif /* DRV_BYTE_ORDER */
472 } lsm6dsv16bx_ctrl5_t;
473 
474 #define LSM6DSV16BX_CTRL6                         0x15U
475 typedef struct
476 {
477 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
478   uint8_t fs_g                          : 4;
479   uint8_t lpf1_g_bw                     : 3;
480   uint8_t not_used0                     : 1;
481 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
482   uint8_t not_used0                     : 1;
483   uint8_t lpf1_g_bw                     : 3;
484   uint8_t fs_g                          : 4;
485 #endif /* DRV_BYTE_ORDER */
486 } lsm6dsv16bx_ctrl6_t;
487 
488 #define LSM6DSV16BX_CTRL7                         0x16U
489 typedef struct
490 {
491 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
492   uint8_t lpf1_g_en                     : 1;
493   uint8_t not_used0                     : 1;
494   uint8_t ah_qvar2_en                   : 1;
495   uint8_t ah_qvar1_en                   : 1;
496   uint8_t ah_qvar_c_zin                 : 2;
497   uint8_t int2_drdy_ah_qvar             : 1;
498   uint8_t ah_qvar_en                    : 1;
499 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
500   uint8_t ah_qvar_en                    : 1;
501   uint8_t int2_drdy_ah_qvar             : 1;
502   uint8_t ah_qvar_c_zin                 : 2;
503   uint8_t ah_qvar1_en                   : 1;
504   uint8_t ah_qvar2_en                   : 1;
505   uint8_t not_used0                     : 1;
506   uint8_t lpf1_g_en                     : 1;
507 #endif /* DRV_BYTE_ORDER */
508 } lsm6dsv16bx_ctrl7_t;
509 
510 #define LSM6DSV16BX_CTRL8                         0x17U
511 typedef struct
512 {
513 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
514   uint8_t fs_xl                         : 2;
515   uint8_t not_used0                     : 1;
516   uint8_t xl_dualc_en                   : 1;
517   uint8_t ah_qvar_hpf                   : 1;
518   uint8_t hp_lpf2_xl_bw                 : 3;
519 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
520   uint8_t hp_lpf2_xl_bw                 : 3;
521   uint8_t ah_qvar_hpf                   : 1;
522   uint8_t xl_dualc_en                   : 1;
523   uint8_t not_used0                     : 1;
524   uint8_t fs_xl                         : 2;
525 #endif /* DRV_BYTE_ORDER */
526 } lsm6dsv16bx_ctrl8_t;
527 
528 #define LSM6DSV16BX_CTRL9                         0x18U
529 typedef struct
530 {
531 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
532   uint8_t usr_off_on_out                : 1;
533   uint8_t usr_off_w                     : 1;
534   uint8_t not_used0                     : 1;
535   uint8_t lpf2_xl_en                    : 1;
536   uint8_t hp_slope_xl_en                : 1;
537   uint8_t xl_fastsettl_mode             : 1;
538   uint8_t hp_ref_mode_xl                : 1;
539   uint8_t ah_qvar_lpf                   : 1;
540 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
541   uint8_t ah_qvar_lpf                   : 1;
542   uint8_t hp_ref_mode_xl                : 1;
543   uint8_t xl_fastsettl_mode             : 1;
544   uint8_t hp_slope_xl_en                : 1;
545   uint8_t lpf2_xl_en                    : 1;
546   uint8_t not_used0                     : 1;
547   uint8_t usr_off_w                     : 1;
548   uint8_t usr_off_on_out                : 1;
549 #endif /* DRV_BYTE_ORDER */
550 } lsm6dsv16bx_ctrl9_t;
551 
552 #define LSM6DSV16BX_CTRL10                        0x19U
553 typedef struct
554 {
555 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
556   uint8_t st_xl                         : 2;
557   uint8_t st_g                          : 2;
558   uint8_t xl_st_offset                  : 1;
559   uint8_t ah_qvar_sw                    : 1;
560   uint8_t emb_func_debug                : 1;
561   uint8_t not_used0                     : 1;
562 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
563   uint8_t not_used0                     : 1;
564   uint8_t emb_func_debug                : 1;
565   uint8_t ah_qvar_sw                    : 1;
566   uint8_t xl_st_offset                  : 1;
567   uint8_t st_g                          : 2;
568   uint8_t st_xl                         : 2;
569 #endif /* DRV_BYTE_ORDER */
570 } lsm6dsv16bx_ctrl10_t;
571 
572 #define LSM6DSV16BX_CTRL_STATUS                   0x1AU
573 typedef struct
574 {
575 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
576   uint8_t not_used0                     : 2;
577   uint8_t fsm_wr_ctrl_status            : 1;
578   uint8_t not_used1                     : 5;
579 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
580   uint8_t not_used1                     : 5;
581   uint8_t fsm_wr_ctrl_status            : 1;
582   uint8_t not_used0                     : 2;
583 #endif /* DRV_BYTE_ORDER */
584 } lsm6dsv16bx_ctrl_status_t;
585 
586 #define LSM6DSV16BX_FIFO_STATUS1                  0x1BU
587 typedef struct
588 {
589 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
590   uint8_t diff_fifo                     : 8;
591 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
592   uint8_t diff_fifo                     : 8;
593 #endif /* DRV_BYTE_ORDER */
594 } lsm6dsv16bx_fifo_status1_t;
595 
596 #define LSM6DSV16BX_FIFO_STATUS2                  0x1CU
597 typedef struct
598 {
599 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
600   uint8_t diff_fifo                     : 1;
601   uint8_t not_used0                     : 2;
602   uint8_t fifo_ovr_latched              : 1;
603   uint8_t counter_bdr_ia                : 1;
604   uint8_t fifo_full_ia                  : 1;
605   uint8_t fifo_ovr_ia                   : 1;
606   uint8_t fifo_wtm_ia                   : 1;
607 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
608   uint8_t fifo_wtm_ia                   : 1;
609   uint8_t fifo_ovr_ia                   : 1;
610   uint8_t fifo_full_ia                  : 1;
611   uint8_t counter_bdr_ia                : 1;
612   uint8_t fifo_ovr_latched              : 1;
613   uint8_t not_used0                     : 2;
614   uint8_t diff_fifo                     : 1;
615 #endif /* DRV_BYTE_ORDER */
616 } lsm6dsv16bx_fifo_status2_t;
617 
618 #define LSM6DSV16BX_ALL_INT_SRC                   0x1DU
619 typedef struct
620 {
621 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
622   uint8_t ff_ia                         : 1;
623   uint8_t wu_ia                         : 1;
624   uint8_t tap_ia                        : 1;
625   uint8_t not_used0                     : 1;
626   uint8_t d6d_ia                        : 1;
627   uint8_t sleep_change_ia               : 1;
628   uint8_t not_used1                     : 1;
629   uint8_t emb_func_ia                   : 1;
630 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
631   uint8_t emb_func_ia                   : 1;
632   uint8_t not_used1                     : 1;
633   uint8_t sleep_change_ia               : 1;
634   uint8_t d6d_ia                        : 1;
635   uint8_t not_used0                     : 1;
636   uint8_t tap_ia                        : 1;
637   uint8_t wu_ia                         : 1;
638   uint8_t ff_ia                         : 1;
639 #endif /* DRV_BYTE_ORDER */
640 } lsm6dsv16bx_all_int_src_t;
641 
642 #define LSM6DSV16BX_STATUS_REG                    0x1EU
643 typedef struct
644 {
645 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
646   uint8_t xlda                          : 1;
647   uint8_t gda                           : 1;
648   uint8_t tda                           : 1;
649   uint8_t ah_qvarda                     : 1;
650   uint8_t not_used0                     : 3;
651   uint8_t timestamp_endcount            : 1;
652 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
653   uint8_t timestamp_endcount            : 1;
654   uint8_t not_used0                     : 3;
655   uint8_t ah_qvarda                     : 1;
656   uint8_t tda                           : 1;
657   uint8_t gda                           : 1;
658   uint8_t xlda                          : 1;
659 #endif /* DRV_BYTE_ORDER */
660 } lsm6dsv16bx_status_reg_t;
661 
662 #define LSM6DSV16BX_OUT_TEMP_L                    0x20U
663 typedef struct
664 {
665 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
666   uint8_t temp                          : 8;
667 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
668   uint8_t temp                          : 8;
669 #endif /* DRV_BYTE_ORDER */
670 } lsm6dsv16bx_out_temp_l_t;
671 
672 #define LSM6DSV16BX_OUT_TEMP_H                    0x21U
673 typedef struct
674 {
675 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
676   uint8_t temp                          : 8;
677 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
678   uint8_t temp                          : 8;
679 #endif /* DRV_BYTE_ORDER */
680 } lsm6dsv16bx_out_temp_h_t;
681 
682 #define LSM6DSV16BX_OUTX_L_G                      0x22U
683 typedef struct
684 {
685 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
686   uint8_t outx_g                        : 8;
687 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
688   uint8_t outx_g                        : 8;
689 #endif /* DRV_BYTE_ORDER */
690 } lsm6dsv16bx_outx_l_g_t;
691 
692 #define LSM6DSV16BX_OUTX_H_G                      0x23U
693 typedef struct
694 {
695 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
696   uint8_t outx_g                        : 8;
697 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
698   uint8_t outx_g                        : 8;
699 #endif /* DRV_BYTE_ORDER */
700 } lsm6dsv16bx_outx_h_g_t;
701 
702 #define LSM6DSV16BX_OUTY_L_G                      0x24U
703 typedef struct
704 {
705 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
706   uint8_t outy_g                        : 8;
707 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
708   uint8_t outy_g                        : 8;
709 #endif /* DRV_BYTE_ORDER */
710 } lsm6dsv16bx_outy_l_g_t;
711 
712 #define LSM6DSV16BX_OUTY_H_G                      0x25U
713 typedef struct
714 {
715 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
716   uint8_t outy_g                        : 8;
717 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
718   uint8_t outy_g                        : 8;
719 #endif /* DRV_BYTE_ORDER */
720 } lsm6dsv16bx_outy_h_g_t;
721 
722 #define LSM6DSV16BX_OUTZ_L_G                      0x26U
723 typedef struct
724 {
725 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
726   uint8_t outz_g                        : 8;
727 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
728   uint8_t outz_g                        : 8;
729 #endif /* DRV_BYTE_ORDER */
730 } lsm6dsv16bx_outz_l_g_t;
731 
732 #define LSM6DSV16BX_OUTZ_H_G                      0x27U
733 typedef struct
734 {
735 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
736   uint8_t outz_g                        : 8;
737 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
738   uint8_t outz_g                        : 8;
739 #endif /* DRV_BYTE_ORDER */
740 } lsm6dsv16bx_outz_h_g_t;
741 
742 #define LSM6DSV16BX_OUTZ_L_A                      0x28U
743 typedef struct
744 {
745 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
746   uint8_t outz_a                        : 8;
747 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
748   uint8_t outz_a                        : 8;
749 #endif /* DRV_BYTE_ORDER */
750 } lsm6dsv16bx_outz_l_a_t;
751 
752 #define LSM6DSV16BX_OUTZ_H_A                      0x29U
753 typedef struct
754 {
755 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
756   uint8_t outz_a                        : 8;
757 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
758   uint8_t outz_a                        : 8;
759 #endif /* DRV_BYTE_ORDER */
760 } lsm6dsv16bx_outz_h_a_t;
761 
762 #define LSM6DSV16BX_OUTY_L_A                      0x2AU
763 typedef struct
764 {
765 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
766   uint8_t outy_a                        : 8;
767 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
768   uint8_t outy_a                        : 8;
769 #endif /* DRV_BYTE_ORDER */
770 } lsm6dsv16bx_outy_l_a_t;
771 
772 #define LSM6DSV16BX_OUTY_H_A                      0x2BU
773 typedef struct
774 {
775 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
776   uint8_t outy_a                        : 8;
777 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
778   uint8_t outy_a                        : 8;
779 #endif /* DRV_BYTE_ORDER */
780 } lsm6dsv16bx_outy_h_a_t;
781 
782 #define LSM6DSV16BX_OUTX_L_A                      0x2CU
783 typedef struct
784 {
785 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
786   uint8_t outx_a                        : 8;
787 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
788   uint8_t outx_a                        : 8;
789 #endif /* DRV_BYTE_ORDER */
790 } lsm6dsv16bx_outx_l_a_t;
791 
792 #define LSM6DSV16BX_OUTX_H_A                      0x2DU
793 typedef struct
794 {
795 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
796   uint8_t outx_a                        : 8;
797 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
798   uint8_t outx_a                        : 8;
799 #endif /* DRV_BYTE_ORDER */
800 } lsm6dsv16bx_outx_h_a_t;
801 
802 #define LSM6DSV16BX_UI_OUTZ_L_A_DUALC             0x34U
803 typedef struct
804 {
805 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
806   uint8_t ui_outz_a_dualc               : 8;
807 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
808   uint8_t ui_outz_a_dualc               : 8;
809 #endif /* DRV_BYTE_ORDER */
810 } lsm6dsv16bx_ui_outz_l_a_dualc_t;
811 
812 #define LSM6DSV16BX_UI_OUTZ_H_A_DUALC             0x35U
813 typedef struct
814 {
815 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
816   uint8_t ui_outz_a_dualc               : 8;
817 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
818   uint8_t ui_outz_a_dualc               : 8;
819 #endif /* DRV_BYTE_ORDER */
820 } lsm6dsv16bx_ui_outz_h_a_dualc_t;
821 
822 #define LSM6DSV16BX_UI_OUTY_L_A_DUALC             0x36U
823 typedef struct
824 {
825 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
826   uint8_t ui_outy_a_dualc               : 8;
827 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
828   uint8_t ui_outy_a_dualc               : 8;
829 #endif /* DRV_BYTE_ORDER */
830 } lsm6dsv16bx_ui_outy_l_a_dualc_t;
831 
832 #define LSM6DSV16BX_UI_OUTY_H_A_DUALC             0x37U
833 typedef struct
834 {
835 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
836   uint8_t ui_outy_a_dualc               : 8;
837 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
838   uint8_t ui_outy_a_dualc               : 8;
839 #endif /* DRV_BYTE_ORDER */
840 } lsm6dsv16bx_ui_outy_h_a_dualc_t;
841 
842 #define LSM6DSV16BX_UI_OUTX_L_A_DUALC             0x38U
843 typedef struct
844 {
845 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
846   uint8_t ui_outx_a_dualc               : 8;
847 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
848   uint8_t ui_outx_a_dualc               : 8;
849 #endif /* DRV_BYTE_ORDER */
850 } lsm6dsv16bx_ui_outx_l_a_dualc_t;
851 
852 #define LSM6DSV16BX_UI_OUTX_H_A_DUALC             0x39U
853 typedef struct
854 {
855 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
856   uint8_t ui_outx_a_dualc               : 8;
857 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
858   uint8_t ui_outx_a_dualc               : 8;
859 #endif /* DRV_BYTE_ORDER */
860 } lsm6dsv16bx_ui_outx_h_a_dualc_t;
861 
862 #define LSM6DSV16BX_AH_QVAR_OUT_L                 0x3AU
863 typedef struct
864 {
865 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
866   uint8_t ah_qvar                       : 8;
867 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
868   uint8_t ah_qvar                       : 8;
869 #endif /* DRV_BYTE_ORDER */
870 } lsm6dsv16bx_ah_qvar_out_l_t;
871 
872 #define LSM6DSV16BX_AH_QVAR_OUT_H                 0x3BU
873 typedef struct
874 {
875 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
876   uint8_t ah_qvar                       : 8;
877 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
878   uint8_t ah_qvar                       : 8;
879 #endif /* DRV_BYTE_ORDER */
880 } lsm6dsv16bx_ah_qvar_out_h_t;
881 
882 #define LSM6DSV16BX_TIMESTAMP0                    0x40U
883 typedef struct
884 {
885 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
886   uint8_t timestamp                     : 8;
887 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
888   uint8_t timestamp                     : 8;
889 #endif /* DRV_BYTE_ORDER */
890 } lsm6dsv16bx_timestamp0_t;
891 
892 #define LSM6DSV16BX_TIMESTAMP1                    0x41U
893 typedef struct
894 {
895 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
896   uint8_t timestamp                     : 8;
897 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
898   uint8_t timestamp                     : 8;
899 #endif /* DRV_BYTE_ORDER */
900 } lsm6dsv16bx_timestamp1_t;
901 
902 #define LSM6DSV16BX_TIMESTAMP2                    0x42U
903 typedef struct
904 {
905 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
906   uint8_t timestamp                     : 8;
907 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
908   uint8_t timestamp                     : 8;
909 #endif /* DRV_BYTE_ORDER */
910 } lsm6dsv16bx_timestamp2_t;
911 
912 #define LSM6DSV16BX_TIMESTAMP3                    0x43U
913 typedef struct
914 {
915 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
916   uint8_t timestamp                     : 8;
917 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
918   uint8_t timestamp                     : 8;
919 #endif /* DRV_BYTE_ORDER */
920 } lsm6dsv16bx_timestamp3_t;
921 
922 #define LSM6DSV16BX_WAKE_UP_SRC                   0x45U
923 typedef struct
924 {
925 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
926   uint8_t x_wu                          : 1;
927   uint8_t y_wu                          : 1;
928   uint8_t z_wu                          : 1;
929   uint8_t wu_ia                         : 1;
930   uint8_t sleep_state                   : 1;
931   uint8_t ff_ia                         : 1;
932   uint8_t sleep_change_ia               : 1;
933   uint8_t not_used0                     : 1;
934 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
935   uint8_t not_used0                     : 1;
936   uint8_t sleep_change_ia               : 1;
937   uint8_t ff_ia                         : 1;
938   uint8_t sleep_state                   : 1;
939   uint8_t wu_ia                         : 1;
940   uint8_t z_wu                          : 1;
941   uint8_t y_wu                          : 1;
942   uint8_t x_wu                          : 1;
943 #endif /* DRV_BYTE_ORDER */
944 } lsm6dsv16bx_wake_up_src_t;
945 
946 #define LSM6DSV16BX_TAP_SRC                       0x46U
947 typedef struct
948 {
949 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
950   uint8_t x_tap                         : 1;
951   uint8_t y_tap                         : 1;
952   uint8_t z_tap                         : 1;
953   uint8_t tap_sign                      : 1;
954   uint8_t not_used0                     : 1;
955   uint8_t double_tap                    : 1;
956   uint8_t single_tap                    : 1;
957   uint8_t tap_ia                        : 1;
958 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
959   uint8_t tap_ia                        : 1;
960   uint8_t single_tap                    : 1;
961   uint8_t double_tap                    : 1;
962   uint8_t not_used0                     : 1;
963   uint8_t tap_sign                      : 1;
964   uint8_t z_tap                         : 1;
965   uint8_t y_tap                         : 1;
966   uint8_t x_tap                         : 1;
967 #endif /* DRV_BYTE_ORDER */
968 } lsm6dsv16bx_tap_src_t;
969 
970 #define LSM6DSV16BX_D6D_SRC                       0x47U
971 typedef struct
972 {
973 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
974   uint8_t zl                            : 1;
975   uint8_t zh                            : 1;
976   uint8_t yl                            : 1;
977   uint8_t yh                            : 1;
978   uint8_t xl                            : 1;
979   uint8_t xh                            : 1;
980   uint8_t d6d_ia                        : 1;
981   uint8_t not_used0                     : 1;
982 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
983   uint8_t not_used0                     : 1;
984   uint8_t d6d_ia                        : 1;
985   uint8_t xh                            : 1;
986   uint8_t xl                            : 1;
987   uint8_t yh                            : 1;
988   uint8_t yl                            : 1;
989   uint8_t zh                            : 1;
990   uint8_t zl                            : 1;
991 #endif /* DRV_BYTE_ORDER */
992 } lsm6dsv16bx_d6d_src_t;
993 
994 #define LSM6DSV16BX_EMB_FUNC_STATUS_MAINPAGE      0x49U
995 typedef struct
996 {
997 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
998   uint8_t not_used0                     : 3;
999   uint8_t is_step_det                   : 1;
1000   uint8_t is_tilt                       : 1;
1001   uint8_t is_sigmot                     : 1;
1002   uint8_t not_used1                     : 1;
1003   uint8_t is_fsm_lc                     : 1;
1004 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1005   uint8_t is_fsm_lc                     : 1;
1006   uint8_t not_used1                     : 1;
1007   uint8_t is_sigmot                     : 1;
1008   uint8_t is_tilt                       : 1;
1009   uint8_t is_step_det                   : 1;
1010   uint8_t not_used0                     : 3;
1011 #endif /* DRV_BYTE_ORDER */
1012 } lsm6dsv16bx_emb_func_status_mainpage_t;
1013 
1014 #define LSM6DSV16BX_FSM_STATUS_MAINPAGE           0x4AU
1015 typedef struct
1016 {
1017 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1018   uint8_t is_fsm1                       : 1;
1019   uint8_t is_fsm2                       : 1;
1020   uint8_t is_fsm3                       : 1;
1021   uint8_t is_fsm4                       : 1;
1022   uint8_t is_fsm5                       : 1;
1023   uint8_t is_fsm6                       : 1;
1024   uint8_t is_fsm7                       : 1;
1025   uint8_t is_fsm8                       : 1;
1026 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1027   uint8_t is_fsm8                       : 1;
1028   uint8_t is_fsm7                       : 1;
1029   uint8_t is_fsm6                       : 1;
1030   uint8_t is_fsm5                       : 1;
1031   uint8_t is_fsm4                       : 1;
1032   uint8_t is_fsm3                       : 1;
1033   uint8_t is_fsm2                       : 1;
1034   uint8_t is_fsm1                       : 1;
1035 #endif /* DRV_BYTE_ORDER */
1036 } lsm6dsv16bx_fsm_status_mainpage_t;
1037 
1038 #define LSM6DSV16BX_MLC_STATUS_MAINPAGE           0x4BU
1039 typedef struct
1040 {
1041 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1042   uint8_t is_mlc1                       : 1;
1043   uint8_t is_mlc2                       : 1;
1044   uint8_t is_mlc3                       : 1;
1045   uint8_t is_mlc4                       : 1;
1046   uint8_t not_used0                     : 4;
1047 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1048   uint8_t not_used0                     : 4;
1049   uint8_t is_mlc4                       : 1;
1050   uint8_t is_mlc3                       : 1;
1051   uint8_t is_mlc2                       : 1;
1052   uint8_t is_mlc1                       : 1;
1053 #endif /* DRV_BYTE_ORDER */
1054 } lsm6dsv16bx_mlc_status_mainpage_t;
1055 
1056 #define LSM6DSV16BX_INTERNAL_FREQ                 0x4FU
1057 typedef struct
1058 {
1059 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1060   uint8_t freq_fine                     : 8;
1061 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1062   uint8_t freq_fine                     : 8;
1063 #endif /* DRV_BYTE_ORDER */
1064 } lsm6dsv16bx_internal_freq_t;
1065 
1066 #define LSM6DSV16BX_FUNCTIONS_ENABLE              0x50U
1067 typedef struct
1068 {
1069 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1070   uint8_t inact_en                      : 2;
1071   uint8_t not_used0                     : 1;
1072   uint8_t dis_rst_lir_all_int           : 1;
1073   uint8_t not_used1                     : 2;
1074   uint8_t timestamp_en                  : 1;
1075   uint8_t interrupts_enable             : 1;
1076 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1077   uint8_t interrupts_enable             : 1;
1078   uint8_t timestamp_en                  : 1;
1079   uint8_t not_used1                     : 2;
1080   uint8_t dis_rst_lir_all_int           : 1;
1081   uint8_t not_used0                     : 1;
1082   uint8_t inact_en                      : 2;
1083 #endif /* DRV_BYTE_ORDER */
1084 } lsm6dsv16bx_functions_enable_t;
1085 
1086 #define LSM6DSV16BX_INACTIVITY_DUR                0x54U
1087 typedef struct
1088 {
1089 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1090   uint8_t inact_dur                     : 2;
1091   uint8_t xl_inact_odr                  : 2;
1092   uint8_t wu_inact_ths_w                : 3;
1093   uint8_t sleep_status_on_int           : 1;
1094 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1095   uint8_t sleep_status_on_int           : 1;
1096   uint8_t wu_inact_ths_w                : 3;
1097   uint8_t xl_inact_odr                  : 2;
1098   uint8_t inact_dur                     : 2;
1099 #endif /* DRV_BYTE_ORDER */
1100 } lsm6dsv16bx_inactivity_dur_t;
1101 
1102 #define LSM6DSV16BX_INACTIVITY_THS                0x55U
1103 typedef struct
1104 {
1105 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1106   uint8_t inact_ths                     : 6;
1107   uint8_t not_used0                     : 2;
1108 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1109   uint8_t not_used0                     : 2;
1110   uint8_t inact_ths                     : 6;
1111 #endif /* DRV_BYTE_ORDER */
1112 } lsm6dsv16bx_inactivity_ths_t;
1113 
1114 #define LSM6DSV16BX_TAP_CFG0                      0x56U
1115 typedef struct
1116 {
1117 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1118   uint8_t lir                           : 1;
1119   uint8_t tap_x_en                      : 1;
1120   uint8_t tap_y_en                      : 1;
1121   uint8_t tap_z_en                      : 1;
1122   uint8_t slope_fds                     : 1;
1123   uint8_t hw_func_mask_xl_settl         : 1;
1124   uint8_t low_pass_on_6d                : 1;
1125   uint8_t not_used1                     : 1;
1126 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1127   uint8_t not_used1                     : 1;
1128   uint8_t low_pass_on_6d                : 1;
1129   uint8_t hw_func_mask_xl_settl         : 1;
1130   uint8_t slope_fds                     : 1;
1131   uint8_t tap_z_en                      : 1;
1132   uint8_t tap_y_en                      : 1;
1133   uint8_t tap_x_en                      : 1;
1134   uint8_t lir                           : 1;
1135 #endif /* DRV_BYTE_ORDER */
1136 } lsm6dsv16bx_tap_cfg0_t;
1137 
1138 #define LSM6DSV16BX_TAP_CFG1                      0x57U
1139 typedef struct
1140 {
1141 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1142   uint8_t tap_ths_z                     : 5;
1143   uint8_t tap_priority                  : 3;
1144 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1145   uint8_t tap_priority                  : 3;
1146   uint8_t tap_ths_z                     : 5;
1147 #endif /* DRV_BYTE_ORDER */
1148 } lsm6dsv16bx_tap_cfg1_t;
1149 
1150 #define LSM6DSV16BX_TAP_CFG2                      0x58U
1151 typedef struct
1152 {
1153 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1154   uint8_t tap_ths_y                     : 5;
1155   uint8_t not_used0                     : 3;
1156 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1157   uint8_t not_used0                     : 3;
1158   uint8_t tap_ths_y                     : 5;
1159 #endif /* DRV_BYTE_ORDER */
1160 } lsm6dsv16bx_tap_cfg2_t;
1161 
1162 #define LSM6DSV16BX_TAP_THS_6D                    0x59U
1163 typedef struct
1164 {
1165 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1166   uint8_t tap_ths_x                     : 5;
1167   uint8_t sixd_ths                      : 2;
1168   uint8_t not_used0                     : 1;
1169 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1170   uint8_t not_used0                     : 1;
1171   uint8_t sixd_ths                      : 2;
1172   uint8_t tap_ths_x                     : 5;
1173 #endif /* DRV_BYTE_ORDER */
1174 } lsm6dsv16bx_tap_ths_6d_t;
1175 
1176 #define LSM6DSV16BX_TAP_DUR                       0x5AU
1177 typedef struct
1178 {
1179 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1180   uint8_t shock                         : 2;
1181   uint8_t quiet                         : 2;
1182   uint8_t dur                           : 4;
1183 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1184   uint8_t dur                           : 4;
1185   uint8_t quiet                         : 2;
1186   uint8_t shock                         : 2;
1187 #endif /* DRV_BYTE_ORDER */
1188 } lsm6dsv16bx_tap_dur_t;
1189 
1190 #define LSM6DSV16BX_WAKE_UP_THS                   0x5BU
1191 typedef struct
1192 {
1193 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1194   uint8_t wk_ths                        : 6;
1195   uint8_t usr_off_on_wu                 : 1;
1196   uint8_t single_double_tap             : 1;
1197 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1198   uint8_t single_double_tap             : 1;
1199   uint8_t usr_off_on_wu                 : 1;
1200   uint8_t wk_ths                        : 6;
1201 #endif /* DRV_BYTE_ORDER */
1202 } lsm6dsv16bx_wake_up_ths_t;
1203 
1204 #define LSM6DSV16BX_WAKE_UP_DUR                   0x5CU
1205 typedef struct
1206 {
1207 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1208   uint8_t sleep_dur                     : 4;
1209   uint8_t not_used0                     : 1;
1210   uint8_t wake_dur                      : 2;
1211   uint8_t ff_dur                        : 1;
1212 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1213   uint8_t ff_dur                        : 1;
1214   uint8_t wake_dur                      : 2;
1215   uint8_t not_used0                     : 1;
1216   uint8_t sleep_dur                     : 4;
1217 #endif /* DRV_BYTE_ORDER */
1218 } lsm6dsv16bx_wake_up_dur_t;
1219 
1220 #define LSM6DSV16BX_FREE_FALL                     0x5DU
1221 typedef struct
1222 {
1223 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1224   uint8_t ff_ths                        : 3;
1225   uint8_t ff_dur                        : 5;
1226 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1227   uint8_t ff_dur                        : 5;
1228   uint8_t ff_ths                        : 3;
1229 #endif /* DRV_BYTE_ORDER */
1230 } lsm6dsv16bx_free_fall_t;
1231 
1232 #define LSM6DSV16BX_MD1_CFG                       0x5EU
1233 typedef struct
1234 {
1235 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1236   uint8_t not_used0                     : 1;
1237   uint8_t int1_emb_func                 : 1;
1238   uint8_t int1_6d                       : 1;
1239   uint8_t int1_double_tap               : 1;
1240   uint8_t int1_ff                       : 1;
1241   uint8_t int1_wu                       : 1;
1242   uint8_t int1_single_tap               : 1;
1243   uint8_t int1_sleep_change             : 1;
1244 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1245   uint8_t int1_sleep_change             : 1;
1246   uint8_t int1_single_tap               : 1;
1247   uint8_t int1_wu                       : 1;
1248   uint8_t int1_ff                       : 1;
1249   uint8_t int1_double_tap               : 1;
1250   uint8_t int1_6d                       : 1;
1251   uint8_t int1_emb_func                 : 1;
1252   uint8_t not_used0                     : 1;
1253 #endif /* DRV_BYTE_ORDER */
1254 } lsm6dsv16bx_md1_cfg_t;
1255 
1256 #define LSM6DSV16BX_MD2_CFG                       0x5FU
1257 typedef struct
1258 {
1259 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1260   uint8_t int2_timestamp                : 1;
1261   uint8_t int2_emb_func                 : 1;
1262   uint8_t int2_6d                       : 1;
1263   uint8_t int2_double_tap               : 1;
1264   uint8_t int2_ff                       : 1;
1265   uint8_t int2_wu                       : 1;
1266   uint8_t int2_single_tap               : 1;
1267   uint8_t int2_sleep_change             : 1;
1268 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1269   uint8_t int2_sleep_change             : 1;
1270   uint8_t int2_single_tap               : 1;
1271   uint8_t int2_wu                       : 1;
1272   uint8_t int2_ff                       : 1;
1273   uint8_t int2_double_tap               : 1;
1274   uint8_t int2_6d                       : 1;
1275   uint8_t int2_emb_func                 : 1;
1276   uint8_t int2_timestamp                : 1;
1277 #endif /* DRV_BYTE_ORDER */
1278 } lsm6dsv16bx_md2_cfg_t;
1279 
1280 #define LSM6DSV16BX_EMB_FUNC_CFG                  0x63U
1281 typedef struct
1282 {
1283 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1284   uint8_t not_used0                     : 3;
1285   uint8_t emb_func_disable              : 1;
1286   uint8_t emb_func_irq_mask_xl_settl    : 1;
1287   uint8_t emb_func_irq_mask_g_settl     : 1;
1288   uint8_t not_used1                     : 1;
1289   uint8_t xl_dualc_batch_from_if        : 1;
1290 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1291   uint8_t xl_dualc_batch_from_if        : 1;
1292   uint8_t not_used1                     : 1;
1293   uint8_t emb_func_irq_mask_g_settl     : 1;
1294   uint8_t emb_func_irq_mask_xl_settl    : 1;
1295   uint8_t emb_func_disable              : 1;
1296   uint8_t not_used0                     : 3;
1297 #endif /* DRV_BYTE_ORDER */
1298 } lsm6dsv16bx_emb_func_cfg_t;
1299 
1300 #define LSM6DSV16BX_TDM_CFG0                      0x6CU
1301 typedef struct
1302 {
1303 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1304   uint8_t tdm_wclk_bclk_sel             : 1;
1305   uint8_t tdm_wclk                      : 2;
1306   uint8_t not_used0                     : 1;
1307   uint8_t tdm_slot_sel                  : 1;
1308   uint8_t tdm_bclk_edge_sel             : 1;
1309   uint8_t tdm_delayed_cfg               : 1;
1310   uint8_t not_used1                     : 1;
1311 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1312   uint8_t not_used1                     : 1;
1313   uint8_t tdm_delayed_cfg               : 1;
1314   uint8_t tdm_bclk_edge_sel             : 1;
1315   uint8_t tdm_slot_sel                  : 1;
1316   uint8_t not_used0                     : 1;
1317   uint8_t tdm_wclk                      : 2;
1318   uint8_t tdm_wclk_bclk_sel             : 1;
1319 #endif /* DRV_BYTE_ORDER */
1320 } lsm6dsv16bx_tdm_cfg0_t;
1321 
1322 #define LSM6DSV16BX_TDM_CFG1                      0x6DU
1323 typedef struct
1324 {
1325 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1326   uint8_t not_used0                     : 3;
1327   uint8_t tdm_axes_ord_sel              : 2;
1328   uint8_t tdm_xl_z_en                   : 1;
1329   uint8_t tdm_xl_y_en                   : 1;
1330   uint8_t tdm_xl_x_en                   : 1;
1331 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1332   uint8_t tdm_xl_x_en                   : 1;
1333   uint8_t tdm_xl_y_en                   : 1;
1334   uint8_t tdm_xl_z_en                   : 1;
1335   uint8_t tdm_axes_ord_sel              : 2;
1336   uint8_t not_used0                     : 3;
1337 #endif /* DRV_BYTE_ORDER */
1338 } lsm6dsv16bx_tdm_cfg1_t;
1339 
1340 #define LSM6DSV16BX_TDM_CFG2                      0x6EU
1341 typedef struct
1342 {
1343 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1344   uint8_t tdm_fs_xl                     : 2;
1345   uint8_t not_used0                     : 1;
1346   uint8_t tdm_data_mask                 : 1;
1347   uint8_t not_used1                     : 4;
1348 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1349   uint8_t not_used1                     : 4;
1350   uint8_t tdm_data_mask                 : 1;
1351   uint8_t not_used0                     : 1;
1352   uint8_t tdm_fs_xl                     : 2;
1353 #endif /* DRV_BYTE_ORDER */
1354 } lsm6dsv16bx_tdm_cfg2_t;
1355 
1356 #define LSM6DSV16BX_Z_OFS_USR                     0x73U
1357 typedef struct
1358 {
1359 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1360   uint8_t z_ofs_usr                     : 8;
1361 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1362   uint8_t z_ofs_usr                     : 8;
1363 #endif /* DRV_BYTE_ORDER */
1364 } lsm6dsv16bx_z_ofs_usr_t;
1365 
1366 #define LSM6DSV16BX_Y_OFS_USR                     0x74U
1367 typedef struct
1368 {
1369 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1370   uint8_t y_ofs_usr                     : 8;
1371 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1372   uint8_t y_ofs_usr                     : 8;
1373 #endif /* DRV_BYTE_ORDER */
1374 } lsm6dsv16bx_y_ofs_usr_t;
1375 
1376 #define LSM6DSV16BX_X_OFS_USR                     0x75U
1377 typedef struct
1378 {
1379 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1380   uint8_t x_ofs_usr                     : 8;
1381 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1382   uint8_t x_ofs_usr                     : 8;
1383 #endif /* DRV_BYTE_ORDER */
1384 } lsm6dsv16bx_x_ofs_usr_t;
1385 
1386 #define LSM6DSV16BX_FIFO_DATA_OUT_TAG             0x78U
1387 typedef struct
1388 {
1389 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1390   uint8_t not_used0                     : 1;
1391   uint8_t tag_cnt                       : 2;
1392   uint8_t tag_sensor                    : 5;
1393 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1394   uint8_t tag_sensor                    : 5;
1395   uint8_t tag_cnt                       : 2;
1396   uint8_t not_used0                     : 1;
1397 #endif /* DRV_BYTE_ORDER */
1398 } lsm6dsv16bx_fifo_data_out_tag_t;
1399 
1400 #define LSM6DSV16BX_FIFO_DATA_OUT_BYTE_0          0x79U
1401 typedef struct
1402 {
1403 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1404   uint8_t fifo_data_out                 : 8;
1405 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1406   uint8_t fifo_data_out                 : 8;
1407 #endif /* DRV_BYTE_ORDER */
1408 } lsm6dsv16bx_fifo_data_out_byte_0_t;
1409 
1410 #define LSM6DSV16BX_FIFO_DATA_OUT_BYTE_1          0x7AU
1411 typedef struct
1412 {
1413 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1414   uint8_t fifo_data_out                 : 8;
1415 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1416   uint8_t fifo_data_out                 : 8;
1417 #endif /* DRV_BYTE_ORDER */
1418 } lsm6dsv16bx_fifo_data_out_byte_1_t;
1419 
1420 #define LSM6DSV16BX_FIFO_DATA_OUT_BYTE_2          0x7BU
1421 typedef struct
1422 {
1423 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1424   uint8_t fifo_data_out                 : 8;
1425 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1426   uint8_t fifo_data_out                 : 8;
1427 #endif /* DRV_BYTE_ORDER */
1428 } lsm6dsv16bx_fifo_data_out_byte_2_t;
1429 
1430 #define LSM6DSV16BX_FIFO_DATA_OUT_BYTE_3          0x7CU
1431 typedef struct
1432 {
1433 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1434   uint8_t fifo_data_out                 : 8;
1435 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1436   uint8_t fifo_data_out                 : 8;
1437 #endif /* DRV_BYTE_ORDER */
1438 } lsm6dsv16bx_fifo_data_out_byte_3_t;
1439 
1440 #define LSM6DSV16BX_FIFO_DATA_OUT_BYTE_4          0x7DU
1441 typedef struct
1442 {
1443 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1444   uint8_t fifo_data_out                 : 8;
1445 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1446   uint8_t fifo_data_out                 : 8;
1447 #endif /* DRV_BYTE_ORDER */
1448 } lsm6dsv16bx_fifo_data_out_byte_4_t;
1449 
1450 #define LSM6DSV16BX_FIFO_DATA_OUT_BYTE_5          0x7EU
1451 typedef struct
1452 {
1453 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1454   uint8_t fifo_data_out                 : 8;
1455 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1456   uint8_t fifo_data_out                 : 8;
1457 #endif /* DRV_BYTE_ORDER */
1458 } lsm6dsv16bx_fifo_data_out_byte_5_t;
1459 
1460 /**
1461   * @}
1462   *
1463   */
1464 
1465 /** @defgroup bitfields page embedded
1466   * @{
1467   *
1468   */
1469 
1470 #define LSM6DSV16BX_PAGE_SEL                      0x2U
1471 typedef struct
1472 {
1473 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1474   uint8_t not_used0                     : 4;
1475   uint8_t page_sel                      : 4;
1476 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1477   uint8_t page_sel                      : 4;
1478   uint8_t not_used0                     : 4;
1479 #endif /* DRV_BYTE_ORDER */
1480 } lsm6dsv16bx_page_sel_t;
1481 
1482 #define LSM6DSV16BX_EMB_FUNC_EN_A                 0x4U
1483 typedef struct
1484 {
1485 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1486   uint8_t not_used2                     : 1;
1487   uint8_t sflp_game_en                  : 1;
1488   uint8_t not_used0                     : 1;
1489   uint8_t pedo_en                       : 1;
1490   uint8_t tilt_en                       : 1;
1491   uint8_t sign_motion_en                : 1;
1492   uint8_t not_used1                     : 1;
1493   uint8_t mlc_before_fsm_en             : 1;
1494 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1495   uint8_t mlc_before_fsm_en             : 1;
1496   uint8_t not_used1                     : 1;
1497   uint8_t sign_motion_en                : 1;
1498   uint8_t tilt_en                       : 1;
1499   uint8_t pedo_en                       : 1;
1500   uint8_t not_used0                     : 1;
1501   uint8_t sflp_game_en                  : 1;
1502   uint8_t not_used2                     : 1;
1503 #endif /* DRV_BYTE_ORDER */
1504 } lsm6dsv16bx_emb_func_en_a_t;
1505 
1506 #define LSM6DSV16BX_EMB_FUNC_EN_B                 0x5U
1507 typedef struct
1508 {
1509 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1510   uint8_t fsm_en                        : 1;
1511   uint8_t not_used0                     : 2;
1512   uint8_t fifo_compr_en                 : 1;
1513   uint8_t mlc_en                        : 1;
1514   uint8_t not_used1                     : 3;
1515 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1516   uint8_t not_used1                     : 3;
1517   uint8_t mlc_en                        : 1;
1518   uint8_t fifo_compr_en                 : 1;
1519   uint8_t not_used0                     : 2;
1520   uint8_t fsm_en                        : 1;
1521 #endif /* DRV_BYTE_ORDER */
1522 } lsm6dsv16bx_emb_func_en_b_t;
1523 
1524 #define LSM6DSV16BX_EMB_FUNC_EXEC_STATUS          0x7U
1525 typedef struct
1526 {
1527 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1528   uint8_t emb_func_endop                : 1;
1529   uint8_t emb_func_exec_ovr             : 1;
1530   uint8_t not_used0                     : 6;
1531 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1532   uint8_t not_used0                     : 6;
1533   uint8_t emb_func_exec_ovr             : 1;
1534   uint8_t emb_func_endop                : 1;
1535 #endif /* DRV_BYTE_ORDER */
1536 } lsm6dsv16bx_emb_func_exec_status_t;
1537 
1538 #define LSM6DSV16BX_PAGE_ADDRESS                  0x8U
1539 typedef struct
1540 {
1541 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1542   uint8_t page_addr                     : 8;
1543 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1544   uint8_t page_addr                     : 8;
1545 #endif /* DRV_BYTE_ORDER */
1546 } lsm6dsv16bx_page_address_t;
1547 
1548 #define LSM6DSV16BX_PAGE_VALUE                    0x9U
1549 typedef struct
1550 {
1551 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1552   uint8_t page_value                    : 8;
1553 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1554   uint8_t page_value                    : 8;
1555 #endif /* DRV_BYTE_ORDER */
1556 } lsm6dsv16bx_page_value_t;
1557 
1558 #define LSM6DSV16BX_EMB_FUNC_INT1                 0x0AU
1559 typedef struct
1560 {
1561 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1562   uint8_t not_used0                     : 3;
1563   uint8_t int1_step_detector            : 1;
1564   uint8_t int1_tilt                     : 1;
1565   uint8_t int1_sig_mot                  : 1;
1566   uint8_t not_used1                     : 1;
1567   uint8_t int1_fsm_lc                   : 1;
1568 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1569   uint8_t int1_fsm_lc                   : 1;
1570   uint8_t not_used1                     : 1;
1571   uint8_t int1_sig_mot                  : 1;
1572   uint8_t int1_tilt                     : 1;
1573   uint8_t int1_step_detector            : 1;
1574   uint8_t not_used0                     : 3;
1575 #endif /* DRV_BYTE_ORDER */
1576 } lsm6dsv16bx_emb_func_int1_t;
1577 
1578 #define LSM6DSV16BX_FSM_INT1                      0x0BU
1579 typedef struct
1580 {
1581 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1582   uint8_t int1_fsm1                     : 1;
1583   uint8_t int1_fsm2                     : 1;
1584   uint8_t int1_fsm3                     : 1;
1585   uint8_t int1_fsm4                     : 1;
1586   uint8_t int1_fsm5                     : 1;
1587   uint8_t int1_fsm6                     : 1;
1588   uint8_t int1_fsm7                     : 1;
1589   uint8_t int1_fsm8                     : 1;
1590 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1591   uint8_t int1_fsm8                     : 1;
1592   uint8_t int1_fsm7                     : 1;
1593   uint8_t int1_fsm6                     : 1;
1594   uint8_t int1_fsm5                     : 1;
1595   uint8_t int1_fsm4                     : 1;
1596   uint8_t int1_fsm3                     : 1;
1597   uint8_t int1_fsm2                     : 1;
1598   uint8_t int1_fsm1                     : 1;
1599 #endif /* DRV_BYTE_ORDER */
1600 } lsm6dsv16bx_fsm_int1_t;
1601 
1602 #define LSM6DSV16BX_MLC_INT1                      0x0DU
1603 typedef struct
1604 {
1605 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1606   uint8_t int1_mlc1                     : 1;
1607   uint8_t int1_mlc2                     : 1;
1608   uint8_t int1_mlc3                     : 1;
1609   uint8_t int1_mlc4                     : 1;
1610   uint8_t not_used0                     : 4;
1611 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1612   uint8_t not_used0                     : 4;
1613   uint8_t int1_mlc4                     : 1;
1614   uint8_t int1_mlc3                     : 1;
1615   uint8_t int1_mlc2                     : 1;
1616   uint8_t int1_mlc1                     : 1;
1617 #endif /* DRV_BYTE_ORDER */
1618 } lsm6dsv16bx_mlc_int1_t;
1619 
1620 #define LSM6DSV16BX_EMB_FUNC_INT2                 0x0EU
1621 typedef struct
1622 {
1623 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1624   uint8_t not_used0                     : 3;
1625   uint8_t int2_step_detector            : 1;
1626   uint8_t int2_tilt                     : 1;
1627   uint8_t int2_sig_mot                  : 1;
1628   uint8_t not_used1                     : 1;
1629   uint8_t int2_fsm_lc                   : 1;
1630 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1631   uint8_t int2_fsm_lc                   : 1;
1632   uint8_t not_used1                     : 1;
1633   uint8_t int2_sig_mot                  : 1;
1634   uint8_t int2_tilt                     : 1;
1635   uint8_t int2_step_detector            : 1;
1636   uint8_t not_used0                     : 3;
1637 #endif /* DRV_BYTE_ORDER */
1638 } lsm6dsv16bx_emb_func_int2_t;
1639 
1640 #define LSM6DSV16BX_FSM_INT2                      0x0FU
1641 typedef struct
1642 {
1643 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1644   uint8_t int2_fsm1                     : 1;
1645   uint8_t int2_fsm2                     : 1;
1646   uint8_t int2_fsm3                     : 1;
1647   uint8_t int2_fsm4                     : 1;
1648   uint8_t int2_fsm5                     : 1;
1649   uint8_t int2_fsm6                     : 1;
1650   uint8_t int2_fsm7                     : 1;
1651   uint8_t int2_fsm8                     : 1;
1652 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1653   uint8_t int2_fsm8                     : 1;
1654   uint8_t int2_fsm7                     : 1;
1655   uint8_t int2_fsm6                     : 1;
1656   uint8_t int2_fsm5                     : 1;
1657   uint8_t int2_fsm4                     : 1;
1658   uint8_t int2_fsm3                     : 1;
1659   uint8_t int2_fsm2                     : 1;
1660   uint8_t int2_fsm1                     : 1;
1661 #endif /* DRV_BYTE_ORDER */
1662 } lsm6dsv16bx_fsm_int2_t;
1663 
1664 #define LSM6DSV16BX_MLC_INT2                      0x11U
1665 typedef struct
1666 {
1667 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1668   uint8_t int2_mlc1                     : 1;
1669   uint8_t int2_mlc2                     : 1;
1670   uint8_t int2_mlc3                     : 1;
1671   uint8_t int2_mlc4                     : 1;
1672   uint8_t not_used0                     : 4;
1673 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1674   uint8_t not_used0                     : 4;
1675   uint8_t int2_mlc4                     : 1;
1676   uint8_t int2_mlc3                     : 1;
1677   uint8_t int2_mlc2                     : 1;
1678   uint8_t int2_mlc1                     : 1;
1679 #endif /* DRV_BYTE_ORDER */
1680 } lsm6dsv16bx_mlc_int2_t;
1681 
1682 #define LSM6DSV16BX_EMB_FUNC_STATUS               0x12U
1683 typedef struct
1684 {
1685 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1686   uint8_t not_used0                     : 3;
1687   uint8_t is_step_det                   : 1;
1688   uint8_t is_tilt                       : 1;
1689   uint8_t is_sigmot                     : 1;
1690   uint8_t not_used1                     : 1;
1691   uint8_t is_fsm_lc                     : 1;
1692 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1693   uint8_t is_fsm_lc                     : 1;
1694   uint8_t not_used1                     : 1;
1695   uint8_t is_sigmot                     : 1;
1696   uint8_t is_tilt                       : 1;
1697   uint8_t is_step_det                   : 1;
1698   uint8_t not_used0                     : 3;
1699 #endif /* DRV_BYTE_ORDER */
1700 } lsm6dsv16bx_emb_func_status_t;
1701 
1702 #define LSM6DSV16BX_FSM_STATUS                    0x13U
1703 typedef struct
1704 {
1705 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1706   uint8_t is_fsm1                       : 1;
1707   uint8_t is_fsm2                       : 1;
1708   uint8_t is_fsm3                       : 1;
1709   uint8_t is_fsm4                       : 1;
1710   uint8_t is_fsm5                       : 1;
1711   uint8_t is_fsm6                       : 1;
1712   uint8_t is_fsm7                       : 1;
1713   uint8_t is_fsm8                       : 1;
1714 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1715   uint8_t is_fsm8                       : 1;
1716   uint8_t is_fsm7                       : 1;
1717   uint8_t is_fsm6                       : 1;
1718   uint8_t is_fsm5                       : 1;
1719   uint8_t is_fsm4                       : 1;
1720   uint8_t is_fsm3                       : 1;
1721   uint8_t is_fsm2                       : 1;
1722   uint8_t is_fsm1                       : 1;
1723 #endif /* DRV_BYTE_ORDER */
1724 } lsm6dsv16bx_fsm_status_t;
1725 
1726 #define LSM6DSV16BX_MLC_STATUS                    0x15U
1727 typedef struct
1728 {
1729 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1730   uint8_t is_mlc1                       : 1;
1731   uint8_t is_mlc2                       : 1;
1732   uint8_t is_mlc3                       : 1;
1733   uint8_t is_mlc4                       : 1;
1734   uint8_t not_used0                     : 4;
1735 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1736   uint8_t not_used0                     : 4;
1737   uint8_t is_mlc4                       : 1;
1738   uint8_t is_mlc3                       : 1;
1739   uint8_t is_mlc2                       : 1;
1740   uint8_t is_mlc1                       : 1;
1741 #endif /* DRV_BYTE_ORDER */
1742 } lsm6dsv16bx_mlc_status_t;
1743 
1744 #define LSM6DSV16BX_PAGE_RW                       0x17U
1745 typedef struct
1746 {
1747 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1748   uint8_t not_used0                     : 5;
1749   uint8_t page_read                     : 1;
1750   uint8_t page_write                    : 1;
1751   uint8_t emb_func_lir                  : 1;
1752 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1753   uint8_t emb_func_lir                  : 1;
1754   uint8_t page_write                    : 1;
1755   uint8_t page_read                     : 1;
1756   uint8_t not_used0                     : 5;
1757 #endif /* DRV_BYTE_ORDER */
1758 } lsm6dsv16bx_page_rw_t;
1759 
1760 #define LSM6DSV16BX_EMB_FUNC_FIFO_EN_A            0x44U
1761 typedef struct
1762 {
1763 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1764   uint8_t not_used0                     : 1;
1765   uint8_t sflp_game_fifo_en             : 1;
1766   uint8_t not_used1                     : 2;
1767   uint8_t sflp_gravity_fifo_en          : 1;
1768   uint8_t sflp_gbias_fifo_en            : 1;
1769   uint8_t step_counter_fifo_en          : 1;
1770   uint8_t mlc_fifo_en                   : 1;
1771 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1772   uint8_t mlc_fifo_en                   : 1;
1773   uint8_t step_counter_fifo_en          : 1;
1774   uint8_t sflp_gbias_fifo_en            : 1;
1775   uint8_t sflp_gravity_fifo_en          : 1;
1776   uint8_t not_used1                     : 2;
1777   uint8_t sflp_game_fifo_en             : 1;
1778   uint8_t not_used0                     : 1;
1779 #endif /* DRV_BYTE_ORDER */
1780 } lsm6dsv16bx_emb_func_fifo_en_a_t;
1781 
1782 #define LSM6DSV16BX_EMB_FUNC_FIFO_EN_B            0x45U
1783 typedef struct
1784 {
1785 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1786   uint8_t not_used0                     : 1;
1787   uint8_t mlc_filter_feature_fifo_en    : 1;
1788   uint8_t not_used1                     : 6;
1789 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1790   uint8_t not_used1                     : 6;
1791   uint8_t mlc_filter_feature_fifo_en    : 1;
1792   uint8_t not_used0                     : 1;
1793 #endif /* DRV_BYTE_ORDER */
1794 } lsm6dsv16bx_emb_func_fifo_en_b_t;
1795 
1796 #define LSM6DSV16BX_FSM_ENABLE                    0x46U
1797 typedef struct
1798 {
1799 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1800   uint8_t fsm1_en                       : 1;
1801   uint8_t fsm2_en                       : 1;
1802   uint8_t fsm3_en                       : 1;
1803   uint8_t fsm4_en                       : 1;
1804   uint8_t fsm5_en                       : 1;
1805   uint8_t fsm6_en                       : 1;
1806   uint8_t fsm7_en                       : 1;
1807   uint8_t fsm8_en                       : 1;
1808 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1809   uint8_t fsm8_en                       : 1;
1810   uint8_t fsm7_en                       : 1;
1811   uint8_t fsm6_en                       : 1;
1812   uint8_t fsm5_en                       : 1;
1813   uint8_t fsm4_en                       : 1;
1814   uint8_t fsm3_en                       : 1;
1815   uint8_t fsm2_en                       : 1;
1816   uint8_t fsm1_en                       : 1;
1817 #endif /* DRV_BYTE_ORDER */
1818 } lsm6dsv16bx_fsm_enable_t;
1819 
1820 #define LSM6DSV16BX_FSM_LONG_COUNTER_L            0x48U
1821 typedef struct
1822 {
1823 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1824   uint8_t fsm_lc                        : 8;
1825 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1826   uint8_t fsm_lc                        : 8;
1827 #endif /* DRV_BYTE_ORDER */
1828 } lsm6dsv16bx_fsm_long_counter_l_t;
1829 
1830 #define LSM6DSV16BX_FSM_LONG_COUNTER_H            0x49U
1831 typedef struct
1832 {
1833 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1834   uint8_t fsm_lc                        : 8;
1835 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1836   uint8_t fsm_lc                        : 8;
1837 #endif /* DRV_BYTE_ORDER */
1838 } lsm6dsv16bx_fsm_long_counter_h_t;
1839 
1840 #define LSM6DSV16BX_INT_ACK_MASK                  0x4BU
1841 typedef struct
1842 {
1843 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1844   uint8_t iack_mask                     : 8;
1845 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1846   uint8_t iack_mask                     : 8;
1847 #endif /* DRV_BYTE_ORDER */
1848 } lsm6dsv16bx_int_ack_mask_t;
1849 
1850 #define LSM6DSV16BX_FSM_OUTS1                     0x4CU
1851 typedef struct
1852 {
1853 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1854   uint8_t fsm1_n_v                      : 1;
1855   uint8_t fsm1_p_v                      : 1;
1856   uint8_t fsm1_n_3                      : 1;
1857   uint8_t fsm1_p_3                      : 1;
1858   uint8_t fsm1_n_2                      : 1;
1859   uint8_t fsm1_p_2                      : 1;
1860   uint8_t fsm1_n_1                      : 1;
1861   uint8_t fsm1_p_1                      : 1;
1862 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1863   uint8_t fsm1_p_1                      : 1;
1864   uint8_t fsm1_n_1                      : 1;
1865   uint8_t fsm1_p_2                      : 1;
1866   uint8_t fsm1_n_2                      : 1;
1867   uint8_t fsm1_p_3                      : 1;
1868   uint8_t fsm1_n_3                      : 1;
1869   uint8_t fsm1_p_v                      : 1;
1870   uint8_t fsm1_n_v                      : 1;
1871 #endif /* DRV_BYTE_ORDER */
1872 } lsm6dsv16bx_fsm_outs1_t;
1873 
1874 #define LSM6DSV16BX_FSM_OUTS2                     0x4DU
1875 typedef struct
1876 {
1877 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1878   uint8_t fsm2_n_v                      : 1;
1879   uint8_t fsm2_p_v                      : 1;
1880   uint8_t fsm2_n_3                      : 1;
1881   uint8_t fsm2_p_3                      : 1;
1882   uint8_t fsm2_n_2                      : 1;
1883   uint8_t fsm2_p_2                      : 1;
1884   uint8_t fsm2_n_1                      : 1;
1885   uint8_t fsm2_p_1                      : 1;
1886 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1887   uint8_t fsm2_p_1                      : 1;
1888   uint8_t fsm2_n_1                      : 1;
1889   uint8_t fsm2_p_2                      : 1;
1890   uint8_t fsm2_n_2                      : 1;
1891   uint8_t fsm2_p_3                      : 1;
1892   uint8_t fsm2_n_3                      : 1;
1893   uint8_t fsm2_p_v                      : 1;
1894   uint8_t fsm2_n_v                      : 1;
1895 #endif /* DRV_BYTE_ORDER */
1896 } lsm6dsv16bx_fsm_outs2_t;
1897 
1898 #define LSM6DSV16BX_FSM_OUTS3                     0x4EU
1899 typedef struct
1900 {
1901 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1902   uint8_t fsm3_n_v                      : 1;
1903   uint8_t fsm3_p_v                      : 1;
1904   uint8_t fsm3_n_3                      : 1;
1905   uint8_t fsm3_p_3                      : 1;
1906   uint8_t fsm3_n_2                      : 1;
1907   uint8_t fsm3_p_2                      : 1;
1908   uint8_t fsm3_n_1                      : 1;
1909   uint8_t fsm3_p_1                      : 1;
1910 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1911   uint8_t fsm3_p_1                      : 1;
1912   uint8_t fsm3_n_1                      : 1;
1913   uint8_t fsm3_p_2                      : 1;
1914   uint8_t fsm3_n_2                      : 1;
1915   uint8_t fsm3_p_3                      : 1;
1916   uint8_t fsm3_n_3                      : 1;
1917   uint8_t fsm3_p_v                      : 1;
1918   uint8_t fsm3_n_v                      : 1;
1919 #endif /* DRV_BYTE_ORDER */
1920 } lsm6dsv16bx_fsm_outs3_t;
1921 
1922 #define LSM6DSV16BX_FSM_OUTS4                     0x4FU
1923 typedef struct
1924 {
1925 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1926   uint8_t fsm4_n_v                      : 1;
1927   uint8_t fsm4_p_v                      : 1;
1928   uint8_t fsm4_n_3                      : 1;
1929   uint8_t fsm4_p_3                      : 1;
1930   uint8_t fsm4_n_2                      : 1;
1931   uint8_t fsm4_p_2                      : 1;
1932   uint8_t fsm4_n_1                      : 1;
1933   uint8_t fsm4_p_1                      : 1;
1934 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1935   uint8_t fsm4_p_1                      : 1;
1936   uint8_t fsm4_n_1                      : 1;
1937   uint8_t fsm4_p_2                      : 1;
1938   uint8_t fsm4_n_2                      : 1;
1939   uint8_t fsm4_p_3                      : 1;
1940   uint8_t fsm4_n_3                      : 1;
1941   uint8_t fsm4_p_v                      : 1;
1942   uint8_t fsm4_n_v                      : 1;
1943 #endif /* DRV_BYTE_ORDER */
1944 } lsm6dsv16bx_fsm_outs4_t;
1945 
1946 #define LSM6DSV16BX_FSM_OUTS5                     0x50U
1947 typedef struct
1948 {
1949 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1950   uint8_t fsm5_n_v                      : 1;
1951   uint8_t fsm5_p_v                      : 1;
1952   uint8_t fsm5_n_3                      : 1;
1953   uint8_t fsm5_p_3                      : 1;
1954   uint8_t fsm5_n_2                      : 1;
1955   uint8_t fsm5_p_2                      : 1;
1956   uint8_t fsm5_n_1                      : 1;
1957   uint8_t fsm5_p_1                      : 1;
1958 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1959   uint8_t fsm5_p_1                      : 1;
1960   uint8_t fsm5_n_1                      : 1;
1961   uint8_t fsm5_p_2                      : 1;
1962   uint8_t fsm5_n_2                      : 1;
1963   uint8_t fsm5_p_3                      : 1;
1964   uint8_t fsm5_n_3                      : 1;
1965   uint8_t fsm5_p_v                      : 1;
1966   uint8_t fsm5_n_v                      : 1;
1967 #endif /* DRV_BYTE_ORDER */
1968 } lsm6dsv16bx_fsm_outs5_t;
1969 
1970 #define LSM6DSV16BX_FSM_OUTS6                     0x51U
1971 typedef struct
1972 {
1973 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1974   uint8_t fsm6_n_v                      : 1;
1975   uint8_t fsm6_p_v                      : 1;
1976   uint8_t fsm6_n_3                      : 1;
1977   uint8_t fsm6_p_3                      : 1;
1978   uint8_t fsm6_n_2                      : 1;
1979   uint8_t fsm6_p_2                      : 1;
1980   uint8_t fsm6_n_1                      : 1;
1981   uint8_t fsm6_p_1                      : 1;
1982 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1983   uint8_t fsm6_p_1                      : 1;
1984   uint8_t fsm6_n_1                      : 1;
1985   uint8_t fsm6_p_2                      : 1;
1986   uint8_t fsm6_n_2                      : 1;
1987   uint8_t fsm6_p_3                      : 1;
1988   uint8_t fsm6_n_3                      : 1;
1989   uint8_t fsm6_p_v                      : 1;
1990   uint8_t fsm6_n_v                      : 1;
1991 #endif /* DRV_BYTE_ORDER */
1992 } lsm6dsv16bx_fsm_outs6_t;
1993 
1994 #define LSM6DSV16BX_FSM_OUTS7                     0x52U
1995 typedef struct
1996 {
1997 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1998   uint8_t fsm7_n_v                      : 1;
1999   uint8_t fsm7_p_v                      : 1;
2000   uint8_t fsm7_n_3                      : 1;
2001   uint8_t fsm7_p_3                      : 1;
2002   uint8_t fsm7_n_2                      : 1;
2003   uint8_t fsm7_p_2                      : 1;
2004   uint8_t fsm7_n_1                      : 1;
2005   uint8_t fsm7_p_1                      : 1;
2006 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2007   uint8_t fsm7_p_1                      : 1;
2008   uint8_t fsm7_n_1                      : 1;
2009   uint8_t fsm7_p_2                      : 1;
2010   uint8_t fsm7_n_2                      : 1;
2011   uint8_t fsm7_p_3                      : 1;
2012   uint8_t fsm7_n_3                      : 1;
2013   uint8_t fsm7_p_v                      : 1;
2014   uint8_t fsm7_n_v                      : 1;
2015 #endif /* DRV_BYTE_ORDER */
2016 } lsm6dsv16bx_fsm_outs7_t;
2017 
2018 #define LSM6DSV16BX_FSM_OUTS8                     0x53U
2019 typedef struct
2020 {
2021 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2022   uint8_t fsm8_n_v                      : 1;
2023   uint8_t fsm8_p_v                      : 1;
2024   uint8_t fsm8_n_3                      : 1;
2025   uint8_t fsm8_p_3                      : 1;
2026   uint8_t fsm8_n_2                      : 1;
2027   uint8_t fsm8_p_2                      : 1;
2028   uint8_t fsm8_n_1                      : 1;
2029   uint8_t fsm8_p_1                      : 1;
2030 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2031   uint8_t fsm8_p_1                      : 1;
2032   uint8_t fsm8_n_1                      : 1;
2033   uint8_t fsm8_p_2                      : 1;
2034   uint8_t fsm8_n_2                      : 1;
2035   uint8_t fsm8_p_3                      : 1;
2036   uint8_t fsm8_n_3                      : 1;
2037   uint8_t fsm8_p_v                      : 1;
2038   uint8_t fsm8_n_v                      : 1;
2039 #endif /* DRV_BYTE_ORDER */
2040 } lsm6dsv16bx_fsm_outs8_t;
2041 
2042 #define LSM6DSV16BX_SFLP_ODR                      0x5EU
2043 typedef struct
2044 {
2045 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2046   uint8_t not_used0                     : 3;
2047   uint8_t sflp_game_odr                 : 3;
2048   uint8_t not_used1                     : 2;
2049 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2050   uint8_t not_used1                     : 2;
2051   uint8_t sflp_game_odr                 : 3;
2052   uint8_t not_used0                     : 3;
2053 #endif /* DRV_BYTE_ORDER */
2054 } lsm6dsv16bx_sflp_odr_t;
2055 
2056 #define LSM6DSV16BX_FSM_ODR                       0x5FU
2057 typedef struct
2058 {
2059 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2060   uint8_t not_used0                     : 3;
2061   uint8_t fsm_odr                       : 3;
2062   uint8_t not_used1                     : 2;
2063 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2064   uint8_t not_used1                     : 2;
2065   uint8_t fsm_odr                       : 3;
2066   uint8_t not_used0                     : 3;
2067 #endif /* DRV_BYTE_ORDER */
2068 } lsm6dsv16bx_fsm_odr_t;
2069 
2070 #define LSM6DSV16BX_MLC_ODR                       0x60U
2071 typedef struct
2072 {
2073 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2074   uint8_t not_used0                     : 4;
2075   uint8_t mlc_odr                       : 3;
2076   uint8_t not_used1                     : 1;
2077 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2078   uint8_t not_used1                     : 1;
2079   uint8_t mlc_odr                       : 3;
2080   uint8_t not_used0                     : 4;
2081 #endif /* DRV_BYTE_ORDER */
2082 } lsm6dsv16bx_mlc_odr_t;
2083 
2084 #define LSM6DSV16BX_STEP_COUNTER_L                0x62U
2085 typedef struct
2086 {
2087 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2088   uint8_t step                          : 8;
2089 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2090   uint8_t step                          : 8;
2091 #endif /* DRV_BYTE_ORDER */
2092 } lsm6dsv16bx_step_counter_l_t;
2093 
2094 #define LSM6DSV16BX_STEP_COUNTER_H                0x63U
2095 typedef struct
2096 {
2097 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2098   uint8_t step                          : 8;
2099 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2100   uint8_t step                          : 8;
2101 #endif /* DRV_BYTE_ORDER */
2102 } lsm6dsv16bx_step_counter_h_t;
2103 
2104 #define LSM6DSV16BX_EMB_FUNC_SRC                  0x64U
2105 typedef struct
2106 {
2107 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2108   uint8_t not_used0                     : 2;
2109   uint8_t stepcounter_bit_set           : 1;
2110   uint8_t step_overflow                 : 1;
2111   uint8_t step_count_delta_ia           : 1;
2112   uint8_t step_detected                 : 1;
2113   uint8_t not_used1                     : 1;
2114   uint8_t pedo_rst_step                 : 1;
2115 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2116   uint8_t pedo_rst_step                 : 1;
2117   uint8_t not_used1                     : 1;
2118   uint8_t step_detected                 : 1;
2119   uint8_t step_count_delta_ia           : 1;
2120   uint8_t step_overflow                 : 1;
2121   uint8_t stepcounter_bit_set           : 1;
2122   uint8_t not_used0                     : 2;
2123 #endif /* DRV_BYTE_ORDER */
2124 } lsm6dsv16bx_emb_func_src_t;
2125 
2126 #define LSM6DSV16BX_EMB_FUNC_INIT_A               0x66U
2127 typedef struct
2128 {
2129 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2130   uint8_t not_used0                     : 1;
2131   uint8_t sflp_game_init                : 1;
2132   uint8_t not_used2                     : 1;
2133   uint8_t step_det_init                 : 1;
2134   uint8_t tilt_init                     : 1;
2135   uint8_t sig_mot_init                  : 1;
2136   uint8_t not_used1                     : 1;
2137   uint8_t mlc_before_fsm_init           : 1;
2138 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2139   uint8_t mlc_before_fsm_init           : 1;
2140   uint8_t not_used1                     : 1;
2141   uint8_t sig_mot_init                  : 1;
2142   uint8_t tilt_init                     : 1;
2143   uint8_t step_det_init                 : 1;
2144   uint8_t not_used2                     : 1;
2145   uint8_t sflp_game_init                : 1;
2146   uint8_t not_used0                     : 1;
2147 #endif /* DRV_BYTE_ORDER */
2148 } lsm6dsv16bx_emb_func_init_a_t;
2149 
2150 #define LSM6DSV16BX_EMB_FUNC_INIT_B               0x67U
2151 typedef struct
2152 {
2153 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2154   uint8_t fsm_init                      : 1;
2155   uint8_t not_used0                     : 2;
2156   uint8_t fifo_compr_init               : 1;
2157   uint8_t mlc_init                      : 1;
2158   uint8_t not_used1                     : 3;
2159 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2160   uint8_t not_used1                     : 3;
2161   uint8_t mlc_init                      : 1;
2162   uint8_t fifo_compr_init               : 1;
2163   uint8_t not_used0                     : 2;
2164   uint8_t fsm_init                      : 1;
2165 #endif /* DRV_BYTE_ORDER */
2166 } lsm6dsv16bx_emb_func_init_b_t;
2167 
2168 #define LSM6DSV16BX_MLC1_SRC                      0x70U
2169 typedef struct
2170 {
2171 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2172   uint8_t mlc1_src                      : 8;
2173 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2174   uint8_t mlc1_src                      : 8;
2175 #endif /* DRV_BYTE_ORDER */
2176 } lsm6dsv16bx_mlc1_src_t;
2177 
2178 #define LSM6DSV16BX_MLC2_SRC                      0x71U
2179 typedef struct
2180 {
2181 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2182   uint8_t mlc2_src                      : 8;
2183 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2184   uint8_t mlc2_src                      : 8;
2185 #endif /* DRV_BYTE_ORDER */
2186 } lsm6dsv16bx_mlc2_src_t;
2187 
2188 #define LSM6DSV16BX_MLC3_SRC                      0x72U
2189 typedef struct
2190 {
2191 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2192   uint8_t mlc3_src                      : 8;
2193 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2194   uint8_t mlc3_src                      : 8;
2195 #endif /* DRV_BYTE_ORDER */
2196 } lsm6dsv16bx_mlc3_src_t;
2197 
2198 #define LSM6DSV16BX_MLC4_SRC                      0x73U
2199 typedef struct
2200 {
2201 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2202   uint8_t mlc4_src                      : 8;
2203 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2204   uint8_t mlc4_src                      : 8;
2205 #endif /* DRV_BYTE_ORDER */
2206 } lsm6dsv16bx_mlc4_src_t;
2207 
2208 /**
2209   * @}
2210   *
2211   */
2212 
2213 /** @defgroup bitfields page pg0_emb_adv
2214   * @{
2215   *
2216   */
2217 #define LSM6DSV16BX_EMB_ADV_PG_0                  0x000
2218 
2219 #define LSM6DSV16BX_SFLP_GAME_GBIASX_L            0x6EU
2220 typedef struct
2221 {
2222 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2223   uint8_t gbiasx                        : 8;
2224 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2225   uint8_t gbiasx                        : 8;
2226 #endif /* DRV_BYTE_ORDER */
2227 } lsm6dsv16bx_sflp_game_gbiasx_l_t;
2228 
2229 #define LSM6DSV16BX_SFLP_GAME_GBIASX_H            0x6FU
2230 typedef struct
2231 {
2232 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2233   uint8_t gbiasx                        : 8;
2234 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2235   uint8_t gbiasx                        : 8;
2236 #endif /* DRV_BYTE_ORDER */
2237 } lsm6dsv16bx_sflp_game_gbiasx_h_t;
2238 
2239 #define LSM6DSV16BX_SFLP_GAME_GBIASY_L            0x70U
2240 typedef struct
2241 {
2242 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2243   uint8_t gbiasy                        : 8;
2244 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2245   uint8_t gbiasy                        : 8;
2246 #endif /* DRV_BYTE_ORDER */
2247 } lsm6dsv16bx_sflp_game_gbiasy_l_t;
2248 
2249 #define LSM6DSV16BX_SFLP_GAME_GBIASY_H            0x71U
2250 typedef struct
2251 {
2252 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2253   uint8_t gbiasy                        : 8;
2254 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2255   uint8_t gbiasy                        : 8;
2256 #endif /* DRV_BYTE_ORDER */
2257 } lsm6dsv16bx_sflp_game_gbiasy_h_t;
2258 
2259 #define LSM6DSV16BX_SFLP_GAME_GBIASZ_L            0x72U
2260 typedef struct
2261 {
2262 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2263   uint8_t gbiasz                        : 8;
2264 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2265   uint8_t gbiasz                        : 8;
2266 #endif /* DRV_BYTE_ORDER */
2267 } lsm6dsv16bx_sflp_game_gbiasz_l_t;
2268 
2269 #define LSM6DSV16BX_SFLP_GAME_GBIASZ_H            0x73U
2270 typedef struct
2271 {
2272 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2273   uint8_t gbiasz                        : 8;
2274 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2275   uint8_t gbiasz                        : 8;
2276 #endif /* DRV_BYTE_ORDER */
2277 } lsm6dsv16bx_sflp_game_gbiasz_h_t;
2278 
2279 #define LSM6DSV16BX_FSM_QVAR_SENSITIVITY_L        0xBAU
2280 typedef struct
2281 {
2282 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2283   uint8_t fsm_qvar_s                    : 8;
2284 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2285   uint8_t fsm_qvar_s                    : 8;
2286 #endif /* DRV_BYTE_ORDER */
2287 } lsm6dsv16bx_fsm_qvar_sensitivity_l_t;
2288 
2289 #define LSM6DSV16BX_FSM_QVAR_SENSITIVITY_H        0xBBU
2290 typedef struct
2291 {
2292 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2293   uint8_t fsm_qvar_s                    : 8;
2294 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2295   uint8_t fsm_qvar_s                    : 8;
2296 #endif /* DRV_BYTE_ORDER */
2297 } lsm6dsv16bx_fsm_qvar_sensitivity_h_t;
2298 
2299 /**
2300   * @}
2301   *
2302   */
2303 
2304 /** @defgroup bitfields page pg1_emb_adv
2305   * @{
2306   *
2307   */
2308 
2309 #define LSM6DSV16BX_EMB_ADV_PG_1                  0x001
2310 
2311 #define LSM6DSV16BX_FSM_LC_TIMEOUT_L              0x17AU
2312 typedef struct
2313 {
2314 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2315   uint8_t fsm_lc_timeout                : 8;
2316 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2317   uint8_t fsm_lc_timeout                : 8;
2318 #endif /* DRV_BYTE_ORDER */
2319 } lsm6dsv16bx_fsm_lc_timeout_l_t;
2320 
2321 #define LSM6DSV16BX_FSM_LC_TIMEOUT_H              0x17BU
2322 typedef struct
2323 {
2324 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2325   uint8_t fsm_lc_timeout                : 8;
2326 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2327   uint8_t fsm_lc_timeout                : 8;
2328 #endif /* DRV_BYTE_ORDER */
2329 } lsm6dsv16bx_fsm_lc_timeout_h_t;
2330 
2331 #define LSM6DSV16BX_FSM_PROGRAMS                  0x17CU
2332 typedef struct
2333 {
2334 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2335   uint8_t fsm_n_prog                    : 8;
2336 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2337   uint8_t fsm_n_prog                    : 8;
2338 #endif /* DRV_BYTE_ORDER */
2339 } lsm6dsv16bx_fsm_programs_t;
2340 
2341 #define LSM6DSV16BX_FSM_START_ADD_L               0x17EU
2342 typedef struct
2343 {
2344 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2345   uint8_t fsm_start                     : 8;
2346 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2347   uint8_t fsm_start                     : 8;
2348 #endif /* DRV_BYTE_ORDER */
2349 } lsm6dsv16bx_fsm_start_add_l_t;
2350 
2351 #define LSM6DSV16BX_FSM_START_ADD_H               0x17FU
2352 typedef struct
2353 {
2354 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2355   uint8_t fsm_start                     : 8;
2356 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2357   uint8_t fsm_start                     : 8;
2358 #endif /* DRV_BYTE_ORDER */
2359 } lsm6dsv16bx_fsm_start_add_h_t;
2360 
2361 #define LSM6DSV16BX_PEDO_CMD_REG                  0x183U
2362 typedef struct
2363 {
2364 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2365   uint8_t not_used0                     : 2;
2366   uint8_t fp_rejection_en               : 1;
2367   uint8_t carry_count_en                : 1;
2368   uint8_t not_used1                     : 4;
2369 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2370   uint8_t not_used1                     : 4;
2371   uint8_t carry_count_en                : 1;
2372   uint8_t fp_rejection_en               : 1;
2373   uint8_t not_used0                     : 2;
2374 #endif /* DRV_BYTE_ORDER */
2375 } lsm6dsv16bx_pedo_cmd_reg_t;
2376 
2377 #define LSM6DSV16BX_PEDO_DEB_STEPS_CONF           0x184U
2378 typedef struct
2379 {
2380 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2381   uint8_t deb_step                      : 8;
2382 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2383   uint8_t deb_step                      : 8;
2384 #endif /* DRV_BYTE_ORDER */
2385 } lsm6dsv16bx_pedo_deb_steps_conf_t;
2386 
2387 #define LSM6DSV16BX_PEDO_SC_DELTAT_L              0x1D0U
2388 typedef struct
2389 {
2390 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2391   uint8_t pd_sc                         : 8;
2392 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2393   uint8_t pd_sc                         : 8;
2394 #endif /* DRV_BYTE_ORDER */
2395 } lsm6dsv16bx_pedo_sc_deltat_l_t;
2396 
2397 #define LSM6DSV16BX_PEDO_SC_DELTAT_H              0x1D1U
2398 typedef struct
2399 {
2400 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2401   uint8_t pd_sc                         : 8;
2402 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2403   uint8_t pd_sc                         : 8;
2404 #endif /* DRV_BYTE_ORDER */
2405 } lsm6dsv16bx_pedo_sc_deltat_h_t;
2406 
2407 #define LSM6DSV16BX_MLC_QVAR_SENSITIVITY_L        0x1E8U
2408 typedef struct
2409 {
2410 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2411   uint8_t mlc_qvar_s                    : 8;
2412 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2413   uint8_t mlc_qvar_s                    : 8;
2414 #endif /* DRV_BYTE_ORDER */
2415 } lsm6dsv16bx_mlc_qvar_sensitivity_l_t;
2416 
2417 #define LSM6DSV16BX_MLC_QVAR_SENSITIVITY_H        0x1E9U
2418 typedef struct
2419 {
2420 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2421   uint8_t mlc_qvar_s                    : 8;
2422 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2423   uint8_t mlc_qvar_s                    : 8;
2424 #endif /* DRV_BYTE_ORDER */
2425 } lsm6dsv16bx_mlc_qvar_sensitivity_h_t;
2426 
2427 /**
2428   * @}
2429   *
2430   */
2431 
2432 #define LSM6DSV16BX_START_FSM_ADD                0x035CU
2433 
2434 /**
2435   * @defgroup LSM6DSV16BX_Register_Union
2436   * @brief    These unions group all the registers having a bit-field
2437   *           description.
2438   *           These unions are useful but it's not needed by the driver.
2439   *
2440   *           REMOVING this unions you are compliant with:
2441   *           MISRA-C 2012 [Rule 19.2] -> " Union are not allowed "
2442   *
2443   * @{
2444   *
2445   */
2446 typedef union
2447 {
2448   lsm6dsv16bx_func_cfg_access_t    func_cfg_access;
2449   lsm6dsv16bx_pin_ctrl_t    pin_ctrl;
2450   lsm6dsv16bx_if_cfg_t    if_cfg;
2451   lsm6dsv16bx_fifo_ctrl1_t    fifo_ctrl1;
2452   lsm6dsv16bx_fifo_ctrl2_t    fifo_ctrl2;
2453   lsm6dsv16bx_fifo_ctrl3_t    fifo_ctrl3;
2454   lsm6dsv16bx_fifo_ctrl4_t    fifo_ctrl4;
2455   lsm6dsv16bx_counter_bdr_reg1_t    counter_bdr_reg1;
2456   lsm6dsv16bx_counter_bdr_reg2_t    counter_bdr_reg2;
2457   lsm6dsv16bx_int1_ctrl_t    int1_ctrl;
2458   lsm6dsv16bx_int2_ctrl_t    int2_ctrl;
2459   lsm6dsv16bx_who_am_i_t    who_am_i;
2460   lsm6dsv16bx_ctrl1_t    ctrl1;
2461   lsm6dsv16bx_ctrl2_t    ctrl2;
2462   lsm6dsv16bx_ctrl3_t    ctrl3;
2463   lsm6dsv16bx_ctrl4_t    ctrl4;
2464   lsm6dsv16bx_ctrl5_t    ctrl5;
2465   lsm6dsv16bx_ctrl6_t    ctrl6;
2466   lsm6dsv16bx_ctrl7_t    ctrl7;
2467   lsm6dsv16bx_ctrl8_t    ctrl8;
2468   lsm6dsv16bx_ctrl9_t    ctrl9;
2469   lsm6dsv16bx_ctrl10_t    ctrl10;
2470   lsm6dsv16bx_fifo_status1_t    fifo_status1;
2471   lsm6dsv16bx_fifo_status2_t    fifo_status2;
2472   lsm6dsv16bx_all_int_src_t    all_int_src;
2473   lsm6dsv16bx_status_reg_t    status_reg;
2474   lsm6dsv16bx_out_temp_l_t    out_temp_l;
2475   lsm6dsv16bx_out_temp_h_t    out_temp_h;
2476   lsm6dsv16bx_outx_l_g_t    outx_l_g;
2477   lsm6dsv16bx_outx_h_g_t    outx_h_g;
2478   lsm6dsv16bx_outy_l_g_t    outy_l_g;
2479   lsm6dsv16bx_outy_h_g_t    outy_h_g;
2480   lsm6dsv16bx_outz_l_g_t    outz_l_g;
2481   lsm6dsv16bx_outz_h_g_t    outz_h_g;
2482   lsm6dsv16bx_outz_l_a_t    outz_l_a;
2483   lsm6dsv16bx_outz_h_a_t    outz_h_a;
2484   lsm6dsv16bx_outy_l_a_t    outy_l_a;
2485   lsm6dsv16bx_outy_h_a_t    outy_h_a;
2486   lsm6dsv16bx_outx_l_a_t    outx_l_a;
2487   lsm6dsv16bx_outx_h_a_t    outx_h_a;
2488   lsm6dsv16bx_ui_outz_l_a_dualc_t    ui_outz_l_a_dualc;
2489   lsm6dsv16bx_ui_outz_h_a_dualc_t    ui_outz_h_a_dualc;
2490   lsm6dsv16bx_ui_outy_l_a_dualc_t    ui_outy_l_a_dualc;
2491   lsm6dsv16bx_ui_outy_h_a_dualc_t    ui_outy_h_a_dualc;
2492   lsm6dsv16bx_ui_outx_l_a_dualc_t    ui_outx_l_a_dualc;
2493   lsm6dsv16bx_ui_outx_h_a_dualc_t    ui_outx_h_a_dualc;
2494   lsm6dsv16bx_ah_qvar_out_l_t    ah_qvar_out_l;
2495   lsm6dsv16bx_ah_qvar_out_h_t    ah_qvar_out_h;
2496   lsm6dsv16bx_timestamp0_t    timestamp0;
2497   lsm6dsv16bx_timestamp1_t    timestamp1;
2498   lsm6dsv16bx_timestamp2_t    timestamp2;
2499   lsm6dsv16bx_timestamp3_t    timestamp3;
2500   lsm6dsv16bx_wake_up_src_t    wake_up_src;
2501   lsm6dsv16bx_tap_src_t    tap_src;
2502   lsm6dsv16bx_d6d_src_t    d6d_src;
2503   lsm6dsv16bx_emb_func_status_mainpage_t    emb_func_status_mainpage;
2504   lsm6dsv16bx_fsm_status_mainpage_t    fsm_status_mainpage;
2505   lsm6dsv16bx_mlc_status_mainpage_t    mlc_status_mainpage;
2506   lsm6dsv16bx_internal_freq_t    internal_freq;
2507   lsm6dsv16bx_functions_enable_t    functions_enable;
2508   lsm6dsv16bx_inactivity_dur_t    inactivity_dur;
2509   lsm6dsv16bx_inactivity_ths_t    inactivity_ths;
2510   lsm6dsv16bx_tap_cfg0_t    tap_cfg0;
2511   lsm6dsv16bx_tap_cfg1_t    tap_cfg1;
2512   lsm6dsv16bx_tap_cfg2_t    tap_cfg2;
2513   lsm6dsv16bx_tap_ths_6d_t    tap_ths_6d;
2514   lsm6dsv16bx_tap_dur_t    int_dur2;
2515   lsm6dsv16bx_wake_up_ths_t    wake_up_ths;
2516   lsm6dsv16bx_wake_up_dur_t    wake_up_dur;
2517   lsm6dsv16bx_free_fall_t    free_fall;
2518   lsm6dsv16bx_md1_cfg_t    md1_cfg;
2519   lsm6dsv16bx_md2_cfg_t    md2_cfg;
2520   lsm6dsv16bx_emb_func_cfg_t    emb_func_cfg;
2521   lsm6dsv16bx_tdm_cfg0_t    tdm_cfg0;
2522   lsm6dsv16bx_tdm_cfg1_t    tdm_cfg1;
2523   lsm6dsv16bx_tdm_cfg2_t    tdm_cfg2;
2524   lsm6dsv16bx_z_ofs_usr_t    z_ofs_usr;
2525   lsm6dsv16bx_y_ofs_usr_t    y_ofs_usr;
2526   lsm6dsv16bx_x_ofs_usr_t    x_ofs_usr;
2527   lsm6dsv16bx_fifo_data_out_tag_t    fifo_data_out_tag;
2528   lsm6dsv16bx_fifo_data_out_byte_0_t    fifo_data_out_byte_0;
2529   lsm6dsv16bx_fifo_data_out_byte_1_t    fifo_data_out_byte_1;
2530   lsm6dsv16bx_fifo_data_out_byte_2_t    fifo_data_out_byte_2;
2531   lsm6dsv16bx_fifo_data_out_byte_3_t    fifo_data_out_byte_3;
2532   lsm6dsv16bx_fifo_data_out_byte_4_t    fifo_data_out_byte_4;
2533   lsm6dsv16bx_fifo_data_out_byte_5_t    fifo_data_out_byte_5;
2534   lsm6dsv16bx_page_sel_t    page_sel;
2535   lsm6dsv16bx_emb_func_en_a_t    emb_func_en_a;
2536   lsm6dsv16bx_emb_func_en_b_t    emb_func_en_b;
2537   lsm6dsv16bx_emb_func_exec_status_t    emb_func_exec_status;
2538   lsm6dsv16bx_page_address_t    page_address;
2539   lsm6dsv16bx_page_value_t    page_value;
2540   lsm6dsv16bx_emb_func_int1_t    emb_func_int1;
2541   lsm6dsv16bx_fsm_int1_t    fsm_int1;
2542   lsm6dsv16bx_mlc_int1_t    mlc_int1;
2543   lsm6dsv16bx_emb_func_int2_t    emb_func_int2;
2544   lsm6dsv16bx_fsm_int2_t    fsm_int2;
2545   lsm6dsv16bx_mlc_int2_t    mlc_int2;
2546   lsm6dsv16bx_emb_func_status_t    emb_func_status;
2547   lsm6dsv16bx_fsm_status_t    fsm_status;
2548   lsm6dsv16bx_mlc_status_t    mlc_status;
2549   lsm6dsv16bx_page_rw_t    page_rw;
2550   lsm6dsv16bx_emb_func_fifo_en_a_t    emb_func_fifo_en_a;
2551   lsm6dsv16bx_emb_func_fifo_en_b_t    emb_func_fifo_en_b;
2552   lsm6dsv16bx_fsm_enable_t    fsm_enable;
2553   lsm6dsv16bx_fsm_long_counter_l_t    fsm_long_counter_l;
2554   lsm6dsv16bx_fsm_long_counter_h_t    fsm_long_counter_h;
2555   lsm6dsv16bx_fsm_outs1_t    fsm_outs1;
2556   lsm6dsv16bx_fsm_outs2_t    fsm_outs2;
2557   lsm6dsv16bx_fsm_outs3_t    fsm_outs3;
2558   lsm6dsv16bx_fsm_outs4_t    fsm_outs4;
2559   lsm6dsv16bx_fsm_outs5_t    fsm_outs5;
2560   lsm6dsv16bx_fsm_outs6_t    fsm_outs6;
2561   lsm6dsv16bx_fsm_outs7_t    fsm_outs7;
2562   lsm6dsv16bx_fsm_outs8_t    fsm_outs8;
2563   lsm6dsv16bx_fsm_odr_t    fsm_odr;
2564   lsm6dsv16bx_mlc_odr_t    mlc_odr;
2565   lsm6dsv16bx_step_counter_l_t    step_counter_l;
2566   lsm6dsv16bx_step_counter_h_t    step_counter_h;
2567   lsm6dsv16bx_emb_func_src_t    emb_func_src;
2568   lsm6dsv16bx_emb_func_init_a_t    emb_func_init_a;
2569   lsm6dsv16bx_emb_func_init_b_t    emb_func_init_b;
2570   lsm6dsv16bx_mlc1_src_t    mlc1_src;
2571   lsm6dsv16bx_mlc2_src_t    mlc2_src;
2572   lsm6dsv16bx_mlc3_src_t    mlc3_src;
2573   lsm6dsv16bx_mlc4_src_t    mlc4_src;
2574   lsm6dsv16bx_fsm_qvar_sensitivity_l_t    fsm_qvar_sensitivity_l;
2575   lsm6dsv16bx_fsm_qvar_sensitivity_h_t    fsm_qvar_sensitivity_h;
2576   lsm6dsv16bx_fsm_lc_timeout_l_t    fsm_lc_timeout_l;
2577   lsm6dsv16bx_fsm_lc_timeout_h_t    fsm_lc_timeout_h;
2578   lsm6dsv16bx_fsm_programs_t    fsm_programs;
2579   lsm6dsv16bx_fsm_start_add_l_t    fsm_start_add_l;
2580   lsm6dsv16bx_fsm_start_add_h_t    fsm_start_add_h;
2581   lsm6dsv16bx_pedo_cmd_reg_t    pedo_cmd_reg;
2582   lsm6dsv16bx_pedo_deb_steps_conf_t    pedo_deb_steps_conf;
2583   lsm6dsv16bx_pedo_sc_deltat_l_t    pedo_sc_deltat_l;
2584   lsm6dsv16bx_pedo_sc_deltat_h_t    pedo_sc_deltat_h;
2585   lsm6dsv16bx_mlc_qvar_sensitivity_l_t    mlc_qvar_sensitivity_l;
2586   lsm6dsv16bx_mlc_qvar_sensitivity_h_t    mlc_qvar_sensitivity_h;
2587   bitwise_t    bitwise;
2588   uint8_t    byte;
2589 } lsm6dsv16bx_reg_t;
2590 
2591 
2592 /**
2593   * @}
2594   *
2595   */
2596 
2597 #ifndef __weak
2598 #define __weak __attribute__((weak))
2599 #endif /* __weak */
2600 
2601 /*
2602  * These are the basic platform dependent I/O routines to read
2603  * and write device registers connected on a standard bus.
2604  * The driver keeps offering a default implementation based on function
2605  * pointers to read/write routines for backward compatibility.
2606  * The __weak directive allows the final application to overwrite
2607  * them with a custom implementation.
2608  */
2609 
2610 int32_t lsm6dsv16bx_read_reg(const stmdev_ctx_t *ctx, uint8_t reg,
2611                              uint8_t *data,
2612                              uint16_t len);
2613 int32_t lsm6dsv16bx_write_reg(const stmdev_ctx_t *ctx, uint8_t reg,
2614                               uint8_t *data,
2615                               uint16_t len);
2616 
2617 float_t lsm6dsv16bx_from_sflp_to_mg(int16_t lsb);
2618 float_t lsm6dsv16bx_from_fs2_to_mg(int16_t lsb);
2619 float_t lsm6dsv16bx_from_fs4_to_mg(int16_t lsb);
2620 float_t lsm6dsv16bx_from_fs8_to_mg(int16_t lsb);
2621 float_t lsm6dsv16bx_from_fs16_to_mg(int16_t lsb);
2622 
2623 float_t lsm6dsv16bx_from_fs125_to_mdps(int16_t lsb);
2624 float_t lsm6dsv16bx_from_fs500_to_mdps(int16_t lsb);
2625 float_t lsm6dsv16bx_from_fs250_to_mdps(int16_t lsb);
2626 float_t lsm6dsv16bx_from_fs1000_to_mdps(int16_t lsb);
2627 float_t lsm6dsv16bx_from_fs2000_to_mdps(int16_t lsb);
2628 float_t lsm6dsv16bx_from_fs4000_to_mdps(int16_t lsb);
2629 
2630 float_t lsm6dsv16bx_from_lsb_to_celsius(int16_t lsb);
2631 
2632 uint64_t lsm6dsv16bx_from_lsb_to_nsec(uint32_t lsb);
2633 
2634 float_t lsm6dsv16bx_from_lsb_to_mv(int16_t lsb);
2635 
2636 typedef enum
2637 {
2638   LSM6DSV16BX_READY                               = 0x0,
2639   LSM6DSV16BX_GLOBAL_RST                          = 0x1,
2640   LSM6DSV16BX_RESTORE_CAL_PARAM                   = 0x2,
2641   LSM6DSV16BX_RESTORE_CTRL_REGS                   = 0x4,
2642 } lsm6dsv16bx_reset_t;
2643 int32_t lsm6dsv16bx_reset_set(const stmdev_ctx_t *ctx, lsm6dsv16bx_reset_t val);
2644 int32_t lsm6dsv16bx_reset_get(const stmdev_ctx_t *ctx, lsm6dsv16bx_reset_t *val);
2645 
2646 typedef enum
2647 {
2648   LSM6DSV16BX_MAIN_MEM_BANK                       = 0x0,
2649   LSM6DSV16BX_EMBED_FUNC_MEM_BANK                 = 0x1,
2650 } lsm6dsv16bx_mem_bank_t;
2651 int32_t lsm6dsv16bx_mem_bank_set(const stmdev_ctx_t *ctx, lsm6dsv16bx_mem_bank_t val);
2652 int32_t lsm6dsv16bx_mem_bank_get(const stmdev_ctx_t *ctx,
2653                                  lsm6dsv16bx_mem_bank_t *val);
2654 
2655 int32_t lsm6dsv16bx_device_id_get(const stmdev_ctx_t *ctx, uint8_t *val);
2656 
2657 typedef enum
2658 {
2659   LSM6DSV16BX_XL_ODR_OFF                          = 0x0,
2660   LSM6DSV16BX_XL_ODR_AT_1Hz875                    = 0x1,
2661   LSM6DSV16BX_XL_ODR_AT_7Hz5                      = 0x2,
2662   LSM6DSV16BX_XL_ODR_AT_15Hz                      = 0x3,
2663   LSM6DSV16BX_XL_ODR_AT_30Hz                      = 0x4,
2664   LSM6DSV16BX_XL_ODR_AT_60Hz                      = 0x5,
2665   LSM6DSV16BX_XL_ODR_AT_120Hz                     = 0x6,
2666   LSM6DSV16BX_XL_ODR_AT_240Hz                     = 0x7,
2667   LSM6DSV16BX_XL_ODR_AT_480Hz                     = 0x8,
2668   LSM6DSV16BX_XL_ODR_AT_960Hz                     = 0x9,
2669   LSM6DSV16BX_XL_ODR_AT_1920Hz                    = 0xA,
2670   LSM6DSV16BX_XL_ODR_AT_3840Hz                    = 0xB,
2671   LSM6DSV16BX_XL_ODR_AT_7680Hz                    = 0xC,
2672 } lsm6dsv16bx_xl_data_rate_t;
2673 int32_t lsm6dsv16bx_xl_data_rate_set(const stmdev_ctx_t *ctx,
2674                                      lsm6dsv16bx_xl_data_rate_t val);
2675 int32_t lsm6dsv16bx_xl_data_rate_get(const stmdev_ctx_t *ctx,
2676                                      lsm6dsv16bx_xl_data_rate_t *val);
2677 
2678 typedef enum
2679 {
2680   LSM6DSV16BX_XL_HIGH_PERFORMANCE_MD              = 0x0,
2681   LSM6DSV16BX_XL_HIGH_PERFORMANCE_TDM_MD          = 0x2,
2682   LSM6DSV16BX_XL_LOW_POWER_2_AVG_MD               = 0x4,
2683   LSM6DSV16BX_XL_LOW_POWER_4_AVG_MD               = 0x5,
2684   LSM6DSV16BX_XL_LOW_POWER_8_AVG_MD               = 0x6,
2685 } lsm6dsv16bx_xl_mode_t;
2686 int32_t lsm6dsv16bx_xl_mode_set(const stmdev_ctx_t *ctx, lsm6dsv16bx_xl_mode_t val);
2687 int32_t lsm6dsv16bx_xl_mode_get(const stmdev_ctx_t *ctx, lsm6dsv16bx_xl_mode_t *val);
2688 
2689 typedef enum
2690 {
2691   LSM6DSV16BX_GY_ODR_OFF                          = 0x0,
2692   LSM6DSV16BX_GY_ODR_AT_7Hz5                      = 0x2,
2693   LSM6DSV16BX_GY_ODR_AT_15Hz                      = 0x3,
2694   LSM6DSV16BX_GY_ODR_AT_30Hz                      = 0x4,
2695   LSM6DSV16BX_GY_ODR_AT_60Hz                      = 0x5,
2696   LSM6DSV16BX_GY_ODR_AT_120Hz                     = 0x6,
2697   LSM6DSV16BX_GY_ODR_AT_240Hz                     = 0x7,
2698   LSM6DSV16BX_GY_ODR_AT_480Hz                     = 0x8,
2699   LSM6DSV16BX_GY_ODR_AT_960Hz                     = 0x9,
2700   LSM6DSV16BX_GY_ODR_AT_1920Hz                    = 0xa,
2701   LSM6DSV16BX_GY_ODR_AT_3840Hz                    = 0xb,
2702   LSM6DSV16BX_GY_ODR_AT_7680Hz                    = 0xc,
2703 } lsm6dsv16bx_gy_data_rate_t;
2704 int32_t lsm6dsv16bx_gy_data_rate_set(const stmdev_ctx_t *ctx,
2705                                      lsm6dsv16bx_gy_data_rate_t val);
2706 int32_t lsm6dsv16bx_gy_data_rate_get(const stmdev_ctx_t *ctx,
2707                                      lsm6dsv16bx_gy_data_rate_t *val);
2708 
2709 typedef enum
2710 {
2711   LSM6DSV16BX_GY_HIGH_PERFORMANCE_MD              = 0x0,
2712   LSM6DSV16BX_GY_SLEEP_MD                         = 0x4,
2713   LSM6DSV16BX_GY_LOW_POWER_MD                     = 0x5,
2714 } lsm6dsv16bx_gy_mode_t;
2715 int32_t lsm6dsv16bx_gy_mode_set(const stmdev_ctx_t *ctx, lsm6dsv16bx_gy_mode_t val);
2716 int32_t lsm6dsv16bx_gy_mode_get(const stmdev_ctx_t *ctx, lsm6dsv16bx_gy_mode_t *val);
2717 
2718 int32_t lsm6dsv16bx_auto_increment_set(const stmdev_ctx_t *ctx, uint8_t val);
2719 int32_t lsm6dsv16bx_auto_increment_get(const stmdev_ctx_t *ctx, uint8_t *val);
2720 
2721 int32_t lsm6dsv16bx_block_data_update_set(const stmdev_ctx_t *ctx, uint8_t val);
2722 int32_t lsm6dsv16bx_block_data_update_get(const stmdev_ctx_t *ctx, uint8_t *val);
2723 
2724 typedef enum
2725 {
2726   LSM6DSV16BX_DRDY_LATCHED                        = 0x0,
2727   LSM6DSV16BX_DRDY_PULSED                         = 0x1,
2728 } lsm6dsv16bx_data_ready_mode_t;
2729 int32_t lsm6dsv16bx_data_ready_mode_set(const stmdev_ctx_t *ctx,
2730                                         lsm6dsv16bx_data_ready_mode_t val);
2731 int32_t lsm6dsv16bx_data_ready_mode_get(const stmdev_ctx_t *ctx,
2732                                         lsm6dsv16bx_data_ready_mode_t *val);
2733 
2734 typedef enum
2735 {
2736   LSM6DSV16BX_125dps                              = 0x0,
2737   LSM6DSV16BX_250dps                              = 0x1,
2738   LSM6DSV16BX_500dps                              = 0x2,
2739   LSM6DSV16BX_1000dps                             = 0x3,
2740   LSM6DSV16BX_2000dps                             = 0x4,
2741   LSM6DSV16BX_4000dps                             = 0xc,
2742 } lsm6dsv16bx_gy_full_scale_t;
2743 int32_t lsm6dsv16bx_gy_full_scale_set(const stmdev_ctx_t *ctx,
2744                                       lsm6dsv16bx_gy_full_scale_t val);
2745 int32_t lsm6dsv16bx_gy_full_scale_get(const stmdev_ctx_t *ctx,
2746                                       lsm6dsv16bx_gy_full_scale_t *val);
2747 
2748 typedef enum
2749 {
2750   LSM6DSV16BX_2g                                  = 0x0,
2751   LSM6DSV16BX_4g                                  = 0x1,
2752   LSM6DSV16BX_8g                                  = 0x2,
2753   LSM6DSV16BX_16g                                 = 0x3,
2754 } lsm6dsv16bx_xl_full_scale_t;
2755 int32_t lsm6dsv16bx_xl_full_scale_set(const stmdev_ctx_t *ctx,
2756                                       lsm6dsv16bx_xl_full_scale_t val);
2757 int32_t lsm6dsv16bx_xl_full_scale_get(const stmdev_ctx_t *ctx,
2758                                       lsm6dsv16bx_xl_full_scale_t *val);
2759 
2760 int32_t lsm6dsv16bx_xl_dual_channel_set(const stmdev_ctx_t *ctx, uint8_t val);
2761 int32_t lsm6dsv16bx_xl_dual_channel_get(const stmdev_ctx_t *ctx, uint8_t *val);
2762 
2763 typedef enum
2764 {
2765   LSM6DSV16BX_XL_ST_DISABLE                       = 0x0,
2766   LSM6DSV16BX_XL_ST_POSITIVE                      = 0x1,
2767   LSM6DSV16BX_XL_ST_NEGATIVE                      = 0x2,
2768   LSM6DSV16BX_XL_ST_OFFSET_POS                    = 0x5,
2769   LSM6DSV16BX_XL_ST_OFFSET_NEG                    = 0x6,
2770 } lsm6dsv16bx_xl_self_test_t;
2771 int32_t lsm6dsv16bx_xl_self_test_set(const stmdev_ctx_t *ctx,
2772                                      lsm6dsv16bx_xl_self_test_t val);
2773 int32_t lsm6dsv16bx_xl_self_test_get(const stmdev_ctx_t *ctx,
2774                                      lsm6dsv16bx_xl_self_test_t *val);
2775 
2776 typedef enum
2777 {
2778   LSM6DSV16BX_GY_ST_DISABLE                       = 0x0,
2779   LSM6DSV16BX_GY_ST_POSITIVE                      = 0x1,
2780   LSM6DSV16BX_GY_ST_NEGATIVE                      = 0x2,
2781 } lsm6dsv16bx_gy_self_test_t;
2782 int32_t lsm6dsv16bx_gy_self_test_set(const stmdev_ctx_t *ctx,
2783                                      lsm6dsv16bx_gy_self_test_t val);
2784 int32_t lsm6dsv16bx_gy_self_test_get(const stmdev_ctx_t *ctx,
2785                                      lsm6dsv16bx_gy_self_test_t *val);
2786 
2787 typedef struct
2788 {
2789   uint8_t drdy_xl                       : 1;
2790   uint8_t drdy_gy                       : 1;
2791   uint8_t drdy_temp                     : 1;
2792   uint8_t drdy_ah_qvar                  : 1;
2793   uint8_t gy_settling                   : 1;
2794   uint8_t den_flag                      : 1;
2795   uint8_t timestamp                     : 1;
2796   uint8_t free_fall                     : 1;
2797   uint8_t wake_up                       : 1;
2798   uint8_t wake_up_z                     : 1;
2799   uint8_t wake_up_y                     : 1;
2800   uint8_t wake_up_x                     : 1;
2801   uint8_t single_tap                    : 1;
2802   uint8_t double_tap                    : 1;
2803   uint8_t tap_z                         : 1;
2804   uint8_t tap_y                         : 1;
2805   uint8_t tap_x                         : 1;
2806   uint8_t tap_sign                      : 1;
2807   uint8_t six_d                         : 1;
2808   uint8_t six_d_xl                      : 1;
2809   uint8_t six_d_xh                      : 1;
2810   uint8_t six_d_yl                      : 1;
2811   uint8_t six_d_yh                      : 1;
2812   uint8_t six_d_zl                      : 1;
2813   uint8_t six_d_zh                      : 1;
2814   uint8_t sleep_change                  : 1;
2815   uint8_t sleep_state                   : 1;
2816   uint8_t step_detector                 : 1;
2817   uint8_t step_count_inc                : 1;
2818   uint8_t step_count_overflow           : 1;
2819   uint8_t step_on_delta_time            : 1;
2820   uint8_t emb_func_stand_by             : 1;
2821   uint8_t emb_func_time_exceed: 1;
2822   uint8_t tilt                          : 1;
2823   uint8_t sig_mot                       : 1;
2824   uint8_t fsm_lc                        : 1;
2825   uint8_t fsm1                          : 1;
2826   uint8_t fsm2                          : 1;
2827   uint8_t fsm3                          : 1;
2828   uint8_t fsm4                          : 1;
2829   uint8_t fsm5                          : 1;
2830   uint8_t fsm6                          : 1;
2831   uint8_t fsm7                          : 1;
2832   uint8_t fsm8                          : 1;
2833   uint8_t mlc1                          : 1;
2834   uint8_t mlc2                          : 1;
2835   uint8_t mlc3                          : 1;
2836   uint8_t mlc4                          : 1;
2837   uint8_t fifo_bdr                      : 1;
2838   uint8_t fifo_full                     : 1;
2839   uint8_t fifo_ovr                      : 1;
2840   uint8_t fifo_th                       : 1;
2841 } lsm6dsv16bx_all_sources_t;
2842 int32_t lsm6dsv16bx_all_sources_get(const stmdev_ctx_t *ctx,
2843                                     lsm6dsv16bx_all_sources_t *val);
2844 
2845 typedef struct
2846 {
2847   uint8_t drdy_xl                       : 1;
2848   uint8_t drdy_gy                       : 1;
2849   uint8_t drdy_temp                     : 1;
2850   uint8_t drdy_ah_qvar                  : 1;
2851 } lsm6dsv16bx_data_ready_t;
2852 int32_t lsm6dsv16bx_flag_data_ready_get(const stmdev_ctx_t *ctx,
2853                                         lsm6dsv16bx_data_ready_t *val);
2854 
2855 int32_t lsm6dsv16bx_temperature_raw_get(const stmdev_ctx_t *ctx, int16_t *val);
2856 
2857 int32_t lsm6dsv16bx_angular_rate_raw_get(const stmdev_ctx_t *ctx, int16_t *val);
2858 
2859 int32_t lsm6dsv16bx_acceleration_raw_get(const stmdev_ctx_t *ctx, int16_t *val);
2860 
2861 int32_t lsm6dsv16bx_dual_acceleration_raw_get(const stmdev_ctx_t *ctx, int16_t *val);
2862 
2863 int32_t lsm6dsv16bx_dual_acceleration_raw_get(const stmdev_ctx_t *ctx,
2864                                               int16_t *val);
2865 
2866 int32_t lsm6dsv16bx_ah_qvar_raw_get(const stmdev_ctx_t *ctx, int16_t *val);
2867 
2868 int32_t lsm6dsv16bx_odr_cal_reg_get(const stmdev_ctx_t *ctx, int8_t *val);
2869 
2870 typedef struct
2871 {
2872   uint8_t x                             : 1;
2873   uint8_t y                             : 1;
2874   uint8_t z                             : 1;
2875 } lsm6dsv16bx_tdm_xl_axis_t;
2876 int32_t lsm6dsv16bx_tdm_xl_axis_set(const stmdev_ctx_t *ctx, lsm6dsv16bx_tdm_xl_axis_t val);
2877 int32_t lsm6dsv16bx_tdm_xl_axis_get(const stmdev_ctx_t *ctx, lsm6dsv16bx_tdm_xl_axis_t *val);
2878 
2879 int32_t lsm6dsv16bx_ln_pg_write(const stmdev_ctx_t *ctx, uint16_t address,
2880                                 uint8_t *buf, uint8_t len);
2881 int32_t lsm6dsv16bx_ln_pg_read(const stmdev_ctx_t *ctx, uint16_t address,
2882                                uint8_t *buf, uint8_t len);
2883 
2884 int32_t lsm6dsv16bx_timestamp_set(const stmdev_ctx_t *ctx, uint8_t val);
2885 int32_t lsm6dsv16bx_timestamp_get(const stmdev_ctx_t *ctx, uint8_t *val);
2886 
2887 int32_t lsm6dsv16bx_timestamp_raw_get(const stmdev_ctx_t *ctx, uint32_t *val);
2888 
2889 typedef enum
2890 {
2891   LSM6DSV16BX_AUTO                                = 0x0,
2892   LSM6DSV16BX_ALWAYS_ACTIVE                       = 0x1,
2893 } lsm6dsv16bx_filt_anti_spike_t;
2894 int32_t lsm6dsv16bx_filt_anti_spike_set(const stmdev_ctx_t *ctx,
2895                                         lsm6dsv16bx_filt_anti_spike_t val);
2896 int32_t lsm6dsv16bx_filt_anti_spike_get(const stmdev_ctx_t *ctx,
2897                                         lsm6dsv16bx_filt_anti_spike_t *val);
2898 
2899 typedef struct
2900 {
2901   uint8_t drdy                          : 1;
2902   uint8_t irq_xl                        : 1;
2903   uint8_t irq_g                         : 1;
2904   uint8_t tdm_excep_code                : 1;
2905 } lsm6dsv16bx_filt_settling_mask_t;
2906 int32_t lsm6dsv16bx_filt_settling_mask_set(const stmdev_ctx_t *ctx,
2907                                            lsm6dsv16bx_filt_settling_mask_t val);
2908 int32_t lsm6dsv16bx_filt_settling_mask_get(const stmdev_ctx_t *ctx,
2909                                            lsm6dsv16bx_filt_settling_mask_t *val);
2910 
2911 typedef enum
2912 {
2913   LSM6DSV16BX_GY_ULTRA_LIGHT                      = 0x0,
2914   LSM6DSV16BX_GY_VERY_LIGHT                       = 0x1,
2915   LSM6DSV16BX_GY_LIGHT                            = 0x2,
2916   LSM6DSV16BX_GY_MEDIUM                           = 0x3,
2917   LSM6DSV16BX_GY_STRONG                           = 0x4,
2918   LSM6DSV16BX_GY_VERY_STRONG                      = 0x5,
2919   LSM6DSV16BX_GY_AGGRESSIVE                       = 0x6,
2920   LSM6DSV16BX_GY_XTREME                           = 0x7,
2921 } lsm6dsv16bx_filt_gy_lp1_bandwidth_t;
2922 int32_t lsm6dsv16bx_filt_gy_lp1_bandwidth_set(const stmdev_ctx_t *ctx,
2923                                               lsm6dsv16bx_filt_gy_lp1_bandwidth_t val);
2924 int32_t lsm6dsv16bx_filt_gy_lp1_bandwidth_get(const stmdev_ctx_t *ctx,
2925                                               lsm6dsv16bx_filt_gy_lp1_bandwidth_t *val);
2926 
2927 int32_t lsm6dsv16bx_filt_gy_lp1_set(const stmdev_ctx_t *ctx, uint8_t val);
2928 int32_t lsm6dsv16bx_filt_gy_lp1_get(const stmdev_ctx_t *ctx, uint8_t *val);
2929 
2930 typedef struct
2931 {
2932   uint8_t hpf                           : 1;
2933   uint8_t lpf                           : 1;
2934 } lsm6dsv16bx_filt_ah_qvar_conf_t;
2935 int32_t lsm6dsv16bx_filt_ah_qvar_conf_set(const stmdev_ctx_t *ctx,
2936                                           lsm6dsv16bx_filt_ah_qvar_conf_t val);
2937 int32_t lsm6dsv16bx_filt_ah_qvar_conf_get(const stmdev_ctx_t *ctx,
2938                                           lsm6dsv16bx_filt_ah_qvar_conf_t *val);
2939 
2940 typedef enum
2941 {
2942   LSM6DSV16BX_XL_ULTRA_LIGHT                      = 0x0,
2943   LSM6DSV16BX_XL_VERY_LIGHT                       = 0x1,
2944   LSM6DSV16BX_XL_LIGHT                            = 0x2,
2945   LSM6DSV16BX_XL_MEDIUM                           = 0x3,
2946   LSM6DSV16BX_XL_STRONG                           = 0x4,
2947   LSM6DSV16BX_XL_VERY_STRONG                      = 0x5,
2948   LSM6DSV16BX_XL_AGGRESSIVE                       = 0x6,
2949   LSM6DSV16BX_XL_XTREME                           = 0x7,
2950 } lsm6dsv16bx_filt_xl_lp2_bandwidth_t;
2951 int32_t lsm6dsv16bx_filt_xl_lp2_bandwidth_set(const stmdev_ctx_t *ctx,
2952                                               lsm6dsv16bx_filt_xl_lp2_bandwidth_t val);
2953 int32_t lsm6dsv16bx_filt_xl_lp2_bandwidth_get(const stmdev_ctx_t *ctx,
2954                                               lsm6dsv16bx_filt_xl_lp2_bandwidth_t *val);
2955 
2956 int32_t lsm6dsv16bx_filt_xl_lp2_set(const stmdev_ctx_t *ctx, uint8_t val);
2957 int32_t lsm6dsv16bx_filt_xl_lp2_get(const stmdev_ctx_t *ctx, uint8_t *val);
2958 
2959 int32_t lsm6dsv16bx_filt_xl_hp_set(const stmdev_ctx_t *ctx, uint8_t val);
2960 int32_t lsm6dsv16bx_filt_xl_hp_get(const stmdev_ctx_t *ctx, uint8_t *val);
2961 
2962 int32_t lsm6dsv16bx_filt_xl_fast_settling_set(const stmdev_ctx_t *ctx, uint8_t val);
2963 int32_t lsm6dsv16bx_filt_xl_fast_settling_get(const stmdev_ctx_t *ctx, uint8_t *val);
2964 
2965 typedef enum
2966 {
2967   LSM6DSV16BX_HP_MD_NORMAL                        = 0x0,
2968   LSM6DSV16BX_HP_MD_REFERENCE                     = 0x1,
2969 } lsm6dsv16bx_filt_xl_hp_mode_t;
2970 int32_t lsm6dsv16bx_filt_xl_hp_mode_set(const stmdev_ctx_t *ctx,
2971                                         lsm6dsv16bx_filt_xl_hp_mode_t val);
2972 int32_t lsm6dsv16bx_filt_xl_hp_mode_get(const stmdev_ctx_t *ctx,
2973                                         lsm6dsv16bx_filt_xl_hp_mode_t *val);
2974 
2975 typedef enum
2976 {
2977   LSM6DSV16BX_WK_FEED_SLOPE                       = 0x0,
2978   LSM6DSV16BX_WK_FEED_HIGH_PASS                   = 0x1,
2979   LSM6DSV16BX_WK_FEED_LP_WITH_OFFSET              = 0x2,
2980 } lsm6dsv16bx_filt_wkup_act_feed_t;
2981 int32_t lsm6dsv16bx_filt_wkup_act_feed_set(const stmdev_ctx_t *ctx,
2982                                            lsm6dsv16bx_filt_wkup_act_feed_t val);
2983 int32_t lsm6dsv16bx_filt_wkup_act_feed_get(const stmdev_ctx_t *ctx,
2984                                            lsm6dsv16bx_filt_wkup_act_feed_t *val);
2985 
2986 int32_t lsm6dsv16bx_mask_trigger_xl_settl_set(const stmdev_ctx_t *ctx, uint8_t val);
2987 int32_t lsm6dsv16bx_mask_trigger_xl_settl_get(const stmdev_ctx_t *ctx, uint8_t *val);
2988 
2989 typedef enum
2990 {
2991   LSM6DSV16BX_SIXD_FEED_ODR_DIV_2                 = 0x0,
2992   LSM6DSV16BX_SIXD_FEED_LOW_PASS                  = 0x1,
2993 } lsm6dsv16bx_filt_sixd_feed_t;
2994 int32_t lsm6dsv16bx_filt_sixd_feed_set(const stmdev_ctx_t *ctx,
2995                                        lsm6dsv16bx_filt_sixd_feed_t val);
2996 int32_t lsm6dsv16bx_filt_sixd_feed_get(const stmdev_ctx_t *ctx,
2997                                        lsm6dsv16bx_filt_sixd_feed_t *val);
2998 
2999 int32_t lsm6dsv16bx_ui_sdo_pull_up_set(const stmdev_ctx_t *ctx, uint8_t val);
3000 int32_t lsm6dsv16bx_ui_sdo_pull_up_get(const stmdev_ctx_t *ctx, uint8_t *val);
3001 
3002 typedef enum
3003 {
3004   LSM6DSV16BX_I2C_I3C_ENABLE                      = 0x0,
3005   LSM6DSV16BX_I2C_I3C_DISABLE                     = 0x1,
3006 } lsm6dsv16bx_ui_i2c_i3c_mode_t;
3007 int32_t lsm6dsv16bx_ui_i2c_i3c_mode_set(const stmdev_ctx_t *ctx,
3008                                         lsm6dsv16bx_ui_i2c_i3c_mode_t val);
3009 int32_t lsm6dsv16bx_ui_i2c_i3c_mode_get(const stmdev_ctx_t *ctx,
3010                                         lsm6dsv16bx_ui_i2c_i3c_mode_t *val);
3011 
3012 typedef enum
3013 {
3014   LSM6DSV16BX_SPI_4_WIRE                          = 0x0,
3015   LSM6DSV16BX_SPI_3_WIRE                          = 0x1,
3016 } lsm6dsv16bx_spi_mode_t;
3017 int32_t lsm6dsv16bx_spi_mode_set(const stmdev_ctx_t *ctx, lsm6dsv16bx_spi_mode_t val);
3018 int32_t lsm6dsv16bx_spi_mode_get(const stmdev_ctx_t *ctx,
3019                                  lsm6dsv16bx_spi_mode_t *val);
3020 
3021 int32_t lsm6dsv16bx_ui_sda_pull_up_set(const stmdev_ctx_t *ctx, uint8_t val);
3022 int32_t lsm6dsv16bx_ui_sda_pull_up_get(const stmdev_ctx_t *ctx, uint8_t *val);
3023 
3024 typedef enum
3025 {
3026   LSM6DSV16BX_IBI_2us                             = 0x0,
3027   LSM6DSV16BX_IBI_50us                            = 0x1,
3028   LSM6DSV16BX_IBI_1ms                             = 0x2,
3029   LSM6DSV16BX_IBI_25ms                            = 0x3,
3030 } lsm6dsv16bx_i3c_ibi_time_t;
3031 int32_t lsm6dsv16bx_i3c_ibi_time_set(const stmdev_ctx_t *ctx,
3032                                      lsm6dsv16bx_i3c_ibi_time_t val);
3033 int32_t lsm6dsv16bx_i3c_ibi_time_get(const stmdev_ctx_t *ctx,
3034                                      lsm6dsv16bx_i3c_ibi_time_t *val);
3035 
3036 typedef enum
3037 {
3038   LSM6DSV16BX_PUSH_PULL                           = 0x0,
3039   LSM6DSV16BX_OPEN_DRAIN                          = 0x1,
3040 } lsm6dsv16bx_int_pin_mode_t;
3041 int32_t lsm6dsv16bx_int_pin_mode_set(const stmdev_ctx_t *ctx,
3042                                      lsm6dsv16bx_int_pin_mode_t val);
3043 int32_t lsm6dsv16bx_int_pin_mode_get(const stmdev_ctx_t *ctx,
3044                                      lsm6dsv16bx_int_pin_mode_t *val);
3045 
3046 typedef enum
3047 {
3048   LSM6DSV16BX_ACTIVE_HIGH                         = 0x0,
3049   LSM6DSV16BX_ACTIVE_LOW                          = 0x1,
3050 } lsm6dsv16bx_pin_polarity_t;
3051 int32_t lsm6dsv16bx_pin_polarity_set(const stmdev_ctx_t *ctx,
3052                                      lsm6dsv16bx_pin_polarity_t val);
3053 int32_t lsm6dsv16bx_pin_polarity_get(const stmdev_ctx_t *ctx,
3054                                      lsm6dsv16bx_pin_polarity_t *val);
3055 
3056 typedef struct
3057 {
3058   uint8_t boot                          : 1;
3059   uint8_t drdy_xl                       : 1;
3060   uint8_t drdy_gy                       : 1;
3061   uint8_t drdy_temp                     : 1;
3062   uint8_t drdy_ah_qvar                  : 1;
3063   uint8_t fifo_th                       : 1;
3064   uint8_t fifo_ovr                      : 1;
3065   uint8_t fifo_full                     : 1;
3066   uint8_t fifo_bdr                      : 1;
3067   uint8_t den_flag                      : 1;
3068   uint8_t timestamp                     : 1; // impact on int2 signals
3069   uint8_t six_d                         : 1;
3070   uint8_t double_tap                    : 1;
3071   uint8_t free_fall                     : 1;
3072   uint8_t wake_up                       : 1;
3073   uint8_t single_tap                    : 1;
3074   uint8_t sleep_change                  : 1;
3075   uint8_t sleep_status                  : 1;
3076   uint8_t step_detector                 : 1;
3077   uint8_t step_count_overflow           : 1;
3078   uint8_t tilt                          : 1;
3079   uint8_t sig_mot                       : 1;
3080   uint8_t emb_func_stand_by             : 1; // impact on int2 signals
3081   uint8_t fsm_lc                        : 1;
3082   uint8_t fsm1                          : 1;
3083   uint8_t fsm2                          : 1;
3084   uint8_t fsm3                          : 1;
3085   uint8_t fsm4                          : 1;
3086   uint8_t fsm5                          : 1;
3087   uint8_t fsm6                          : 1;
3088   uint8_t fsm7                          : 1;
3089   uint8_t fsm8                          : 1;
3090   uint8_t mlc1                          : 1;
3091   uint8_t mlc2                          : 1;
3092   uint8_t mlc3                          : 1;
3093   uint8_t mlc4                          : 1;
3094 } lsm6dsv16bx_pin_int_route_t;
3095 int32_t lsm6dsv16bx_pin_int1_route_set(const stmdev_ctx_t *ctx,
3096                                        lsm6dsv16bx_pin_int_route_t val);
3097 int32_t lsm6dsv16bx_pin_int1_route_get(const stmdev_ctx_t *ctx,
3098                                        lsm6dsv16bx_pin_int_route_t *val);
3099 int32_t lsm6dsv16bx_pin_int2_route_set(const stmdev_ctx_t *ctx,
3100                                        lsm6dsv16bx_pin_int_route_t val);
3101 int32_t lsm6dsv16bx_pin_int2_route_get(const stmdev_ctx_t *ctx,
3102                                        lsm6dsv16bx_pin_int_route_t *val);
3103 
3104 int32_t lsm6dsv16bx_pin_int_en_when_i2c_set(const stmdev_ctx_t *ctx, uint8_t val);
3105 int32_t lsm6dsv16bx_pin_int_en_when_i2c_get(const stmdev_ctx_t *ctx, uint8_t *val);
3106 
3107 typedef enum
3108 {
3109   LSM6DSV16BX_ALL_INT_PULSED                      = 0x0,
3110   LSM6DSV16BX_BASE_LATCHED_EMB_PULSED             = 0x1,
3111   LSM6DSV16BX_BASE_PULSED_EMB_LATCHED             = 0x2,
3112   LSM6DSV16BX_ALL_INT_LATCHED                     = 0x3,
3113 } lsm6dsv16bx_int_notification_t;
3114 int32_t lsm6dsv16bx_int_notification_set(const stmdev_ctx_t *ctx,
3115                                          lsm6dsv16bx_int_notification_t val);
3116 int32_t lsm6dsv16bx_int_notification_get(const stmdev_ctx_t *ctx,
3117                                          lsm6dsv16bx_int_notification_t *val);
3118 
3119 typedef enum
3120 {
3121   LSM6DSV16BX_XL_AND_GY_NOT_AFFECTED              = 0x0,
3122   LSM6DSV16BX_XL_LOW_POWER_GY_NOT_AFFECTED        = 0x1,
3123   LSM6DSV16BX_XL_LOW_POWER_GY_SLEEP               = 0x2,
3124   LSM6DSV16BX_XL_LOW_POWER_GY_POWER_DOWN          = 0x3,
3125 } lsm6dsv16bx_act_mode_t;
3126 int32_t lsm6dsv16bx_act_mode_set(const stmdev_ctx_t *ctx, lsm6dsv16bx_act_mode_t val);
3127 int32_t lsm6dsv16bx_act_mode_get(const stmdev_ctx_t *ctx,
3128                                  lsm6dsv16bx_act_mode_t *val);
3129 
3130 typedef enum
3131 {
3132   LSM6DSV16BX_SLEEP_TO_ACT_AT_1ST_SAMPLE          = 0x0,
3133   LSM6DSV16BX_SLEEP_TO_ACT_AT_2ND_SAMPLE          = 0x1,
3134   LSM6DSV16BX_SLEEP_TO_ACT_AT_3RD_SAMPLE          = 0x2,
3135   LSM6DSV16BX_SLEEP_TO_ACT_AT_4th_SAMPLE          = 0x3,
3136 } lsm6dsv16bx_act_from_sleep_to_act_dur_t;
3137 int32_t lsm6dsv16bx_act_from_sleep_to_act_dur_set(const stmdev_ctx_t *ctx,
3138                                                   lsm6dsv16bx_act_from_sleep_to_act_dur_t val);
3139 int32_t lsm6dsv16bx_act_from_sleep_to_act_dur_get(const stmdev_ctx_t *ctx,
3140                                                   lsm6dsv16bx_act_from_sleep_to_act_dur_t *val);
3141 
3142 typedef enum
3143 {
3144   LSM6DSV16BX_1Hz875                              = 0x0,
3145   LSM6DSV16BX_15Hz                                = 0x1,
3146   LSM6DSV16BX_30Hz                                = 0x2,
3147   LSM6DSV16BX_60Hz                                = 0x3,
3148 } lsm6dsv16bx_act_sleep_xl_odr_t;
3149 int32_t lsm6dsv16bx_act_sleep_xl_odr_set(const stmdev_ctx_t *ctx,
3150                                          lsm6dsv16bx_act_sleep_xl_odr_t val);
3151 int32_t lsm6dsv16bx_act_sleep_xl_odr_get(const stmdev_ctx_t *ctx,
3152                                          lsm6dsv16bx_act_sleep_xl_odr_t *val);
3153 
3154 typedef struct
3155 {
3156   uint32_t wk_ths_mg;
3157   uint32_t inact_ths_mg;
3158 } lsm6dsv16bx_act_thresholds_t;
3159 int32_t lsm6dsv16bx_act_thresholds_set(const stmdev_ctx_t *ctx,
3160                                        lsm6dsv16bx_act_thresholds_t val);
3161 int32_t lsm6dsv16bx_act_thresholds_get(const stmdev_ctx_t *ctx,
3162                                        lsm6dsv16bx_act_thresholds_t *val);
3163 
3164 typedef struct
3165 {
3166   uint8_t shock                         : 2;
3167   uint8_t quiet                         : 4;
3168 } lsm6dsv16bx_act_wkup_time_windows_t;
3169 int32_t lsm6dsv16bx_act_wkup_time_windows_set(const stmdev_ctx_t *ctx,
3170                                               lsm6dsv16bx_act_wkup_time_windows_t val);
3171 int32_t lsm6dsv16bx_act_wkup_time_windows_get(const stmdev_ctx_t *ctx,
3172                                               lsm6dsv16bx_act_wkup_time_windows_t *val);
3173 
3174 typedef struct
3175 {
3176   uint8_t tap_x_en                      : 1;
3177   uint8_t tap_y_en                      : 1;
3178   uint8_t tap_z_en                      : 1;
3179 } lsm6dsv16bx_tap_detection_t;
3180 int32_t lsm6dsv16bx_tap_detection_set(const stmdev_ctx_t *ctx,
3181                                       lsm6dsv16bx_tap_detection_t val);
3182 int32_t lsm6dsv16bx_tap_detection_get(const stmdev_ctx_t *ctx,
3183                                       lsm6dsv16bx_tap_detection_t *val);
3184 
3185 typedef struct
3186 {
3187   uint8_t x                             : 1;
3188   uint8_t y                             : 1;
3189   uint8_t z                             : 1;
3190 } lsm6dsv16bx_tap_thresholds_t;
3191 int32_t lsm6dsv16bx_tap_thresholds_set(const stmdev_ctx_t *ctx,
3192                                        lsm6dsv16bx_tap_thresholds_t val);
3193 int32_t lsm6dsv16bx_tap_thresholds_get(const stmdev_ctx_t *ctx,
3194                                        lsm6dsv16bx_tap_thresholds_t *val);
3195 
3196 
3197 typedef enum
3198 {
3199   LSM6DSV16BX_XYZ                                 = 0x3,
3200   LSM6DSV16BX_YXZ                                 = 0x5,
3201   LSM6DSV16BX_XZY                                 = 0x6,
3202   LSM6DSV16BX_ZYX                                 = 0x0,
3203   LSM6DSV16BX_YZX                                 = 0x1,
3204   LSM6DSV16BX_ZXY                                 = 0x2,
3205 } lsm6dsv16bx_tap_axis_priority_t;
3206 int32_t lsm6dsv16bx_tap_axis_priority_set(const stmdev_ctx_t *ctx,
3207                                           lsm6dsv16bx_tap_axis_priority_t val);
3208 int32_t lsm6dsv16bx_tap_axis_priority_get(const stmdev_ctx_t *ctx,
3209                                           lsm6dsv16bx_tap_axis_priority_t *val);
3210 
3211 typedef struct
3212 {
3213   uint8_t shock                         : 1;
3214   uint8_t quiet                         : 1;
3215   uint8_t tap_gap                       : 1;
3216 } lsm6dsv16bx_tap_time_windows_t;
3217 int32_t lsm6dsv16bx_tap_time_windows_set(const stmdev_ctx_t *ctx,
3218                                          lsm6dsv16bx_tap_time_windows_t val);
3219 int32_t lsm6dsv16bx_tap_time_windows_get(const stmdev_ctx_t *ctx,
3220                                          lsm6dsv16bx_tap_time_windows_t *val);
3221 
3222 typedef enum
3223 {
3224   LSM6DSV16BX_ONLY_SINGLE                         = 0x0,
3225   LSM6DSV16BX_BOTH_SINGLE_DOUBLE                  = 0x1,
3226 } lsm6dsv16bx_tap_mode_t;
3227 int32_t lsm6dsv16bx_tap_mode_set(const stmdev_ctx_t *ctx, lsm6dsv16bx_tap_mode_t val);
3228 int32_t lsm6dsv16bx_tap_mode_get(const stmdev_ctx_t *ctx,
3229                                  lsm6dsv16bx_tap_mode_t *val);
3230 
3231 typedef enum
3232 {
3233   LSM6DSV16BX_DEG_80                              = 0x0,
3234   LSM6DSV16BX_DEG_70                              = 0x1,
3235   LSM6DSV16BX_DEG_60                              = 0x2,
3236   LSM6DSV16BX_DEG_50                              = 0x3,
3237 } lsm6dsv16bx_6d_threshold_t;
3238 int32_t lsm6dsv16bx_6d_threshold_set(const stmdev_ctx_t *ctx,
3239                                      lsm6dsv16bx_6d_threshold_t val);
3240 int32_t lsm6dsv16bx_6d_threshold_get(const stmdev_ctx_t *ctx,
3241                                      lsm6dsv16bx_6d_threshold_t *val);
3242 
3243 int32_t lsm6dsv16bx_ff_time_windows_set(const stmdev_ctx_t *ctx, uint8_t val);
3244 int32_t lsm6dsv16bx_ff_time_windows_get(const stmdev_ctx_t *ctx, uint8_t *val);
3245 
3246 typedef enum
3247 {
3248   LSM6DSV16BX_156_mg                              = 0x0,
3249   LSM6DSV16BX_219_mg                              = 0x1,
3250   LSM6DSV16BX_250_mg                              = 0x2,
3251   LSM6DSV16BX_312_mg                              = 0x3,
3252   LSM6DSV16BX_344_mg                              = 0x4,
3253   LSM6DSV16BX_406_mg                              = 0x5,
3254   LSM6DSV16BX_469_mg                              = 0x6,
3255   LSM6DSV16BX_500_mg                              = 0x7,
3256 } lsm6dsv16bx_ff_thresholds_t;
3257 int32_t lsm6dsv16bx_ff_thresholds_set(const stmdev_ctx_t *ctx,
3258                                       lsm6dsv16bx_ff_thresholds_t val);
3259 int32_t lsm6dsv16bx_ff_thresholds_get(const stmdev_ctx_t *ctx,
3260                                       lsm6dsv16bx_ff_thresholds_t *val);
3261 
3262 int32_t lsm6dsv16bx_fifo_watermark_set(const stmdev_ctx_t *ctx, uint8_t val);
3263 int32_t lsm6dsv16bx_fifo_watermark_get(const stmdev_ctx_t *ctx, uint8_t *val);
3264 
3265 int32_t lsm6dsv16bx_fifo_xl_dual_fsm_batch_set(const stmdev_ctx_t *ctx, uint8_t val);
3266 int32_t lsm6dsv16bx_fifo_xl_dual_fsm_batch_get(const stmdev_ctx_t *ctx, uint8_t *val);
3267 
3268 typedef enum
3269 {
3270   LSM6DSV16BX_CMP_DISABLE                         = 0x0,
3271   LSM6DSV16BX_CMP_8_TO_1                          = 0x1,
3272   LSM6DSV16BX_CMP_16_TO_1                         = 0x2,
3273   LSM6DSV16BX_CMP_32_TO_1                         = 0x3,
3274 } lsm6dsv16bx_fifo_compress_algo_t;
3275 int32_t lsm6dsv16bx_fifo_compress_algo_set(const stmdev_ctx_t *ctx,
3276                                            lsm6dsv16bx_fifo_compress_algo_t val);
3277 int32_t lsm6dsv16bx_fifo_compress_algo_get(const stmdev_ctx_t *ctx,
3278                                            lsm6dsv16bx_fifo_compress_algo_t *val);
3279 
3280 int32_t lsm6dsv16bx_fifo_virtual_sens_odr_chg_set(const stmdev_ctx_t *ctx,
3281                                                   uint8_t val);
3282 int32_t lsm6dsv16bx_fifo_virtual_sens_odr_chg_get(const stmdev_ctx_t *ctx,
3283                                                   uint8_t *val);
3284 
3285 int32_t lsm6dsv16bx_fifo_compress_algo_real_time_set(const stmdev_ctx_t *ctx,
3286                                                      uint8_t val);
3287 int32_t lsm6dsv16bx_fifo_compress_algo_real_time_get(const stmdev_ctx_t *ctx,
3288                                                      uint8_t *val);
3289 
3290 int32_t lsm6dsv16bx_fifo_stop_on_wtm_set(const stmdev_ctx_t *ctx, uint8_t val);
3291 int32_t lsm6dsv16bx_fifo_stop_on_wtm_get(const stmdev_ctx_t *ctx, uint8_t *val);
3292 
3293 typedef enum
3294 {
3295   LSM6DSV16BX_XL_NOT_BATCHED                      = 0x0,
3296   LSM6DSV16BX_XL_BATCHED_AT_1Hz875                = 0x1,
3297   LSM6DSV16BX_XL_BATCHED_AT_7Hz5                  = 0x2,
3298   LSM6DSV16BX_XL_BATCHED_AT_15Hz                  = 0x3,
3299   LSM6DSV16BX_XL_BATCHED_AT_30Hz                  = 0x4,
3300   LSM6DSV16BX_XL_BATCHED_AT_60Hz                  = 0x5,
3301   LSM6DSV16BX_XL_BATCHED_AT_120Hz                 = 0x6,
3302   LSM6DSV16BX_XL_BATCHED_AT_240Hz                 = 0x7,
3303   LSM6DSV16BX_XL_BATCHED_AT_480Hz                 = 0x8,
3304   LSM6DSV16BX_XL_BATCHED_AT_960Hz                 = 0x9,
3305   LSM6DSV16BX_XL_BATCHED_AT_1920Hz                = 0xA,
3306   LSM6DSV16BX_XL_BATCHED_AT_3840Hz                = 0xB,
3307   LSM6DSV16BX_XL_BATCHED_AT_7680Hz                = 0xC,
3308 } lsm6dsv16bx_fifo_xl_batch_t;
3309 int32_t lsm6dsv16bx_fifo_xl_batch_set(const stmdev_ctx_t *ctx,
3310                                       lsm6dsv16bx_fifo_xl_batch_t val);
3311 int32_t lsm6dsv16bx_fifo_xl_batch_get(const stmdev_ctx_t *ctx,
3312                                       lsm6dsv16bx_fifo_xl_batch_t *val);
3313 
3314 typedef enum
3315 {
3316   LSM6DSV16BX_GY_NOT_BATCHED                      = 0x0,
3317   LSM6DSV16BX_GY_BATCHED_AT_1Hz875                = 0x1,
3318   LSM6DSV16BX_GY_BATCHED_AT_7Hz5                  = 0x2,
3319   LSM6DSV16BX_GY_BATCHED_AT_15Hz                  = 0x3,
3320   LSM6DSV16BX_GY_BATCHED_AT_30Hz                  = 0x4,
3321   LSM6DSV16BX_GY_BATCHED_AT_60Hz                  = 0x5,
3322   LSM6DSV16BX_GY_BATCHED_AT_120Hz                 = 0x6,
3323   LSM6DSV16BX_GY_BATCHED_AT_240Hz                 = 0x7,
3324   LSM6DSV16BX_GY_BATCHED_AT_480Hz                 = 0x8,
3325   LSM6DSV16BX_GY_BATCHED_AT_960Hz                 = 0x9,
3326   LSM6DSV16BX_GY_BATCHED_AT_1920Hz                = 0xa,
3327   LSM6DSV16BX_GY_BATCHED_AT_3840Hz                = 0xb,
3328   LSM6DSV16BX_GY_BATCHED_AT_7680Hz                = 0xc,
3329 } lsm6dsv16bx_fifo_gy_batch_t;
3330 int32_t lsm6dsv16bx_fifo_gy_batch_set(const stmdev_ctx_t *ctx,
3331                                       lsm6dsv16bx_fifo_gy_batch_t val);
3332 int32_t lsm6dsv16bx_fifo_gy_batch_get(const stmdev_ctx_t *ctx,
3333                                       lsm6dsv16bx_fifo_gy_batch_t *val);
3334 
3335 typedef enum
3336 {
3337   LSM6DSV16BX_BYPASS_MODE                         = 0x0,
3338   LSM6DSV16BX_FIFO_MODE                           = 0x1,
3339   LSM6DSV16BX_STREAM_WTM_TO_FULL_MODE             = 0x2,
3340   LSM6DSV16BX_STREAM_TO_FIFO_MODE                 = 0x3,
3341   LSM6DSV16BX_BYPASS_TO_STREAM_MODE               = 0x4,
3342   LSM6DSV16BX_STREAM_MODE                         = 0x6,
3343   LSM6DSV16BX_BYPASS_TO_FIFO_MODE                 = 0x7,
3344 } lsm6dsv16bx_fifo_mode_t;
3345 int32_t lsm6dsv16bx_fifo_mode_set(const stmdev_ctx_t *ctx,
3346                                   lsm6dsv16bx_fifo_mode_t val);
3347 int32_t lsm6dsv16bx_fifo_mode_get(const stmdev_ctx_t *ctx,
3348                                   lsm6dsv16bx_fifo_mode_t *val);
3349 
3350 typedef enum
3351 {
3352   LSM6DSV16BX_TEMP_NOT_BATCHED                    = 0x0,
3353   LSM6DSV16BX_TEMP_BATCHED_AT_1Hz875              = 0x1,
3354   LSM6DSV16BX_TEMP_BATCHED_AT_15Hz                = 0x2,
3355   LSM6DSV16BX_TEMP_BATCHED_AT_60Hz                = 0x3,
3356 } lsm6dsv16bx_fifo_temp_batch_t;
3357 int32_t lsm6dsv16bx_fifo_temp_batch_set(const stmdev_ctx_t *ctx,
3358                                         lsm6dsv16bx_fifo_temp_batch_t val);
3359 int32_t lsm6dsv16bx_fifo_temp_batch_get(const stmdev_ctx_t *ctx,
3360                                         lsm6dsv16bx_fifo_temp_batch_t *val);
3361 
3362 typedef enum
3363 {
3364   LSM6DSV16BX_TMSTMP_NOT_BATCHED                  = 0x0,
3365   LSM6DSV16BX_TMSTMP_DEC_1                        = 0x1,
3366   LSM6DSV16BX_TMSTMP_DEC_8                        = 0x2,
3367   LSM6DSV16BX_TMSTMP_DEC_32                       = 0x3,
3368 } lsm6dsv16bx_fifo_timestamp_batch_t;
3369 int32_t lsm6dsv16bx_fifo_timestamp_batch_set(const stmdev_ctx_t *ctx,
3370                                              lsm6dsv16bx_fifo_timestamp_batch_t val);
3371 int32_t lsm6dsv16bx_fifo_timestamp_batch_get(const stmdev_ctx_t *ctx,
3372                                              lsm6dsv16bx_fifo_timestamp_batch_t *val);
3373 
3374 int32_t lsm6dsv16bx_fifo_batch_counter_threshold_set(const stmdev_ctx_t *ctx,
3375                                                      uint16_t val);
3376 int32_t lsm6dsv16bx_fifo_batch_counter_threshold_get(const stmdev_ctx_t *ctx,
3377                                                      uint16_t *val);
3378 
3379 int32_t lsm6dsv16bx_fifo_batch_ah_qvar_set(const stmdev_ctx_t *ctx, uint8_t val);
3380 int32_t lsm6dsv16bx_fifo_batch_ah_qvar_get(const stmdev_ctx_t *ctx, uint8_t *val);
3381 
3382 typedef enum
3383 {
3384   LSM6DSV16BX_XL_BATCH_EVENT                      = 0x0,
3385   LSM6DSV16BX_GY_BATCH_EVENT                      = 0x1,
3386 } lsm6dsv16bx_fifo_batch_cnt_event_t;
3387 int32_t lsm6dsv16bx_fifo_batch_cnt_event_set(const stmdev_ctx_t *ctx,
3388                                              lsm6dsv16bx_fifo_batch_cnt_event_t val);
3389 int32_t lsm6dsv16bx_fifo_batch_cnt_event_get(const stmdev_ctx_t *ctx,
3390                                              lsm6dsv16bx_fifo_batch_cnt_event_t *val);
3391 
3392 typedef struct
3393 {
3394   uint8_t game_rotation                 : 1;
3395   uint8_t gravity                       : 1;
3396   uint8_t gbias                         : 1;
3397 } lsm6dsv16bx_fifo_sflp_raw_t;
3398 int32_t lsm6dsv16bx_fifo_sflp_batch_set(const stmdev_ctx_t *ctx,
3399                                         lsm6dsv16bx_fifo_sflp_raw_t val);
3400 int32_t lsm6dsv16bx_fifo_sflp_batch_get(const stmdev_ctx_t *ctx,
3401                                         lsm6dsv16bx_fifo_sflp_raw_t *val);
3402 
3403 typedef struct
3404 {
3405   uint16_t fifo_level                   : 9;
3406   uint8_t fifo_bdr                      : 1;
3407   uint8_t fifo_full                     : 1;
3408   uint8_t fifo_ovr                      : 1;
3409   uint8_t fifo_th                       : 1;
3410 } lsm6dsv16bx_fifo_status_t;
3411 
3412 int32_t lsm6dsv16bx_fifo_status_get(const stmdev_ctx_t *ctx,
3413                                     lsm6dsv16bx_fifo_status_t *val);
3414 
3415 typedef struct
3416 {
3417   enum
3418   {
3419     LSM6DSV16BX_FIFO_EMPTY                        = 0x0,
3420     LSM6DSV16BX_GY_NC_TAG                         = 0x1,
3421     LSM6DSV16BX_XL_NC_TAG                         = 0x2,
3422     LSM6DSV16BX_TEMPERATURE_TAG                   = 0x3,
3423     LSM6DSV16BX_TIMESTAMP_TAG                     = 0x4,
3424     LSM6DSV16BX_CFG_CHANGE_TAG                    = 0x5,
3425     LSM6DSV16BX_XL_NC_T_2_TAG                     = 0x6,
3426     LSM6DSV16BX_XL_NC_T_1_TAG                     = 0x7,
3427     LSM6DSV16BX_XL_2XC_TAG                        = 0x8,
3428     LSM6DSV16BX_XL_3XC_TAG                        = 0x9,
3429     LSM6DSV16BX_GY_NC_T_2_TAG                     = 0xA,
3430     LSM6DSV16BX_GY_NC_T_1_TAG                     = 0xB,
3431     LSM6DSV16BX_GY_2XC_TAG                        = 0xC,
3432     LSM6DSV16BX_GY_3XC_TAG                        = 0xD,
3433     LSM6DSV16BX_STEP_COUNTER_TAG                  = 0x12,
3434     LSM6DSV16BX_SFLP_GAME_ROTATION_VECTOR_TAG     = 0x13,
3435     LSM6DSV16BX_SFLP_GYROSCOPE_BIAS_TAG           = 0x16,
3436     LSM6DSV16BX_SFLP_GRAVITY_VECTOR_TAG           = 0x17,
3437     LSM6DSV16BX_MLC_RESULT_TAG                    = 0x1A,
3438     LSM6DSV16BX_MLC_FILTER                        = 0x1B,
3439     LSM6DSV16BX_MLC_FEATURE                       = 0x1C,
3440     LSM6DSV16BX_XL_DUAL_CORE                      = 0x1D,
3441     LSM6DSV16BX_AH_QVAR                           = 0x1F,
3442   } tag;
3443   uint8_t cnt;
3444   uint8_t data[6];
3445 } lsm6dsv16bx_fifo_out_raw_t;
3446 int32_t lsm6dsv16bx_fifo_out_raw_get(const stmdev_ctx_t *ctx,
3447                                      lsm6dsv16bx_fifo_out_raw_t *val);
3448 
3449 int32_t lsm6dsv16bx_fifo_stpcnt_batch_set(const stmdev_ctx_t *ctx, uint8_t val);
3450 int32_t lsm6dsv16bx_fifo_stpcnt_batch_get(const stmdev_ctx_t *ctx, uint8_t *val);
3451 
3452 int32_t lsm6dsv16bx_fifo_mlc_batch_set(const stmdev_ctx_t *ctx, uint8_t val);
3453 int32_t lsm6dsv16bx_fifo_mlc_batch_get(const stmdev_ctx_t *ctx, uint8_t *val);
3454 
3455 int32_t lsm6dsv16bx_fifo_mlc_filt_batch_set(const stmdev_ctx_t *ctx, uint8_t val);
3456 int32_t lsm6dsv16bx_fifo_mlc_filt_batch_get(const stmdev_ctx_t *ctx, uint8_t *val);
3457 
3458 typedef struct
3459 {
3460   uint8_t step_counter_enable           : 1;
3461   uint8_t false_step_rej                : 1;
3462 } lsm6dsv16bx_stpcnt_mode_t;
3463 int32_t lsm6dsv16bx_stpcnt_mode_set(const stmdev_ctx_t *ctx,
3464                                     lsm6dsv16bx_stpcnt_mode_t val);
3465 int32_t lsm6dsv16bx_stpcnt_mode_get(const stmdev_ctx_t *ctx,
3466                                     lsm6dsv16bx_stpcnt_mode_t *val);
3467 
3468 int32_t lsm6dsv16bx_stpcnt_steps_get(const stmdev_ctx_t *ctx, uint16_t *val);
3469 
3470 int32_t lsm6dsv16bx_stpcnt_rst_step_set(const stmdev_ctx_t *ctx, uint8_t val);
3471 int32_t lsm6dsv16bx_stpcnt_rst_step_get(const stmdev_ctx_t *ctx, uint8_t *val);
3472 
3473 int32_t lsm6dsv16bx_stpcnt_debounce_set(const stmdev_ctx_t *ctx, uint8_t val);
3474 int32_t lsm6dsv16bx_stpcnt_debounce_get(const stmdev_ctx_t *ctx, uint8_t *val);
3475 
3476 int32_t lsm6dsv16bx_stpcnt_period_set(const stmdev_ctx_t *ctx, uint16_t val);
3477 int32_t lsm6dsv16bx_stpcnt_period_get(const stmdev_ctx_t *ctx, uint16_t *val);
3478 
3479 int32_t lsm6dsv16bx_sigmot_mode_set(const stmdev_ctx_t *ctx, uint8_t val);
3480 int32_t lsm6dsv16bx_sigmot_mode_get(const stmdev_ctx_t *ctx, uint8_t *val);
3481 
3482 int32_t lsm6dsv16bx_tilt_mode_set(const stmdev_ctx_t *ctx, uint8_t val);
3483 int32_t lsm6dsv16bx_tilt_mode_get(const stmdev_ctx_t *ctx, uint8_t *val);
3484 
3485 int32_t lsm6dsv16bx_sflp_game_rotation_set(const stmdev_ctx_t *ctx, uint16_t val);
3486 int32_t lsm6dsv16bx_sflp_game_rotation_get(const stmdev_ctx_t *ctx, uint16_t *val);
3487 
3488 typedef struct
3489 {
3490   float_t gbias_x; /* dps */
3491   float_t gbias_y; /* dps */
3492   float_t gbias_z; /* dps */
3493 } lsm6dsv16bx_sflp_gbias_t;
3494 int32_t lsm6dsv16bx_sflp_game_gbias_set(const stmdev_ctx_t *ctx,
3495                                         lsm6dsv16bx_sflp_gbias_t *val);
3496 
3497 int32_t lsm6dsv16bx_sflp_configure(const stmdev_ctx_t *ctx);
3498 
3499 typedef enum
3500 {
3501   LSM6DSV16BX_SFLP_15Hz                           = 0x0,
3502   LSM6DSV16BX_SFLP_30Hz                           = 0x1,
3503   LSM6DSV16BX_SFLP_60Hz                           = 0x2,
3504   LSM6DSV16BX_SFLP_120Hz                          = 0x3,
3505   LSM6DSV16BX_SFLP_240Hz                          = 0x4,
3506   LSM6DSV16BX_SFLP_480Hz                          = 0x5,
3507 } lsm6dsv16bx_sflp_data_rate_t;
3508 int32_t lsm6dsv16bx_sflp_data_rate_set(const stmdev_ctx_t *ctx,
3509                                        lsm6dsv16bx_sflp_data_rate_t val);
3510 int32_t lsm6dsv16bx_sflp_data_rate_get(const stmdev_ctx_t *ctx,
3511                                        lsm6dsv16bx_sflp_data_rate_t *val);
3512 
3513 typedef enum
3514 {
3515   LSM6DSV16BX_PROTECT_CTRL_REGS                   = 0x0,
3516   LSM6DSV16BX_WRITE_CTRL_REG                      = 0x1,
3517 } lsm6dsv16bx_fsm_permission_t;
3518 int32_t lsm6dsv16bx_fsm_permission_set(const stmdev_ctx_t *ctx,
3519                                        lsm6dsv16bx_fsm_permission_t val);
3520 int32_t lsm6dsv16bx_fsm_permission_get(const stmdev_ctx_t *ctx,
3521                                        lsm6dsv16bx_fsm_permission_t *val);
3522 
3523 typedef enum
3524 {
3525   LSM6DSV16BX_STD_IF_CONTROL                      = 0x0,
3526   LSM6DSV16BX_FSM_CONTROL                         = 0x1,
3527 } lsm6dsv16bx_fsm_permission_status_t;
3528 int32_t lsm6dsv16bx_fsm_permission_status(const stmdev_ctx_t *ctx,
3529                                           lsm6dsv16bx_fsm_permission_status_t *val);
3530 
3531 typedef struct
3532 {
3533   uint8_t fsm1_en                       : 1;
3534   uint8_t fsm2_en                       : 1;
3535   uint8_t fsm3_en                       : 1;
3536   uint8_t fsm4_en                       : 1;
3537   uint8_t fsm5_en                       : 1;
3538   uint8_t fsm6_en                       : 1;
3539   uint8_t fsm7_en                       : 1;
3540   uint8_t fsm8_en                       : 1;
3541 } lsm6dsv16bx_fsm_mode_t;
3542 int32_t lsm6dsv16bx_fsm_mode_set(const stmdev_ctx_t *ctx, lsm6dsv16bx_fsm_mode_t val);
3543 int32_t lsm6dsv16bx_fsm_mode_get(const stmdev_ctx_t *ctx,
3544                                  lsm6dsv16bx_fsm_mode_t *val);
3545 
3546 int32_t lsm6dsv16bx_fsm_long_cnt_set(const stmdev_ctx_t *ctx, uint16_t val);
3547 int32_t lsm6dsv16bx_fsm_long_cnt_get(const stmdev_ctx_t *ctx, uint16_t *val);
3548 
3549 typedef struct
3550 {
3551   uint8_t fsm_outs1;
3552   uint8_t fsm_outs2;
3553   uint8_t fsm_outs3;
3554   uint8_t fsm_outs4;
3555   uint8_t fsm_outs5;
3556   uint8_t fsm_outs6;
3557   uint8_t fsm_outs7;
3558   uint8_t fsm_outs8;
3559 } lsm6dsv16bx_fsm_out_t;
3560 int32_t lsm6dsv16bx_fsm_out_get(const stmdev_ctx_t *ctx, lsm6dsv16bx_fsm_out_t *val);
3561 
3562 typedef enum
3563 {
3564   LSM6DSV16BX_FSM_15Hz                            = 0x0,
3565   LSM6DSV16BX_FSM_30Hz                            = 0x1,
3566   LSM6DSV16BX_FSM_60Hz                            = 0x2,
3567   LSM6DSV16BX_FSM_120Hz                           = 0x3,
3568   LSM6DSV16BX_FSM_240Hz                           = 0x4,
3569   LSM6DSV16BX_FSM_480Hz                           = 0x5,
3570   LSM6DSV16BX_FSM_960Hz                           = 0x6,
3571 } lsm6dsv16bx_fsm_data_rate_t;
3572 int32_t lsm6dsv16bx_fsm_data_rate_set(const stmdev_ctx_t *ctx,
3573                                       lsm6dsv16bx_fsm_data_rate_t val);
3574 int32_t lsm6dsv16bx_fsm_data_rate_get(const stmdev_ctx_t *ctx,
3575                                       lsm6dsv16bx_fsm_data_rate_t *val);
3576 
3577 int32_t lsm6dsv16bx_fsm_long_cnt_timeout_set(const stmdev_ctx_t *ctx, uint16_t val);
3578 int32_t lsm6dsv16bx_fsm_long_cnt_timeout_get(const stmdev_ctx_t *ctx, uint16_t *val);
3579 
3580 int32_t lsm6dsv16bx_fsm_number_of_programs_set(const stmdev_ctx_t *ctx, uint8_t val);
3581 int32_t lsm6dsv16bx_fsm_number_of_programs_get(const stmdev_ctx_t *ctx, uint8_t *val);
3582 
3583 int32_t lsm6dsv16bx_fsm_start_address_set(const stmdev_ctx_t *ctx, uint16_t val);
3584 int32_t lsm6dsv16bx_fsm_start_address_get(const stmdev_ctx_t *ctx, uint16_t *val);
3585 
3586 typedef enum
3587 {
3588   LSM6DSV16BX_MLC_OFF                             = 0x0,
3589   LSM6DSV16BX_MLC_ON                              = 0x1,
3590   LSM6DSV16BX_MLC_ON_BEFORE_FSM                   = 0x2,
3591 } lsm6dsv16bx_mlc_mode_t;
3592 int32_t lsm6dsv16bx_mlc_set(const stmdev_ctx_t *ctx, lsm6dsv16bx_mlc_mode_t val);
3593 int32_t lsm6dsv16bx_mlc_get(const stmdev_ctx_t *ctx, lsm6dsv16bx_mlc_mode_t *val);
3594 
3595 typedef enum
3596 {
3597   LSM6DSV16BX_MLC_15Hz                            = 0x0,
3598   LSM6DSV16BX_MLC_30Hz                            = 0x1,
3599   LSM6DSV16BX_MLC_60Hz                            = 0x2,
3600   LSM6DSV16BX_MLC_120Hz                           = 0x3,
3601   LSM6DSV16BX_MLC_240Hz                           = 0x4,
3602   LSM6DSV16BX_MLC_480Hz                           = 0x5,
3603   LSM6DSV16BX_MLC_960Hz                           = 0x6,
3604 } lsm6dsv16bx_mlc_data_rate_t;
3605 int32_t lsm6dsv16bx_mlc_data_rate_set(const stmdev_ctx_t *ctx,
3606                                       lsm6dsv16bx_mlc_data_rate_t val);
3607 int32_t lsm6dsv16bx_mlc_data_rate_get(const stmdev_ctx_t *ctx,
3608                                       lsm6dsv16bx_mlc_data_rate_t *val);
3609 
3610 typedef struct
3611 {
3612   uint8_t mlc1_src;
3613   uint8_t mlc2_src;
3614   uint8_t mlc3_src;
3615   uint8_t mlc4_src;
3616 } lsm6dsv16bx_mlc_out_t;
3617 int32_t lsm6dsv16bx_mlc_out_get(const stmdev_ctx_t *ctx, lsm6dsv16bx_mlc_out_t *val);
3618 
3619 int32_t lsm6dsv16bx_mlc_qvar_sensitivity_set(const stmdev_ctx_t *ctx, uint16_t val);
3620 int32_t lsm6dsv16bx_mlc_qvar_sensitivity_get(const stmdev_ctx_t *ctx, uint16_t *val);
3621 
3622 int32_t lsm6dsv16bx_xl_offset_on_out_set(const stmdev_ctx_t *ctx, uint8_t val);
3623 int32_t lsm6dsv16bx_xl_offset_on_out_get(const stmdev_ctx_t *ctx, uint8_t *val);
3624 
3625 typedef struct
3626 {
3627   float_t z_mg;
3628   float_t y_mg;
3629   float_t x_mg;
3630 } lsm6dsv16bx_xl_offset_mg_t;
3631 int32_t lsm6dsv16bx_xl_offset_mg_set(const stmdev_ctx_t *ctx,
3632                                      lsm6dsv16bx_xl_offset_mg_t val);
3633 int32_t lsm6dsv16bx_xl_offset_mg_get(const stmdev_ctx_t *ctx,
3634                                      lsm6dsv16bx_xl_offset_mg_t *val);
3635 
3636 typedef struct
3637 {
3638   uint8_t ah_qvar1_en                   : 1;
3639   uint8_t ah_qvar2_en                   : 1;
3640   uint8_t swaps                         : 1;
3641 } lsm6dsv16bx_ah_qvar_mode_t;
3642 int32_t lsm6dsv16bx_ah_qvar_mode_set(const stmdev_ctx_t *ctx,
3643                                      lsm6dsv16bx_ah_qvar_mode_t val);
3644 int32_t lsm6dsv16bx_ah_qvar_mode_get(const stmdev_ctx_t *ctx,
3645                                      lsm6dsv16bx_ah_qvar_mode_t *val);
3646 
3647 typedef enum
3648 {
3649   LSM6DSV16BX_2400MOhm                            = 0x0,
3650   LSM6DSV16BX_730MOhm                             = 0x1,
3651   LSM6DSV16BX_300MOhm                             = 0x2,
3652   LSM6DSV16BX_255MOhm                             = 0x3,
3653 } lsm6dsv16bx_ah_qvar_zin_t;
3654 int32_t lsm6dsv16bx_ah_qvar_zin_set(const stmdev_ctx_t *ctx,
3655                                     lsm6dsv16bx_ah_qvar_zin_t val);
3656 int32_t lsm6dsv16bx_ah_qvar_zin_get(const stmdev_ctx_t *ctx,
3657                                     lsm6dsv16bx_ah_qvar_zin_t *val);
3658 
3659 int32_t lsm6dsv16bx_fsm_qvar_sensitivity_set(const stmdev_ctx_t *ctx, uint16_t val);
3660 int32_t lsm6dsv16bx_fsm_qvar_sensitivity_get(const stmdev_ctx_t *ctx, uint16_t *val);
3661 
3662 typedef enum
3663 {
3664   LSM6DSV16BX_SW_RST_DYN_ADDRESS_RST              = 0x0,
3665   LSM6DSV16BX_I3C_GLOBAL_RST                      = 0x1,
3666 } lsm6dsv16bx_i3c_reset_mode_t;
3667 int32_t lsm6dsv16bx_i3c_reset_mode_set(const stmdev_ctx_t *ctx,
3668                                        lsm6dsv16bx_i3c_reset_mode_t val);
3669 int32_t lsm6dsv16bx_i3c_reset_mode_get(const stmdev_ctx_t *ctx,
3670                                        lsm6dsv16bx_i3c_reset_mode_t *val);
3671 
3672 int32_t lsm6dsv16bx_tdm_dis_wclk_pull_up_set(const stmdev_ctx_t *ctx, uint8_t val);
3673 int32_t lsm6dsv16bx_tdm_dis_wclk_pull_up_get(const stmdev_ctx_t *ctx, uint8_t *val);
3674 
3675 int32_t lsm6dsv16bx_tdm_tdmout_pull_up_set(const stmdev_ctx_t *ctx, uint8_t val);
3676 int32_t lsm6dsv16bx_tdm_tdmout_pull_up_get(const stmdev_ctx_t *ctx, uint8_t *val);
3677 
3678 typedef enum
3679 {
3680   LSM6DSV16BX_WCLK_16kHZ_BCLK_2048kHz             = 0x1,
3681   LSM6DSV16BX_WCLK_8kHZ_BCLK_2048kHz              = 0x4,
3682 } lsm6dsv16bx_tdm_wclk_bclk_t;
3683 int32_t lsm6dsv16bx_tdm_wclk_bclk_set(const stmdev_ctx_t *ctx,
3684                                       lsm6dsv16bx_tdm_wclk_bclk_t val);
3685 int32_t lsm6dsv16bx_tdm_wclk_bclk_get(const stmdev_ctx_t *ctx,
3686                                       lsm6dsv16bx_tdm_wclk_bclk_t *val);
3687 
3688 typedef enum
3689 {
3690   LSM6DSV16BX_SLOT_012                            = 0x0,
3691   LSM6DSV16BX_SLOT_456                            = 0x1,
3692 } lsm6dsv16bx_tdm_slot_t;
3693 int32_t lsm6dsv16bx_tdm_slot_set(const stmdev_ctx_t *ctx, lsm6dsv16bx_tdm_slot_t val);
3694 int32_t lsm6dsv16bx_tdm_slot_get(const stmdev_ctx_t *ctx,
3695                                  lsm6dsv16bx_tdm_slot_t *val);
3696 
3697 typedef enum
3698 {
3699   LSM6DSV16BX_BCLK_RISING                         = 0x0,
3700   LSM6DSV16BX_BCLK_FALLING                        = 0x1,
3701 } lsm6dsv16bx_tdm_bclk_edge_t;
3702 int32_t lsm6dsv16bx_tdm_bclk_edge_set(const stmdev_ctx_t *ctx,
3703                                       lsm6dsv16bx_tdm_bclk_edge_t val);
3704 int32_t lsm6dsv16bx_tdm_bclk_edge_get(const stmdev_ctx_t *ctx,
3705                                       lsm6dsv16bx_tdm_bclk_edge_t *val);
3706 
3707 int32_t lsm6dsv16bx_tdm_delayed_conf_set(const stmdev_ctx_t *ctx, uint8_t val);
3708 int32_t lsm6dsv16bx_tdm_delayed_conf_get(const stmdev_ctx_t *ctx, uint8_t *val);
3709 
3710 typedef enum
3711 {
3712   LSM6DSV16BX_TDM_ORDER_ZYX                       = 0x0,
3713   LSM6DSV16BX_TDM_ORDER_XZY                       = 0x1,
3714   LSM6DSV16BX_TDM_ORDER_XYZ                       = 0x2,
3715 } lsm6dsv16bx_tdm_axis_order_t;
3716 int32_t lsm6dsv16bx_tdm_axis_order_set(const stmdev_ctx_t *ctx,
3717                                        lsm6dsv16bx_tdm_axis_order_t val);
3718 int32_t lsm6dsv16bx_tdm_axis_order_get(const stmdev_ctx_t *ctx,
3719                                        lsm6dsv16bx_tdm_axis_order_t *val);
3720 
3721 typedef enum
3722 {
3723   LSM6DSV16BX_TDM_2g                              = 0x0,
3724   LSM6DSV16BX_TDM_4g                              = 0x1,
3725   LSM6DSV16BX_TDM_8g                              = 0x2,
3726 } lsm6dsv16bx_tdm_xl_full_scale_t;
3727 int32_t lsm6dsv16bx_tdm_xl_full_scale_set(const stmdev_ctx_t *ctx,
3728                                           lsm6dsv16bx_tdm_xl_full_scale_t val);
3729 int32_t lsm6dsv16bx_tdm_xl_full_scale_get(const stmdev_ctx_t *ctx,
3730                                           lsm6dsv16bx_tdm_xl_full_scale_t *val);
3731 
3732 /**
3733   * @}
3734   *
3735   */
3736 
3737 #ifdef __cplusplus
3738 }
3739 #endif
3740 
3741 #endif /*LSM6DSV16BX_DRIVER_H */
3742 
3743 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
3744