1 /**
2   ******************************************************************************
3   * @file    lsm6dsrx_reg.h
4   * @author  Sensor Solutions Software Team
5   * @brief   This file contains all the functions prototypes for the
6   *          lsm6dsrx_reg.c driver.
7   ******************************************************************************
8   * @attention
9   *
10   * <h2><center>&copy; Copyright (c) 2021 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 LSM6DSRX_REGS_H
23 #define LSM6DSRX_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 LSM6DSRX
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 LSM6DSRX Infos
167   * @{
168   *
169   */
170 
171 /** I2C Device Address 8 bit format  if SA0=0 -> D5 if SA0=1 -> D7 **/
172 #define LSM6DSRX_I2C_ADD_L                    0xD5U
173 #define LSM6DSRX_I2C_ADD_H                    0xD7U
174 
175 /** Device Identification (Who am I) **/
176 #define LSM6DSRX_ID                           0x6BU
177 
178 /**
179   * @}
180   *
181   */
182 
183 #define LSM6DSRX_FUNC_CFG_ACCESS              0x01U
184 typedef struct
185 {
186 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
187   uint8_t not_used_01              : 6;
188   uint8_t reg_access               : 2; /* shub_reg_access + func_cfg_access */
189 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
190   uint8_t reg_access               : 2; /* shub_reg_access + func_cfg_access */
191   uint8_t not_used_01              : 6;
192 #endif /* DRV_BYTE_ORDER */
193 } lsm6dsrx_func_cfg_access_t;
194 
195 #define LSM6DSRX_PIN_CTRL                     0x02U
196 typedef struct
197 {
198 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
199   uint8_t not_used_01              : 6;
200   uint8_t sdo_pu_en                : 1;
201   uint8_t ois_pu_dis               : 1;
202 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
203   uint8_t ois_pu_dis               : 1;
204   uint8_t sdo_pu_en                : 1;
205   uint8_t not_used_01              : 6;
206 #endif /* DRV_BYTE_ORDER */
207 } lsm6dsrx_pin_ctrl_t;
208 
209 #define LSM6DSRX_S4S_TPH_L                    0x04U
210 typedef struct
211 {
212 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
213   uint8_t tph_l                    : 7;
214   uint8_t tph_h_sel                : 1;
215 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
216   uint8_t tph_h_sel                : 1;
217   uint8_t tph_l                    : 7;
218 #endif /* DRV_BYTE_ORDER */
219 } lsm6dsrx_s4s_tph_l_t;
220 
221 #define LSM6DSRX_S4S_TPH_H                    0x05U
222 typedef struct
223 {
224   uint8_t tph_h                    : 8;
225 } lsm6dsrx_s4s_tph_h_t;
226 
227 #define LSM6DSRX_S4S_RR                       0x06U
228 typedef struct
229 {
230 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
231   uint8_t rr                       : 2;
232   uint8_t not_used_01              : 6;
233 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
234   uint8_t not_used_01              : 6;
235   uint8_t rr                       : 2;
236 #endif /* DRV_BYTE_ORDER */
237 } lsm6dsrx_s4s_rr_t;
238 
239 #define LSM6DSRX_FIFO_CTRL1                   0x07U
240 typedef struct
241 {
242   uint8_t wtm                      : 8;
243 } lsm6dsrx_fifo_ctrl1_t;
244 
245 #define LSM6DSRX_FIFO_CTRL2                   0x08U
246 typedef struct
247 {
248 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
249   uint8_t wtm                      : 1;
250   uint8_t uncoptr_rate             : 2;
251   uint8_t not_used_01              : 1;
252   uint8_t odrchg_en                : 1;
253   uint8_t not_used_02              : 1;
254   uint8_t fifo_compr_rt_en         : 1;
255   uint8_t stop_on_wtm              : 1;
256 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
257   uint8_t stop_on_wtm              : 1;
258   uint8_t fifo_compr_rt_en         : 1;
259   uint8_t not_used_02              : 1;
260   uint8_t odrchg_en                : 1;
261   uint8_t not_used_01              : 1;
262   uint8_t uncoptr_rate             : 2;
263   uint8_t wtm                      : 1;
264 #endif /* DRV_BYTE_ORDER */
265 } lsm6dsrx_fifo_ctrl2_t;
266 
267 #define LSM6DSRX_FIFO_CTRL3                   0x09U
268 typedef struct
269 {
270 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
271   uint8_t bdr_xl                   : 4;
272   uint8_t bdr_gy                   : 4;
273 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
274   uint8_t bdr_gy                   : 4;
275   uint8_t bdr_xl                   : 4;
276 #endif /* DRV_BYTE_ORDER */
277 } lsm6dsrx_fifo_ctrl3_t;
278 
279 #define LSM6DSRX_FIFO_CTRL4                   0x0AU
280 typedef struct
281 {
282 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
283   uint8_t fifo_mode                : 3;
284   uint8_t not_used_01              : 1;
285   uint8_t odr_t_batch              : 2;
286   uint8_t odr_ts_batch             : 2;
287 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
288   uint8_t odr_ts_batch             : 2;
289   uint8_t odr_t_batch              : 2;
290   uint8_t not_used_01              : 1;
291   uint8_t fifo_mode                : 3;
292 #endif /* DRV_BYTE_ORDER */
293 } lsm6dsrx_fifo_ctrl4_t;
294 
295 #define LSM6DSRX_COUNTER_BDR_REG1             0x0BU
296 typedef struct
297 {
298 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
299   uint8_t cnt_bdr_th               : 3;
300   uint8_t not_used_01              : 2;
301   uint8_t trig_counter_bdr         : 1;
302   uint8_t rst_counter_bdr          : 1;
303   uint8_t dataready_pulsed         : 1;
304 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
305   uint8_t dataready_pulsed         : 1;
306   uint8_t rst_counter_bdr          : 1;
307   uint8_t trig_counter_bdr         : 1;
308   uint8_t not_used_01              : 2;
309   uint8_t cnt_bdr_th               : 3;
310 #endif /* DRV_BYTE_ORDER */
311 } lsm6dsrx_counter_bdr_reg1_t;
312 
313 #define LSM6DSRX_COUNTER_BDR_REG2             0x0CU
314 typedef struct
315 {
316   uint8_t cnt_bdr_th               : 8;
317 } lsm6dsrx_counter_bdr_reg2_t;
318 
319 #define LSM6DSRX_INT1_CTRL                    0x0DU
320 typedef struct
321 {
322 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
323   uint8_t int1_drdy_xl             : 1;
324   uint8_t int1_drdy_g              : 1;
325   uint8_t int1_boot                : 1;
326   uint8_t int1_fifo_th             : 1;
327   uint8_t int1_fifo_ovr            : 1;
328   uint8_t int1_fifo_full           : 1;
329   uint8_t int1_cnt_bdr             : 1;
330   uint8_t den_drdy_flag            : 1;
331 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
332   uint8_t den_drdy_flag            : 1;
333   uint8_t int1_cnt_bdr             : 1;
334   uint8_t int1_fifo_full           : 1;
335   uint8_t int1_fifo_ovr            : 1;
336   uint8_t int1_fifo_th             : 1;
337   uint8_t int1_boot                : 1;
338   uint8_t int1_drdy_g              : 1;
339   uint8_t int1_drdy_xl             : 1;
340 #endif /* DRV_BYTE_ORDER */
341 } lsm6dsrx_int1_ctrl_t;
342 
343 #define LSM6DSRX_INT2_CTRL                    0x0EU
344 typedef struct
345 {
346 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
347   uint8_t int2_drdy_xl             : 1;
348   uint8_t int2_drdy_g              : 1;
349   uint8_t int2_drdy_temp           : 1;
350   uint8_t int2_fifo_th             : 1;
351   uint8_t int2_fifo_ovr            : 1;
352   uint8_t int2_fifo_full           : 1;
353   uint8_t int2_cnt_bdr             : 1;
354   uint8_t not_used_01              : 1;
355 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
356   uint8_t not_used_01              : 1;
357   uint8_t int2_cnt_bdr             : 1;
358   uint8_t int2_fifo_full           : 1;
359   uint8_t int2_fifo_ovr            : 1;
360   uint8_t int2_fifo_th             : 1;
361   uint8_t int2_drdy_temp           : 1;
362   uint8_t int2_drdy_g              : 1;
363   uint8_t int2_drdy_xl             : 1;
364 #endif /* DRV_BYTE_ORDER */
365 } lsm6dsrx_int2_ctrl_t;
366 
367 #define LSM6DSRX_WHO_AM_I                     0x0FU
368 #define LSM6DSRX_CTRL1_XL                     0x10U
369 typedef struct
370 {
371 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
372   uint8_t not_used_01              : 1;
373   uint8_t lpf2_xl_en               : 1;
374   uint8_t fs_xl                    : 2;
375   uint8_t odr_xl                   : 4;
376 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
377   uint8_t odr_xl                   : 4;
378   uint8_t fs_xl                    : 2;
379   uint8_t lpf2_xl_en               : 1;
380   uint8_t not_used_01              : 1;
381 #endif /* DRV_BYTE_ORDER */
382 } lsm6dsrx_ctrl1_xl_t;
383 
384 #define LSM6DSRX_CTRL2_G                      0x11U
385 typedef struct
386 {
387 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
388   uint8_t fs_g                     : 4; /* fs_4000 + fs_125 + fs_g */
389   uint8_t odr_g                    : 4;
390 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
391   uint8_t odr_g                    : 4;
392   uint8_t fs_g                     : 4; /* fs_4000 + fs_125 + fs_g */
393 #endif /* DRV_BYTE_ORDER */
394 } lsm6dsrx_ctrl2_g_t;
395 
396 #define LSM6DSRX_CTRL3_C                      0x12U
397 typedef struct
398 {
399 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
400   uint8_t sw_reset                 : 1;
401   uint8_t not_used_01              : 1;
402   uint8_t if_inc                   : 1;
403   uint8_t sim                      : 1;
404   uint8_t pp_od                    : 1;
405   uint8_t h_lactive                : 1;
406   uint8_t bdu                      : 1;
407   uint8_t boot                     : 1;
408 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
409   uint8_t boot                     : 1;
410   uint8_t bdu                      : 1;
411   uint8_t h_lactive                : 1;
412   uint8_t pp_od                    : 1;
413   uint8_t sim                      : 1;
414   uint8_t if_inc                   : 1;
415   uint8_t not_used_01              : 1;
416   uint8_t sw_reset                 : 1;
417 #endif /* DRV_BYTE_ORDER */
418 } lsm6dsrx_ctrl3_c_t;
419 
420 #define LSM6DSRX_CTRL4_C                      0x13U
421 typedef struct
422 {
423 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
424   uint8_t not_used_01              : 1;
425   uint8_t lpf1_sel_g               : 1;
426   uint8_t i2c_disable              : 1;
427   uint8_t drdy_mask                : 1;
428   uint8_t not_used_02              : 1;
429   uint8_t int2_on_int1             : 1;
430   uint8_t sleep_g                  : 1;
431   uint8_t not_used_03              : 1;
432 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
433   uint8_t not_used_03              : 1;
434   uint8_t sleep_g                  : 1;
435   uint8_t int2_on_int1             : 1;
436   uint8_t not_used_02              : 1;
437   uint8_t drdy_mask                : 1;
438   uint8_t i2c_disable              : 1;
439   uint8_t lpf1_sel_g               : 1;
440   uint8_t not_used_01              : 1;
441 #endif /* DRV_BYTE_ORDER */
442 } lsm6dsrx_ctrl4_c_t;
443 
444 #define LSM6DSRX_CTRL5_C                      0x14U
445 typedef struct
446 {
447 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
448   uint8_t st_xl                    : 2;
449   uint8_t st_g                     : 2;
450   uint8_t not_used_01              : 1;
451   uint8_t rounding                 : 2;
452   uint8_t not_used_02              : 1;
453 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
454   uint8_t not_used_02              : 1;
455   uint8_t rounding                 : 2;
456   uint8_t not_used_01              : 1;
457   uint8_t st_g                     : 2;
458   uint8_t st_xl                    : 2;
459 #endif /* DRV_BYTE_ORDER */
460 } lsm6dsrx_ctrl5_c_t;
461 
462 #define LSM6DSRX_CTRL6_C                      0x15U
463 typedef struct
464 {
465 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
466   uint8_t ftype                    : 3;
467   uint8_t usr_off_w                : 1;
468   uint8_t xl_hm_mode               : 1;
469   uint8_t den_mode                 : 3;   /* trig_en + lvl1_en + lvl2_en */
470 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
471   uint8_t den_mode                 : 3;   /* trig_en + lvl1_en + lvl2_en */
472   uint8_t xl_hm_mode               : 1;
473   uint8_t usr_off_w                : 1;
474   uint8_t ftype                    : 3;
475 #endif /* DRV_BYTE_ORDER */
476 } lsm6dsrx_ctrl6_c_t;
477 
478 #define LSM6DSRX_CTRL7_G                      0x16U
479 typedef struct
480 {
481 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
482   uint8_t ois_on                   : 1;
483   uint8_t usr_off_on_out           : 1;
484   uint8_t ois_on_en                : 1;
485   uint8_t not_used_01              : 1;
486   uint8_t hpm_g                    : 2;
487   uint8_t hp_en_g                  : 1;
488   uint8_t g_hm_mode                : 1;
489 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
490   uint8_t g_hm_mode                : 1;
491   uint8_t hp_en_g                  : 1;
492   uint8_t hpm_g                    : 2;
493   uint8_t not_used_01              : 1;
494   uint8_t ois_on_en                : 1;
495   uint8_t usr_off_on_out           : 1;
496   uint8_t ois_on                   : 1;
497 #endif /* DRV_BYTE_ORDER */
498 } lsm6dsrx_ctrl7_g_t;
499 
500 #define LSM6DSRX_CTRL8_XL                     0x17U
501 typedef struct
502 {
503 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
504   uint8_t low_pass_on_6d           : 1;
505   uint8_t not_used_01              : 1;
506   uint8_t hp_slope_xl_en           : 1;
507   uint8_t fastsettl_mode_xl        : 1;
508   uint8_t hp_ref_mode_xl           : 1;
509   uint8_t hpcf_xl                  : 3;
510 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
511   uint8_t hpcf_xl                  : 3;
512   uint8_t hp_ref_mode_xl           : 1;
513   uint8_t fastsettl_mode_xl        : 1;
514   uint8_t hp_slope_xl_en           : 1;
515   uint8_t not_used_01              : 1;
516   uint8_t low_pass_on_6d           : 1;
517 #endif /* DRV_BYTE_ORDER */
518 } lsm6dsrx_ctrl8_xl_t;
519 
520 #define LSM6DSRX_CTRL9_XL                     0x18U
521 typedef struct
522 {
523 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
524   uint8_t not_used_01              : 1;
525   uint8_t i3c_disable              : 1;
526   uint8_t den_lh                   : 1;
527   uint8_t den_xl_g                 : 2;   /* den_xl_en + den_xl_g */
528   uint8_t den_z                    : 1;
529   uint8_t den_y                    : 1;
530   uint8_t den_x                    : 1;
531 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
532   uint8_t den_x                    : 1;
533   uint8_t den_y                    : 1;
534   uint8_t den_z                    : 1;
535   uint8_t den_xl_g                 : 2;   /* den_xl_en + den_xl_g */
536   uint8_t den_lh                   : 1;
537   uint8_t i3c_disable              : 1;
538   uint8_t not_used_01              : 1;
539 #endif /* DRV_BYTE_ORDER */
540 } lsm6dsrx_ctrl9_xl_t;
541 
542 #define LSM6DSRX_CTRL10_C                     0x19U
543 typedef struct
544 {
545 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
546   uint8_t not_used_01              : 5;
547   uint8_t timestamp_en             : 1;
548   uint8_t not_used_02              : 2;
549 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
550   uint8_t not_used_02              : 2;
551   uint8_t timestamp_en             : 1;
552   uint8_t not_used_01              : 5;
553 #endif /* DRV_BYTE_ORDER */
554 } lsm6dsrx_ctrl10_c_t;
555 
556 #define LSM6DSRX_ALL_INT_SRC                  0x1AU
557 typedef struct
558 {
559 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
560   uint8_t ff_ia                    : 1;
561   uint8_t wu_ia                    : 1;
562   uint8_t single_tap               : 1;
563   uint8_t double_tap               : 1;
564   uint8_t d6d_ia                   : 1;
565   uint8_t sleep_change_ia          : 1;
566   uint8_t not_used_01              : 1;
567   uint8_t timestamp_endcount       : 1;
568 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
569   uint8_t timestamp_endcount       : 1;
570   uint8_t not_used_01              : 1;
571   uint8_t sleep_change_ia          : 1;
572   uint8_t d6d_ia                   : 1;
573   uint8_t double_tap               : 1;
574   uint8_t single_tap               : 1;
575   uint8_t wu_ia                    : 1;
576   uint8_t ff_ia                    : 1;
577 #endif /* DRV_BYTE_ORDER */
578 } lsm6dsrx_all_int_src_t;
579 
580 #define LSM6DSRX_WAKE_UP_SRC                  0x1BU
581 typedef struct
582 {
583 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
584   uint8_t z_wu                     : 1;
585   uint8_t y_wu                     : 1;
586   uint8_t x_wu                     : 1;
587   uint8_t wu_ia                    : 1;
588   uint8_t sleep_state              : 1;
589   uint8_t ff_ia                    : 1;
590   uint8_t sleep_change_ia          : 1;
591   uint8_t not_used_01              : 1;
592 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
593   uint8_t not_used_01              : 1;
594   uint8_t sleep_change_ia          : 1;
595   uint8_t ff_ia                    : 1;
596   uint8_t sleep_state              : 1;
597   uint8_t wu_ia                    : 1;
598   uint8_t x_wu                     : 1;
599   uint8_t y_wu                     : 1;
600   uint8_t z_wu                     : 1;
601 #endif /* DRV_BYTE_ORDER */
602 } lsm6dsrx_wake_up_src_t;
603 
604 #define LSM6DSRX_TAP_SRC                      0x1CU
605 typedef struct
606 {
607 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
608   uint8_t z_tap                    : 1;
609   uint8_t y_tap                    : 1;
610   uint8_t x_tap                    : 1;
611   uint8_t tap_sign                 : 1;
612   uint8_t double_tap               : 1;
613   uint8_t single_tap               : 1;
614   uint8_t tap_ia                   : 1;
615   uint8_t not_used_01              : 1;
616 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
617   uint8_t not_used_01              : 1;
618   uint8_t tap_ia                   : 1;
619   uint8_t single_tap               : 1;
620   uint8_t double_tap               : 1;
621   uint8_t tap_sign                 : 1;
622   uint8_t x_tap                    : 1;
623   uint8_t y_tap                    : 1;
624   uint8_t z_tap                    : 1;
625 #endif /* DRV_BYTE_ORDER */
626 } lsm6dsrx_tap_src_t;
627 
628 #define LSM6DSRX_D6D_SRC                      0x1DU
629 typedef struct
630 {
631 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
632   uint8_t xl                       : 1;
633   uint8_t xh                       : 1;
634   uint8_t yl                       : 1;
635   uint8_t yh                       : 1;
636   uint8_t zl                       : 1;
637   uint8_t zh                       : 1;
638   uint8_t d6d_ia                   : 1;
639   uint8_t den_drdy                 : 1;
640 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
641   uint8_t den_drdy                 : 1;
642   uint8_t d6d_ia                   : 1;
643   uint8_t zh                       : 1;
644   uint8_t zl                       : 1;
645   uint8_t yh                       : 1;
646   uint8_t yl                       : 1;
647   uint8_t xh                       : 1;
648   uint8_t xl                       : 1;
649 #endif /* DRV_BYTE_ORDER */
650 } lsm6dsrx_d6d_src_t;
651 
652 #define LSM6DSRX_STATUS_REG                   0x1EU
653 typedef struct
654 {
655 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
656   uint8_t xlda                     : 1;
657   uint8_t gda                      : 1;
658   uint8_t tda                      : 1;
659   uint8_t not_used_01              : 5;
660 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
661   uint8_t not_used_01              : 5;
662   uint8_t tda                      : 1;
663   uint8_t gda                      : 1;
664   uint8_t xlda                     : 1;
665 #endif /* DRV_BYTE_ORDER */
666 } lsm6dsrx_status_reg_t;
667 
668 #define LSM6DSRX_STATUS_SPIAUX                0x1EU
669 typedef struct
670 {
671 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
672   uint8_t xlda                     : 1;
673   uint8_t gda                      : 1;
674   uint8_t gyro_settling            : 1;
675   uint8_t not_used_01              : 5;
676 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
677   uint8_t not_used_01              : 5;
678   uint8_t gyro_settling            : 1;
679   uint8_t gda                      : 1;
680   uint8_t xlda                     : 1;
681 #endif /* DRV_BYTE_ORDER */
682 } lsm6dsrx_status_spiaux_t;
683 
684 #define LSM6DSRX_OUT_TEMP_L                   0x20U
685 #define LSM6DSRX_OUT_TEMP_H                   0x21U
686 #define LSM6DSRX_OUTX_L_G                     0x22U
687 #define LSM6DSRX_OUTX_H_G                     0x23U
688 #define LSM6DSRX_OUTY_L_G                     0x24U
689 #define LSM6DSRX_OUTY_H_G                     0x25U
690 #define LSM6DSRX_OUTZ_L_G                     0x26U
691 #define LSM6DSRX_OUTZ_H_G                     0x27U
692 #define LSM6DSRX_OUTX_L_A                     0x28U
693 #define LSM6DSRX_OUTX_H_A                     0x29U
694 #define LSM6DSRX_OUTY_L_A                     0x2AU
695 #define LSM6DSRX_OUTY_H_A                     0x2BU
696 #define LSM6DSRX_OUTZ_L_A                     0x2CU
697 #define LSM6DSRX_OUTZ_H_A                     0x2DU
698 
699 #define LSM6DSRX_EMB_FUNC_STATUS_MAINPAGE     0x35U
700 typedef struct
701 {
702 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
703   uint8_t not_used_01             : 3;
704   uint8_t is_step_det             : 1;
705   uint8_t is_tilt                 : 1;
706   uint8_t is_sigmot               : 1;
707   uint8_t not_used_02             : 1;
708   uint8_t is_fsm_lc               : 1;
709 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
710   uint8_t is_fsm_lc               : 1;
711   uint8_t not_used_02             : 1;
712   uint8_t is_sigmot               : 1;
713   uint8_t is_tilt                 : 1;
714   uint8_t is_step_det             : 1;
715   uint8_t not_used_01             : 3;
716 #endif /* DRV_BYTE_ORDER */
717 } lsm6dsrx_emb_func_status_mainpage_t;
718 
719 #define LSM6DSRX_FSM_STATUS_A_MAINPAGE        0x36U
720 typedef struct
721 {
722 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
723   uint8_t is_fsm1                 : 1;
724   uint8_t is_fsm2                 : 1;
725   uint8_t is_fsm3                 : 1;
726   uint8_t is_fsm4                 : 1;
727   uint8_t is_fsm5                 : 1;
728   uint8_t is_fsm6                 : 1;
729   uint8_t is_fsm7                 : 1;
730   uint8_t is_fsm8                 : 1;
731 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
732   uint8_t is_fsm8                 : 1;
733   uint8_t is_fsm7                 : 1;
734   uint8_t is_fsm6                 : 1;
735   uint8_t is_fsm5                 : 1;
736   uint8_t is_fsm4                 : 1;
737   uint8_t is_fsm3                 : 1;
738   uint8_t is_fsm2                 : 1;
739   uint8_t is_fsm1                 : 1;
740 #endif /* DRV_BYTE_ORDER */
741 } lsm6dsrx_fsm_status_a_mainpage_t;
742 
743 #define LSM6DSRX_FSM_STATUS_B_MAINPAGE        0x37U
744 typedef struct
745 {
746 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
747   uint8_t is_fsm9                 : 1;
748   uint8_t is_fsm10                : 1;
749   uint8_t is_fsm11                : 1;
750   uint8_t is_fsm12                : 1;
751   uint8_t is_fsm13                : 1;
752   uint8_t is_fsm14                : 1;
753   uint8_t is_fsm15                : 1;
754   uint8_t is_fsm16                : 1;
755 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
756   uint8_t is_fsm16                : 1;
757   uint8_t is_fsm15                : 1;
758   uint8_t is_fsm14                : 1;
759   uint8_t is_fsm13                : 1;
760   uint8_t is_fsm12                : 1;
761   uint8_t is_fsm11                : 1;
762   uint8_t is_fsm10                : 1;
763   uint8_t is_fsm9                 : 1;
764 #endif /* DRV_BYTE_ORDER */
765 } lsm6dsrx_fsm_status_b_mainpage_t;
766 
767 #define LSM6DSRX_MLC_STATUS_MAINPAGE          0x38U
768 typedef struct
769 {
770 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
771   uint8_t is_mlc1                 : 1;
772   uint8_t is_mlc2                 : 1;
773   uint8_t is_mlc3                 : 1;
774   uint8_t is_mlc4                 : 1;
775   uint8_t is_mlc5                 : 1;
776   uint8_t is_mlc6                 : 1;
777   uint8_t is_mlc7                 : 1;
778   uint8_t is_mlc8                 : 1;
779 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
780   uint8_t is_mlc8                 : 1;
781   uint8_t is_mlc7                 : 1;
782   uint8_t is_mlc6                 : 1;
783   uint8_t is_mlc5                 : 1;
784   uint8_t is_mlc4                 : 1;
785   uint8_t is_mlc3                 : 1;
786   uint8_t is_mlc2                 : 1;
787   uint8_t is_mlc1                 : 1;
788 #endif /* DRV_BYTE_ORDER */
789 } lsm6dsrx_mlc_status_mainpage_t;
790 
791 #define LSM6DSRX_STATUS_MASTER_MAINPAGE       0x39U
792 typedef struct
793 {
794 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
795   uint8_t sens_hub_endop          : 1;
796   uint8_t not_used_01             : 2;
797   uint8_t slave0_nack             : 1;
798   uint8_t slave1_nack             : 1;
799   uint8_t slave2_nack             : 1;
800   uint8_t slave3_nack             : 1;
801   uint8_t wr_once_done            : 1;
802 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
803   uint8_t wr_once_done            : 1;
804   uint8_t slave3_nack             : 1;
805   uint8_t slave2_nack             : 1;
806   uint8_t slave1_nack             : 1;
807   uint8_t slave0_nack             : 1;
808   uint8_t not_used_01             : 2;
809   uint8_t sens_hub_endop          : 1;
810 #endif /* DRV_BYTE_ORDER */
811 } lsm6dsrx_status_master_mainpage_t;
812 
813 #define LSM6DSRX_FIFO_STATUS1                 0x3AU
814 typedef struct
815 {
816   uint8_t diff_fifo                : 8;
817 } lsm6dsrx_fifo_status1_t;
818 
819 #define LSM6DSRX_FIFO_STATUS2                 0x3BU
820 typedef struct
821 {
822 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
823   uint8_t diff_fifo                : 2;
824   uint8_t not_used_01              : 1;
825   uint8_t over_run_latched         : 1;
826   uint8_t counter_bdr_ia           : 1;
827   uint8_t fifo_full_ia             : 1;
828   uint8_t fifo_ovr_ia              : 1;
829   uint8_t fifo_wtm_ia              : 1;
830 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
831   uint8_t fifo_wtm_ia              : 1;
832   uint8_t fifo_ovr_ia              : 1;
833   uint8_t fifo_full_ia             : 1;
834   uint8_t counter_bdr_ia           : 1;
835   uint8_t over_run_latched         : 1;
836   uint8_t not_used_01              : 1;
837   uint8_t diff_fifo                : 2;
838 #endif /* DRV_BYTE_ORDER */
839 } lsm6dsrx_fifo_status2_t;
840 
841 #define LSM6DSRX_TIMESTAMP0                   0x40U
842 #define LSM6DSRX_TIMESTAMP1                   0x41U
843 #define LSM6DSRX_TIMESTAMP2                   0x42U
844 #define LSM6DSRX_TIMESTAMP3                   0x43U
845 #define LSM6DSRX_TAP_CFG0                     0x56U
846 typedef struct
847 {
848 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
849   uint8_t lir                      : 1;
850   uint8_t tap_z_en                 : 1;
851   uint8_t tap_y_en                 : 1;
852   uint8_t tap_x_en                 : 1;
853   uint8_t slope_fds                : 1;
854   uint8_t sleep_status_on_int      : 1;
855   uint8_t int_clr_on_read          : 1;
856   uint8_t not_used_01              : 1;
857 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
858   uint8_t not_used_01              : 1;
859   uint8_t int_clr_on_read          : 1;
860   uint8_t sleep_status_on_int      : 1;
861   uint8_t slope_fds                : 1;
862   uint8_t tap_x_en                 : 1;
863   uint8_t tap_y_en                 : 1;
864   uint8_t tap_z_en                 : 1;
865   uint8_t lir                      : 1;
866 #endif /* DRV_BYTE_ORDER */
867 } lsm6dsrx_tap_cfg0_t;
868 
869 #define LSM6DSRX_TAP_CFG1                     0x57U
870 typedef struct
871 {
872 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
873   uint8_t tap_ths_x                : 5;
874   uint8_t tap_priority             : 3;
875 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
876   uint8_t tap_priority             : 3;
877   uint8_t tap_ths_x                : 5;
878 #endif /* DRV_BYTE_ORDER */
879 } lsm6dsrx_tap_cfg1_t;
880 
881 #define LSM6DSRX_TAP_CFG2                     0x58U
882 typedef struct
883 {
884 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
885   uint8_t tap_ths_y                : 5;
886   uint8_t inact_en                 : 2;
887   uint8_t interrupts_enable        : 1;
888 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
889   uint8_t interrupts_enable        : 1;
890   uint8_t inact_en                 : 2;
891   uint8_t tap_ths_y                : 5;
892 #endif /* DRV_BYTE_ORDER */
893 } lsm6dsrx_tap_cfg2_t;
894 
895 #define LSM6DSRX_TAP_THS_6D                   0x59U
896 typedef struct
897 {
898 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
899   uint8_t tap_ths_z                : 5;
900   uint8_t sixd_ths                 : 2;
901   uint8_t d4d_en                   : 1;
902 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
903   uint8_t d4d_en                   : 1;
904   uint8_t sixd_ths                 : 2;
905   uint8_t tap_ths_z                : 5;
906 #endif /* DRV_BYTE_ORDER */
907 } lsm6dsrx_tap_ths_6d_t;
908 
909 #define LSM6DSRX_INT_DUR2                     0x5AU
910 typedef struct
911 {
912 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
913   uint8_t shock                    : 2;
914   uint8_t quiet                    : 2;
915   uint8_t dur                      : 4;
916 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
917   uint8_t dur                      : 4;
918   uint8_t quiet                    : 2;
919   uint8_t shock                    : 2;
920 #endif /* DRV_BYTE_ORDER */
921 } lsm6dsrx_int_dur2_t;
922 
923 #define LSM6DSRX_WAKE_UP_THS                  0x5BU
924 typedef struct
925 {
926 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
927   uint8_t wk_ths                   : 6;
928   uint8_t usr_off_on_wu            : 1;
929   uint8_t single_double_tap        : 1;
930 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
931   uint8_t single_double_tap        : 1;
932   uint8_t usr_off_on_wu            : 1;
933   uint8_t wk_ths                   : 6;
934 #endif /* DRV_BYTE_ORDER */
935 } lsm6dsrx_wake_up_ths_t;
936 
937 #define LSM6DSRX_WAKE_UP_DUR                  0x5CU
938 typedef struct
939 {
940 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
941   uint8_t sleep_dur                : 4;
942   uint8_t wake_ths_w               : 1;
943   uint8_t wake_dur                 : 2;
944   uint8_t ff_dur                   : 1;
945 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
946   uint8_t ff_dur                   : 1;
947   uint8_t wake_dur                 : 2;
948   uint8_t wake_ths_w               : 1;
949   uint8_t sleep_dur                : 4;
950 #endif /* DRV_BYTE_ORDER */
951 } lsm6dsrx_wake_up_dur_t;
952 
953 #define LSM6DSRX_FREE_FALL                    0x5DU
954 typedef struct
955 {
956 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
957   uint8_t ff_ths                   : 3;
958   uint8_t ff_dur                   : 5;
959 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
960   uint8_t ff_dur                   : 5;
961   uint8_t ff_ths                   : 3;
962 #endif /* DRV_BYTE_ORDER */
963 } lsm6dsrx_free_fall_t;
964 
965 #define LSM6DSRX_MD1_CFG                      0x5EU
966 typedef struct
967 {
968 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
969   uint8_t int1_shub                : 1;
970   uint8_t int1_emb_func            : 1;
971   uint8_t int1_6d                  : 1;
972   uint8_t int1_double_tap          : 1;
973   uint8_t int1_ff                  : 1;
974   uint8_t int1_wu                  : 1;
975   uint8_t int1_single_tap          : 1;
976   uint8_t int1_sleep_change        : 1;
977 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
978   uint8_t int1_sleep_change        : 1;
979   uint8_t int1_single_tap          : 1;
980   uint8_t int1_wu                  : 1;
981   uint8_t int1_ff                  : 1;
982   uint8_t int1_double_tap          : 1;
983   uint8_t int1_6d                  : 1;
984   uint8_t int1_emb_func            : 1;
985   uint8_t int1_shub                : 1;
986 #endif /* DRV_BYTE_ORDER */
987 } lsm6dsrx_md1_cfg_t;
988 
989 #define LSM6DSRX_MD2_CFG                      0x5FU
990 typedef struct
991 {
992 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
993   uint8_t int2_timestamp           : 1;
994   uint8_t int2_emb_func            : 1;
995   uint8_t int2_6d                  : 1;
996   uint8_t int2_double_tap          : 1;
997   uint8_t int2_ff                  : 1;
998   uint8_t int2_wu                  : 1;
999   uint8_t int2_single_tap          : 1;
1000   uint8_t int2_sleep_change        : 1;
1001 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1002   uint8_t int2_sleep_change        : 1;
1003   uint8_t int2_single_tap          : 1;
1004   uint8_t int2_wu                  : 1;
1005   uint8_t int2_ff                  : 1;
1006   uint8_t int2_double_tap          : 1;
1007   uint8_t int2_6d                  : 1;
1008   uint8_t int2_emb_func            : 1;
1009   uint8_t int2_timestamp           : 1;
1010 #endif /* DRV_BYTE_ORDER */
1011 } lsm6dsrx_md2_cfg_t;
1012 
1013 #define LSM6DSRX_S4S_ST_CMD_CODE              0x60U
1014 typedef struct
1015 {
1016   uint8_t s4s_st_cmd_code          : 8;
1017 } lsm6dsrx_s4s_st_cmd_code_t;
1018 
1019 #define LSM6DSRX_S4S_DT_REG                   0x61U
1020 typedef struct
1021 {
1022   uint8_t dt                       : 8;
1023 } lsm6dsrx_s4s_dt_reg_t;
1024 
1025 #define LSM6DSRX_I3C_BUS_AVB                  0x62U
1026 typedef struct
1027 {
1028 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1029   uint8_t pd_dis_int1              : 1;
1030   uint8_t not_used_01              : 2;
1031   uint8_t i3c_bus_avb_sel          : 2;
1032   uint8_t not_used_02              : 3;
1033 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1034   uint8_t not_used_02              : 3;
1035   uint8_t i3c_bus_avb_sel          : 2;
1036   uint8_t not_used_01              : 2;
1037   uint8_t pd_dis_int1              : 1;
1038 #endif /* DRV_BYTE_ORDER */
1039 } lsm6dsrx_i3c_bus_avb_t;
1040 
1041 #define LSM6DSRX_INTERNAL_FREQ_FINE           0x63U
1042 typedef struct
1043 {
1044   uint8_t freq_fine                : 8;
1045 } lsm6dsrx_internal_freq_fine_t;
1046 
1047 #define LSM6DSRX_INT_OIS                      0x6FU
1048 typedef struct
1049 {
1050 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1051   uint8_t st_xl_ois                : 2;
1052   uint8_t not_used_01              : 3;
1053   uint8_t den_lh_ois               : 1;
1054   uint8_t lvl2_ois                 : 1;
1055   uint8_t int2_drdy_ois            : 1;
1056 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1057   uint8_t int2_drdy_ois            : 1;
1058   uint8_t lvl2_ois                 : 1;
1059   uint8_t den_lh_ois               : 1;
1060   uint8_t not_used_01              : 3;
1061   uint8_t st_xl_ois                : 2;
1062 #endif /* DRV_BYTE_ORDER */
1063 } lsm6dsrx_int_ois_t;
1064 
1065 #define LSM6DSRX_CTRL1_OIS                    0x70U
1066 typedef struct
1067 {
1068 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1069   uint8_t ois_en_spi2              : 1;
1070   uint8_t fs_125_ois               : 1;
1071   uint8_t fs_g_ois                 : 2;
1072   uint8_t mode4_en                 : 1;
1073   uint8_t sim_ois                  : 1;
1074   uint8_t lvl1_ois                 : 1;
1075   uint8_t not_used_01              : 1;
1076 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1077   uint8_t not_used_01              : 1;
1078   uint8_t lvl1_ois                 : 1;
1079   uint8_t sim_ois                  : 1;
1080   uint8_t mode4_en                 : 1;
1081   uint8_t fs_g_ois                 : 2;
1082   uint8_t fs_125_ois               : 1;
1083   uint8_t ois_en_spi2              : 1;
1084 #endif /* DRV_BYTE_ORDER */
1085 } lsm6dsrx_ctrl1_ois_t;
1086 
1087 #define LSM6DSRX_CTRL2_OIS                    0x71U
1088 typedef struct
1089 {
1090 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1091   uint8_t hp_en_ois                : 1;
1092   uint8_t ftype_ois                : 2;
1093   uint8_t not_used_01              : 1;
1094   uint8_t hpm_ois                  : 2;
1095   uint8_t not_used_02              : 2;
1096 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1097   uint8_t not_used_02              : 2;
1098   uint8_t hpm_ois                  : 2;
1099   uint8_t not_used_01              : 1;
1100   uint8_t ftype_ois                : 2;
1101   uint8_t hp_en_ois                : 1;
1102 #endif /* DRV_BYTE_ORDER */
1103 } lsm6dsrx_ctrl2_ois_t;
1104 
1105 #define LSM6DSRX_CTRL3_OIS                    0x72U
1106 typedef struct
1107 {
1108 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1109   uint8_t st_ois_clampdis          : 1;
1110   uint8_t st_ois                   : 2;
1111   uint8_t filter_xl_conf_ois       : 3;
1112   uint8_t fs_xl_ois                : 2;
1113 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1114   uint8_t fs_xl_ois                : 2;
1115   uint8_t filter_xl_conf_ois       : 3;
1116   uint8_t st_ois                   : 2;
1117   uint8_t st_ois_clampdis          : 1;
1118 #endif /* DRV_BYTE_ORDER */
1119 } lsm6dsrx_ctrl3_ois_t;
1120 
1121 #define LSM6DSRX_X_OFS_USR                    0x73U
1122 #define LSM6DSRX_Y_OFS_USR                    0x74U
1123 #define LSM6DSRX_Z_OFS_USR                    0x75U
1124 #define LSM6DSRX_FIFO_DATA_OUT_TAG            0x78U
1125 typedef struct
1126 {
1127 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1128   uint8_t tag_parity               : 1;
1129   uint8_t tag_cnt                  : 2;
1130   uint8_t tag_sensor               : 5;
1131 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1132   uint8_t tag_sensor               : 5;
1133   uint8_t tag_cnt                  : 2;
1134   uint8_t tag_parity               : 1;
1135 #endif /* DRV_BYTE_ORDER */
1136 } lsm6dsrx_fifo_data_out_tag_t;
1137 
1138 #define LSM6DSRX_FIFO_DATA_OUT_X_L            0x79U
1139 #define LSM6DSRX_FIFO_DATA_OUT_X_H            0x7AU
1140 #define LSM6DSRX_FIFO_DATA_OUT_Y_L            0x7BU
1141 #define LSM6DSRX_FIFO_DATA_OUT_Y_H            0x7CU
1142 #define LSM6DSRX_FIFO_DATA_OUT_Z_L            0x7DU
1143 #define LSM6DSRX_FIFO_DATA_OUT_Z_H            0x7EU
1144 #define LSM6DSRX_PAGE_SEL                     0x02U
1145 typedef struct
1146 {
1147 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1148   uint8_t not_used_01              : 4;
1149   uint8_t page_sel                 : 4;
1150 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1151   uint8_t page_sel                 : 4;
1152   uint8_t not_used_01              : 4;
1153 #endif /* DRV_BYTE_ORDER */
1154 } lsm6dsrx_page_sel_t;
1155 
1156 #define LSM6DSRX_EMB_FUNC_EN_A                0x04U
1157 typedef struct
1158 {
1159 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1160   uint8_t not_used_01              : 3;
1161   uint8_t pedo_en                  : 1;
1162   uint8_t tilt_en                  : 1;
1163   uint8_t sign_motion_en           : 1;
1164   uint8_t not_used_02              : 2;
1165 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1166   uint8_t not_used_02              : 2;
1167   uint8_t sign_motion_en           : 1;
1168   uint8_t tilt_en                  : 1;
1169   uint8_t pedo_en                  : 1;
1170   uint8_t not_used_01              : 3;
1171 #endif /* DRV_BYTE_ORDER */
1172 } lsm6dsrx_emb_func_en_a_t;
1173 
1174 #define LSM6DSRX_EMB_FUNC_EN_B                0x05U
1175 typedef struct
1176 {
1177 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1178   uint8_t fsm_en                   : 1;
1179   uint8_t not_used_01              : 2;
1180   uint8_t fifo_compr_en            : 1;
1181   uint8_t mlc_en                   : 1;
1182   uint8_t not_used_02              : 3;
1183 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1184   uint8_t not_used_02              : 3;
1185   uint8_t mlc_en                   : 1;
1186   uint8_t fifo_compr_en            : 1;
1187   uint8_t not_used_01              : 2;
1188   uint8_t fsm_en                   : 1;
1189 #endif /* DRV_BYTE_ORDER */
1190 } lsm6dsrx_emb_func_en_b_t;
1191 
1192 #define LSM6DSRX_PAGE_ADDRESS                 0x08U
1193 typedef struct
1194 {
1195   uint8_t page_addr                : 8;
1196 } lsm6dsrx_page_address_t;
1197 
1198 #define LSM6DSRX_PAGE_VALUE                   0x09U
1199 typedef struct
1200 {
1201   uint8_t page_value               : 8;
1202 } lsm6dsrx_page_value_t;
1203 
1204 #define LSM6DSRX_EMB_FUNC_INT1                0x0AU
1205 typedef struct
1206 {
1207 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1208   uint8_t not_used_01              : 3;
1209   uint8_t int1_step_detector       : 1;
1210   uint8_t int1_tilt                : 1;
1211   uint8_t int1_sig_mot             : 1;
1212   uint8_t not_used_02              : 1;
1213   uint8_t int1_fsm_lc              : 1;
1214 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1215   uint8_t int1_fsm_lc              : 1;
1216   uint8_t not_used_02              : 1;
1217   uint8_t int1_sig_mot             : 1;
1218   uint8_t int1_tilt                : 1;
1219   uint8_t int1_step_detector       : 1;
1220   uint8_t not_used_01              : 3;
1221 #endif /* DRV_BYTE_ORDER */
1222 } lsm6dsrx_emb_func_int1_t;
1223 
1224 #define LSM6DSRX_FSM_INT1_A                   0x0BU
1225 typedef struct
1226 {
1227 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1228   uint8_t int1_fsm1                : 1;
1229   uint8_t int1_fsm2                : 1;
1230   uint8_t int1_fsm3                : 1;
1231   uint8_t int1_fsm4                : 1;
1232   uint8_t int1_fsm5                : 1;
1233   uint8_t int1_fsm6                : 1;
1234   uint8_t int1_fsm7                : 1;
1235   uint8_t int1_fsm8                : 1;
1236 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1237   uint8_t int1_fsm8                : 1;
1238   uint8_t int1_fsm7                : 1;
1239   uint8_t int1_fsm6                : 1;
1240   uint8_t int1_fsm5                : 1;
1241   uint8_t int1_fsm4                : 1;
1242   uint8_t int1_fsm3                : 1;
1243   uint8_t int1_fsm2                : 1;
1244   uint8_t int1_fsm1                : 1;
1245 #endif /* DRV_BYTE_ORDER */
1246 } lsm6dsrx_fsm_int1_a_t;
1247 
1248 #define LSM6DSRX_FSM_INT1_B                   0x0CU
1249 typedef struct
1250 {
1251 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1252   uint8_t int1_fsm9                : 1;
1253   uint8_t int1_fsm10               : 1;
1254   uint8_t int1_fsm11               : 1;
1255   uint8_t int1_fsm12               : 1;
1256   uint8_t int1_fsm13               : 1;
1257   uint8_t int1_fsm14               : 1;
1258   uint8_t int1_fsm15               : 1;
1259   uint8_t int1_fsm16               : 1;
1260 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1261   uint8_t int1_fsm16               : 1;
1262   uint8_t int1_fsm15               : 1;
1263   uint8_t int1_fsm14               : 1;
1264   uint8_t int1_fsm13               : 1;
1265   uint8_t int1_fsm12               : 1;
1266   uint8_t int1_fsm11               : 1;
1267   uint8_t int1_fsm10               : 1;
1268   uint8_t int1_fsm9                : 1;
1269 #endif /* DRV_BYTE_ORDER */
1270 } lsm6dsrx_fsm_int1_b_t;
1271 
1272 #define LSM6DSRX_MLC_INT1                     0x0DU
1273 typedef struct
1274 {
1275 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1276   uint8_t int1_mlc1                : 1;
1277   uint8_t int1_mlc2                : 1;
1278   uint8_t int1_mlc3                : 1;
1279   uint8_t int1_mlc4                : 1;
1280   uint8_t int1_mlc5                : 1;
1281   uint8_t int1_mlc6                : 1;
1282   uint8_t int1_mlc7                : 1;
1283   uint8_t int1_mlc8                : 1;
1284 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1285   uint8_t int1_mlc8                : 1;
1286   uint8_t int1_mlc7                : 1;
1287   uint8_t int1_mlc6                : 1;
1288   uint8_t int1_mlc5                : 1;
1289   uint8_t int1_mlc4                : 1;
1290   uint8_t int1_mlc3                : 1;
1291   uint8_t int1_mlc2                : 1;
1292   uint8_t int1_mlc1                : 1;
1293 #endif /* DRV_BYTE_ORDER */
1294 } lsm6dsrx_mlc_int1_t;
1295 
1296 #define LSM6DSRX_EMB_FUNC_INT2                0x0EU
1297 typedef struct
1298 {
1299 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1300   uint8_t not_used_01              : 3;
1301   uint8_t int2_step_detector       : 1;
1302   uint8_t int2_tilt                : 1;
1303   uint8_t int2_sig_mot             : 1;
1304   uint8_t not_used_02              : 1;
1305   uint8_t int2_fsm_lc              : 1;
1306 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1307   uint8_t int2_fsm_lc              : 1;
1308   uint8_t not_used_02              : 1;
1309   uint8_t int2_sig_mot             : 1;
1310   uint8_t int2_tilt                : 1;
1311   uint8_t int2_step_detector       : 1;
1312   uint8_t not_used_01              : 3;
1313 #endif /* DRV_BYTE_ORDER */
1314 } lsm6dsrx_emb_func_int2_t;
1315 
1316 #define LSM6DSRX_FSM_INT2_A                   0x0FU
1317 typedef struct
1318 {
1319 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1320   uint8_t int2_fsm1                : 1;
1321   uint8_t int2_fsm2                : 1;
1322   uint8_t int2_fsm3                : 1;
1323   uint8_t int2_fsm4                : 1;
1324   uint8_t int2_fsm5                : 1;
1325   uint8_t int2_fsm6                : 1;
1326   uint8_t int2_fsm7                : 1;
1327   uint8_t int2_fsm8                : 1;
1328 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1329   uint8_t int2_fsm8                : 1;
1330   uint8_t int2_fsm7                : 1;
1331   uint8_t int2_fsm6                : 1;
1332   uint8_t int2_fsm5                : 1;
1333   uint8_t int2_fsm4                : 1;
1334   uint8_t int2_fsm3                : 1;
1335   uint8_t int2_fsm2                : 1;
1336   uint8_t int2_fsm1                : 1;
1337 #endif /* DRV_BYTE_ORDER */
1338 } lsm6dsrx_fsm_int2_a_t;
1339 
1340 #define LSM6DSRX_FSM_INT2_B                   0x10U
1341 typedef struct
1342 {
1343 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1344   uint8_t int2_fsm9                : 1;
1345   uint8_t int2_fsm10               : 1;
1346   uint8_t int2_fsm11               : 1;
1347   uint8_t int2_fsm12               : 1;
1348   uint8_t int2_fsm13               : 1;
1349   uint8_t int2_fsm14               : 1;
1350   uint8_t int2_fsm15               : 1;
1351   uint8_t int2_fsm16               : 1;
1352 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1353   uint8_t int2_fsm16               : 1;
1354   uint8_t int2_fsm15               : 1;
1355   uint8_t int2_fsm14               : 1;
1356   uint8_t int2_fsm13               : 1;
1357   uint8_t int2_fsm12               : 1;
1358   uint8_t int2_fsm11               : 1;
1359   uint8_t int2_fsm10               : 1;
1360   uint8_t int2_fsm9                : 1;
1361 #endif /* DRV_BYTE_ORDER */
1362 } lsm6dsrx_fsm_int2_b_t;
1363 
1364 #define LSM6DSRX_MLC_INT2                     0x11U
1365 typedef struct
1366 {
1367 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1368   uint8_t int2_mlc1             : 1;
1369   uint8_t int2_mlc2             : 1;
1370   uint8_t int2_mlc3             : 1;
1371   uint8_t int2_mlc4             : 1;
1372   uint8_t int2_mlc5             : 1;
1373   uint8_t int2_mlc6             : 1;
1374   uint8_t int2_mlc7             : 1;
1375   uint8_t int2_mlc8             : 1;
1376 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1377   uint8_t int2_mlc8             : 1;
1378   uint8_t int2_mlc7             : 1;
1379   uint8_t int2_mlc6             : 1;
1380   uint8_t int2_mlc5             : 1;
1381   uint8_t int2_mlc4             : 1;
1382   uint8_t int2_mlc3             : 1;
1383   uint8_t int2_mlc2             : 1;
1384   uint8_t int2_mlc1             : 1;
1385 #endif /* DRV_BYTE_ORDER */
1386 } lsm6dsrx_mlc_int2_t;
1387 
1388 #define LSM6DSRX_EMB_FUNC_STATUS              0x12U
1389 typedef struct
1390 {
1391 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1392   uint8_t not_used_01              : 3;
1393   uint8_t is_step_det              : 1;
1394   uint8_t is_tilt                  : 1;
1395   uint8_t is_sigmot                : 1;
1396   uint8_t not_used_02              : 1;
1397   uint8_t is_fsm_lc                : 1;
1398 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1399   uint8_t is_fsm_lc                : 1;
1400   uint8_t not_used_02              : 1;
1401   uint8_t is_sigmot                : 1;
1402   uint8_t is_tilt                  : 1;
1403   uint8_t is_step_det              : 1;
1404   uint8_t not_used_01              : 3;
1405 #endif /* DRV_BYTE_ORDER */
1406 } lsm6dsrx_emb_func_status_t;
1407 
1408 #define LSM6DSRX_FSM_STATUS_A                 0x13U
1409 typedef struct
1410 {
1411 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1412   uint8_t is_fsm1                  : 1;
1413   uint8_t is_fsm2                  : 1;
1414   uint8_t is_fsm3                  : 1;
1415   uint8_t is_fsm4                  : 1;
1416   uint8_t is_fsm5                  : 1;
1417   uint8_t is_fsm6                  : 1;
1418   uint8_t is_fsm7                  : 1;
1419   uint8_t is_fsm8                  : 1;
1420 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1421   uint8_t is_fsm8                  : 1;
1422   uint8_t is_fsm7                  : 1;
1423   uint8_t is_fsm6                  : 1;
1424   uint8_t is_fsm5                  : 1;
1425   uint8_t is_fsm4                  : 1;
1426   uint8_t is_fsm3                  : 1;
1427   uint8_t is_fsm2                  : 1;
1428   uint8_t is_fsm1                  : 1;
1429 #endif /* DRV_BYTE_ORDER */
1430 } lsm6dsrx_fsm_status_a_t;
1431 
1432 #define LSM6DSRX_FSM_STATUS_B                 0x14U
1433 typedef struct
1434 {
1435 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1436   uint8_t is_fsm9                  : 1;
1437   uint8_t is_fsm10                 : 1;
1438   uint8_t is_fsm11                 : 1;
1439   uint8_t is_fsm12                 : 1;
1440   uint8_t is_fsm13                 : 1;
1441   uint8_t is_fsm14                 : 1;
1442   uint8_t is_fsm15                 : 1;
1443   uint8_t is_fsm16                 : 1;
1444 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1445   uint8_t is_fsm16                 : 1;
1446   uint8_t is_fsm15                 : 1;
1447   uint8_t is_fsm14                 : 1;
1448   uint8_t is_fsm13                 : 1;
1449   uint8_t is_fsm12                 : 1;
1450   uint8_t is_fsm11                 : 1;
1451   uint8_t is_fsm10                 : 1;
1452   uint8_t is_fsm9                  : 1;
1453 #endif /* DRV_BYTE_ORDER */
1454 } lsm6dsrx_fsm_status_b_t;
1455 
1456 #define LSM6DSRX_MLC_STATUS                   0x15U
1457 typedef struct
1458 {
1459 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1460   uint8_t is_mlc1            : 1;
1461   uint8_t is_mlc2            : 1;
1462   uint8_t is_mlc3            : 1;
1463   uint8_t is_mlc4            : 1;
1464   uint8_t is_mlc5            : 1;
1465   uint8_t is_mlc6            : 1;
1466   uint8_t is_mlc7            : 1;
1467   uint8_t is_mlc8            : 1;
1468 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1469   uint8_t is_mlc8            : 1;
1470   uint8_t is_mlc7            : 1;
1471   uint8_t is_mlc6            : 1;
1472   uint8_t is_mlc5            : 1;
1473   uint8_t is_mlc4            : 1;
1474   uint8_t is_mlc3            : 1;
1475   uint8_t is_mlc2            : 1;
1476   uint8_t is_mlc1            : 1;
1477 #endif /* DRV_BYTE_ORDER */
1478 } lsm6dsrx_mlc_status_t;
1479 
1480 #define LSM6DSRX_PAGE_RW                      0x17U
1481 typedef struct
1482 {
1483 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1484   uint8_t not_used_01              : 5;
1485   uint8_t page_rw                  : 2;  /* page_write + page_read */
1486   uint8_t emb_func_lir             : 1;
1487 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1488   uint8_t emb_func_lir             : 1;
1489   uint8_t page_rw                  : 2;  /* page_write + page_read */
1490   uint8_t not_used_01              : 5;
1491 #endif /* DRV_BYTE_ORDER */
1492 } lsm6dsrx_page_rw_t;
1493 
1494 #define LSM6DSRX_EMB_FUNC_FIFO_CFG            0x44U
1495 typedef struct
1496 {
1497 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1498   uint8_t not_used_01              : 6;
1499   uint8_t pedo_fifo_en             : 1;
1500   uint8_t not_used_02              : 1;
1501 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1502   uint8_t not_used_02              : 1;
1503   uint8_t pedo_fifo_en             : 1;
1504   uint8_t not_used_01              : 6;
1505 #endif /* DRV_BYTE_ORDER */
1506 } lsm6dsrx_emb_func_fifo_cfg_t;
1507 
1508 #define LSM6DSRX_FSM_ENABLE_A                 0x46U
1509 typedef struct
1510 {
1511 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1512   uint8_t fsm1_en                  : 1;
1513   uint8_t fsm2_en                  : 1;
1514   uint8_t fsm3_en                  : 1;
1515   uint8_t fsm4_en                  : 1;
1516   uint8_t fsm5_en                  : 1;
1517   uint8_t fsm6_en                  : 1;
1518   uint8_t fsm7_en                  : 1;
1519   uint8_t fsm8_en                  : 1;
1520 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1521   uint8_t fsm8_en                  : 1;
1522   uint8_t fsm7_en                  : 1;
1523   uint8_t fsm6_en                  : 1;
1524   uint8_t fsm5_en                  : 1;
1525   uint8_t fsm4_en                  : 1;
1526   uint8_t fsm3_en                  : 1;
1527   uint8_t fsm2_en                  : 1;
1528   uint8_t fsm1_en                  : 1;
1529 #endif /* DRV_BYTE_ORDER */
1530 } lsm6dsrx_fsm_enable_a_t;
1531 
1532 #define LSM6DSRX_FSM_ENABLE_B                 0x47U
1533 typedef struct
1534 {
1535 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1536   uint8_t fsm9_en                  : 1;
1537   uint8_t fsm10_en                 : 1;
1538   uint8_t fsm11_en                 : 1;
1539   uint8_t fsm12_en                 : 1;
1540   uint8_t fsm13_en                 : 1;
1541   uint8_t fsm14_en                 : 1;
1542   uint8_t fsm15_en                 : 1;
1543   uint8_t fsm16_en                 : 1;
1544 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1545   uint8_t fsm16_en                 : 1;
1546   uint8_t fsm15_en                 : 1;
1547   uint8_t fsm14_en                 : 1;
1548   uint8_t fsm13_en                 : 1;
1549   uint8_t fsm12_en                 : 1;
1550   uint8_t fsm11_en                 : 1;
1551   uint8_t fsm10_en                 : 1;
1552   uint8_t fsm9_en                  : 1;
1553 #endif /* DRV_BYTE_ORDER */
1554 } lsm6dsrx_fsm_enable_b_t;
1555 
1556 #define LSM6DSRX_FSM_LONG_COUNTER_L           0x48U
1557 #define LSM6DSRX_FSM_LONG_COUNTER_H           0x49U
1558 #define LSM6DSRX_FSM_LONG_COUNTER_CLEAR       0x4AU
1559 typedef struct
1560 {
1561 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1562   uint8_t fsm_lc_clr               : 2;  /* fsm_lc_cleared + fsm_lc_clear */
1563   uint8_t not_used_01              : 6;
1564 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1565   uint8_t not_used_01              : 6;
1566   uint8_t fsm_lc_clr               : 2;  /* fsm_lc_cleared + fsm_lc_clear */
1567 #endif /* DRV_BYTE_ORDER */
1568 } lsm6dsrx_fsm_long_counter_clear_t;
1569 
1570 #define LSM6DSRX_FSM_OUTS1                    0x4CU
1571 typedef struct
1572 {
1573 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1574   uint8_t n_v                      : 1;
1575   uint8_t p_v                      : 1;
1576   uint8_t n_z                      : 1;
1577   uint8_t p_z                      : 1;
1578   uint8_t n_y                      : 1;
1579   uint8_t p_y                      : 1;
1580   uint8_t n_x                      : 1;
1581   uint8_t p_x                      : 1;
1582 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1583   uint8_t p_x                      : 1;
1584   uint8_t n_x                      : 1;
1585   uint8_t p_y                      : 1;
1586   uint8_t n_y                      : 1;
1587   uint8_t p_z                      : 1;
1588   uint8_t n_z                      : 1;
1589   uint8_t p_v                      : 1;
1590   uint8_t n_v                      : 1;
1591 #endif /* DRV_BYTE_ORDER */
1592 } lsm6dsrx_fsm_outs1_t;
1593 
1594 #define LSM6DSRX_FSM_OUTS2                    0x4DU
1595 typedef struct
1596 {
1597 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1598   uint8_t n_v                      : 1;
1599   uint8_t p_v                      : 1;
1600   uint8_t n_z                      : 1;
1601   uint8_t p_z                      : 1;
1602   uint8_t n_y                      : 1;
1603   uint8_t p_y                      : 1;
1604   uint8_t n_x                      : 1;
1605   uint8_t p_x                      : 1;
1606 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1607   uint8_t p_x                      : 1;
1608   uint8_t n_x                      : 1;
1609   uint8_t p_y                      : 1;
1610   uint8_t n_y                      : 1;
1611   uint8_t p_z                      : 1;
1612   uint8_t n_z                      : 1;
1613   uint8_t p_v                      : 1;
1614   uint8_t n_v                      : 1;
1615 #endif /* DRV_BYTE_ORDER */
1616 } lsm6dsrx_fsm_outs2_t;
1617 
1618 #define LSM6DSRX_FSM_OUTS3                    0x4EU
1619 typedef struct
1620 {
1621 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1622   uint8_t n_v                      : 1;
1623   uint8_t p_v                      : 1;
1624   uint8_t n_z                      : 1;
1625   uint8_t p_z                      : 1;
1626   uint8_t n_y                      : 1;
1627   uint8_t p_y                      : 1;
1628   uint8_t n_x                      : 1;
1629   uint8_t p_x                      : 1;
1630 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1631   uint8_t p_x                      : 1;
1632   uint8_t n_x                      : 1;
1633   uint8_t p_y                      : 1;
1634   uint8_t n_y                      : 1;
1635   uint8_t p_z                      : 1;
1636   uint8_t n_z                      : 1;
1637   uint8_t p_v                      : 1;
1638   uint8_t n_v                      : 1;
1639 #endif /* DRV_BYTE_ORDER */
1640 } lsm6dsrx_fsm_outs3_t;
1641 
1642 #define LSM6DSRX_FSM_OUTS4                    0x4FU
1643 typedef struct
1644 {
1645 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1646   uint8_t n_v                      : 1;
1647   uint8_t p_v                      : 1;
1648   uint8_t n_z                      : 1;
1649   uint8_t p_z                      : 1;
1650   uint8_t n_y                      : 1;
1651   uint8_t p_y                      : 1;
1652   uint8_t n_x                      : 1;
1653   uint8_t p_x                      : 1;
1654 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1655   uint8_t p_x                      : 1;
1656   uint8_t n_x                      : 1;
1657   uint8_t p_y                      : 1;
1658   uint8_t n_y                      : 1;
1659   uint8_t p_z                      : 1;
1660   uint8_t n_z                      : 1;
1661   uint8_t p_v                      : 1;
1662   uint8_t n_v                      : 1;
1663 #endif /* DRV_BYTE_ORDER */
1664 } lsm6dsrx_fsm_outs4_t;
1665 
1666 #define LSM6DSRX_FSM_OUTS5                    0x50U
1667 typedef struct
1668 {
1669 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1670   uint8_t n_v                      : 1;
1671   uint8_t p_v                      : 1;
1672   uint8_t n_z                      : 1;
1673   uint8_t p_z                      : 1;
1674   uint8_t n_y                      : 1;
1675   uint8_t p_y                      : 1;
1676   uint8_t n_x                      : 1;
1677   uint8_t p_x                      : 1;
1678 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1679   uint8_t p_x                      : 1;
1680   uint8_t n_x                      : 1;
1681   uint8_t p_y                      : 1;
1682   uint8_t n_y                      : 1;
1683   uint8_t p_z                      : 1;
1684   uint8_t n_z                      : 1;
1685   uint8_t p_v                      : 1;
1686   uint8_t n_v                      : 1;
1687 #endif /* DRV_BYTE_ORDER */
1688 } lsm6dsrx_fsm_outs5_t;
1689 
1690 #define LSM6DSRX_FSM_OUTS6                    0x51U
1691 typedef struct
1692 {
1693 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1694   uint8_t n_v                      : 1;
1695   uint8_t p_v                      : 1;
1696   uint8_t n_z                      : 1;
1697   uint8_t p_z                      : 1;
1698   uint8_t n_y                      : 1;
1699   uint8_t p_y                      : 1;
1700   uint8_t n_x                      : 1;
1701   uint8_t p_x                      : 1;
1702 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1703   uint8_t p_x                      : 1;
1704   uint8_t n_x                      : 1;
1705   uint8_t p_y                      : 1;
1706   uint8_t n_y                      : 1;
1707   uint8_t p_z                      : 1;
1708   uint8_t n_z                      : 1;
1709   uint8_t p_v                      : 1;
1710   uint8_t n_v                      : 1;
1711 #endif /* DRV_BYTE_ORDER */
1712 } lsm6dsrx_fsm_outs6_t;
1713 
1714 #define LSM6DSRX_FSM_OUTS7                    0x52U
1715 typedef struct
1716 {
1717 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1718   uint8_t n_v                      : 1;
1719   uint8_t p_v                      : 1;
1720   uint8_t n_z                      : 1;
1721   uint8_t p_z                      : 1;
1722   uint8_t n_y                      : 1;
1723   uint8_t p_y                      : 1;
1724   uint8_t n_x                      : 1;
1725   uint8_t p_x                      : 1;
1726 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1727   uint8_t p_x                      : 1;
1728   uint8_t n_x                      : 1;
1729   uint8_t p_y                      : 1;
1730   uint8_t n_y                      : 1;
1731   uint8_t p_z                      : 1;
1732   uint8_t n_z                      : 1;
1733   uint8_t p_v                      : 1;
1734   uint8_t n_v                      : 1;
1735 #endif /* DRV_BYTE_ORDER */
1736 } lsm6dsrx_fsm_outs7_t;
1737 
1738 #define LSM6DSRX_FSM_OUTS8                    0x53U
1739 typedef struct
1740 {
1741 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1742   uint8_t n_v                      : 1;
1743   uint8_t p_v                      : 1;
1744   uint8_t n_z                      : 1;
1745   uint8_t p_z                      : 1;
1746   uint8_t n_y                      : 1;
1747   uint8_t p_y                      : 1;
1748   uint8_t n_x                      : 1;
1749   uint8_t p_x                      : 1;
1750 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1751   uint8_t p_x                      : 1;
1752   uint8_t n_x                      : 1;
1753   uint8_t p_y                      : 1;
1754   uint8_t n_y                      : 1;
1755   uint8_t p_z                      : 1;
1756   uint8_t n_z                      : 1;
1757   uint8_t p_v                      : 1;
1758   uint8_t n_v                      : 1;
1759 #endif /* DRV_BYTE_ORDER */
1760 } lsm6dsrx_fsm_outs8_t;
1761 
1762 #define LSM6DSRX_FSM_OUTS9                    0x54U
1763 typedef struct
1764 {
1765 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1766   uint8_t n_v                      : 1;
1767   uint8_t p_v                      : 1;
1768   uint8_t n_z                      : 1;
1769   uint8_t p_z                      : 1;
1770   uint8_t n_y                      : 1;
1771   uint8_t p_y                      : 1;
1772   uint8_t n_x                      : 1;
1773   uint8_t p_x                      : 1;
1774 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1775   uint8_t p_x                      : 1;
1776   uint8_t n_x                      : 1;
1777   uint8_t p_y                      : 1;
1778   uint8_t n_y                      : 1;
1779   uint8_t p_z                      : 1;
1780   uint8_t n_z                      : 1;
1781   uint8_t p_v                      : 1;
1782   uint8_t n_v                      : 1;
1783 #endif /* DRV_BYTE_ORDER */
1784 } lsm6dsrx_fsm_outs9_t;
1785 
1786 #define LSM6DSRX_FSM_OUTS10                   0x55U
1787 typedef struct
1788 {
1789 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1790   uint8_t n_v                      : 1;
1791   uint8_t p_v                      : 1;
1792   uint8_t n_z                      : 1;
1793   uint8_t p_z                      : 1;
1794   uint8_t n_y                      : 1;
1795   uint8_t p_y                      : 1;
1796   uint8_t n_x                      : 1;
1797   uint8_t p_x                      : 1;
1798 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1799   uint8_t p_x                      : 1;
1800   uint8_t n_x                      : 1;
1801   uint8_t p_y                      : 1;
1802   uint8_t n_y                      : 1;
1803   uint8_t p_z                      : 1;
1804   uint8_t n_z                      : 1;
1805   uint8_t p_v                      : 1;
1806   uint8_t n_v                      : 1;
1807 #endif /* DRV_BYTE_ORDER */
1808 } lsm6dsrx_fsm_outs10_t;
1809 
1810 #define LSM6DSRX_FSM_OUTS11                   0x56U
1811 typedef struct
1812 {
1813 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1814   uint8_t n_v                      : 1;
1815   uint8_t p_v                      : 1;
1816   uint8_t n_z                      : 1;
1817   uint8_t p_z                      : 1;
1818   uint8_t n_y                      : 1;
1819   uint8_t p_y                      : 1;
1820   uint8_t n_x                      : 1;
1821   uint8_t p_x                      : 1;
1822 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1823   uint8_t p_x                      : 1;
1824   uint8_t n_x                      : 1;
1825   uint8_t p_y                      : 1;
1826   uint8_t n_y                      : 1;
1827   uint8_t p_z                      : 1;
1828   uint8_t n_z                      : 1;
1829   uint8_t p_v                      : 1;
1830   uint8_t n_v                      : 1;
1831 #endif /* DRV_BYTE_ORDER */
1832 } lsm6dsrx_fsm_outs11_t;
1833 
1834 #define LSM6DSRX_FSM_OUTS12                   0x57U
1835 typedef struct
1836 {
1837 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1838   uint8_t n_v                      : 1;
1839   uint8_t p_v                      : 1;
1840   uint8_t n_z                      : 1;
1841   uint8_t p_z                      : 1;
1842   uint8_t n_y                      : 1;
1843   uint8_t p_y                      : 1;
1844   uint8_t n_x                      : 1;
1845   uint8_t p_x                      : 1;
1846 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1847   uint8_t p_x                      : 1;
1848   uint8_t n_x                      : 1;
1849   uint8_t p_y                      : 1;
1850   uint8_t n_y                      : 1;
1851   uint8_t p_z                      : 1;
1852   uint8_t n_z                      : 1;
1853   uint8_t p_v                      : 1;
1854   uint8_t n_v                      : 1;
1855 #endif /* DRV_BYTE_ORDER */
1856 } lsm6dsrx_fsm_outs12_t;
1857 
1858 #define LSM6DSRX_FSM_OUTS13                   0x58U
1859 typedef struct
1860 {
1861 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1862   uint8_t n_v                      : 1;
1863   uint8_t p_v                      : 1;
1864   uint8_t n_z                      : 1;
1865   uint8_t p_z                      : 1;
1866   uint8_t n_y                      : 1;
1867   uint8_t p_y                      : 1;
1868   uint8_t n_x                      : 1;
1869   uint8_t p_x                      : 1;
1870 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1871   uint8_t p_x                      : 1;
1872   uint8_t n_x                      : 1;
1873   uint8_t p_y                      : 1;
1874   uint8_t n_y                      : 1;
1875   uint8_t p_z                      : 1;
1876   uint8_t n_z                      : 1;
1877   uint8_t p_v                      : 1;
1878   uint8_t n_v                      : 1;
1879 #endif /* DRV_BYTE_ORDER */
1880 } lsm6dsrx_fsm_outs13_t;
1881 
1882 #define LSM6DSRX_FSM_OUTS14                   0x59U
1883 typedef struct
1884 {
1885 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1886   uint8_t n_v                      : 1;
1887   uint8_t p_v                      : 1;
1888   uint8_t n_z                      : 1;
1889   uint8_t p_z                      : 1;
1890   uint8_t n_y                      : 1;
1891   uint8_t p_y                      : 1;
1892   uint8_t n_x                      : 1;
1893   uint8_t p_x                      : 1;
1894 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1895   uint8_t p_x                      : 1;
1896   uint8_t n_x                      : 1;
1897   uint8_t p_y                      : 1;
1898   uint8_t n_y                      : 1;
1899   uint8_t p_z                      : 1;
1900   uint8_t n_z                      : 1;
1901   uint8_t p_v                      : 1;
1902   uint8_t n_v                      : 1;
1903 #endif /* DRV_BYTE_ORDER */
1904 } lsm6dsrx_fsm_outs14_t;
1905 
1906 #define LSM6DSRX_FSM_OUTS15                   0x5AU
1907 typedef struct
1908 {
1909 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1910   uint8_t n_v                      : 1;
1911   uint8_t p_v                      : 1;
1912   uint8_t n_z                      : 1;
1913   uint8_t p_z                      : 1;
1914   uint8_t n_y                      : 1;
1915   uint8_t p_y                      : 1;
1916   uint8_t n_x                      : 1;
1917   uint8_t p_x                      : 1;
1918 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1919   uint8_t p_x                      : 1;
1920   uint8_t n_x                      : 1;
1921   uint8_t p_y                      : 1;
1922   uint8_t n_y                      : 1;
1923   uint8_t p_z                      : 1;
1924   uint8_t n_z                      : 1;
1925   uint8_t p_v                      : 1;
1926   uint8_t n_v                      : 1;
1927 #endif /* DRV_BYTE_ORDER */
1928 } lsm6dsrx_fsm_outs15_t;
1929 
1930 #define LSM6DSRX_FSM_OUTS16                   0x5BU
1931 typedef struct
1932 {
1933 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1934   uint8_t n_v                      : 1;
1935   uint8_t p_v                      : 1;
1936   uint8_t n_z                      : 1;
1937   uint8_t p_z                      : 1;
1938   uint8_t n_y                      : 1;
1939   uint8_t p_y                      : 1;
1940   uint8_t n_x                      : 1;
1941   uint8_t p_x                      : 1;
1942 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1943   uint8_t p_x                      : 1;
1944   uint8_t n_x                      : 1;
1945   uint8_t p_y                      : 1;
1946   uint8_t n_y                      : 1;
1947   uint8_t p_z                      : 1;
1948   uint8_t n_z                      : 1;
1949   uint8_t p_v                      : 1;
1950   uint8_t n_v                      : 1;
1951 #endif /* DRV_BYTE_ORDER */
1952 } lsm6dsrx_fsm_outs16_t;
1953 
1954 #define LSM6DSRX_EMB_FUNC_ODR_CFG_B           0x5FU
1955 typedef struct
1956 {
1957 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1958   uint8_t not_used_01              : 3;
1959   uint8_t fsm_odr                  : 2;
1960   uint8_t not_used_02              : 3;
1961 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1962   uint8_t not_used_02              : 3;
1963   uint8_t fsm_odr                  : 2;
1964   uint8_t not_used_01              : 3;
1965 #endif /* DRV_BYTE_ORDER */
1966 } lsm6dsrx_emb_func_odr_cfg_b_t;
1967 
1968 #define LSM6DSRX_EMB_FUNC_ODR_CFG_C           0x60U
1969 typedef struct
1970 {
1971 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1972   uint8_t not_used_01             : 4;
1973   uint8_t mlc_odr                 : 2;
1974   uint8_t not_used_02             : 2;
1975 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1976   uint8_t not_used_02             : 2;
1977   uint8_t mlc_odr                 : 2;
1978   uint8_t not_used_01             : 4;
1979 #endif /* DRV_BYTE_ORDER */
1980 } lsm6dsrx_emb_func_odr_cfg_c_t;
1981 
1982 #define LSM6DSRX_STEP_COUNTER_L               0x62U
1983 #define LSM6DSRX_STEP_COUNTER_H               0x63U
1984 #define LSM6DSRX_EMB_FUNC_SRC                 0x64U
1985 typedef struct
1986 {
1987 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
1988   uint8_t not_used_01              : 2;
1989   uint8_t stepcounter_bit_set      : 1;
1990   uint8_t step_overflow            : 1;
1991   uint8_t step_count_delta_ia      : 1;
1992   uint8_t step_detected            : 1;
1993   uint8_t not_used_02              : 1;
1994   uint8_t pedo_rst_step            : 1;
1995 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
1996   uint8_t pedo_rst_step            : 1;
1997   uint8_t not_used_02              : 1;
1998   uint8_t step_detected            : 1;
1999   uint8_t step_count_delta_ia      : 1;
2000   uint8_t step_overflow            : 1;
2001   uint8_t stepcounter_bit_set      : 1;
2002   uint8_t not_used_01              : 2;
2003 #endif /* DRV_BYTE_ORDER */
2004 } lsm6dsrx_emb_func_src_t;
2005 
2006 #define LSM6DSRX_EMB_FUNC_INIT_A              0x66U
2007 typedef struct
2008 {
2009 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2010   uint8_t not_used_01               : 3;
2011   uint8_t step_det_init             : 1;
2012   uint8_t tilt_init                 : 1;
2013   uint8_t sig_mot_init              : 1;
2014   uint8_t not_used_02               : 2;
2015 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2016   uint8_t not_used_02               : 2;
2017   uint8_t sig_mot_init              : 1;
2018   uint8_t tilt_init                 : 1;
2019   uint8_t step_det_init             : 1;
2020   uint8_t not_used_01               : 3;
2021 #endif /* DRV_BYTE_ORDER */
2022 } lsm6dsrx_emb_func_init_a_t;
2023 
2024 #define LSM6DSRX_EMB_FUNC_INIT_B              0x67U
2025 typedef struct
2026 {
2027 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2028   uint8_t fsm_init                 : 1;
2029   uint8_t not_used_01              : 2;
2030   uint8_t fifo_compr_init          : 1;
2031   uint8_t mlc_init                 : 1;
2032   uint8_t not_used_02              : 3;
2033 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2034   uint8_t not_used_02              : 3;
2035   uint8_t mlc_init                 : 1;
2036   uint8_t fifo_compr_init          : 1;
2037   uint8_t not_used_01              : 2;
2038   uint8_t fsm_init                 : 1;
2039 #endif /* DRV_BYTE_ORDER */
2040 } lsm6dsrx_emb_func_init_b_t;
2041 
2042 #define LSM6DSRX_MLC0_SRC                     0x70U
2043 #define LSM6DSRX_MLC1_SRC                     0x71U
2044 #define LSM6DSRX_MLC2_SRC                     0x72U
2045 #define LSM6DSRX_MLC3_SRC                     0x73U
2046 #define LSM6DSRX_MLC4_SRC                     0x74U
2047 #define LSM6DSRX_MLC5_SRC                     0x75U
2048 #define LSM6DSRX_MLC6_SRC                     0x76U
2049 #define LSM6DSRX_MLC7_SRC                     0x77U
2050 
2051 /** @defgroup bitfields page 0 and 1
2052   * @{
2053   *
2054   */
2055 #define LSM6DSRX_MAG_SENSITIVITY_L            0xBAU
2056 #define LSM6DSRX_MAG_SENSITIVITY_H            0xBBU
2057 #define LSM6DSRX_MAG_OFFX_L                   0xC0U
2058 #define LSM6DSRX_MAG_OFFX_H                   0xC1U
2059 #define LSM6DSRX_MAG_OFFY_L                   0xC2U
2060 #define LSM6DSRX_MAG_OFFY_H                   0xC3U
2061 #define LSM6DSRX_MAG_OFFZ_L                   0xC4U
2062 #define LSM6DSRX_MAG_OFFZ_H                   0xC5U
2063 #define LSM6DSRX_MAG_SI_XX_L                  0xC6U
2064 #define LSM6DSRX_MAG_SI_XX_H                  0xC7U
2065 #define LSM6DSRX_MAG_SI_XY_L                  0xC8U
2066 #define LSM6DSRX_MAG_SI_XY_H                  0xC9U
2067 #define LSM6DSRX_MAG_SI_XZ_L                  0xCAU
2068 #define LSM6DSRX_MAG_SI_XZ_H                  0xCBU
2069 #define LSM6DSRX_MAG_SI_YY_L                  0xCCU
2070 #define LSM6DSRX_MAG_SI_YY_H                  0xCDU
2071 #define LSM6DSRX_MAG_SI_YZ_L                  0xCEU
2072 #define LSM6DSRX_MAG_SI_YZ_H                  0xCFU
2073 #define LSM6DSRX_MAG_SI_ZZ_L                  0xD0U
2074 #define LSM6DSRX_MAG_SI_ZZ_H                  0xD1U
2075 #define LSM6DSRX_MAG_CFG_A                    0xD4U
2076 typedef struct
2077 {
2078 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2079   uint8_t mag_z_axis               : 3;
2080   uint8_t not_used_01              : 1;
2081   uint8_t mag_y_axis               : 3;
2082   uint8_t not_used_02              : 1;
2083 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2084   uint8_t not_used_02              : 1;
2085   uint8_t mag_y_axis               : 3;
2086   uint8_t not_used_01              : 1;
2087   uint8_t mag_z_axis               : 3;
2088 #endif /* DRV_BYTE_ORDER */
2089 } lsm6dsrx_mag_cfg_a_t;
2090 
2091 #define LSM6DSRX_MAG_CFG_B                    0xD5U
2092 typedef struct
2093 {
2094 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2095   uint8_t mag_x_axis               : 3;
2096   uint8_t not_used_01              : 5;
2097 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2098   uint8_t not_used_01              : 5;
2099   uint8_t mag_x_axis               : 3;
2100 #endif /* DRV_BYTE_ORDER */
2101 } lsm6dsrx_mag_cfg_b_t;
2102 
2103 #define LSM6DSRX_FSM_LC_TIMEOUT_L             0x17AU
2104 #define LSM6DSRX_FSM_LC_TIMEOUT_H             0x17BU
2105 #define LSM6DSRX_FSM_PROGRAMS                 0x17CU
2106 #define LSM6DSRX_FSM_START_ADD_L              0x17EU
2107 #define LSM6DSRX_FSM_START_ADD_H              0x17FU
2108 #define LSM6DSRX_PEDO_CMD_REG                 0x183U
2109 typedef struct
2110 {
2111 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2112   uint8_t not_used_01              : 3;
2113   uint8_t carry_count_en           : 1;
2114   uint8_t not_used_02              : 4;
2115 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2116   uint8_t not_used_02              : 4;
2117   uint8_t carry_count_en           : 1;
2118   uint8_t not_used_01              : 3;
2119 #endif /* DRV_BYTE_ORDER */
2120 } lsm6dsrx_pedo_cmd_reg_t;
2121 
2122 #define LSM6DSRX_PEDO_DEB_STEPS_CONF          0x184U
2123 #define LSM6DSRX_PEDO_SC_DELTAT_L             0x1D0U
2124 #define LSM6DSRX_PEDO_SC_DELTAT_H             0x1D1U
2125 #define LSM6DSRX_MLC_MAG_SENSITIVITY_L        0x1E8U
2126 #define LSM6DSRX_MLC_MAG_SENSITIVITY_H        0x1E9U
2127 
2128 /**
2129   * @}
2130   *
2131   */
2132 
2133 /** @defgroup bitfields page sensor_hub
2134   * @{
2135   *
2136   */
2137 
2138 #define LSM6DSRX_SENSOR_HUB_1                 0x02U
2139 typedef struct
2140 {
2141 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2142   uint8_t bit0                    : 1;
2143   uint8_t bit1                    : 1;
2144   uint8_t bit2                    : 1;
2145   uint8_t bit3                    : 1;
2146   uint8_t bit4                    : 1;
2147   uint8_t bit5                    : 1;
2148   uint8_t bit6                    : 1;
2149   uint8_t bit7                    : 1;
2150 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2151   uint8_t bit7                    : 1;
2152   uint8_t bit6                    : 1;
2153   uint8_t bit5                    : 1;
2154   uint8_t bit4                    : 1;
2155   uint8_t bit3                    : 1;
2156   uint8_t bit2                    : 1;
2157   uint8_t bit1                    : 1;
2158   uint8_t bit0                    : 1;
2159 #endif /* DRV_BYTE_ORDER */
2160 } lsm6dsrx_sensor_hub_1_t;
2161 
2162 #define LSM6DSRX_SENSOR_HUB_2                 0x03U
2163 typedef struct
2164 {
2165 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2166   uint8_t bit0                    : 1;
2167   uint8_t bit1                    : 1;
2168   uint8_t bit2                    : 1;
2169   uint8_t bit3                    : 1;
2170   uint8_t bit4                    : 1;
2171   uint8_t bit5                    : 1;
2172   uint8_t bit6                    : 1;
2173   uint8_t bit7                    : 1;
2174 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2175   uint8_t bit7                    : 1;
2176   uint8_t bit6                    : 1;
2177   uint8_t bit5                    : 1;
2178   uint8_t bit4                    : 1;
2179   uint8_t bit3                    : 1;
2180   uint8_t bit2                    : 1;
2181   uint8_t bit1                    : 1;
2182   uint8_t bit0                    : 1;
2183 #endif /* DRV_BYTE_ORDER */
2184 } lsm6dsrx_sensor_hub_2_t;
2185 
2186 #define LSM6DSRX_SENSOR_HUB_3                 0x04U
2187 typedef struct
2188 {
2189 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2190   uint8_t bit0                    : 1;
2191   uint8_t bit1                    : 1;
2192   uint8_t bit2                    : 1;
2193   uint8_t bit3                    : 1;
2194   uint8_t bit4                    : 1;
2195   uint8_t bit5                    : 1;
2196   uint8_t bit6                    : 1;
2197   uint8_t bit7                    : 1;
2198 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2199   uint8_t bit7                    : 1;
2200   uint8_t bit6                    : 1;
2201   uint8_t bit5                    : 1;
2202   uint8_t bit4                    : 1;
2203   uint8_t bit3                    : 1;
2204   uint8_t bit2                    : 1;
2205   uint8_t bit1                    : 1;
2206   uint8_t bit0                    : 1;
2207 #endif /* DRV_BYTE_ORDER */
2208 } lsm6dsrx_sensor_hub_3_t;
2209 
2210 #define LSM6DSRX_SENSOR_HUB_4                 0x05U
2211 typedef struct
2212 {
2213 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2214   uint8_t bit0                    : 1;
2215   uint8_t bit1                    : 1;
2216   uint8_t bit2                    : 1;
2217   uint8_t bit3                    : 1;
2218   uint8_t bit4                    : 1;
2219   uint8_t bit5                    : 1;
2220   uint8_t bit6                    : 1;
2221   uint8_t bit7                    : 1;
2222 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2223   uint8_t bit7                    : 1;
2224   uint8_t bit6                    : 1;
2225   uint8_t bit5                    : 1;
2226   uint8_t bit4                    : 1;
2227   uint8_t bit3                    : 1;
2228   uint8_t bit2                    : 1;
2229   uint8_t bit1                    : 1;
2230   uint8_t bit0                    : 1;
2231 #endif /* DRV_BYTE_ORDER */
2232 } lsm6dsrx_sensor_hub_4_t;
2233 
2234 #define LSM6DSRX_SENSOR_HUB_5                 0x06U
2235 typedef struct
2236 {
2237 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2238   uint8_t bit0                    : 1;
2239   uint8_t bit1                    : 1;
2240   uint8_t bit2                    : 1;
2241   uint8_t bit3                    : 1;
2242   uint8_t bit4                    : 1;
2243   uint8_t bit5                    : 1;
2244   uint8_t bit6                    : 1;
2245   uint8_t bit7                    : 1;
2246 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2247   uint8_t bit7                    : 1;
2248   uint8_t bit6                    : 1;
2249   uint8_t bit5                    : 1;
2250   uint8_t bit4                    : 1;
2251   uint8_t bit3                    : 1;
2252   uint8_t bit2                    : 1;
2253   uint8_t bit1                    : 1;
2254   uint8_t bit0                    : 1;
2255 #endif /* DRV_BYTE_ORDER */
2256 } lsm6dsrx_sensor_hub_5_t;
2257 
2258 #define LSM6DSRX_SENSOR_HUB_6                 0x07U
2259 typedef struct
2260 {
2261 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2262   uint8_t bit0                    : 1;
2263   uint8_t bit1                    : 1;
2264   uint8_t bit2                    : 1;
2265   uint8_t bit3                    : 1;
2266   uint8_t bit4                    : 1;
2267   uint8_t bit5                    : 1;
2268   uint8_t bit6                    : 1;
2269   uint8_t bit7                    : 1;
2270 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2271   uint8_t bit7                    : 1;
2272   uint8_t bit6                    : 1;
2273   uint8_t bit5                    : 1;
2274   uint8_t bit4                    : 1;
2275   uint8_t bit3                    : 1;
2276   uint8_t bit2                    : 1;
2277   uint8_t bit1                    : 1;
2278   uint8_t bit0                    : 1;
2279 #endif /* DRV_BYTE_ORDER */
2280 } lsm6dsrx_sensor_hub_6_t;
2281 
2282 #define LSM6DSRX_SENSOR_HUB_7                 0x08U
2283 typedef struct
2284 {
2285 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2286   uint8_t bit0                    : 1;
2287   uint8_t bit1                    : 1;
2288   uint8_t bit2                    : 1;
2289   uint8_t bit3                    : 1;
2290   uint8_t bit4                    : 1;
2291   uint8_t bit5                    : 1;
2292   uint8_t bit6                    : 1;
2293   uint8_t bit7                    : 1;
2294 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2295   uint8_t bit7                    : 1;
2296   uint8_t bit6                    : 1;
2297   uint8_t bit5                    : 1;
2298   uint8_t bit4                    : 1;
2299   uint8_t bit3                    : 1;
2300   uint8_t bit2                    : 1;
2301   uint8_t bit1                    : 1;
2302   uint8_t bit0                    : 1;
2303 #endif /* DRV_BYTE_ORDER */
2304 } lsm6dsrx_sensor_hub_7_t;
2305 
2306 #define LSM6DSRX_SENSOR_HUB_8                 0x09U
2307 typedef struct
2308 {
2309 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2310   uint8_t bit0                    : 1;
2311   uint8_t bit1                    : 1;
2312   uint8_t bit2                    : 1;
2313   uint8_t bit3                    : 1;
2314   uint8_t bit4                    : 1;
2315   uint8_t bit5                    : 1;
2316   uint8_t bit6                    : 1;
2317   uint8_t bit7                    : 1;
2318 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2319   uint8_t bit7                    : 1;
2320   uint8_t bit6                    : 1;
2321   uint8_t bit5                    : 1;
2322   uint8_t bit4                    : 1;
2323   uint8_t bit3                    : 1;
2324   uint8_t bit2                    : 1;
2325   uint8_t bit1                    : 1;
2326   uint8_t bit0                    : 1;
2327 #endif /* DRV_BYTE_ORDER */
2328 } lsm6dsrx_sensor_hub_8_t;
2329 
2330 #define LSM6DSRX_SENSOR_HUB_9                 0x0AU
2331 typedef struct
2332 {
2333 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2334   uint8_t bit0                    : 1;
2335   uint8_t bit1                    : 1;
2336   uint8_t bit2                    : 1;
2337   uint8_t bit3                    : 1;
2338   uint8_t bit4                    : 1;
2339   uint8_t bit5                    : 1;
2340   uint8_t bit6                    : 1;
2341   uint8_t bit7                    : 1;
2342 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2343   uint8_t bit7                    : 1;
2344   uint8_t bit6                    : 1;
2345   uint8_t bit5                    : 1;
2346   uint8_t bit4                    : 1;
2347   uint8_t bit3                    : 1;
2348   uint8_t bit2                    : 1;
2349   uint8_t bit1                    : 1;
2350   uint8_t bit0                    : 1;
2351 #endif /* DRV_BYTE_ORDER */
2352 } lsm6dsrx_sensor_hub_9_t;
2353 
2354 #define LSM6DSRX_SENSOR_HUB_10                0x0BU
2355 typedef struct
2356 {
2357 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2358   uint8_t bit0                    : 1;
2359   uint8_t bit1                    : 1;
2360   uint8_t bit2                    : 1;
2361   uint8_t bit3                    : 1;
2362   uint8_t bit4                    : 1;
2363   uint8_t bit5                    : 1;
2364   uint8_t bit6                    : 1;
2365   uint8_t bit7                    : 1;
2366 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2367   uint8_t bit7                    : 1;
2368   uint8_t bit6                    : 1;
2369   uint8_t bit5                    : 1;
2370   uint8_t bit4                    : 1;
2371   uint8_t bit3                    : 1;
2372   uint8_t bit2                    : 1;
2373   uint8_t bit1                    : 1;
2374   uint8_t bit0                    : 1;
2375 #endif /* DRV_BYTE_ORDER */
2376 } lsm6dsrx_sensor_hub_10_t;
2377 
2378 #define LSM6DSRX_SENSOR_HUB_11                0x0CU
2379 typedef struct
2380 {
2381 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2382   uint8_t bit0                    : 1;
2383   uint8_t bit1                    : 1;
2384   uint8_t bit2                    : 1;
2385   uint8_t bit3                    : 1;
2386   uint8_t bit4                    : 1;
2387   uint8_t bit5                    : 1;
2388   uint8_t bit6                    : 1;
2389   uint8_t bit7                    : 1;
2390 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2391   uint8_t bit7                    : 1;
2392   uint8_t bit6                    : 1;
2393   uint8_t bit5                    : 1;
2394   uint8_t bit4                    : 1;
2395   uint8_t bit3                    : 1;
2396   uint8_t bit2                    : 1;
2397   uint8_t bit1                    : 1;
2398   uint8_t bit0                    : 1;
2399 #endif /* DRV_BYTE_ORDER */
2400 } lsm6dsrx_sensor_hub_11_t;
2401 
2402 #define LSM6DSRX_SENSOR_HUB_12                0x0DU
2403 typedef struct
2404 {
2405 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2406   uint8_t bit0                    : 1;
2407   uint8_t bit1                    : 1;
2408   uint8_t bit2                    : 1;
2409   uint8_t bit3                    : 1;
2410   uint8_t bit4                    : 1;
2411   uint8_t bit5                    : 1;
2412   uint8_t bit6                    : 1;
2413   uint8_t bit7                    : 1;
2414 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2415   uint8_t bit7                    : 1;
2416   uint8_t bit6                    : 1;
2417   uint8_t bit5                    : 1;
2418   uint8_t bit4                    : 1;
2419   uint8_t bit3                    : 1;
2420   uint8_t bit2                    : 1;
2421   uint8_t bit1                    : 1;
2422   uint8_t bit0                    : 1;
2423 #endif /* DRV_BYTE_ORDER */
2424 } lsm6dsrx_sensor_hub_12_t;
2425 
2426 #define LSM6DSRX_SENSOR_HUB_13                0x0EU
2427 typedef struct
2428 {
2429 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2430   uint8_t bit0                    : 1;
2431   uint8_t bit1                    : 1;
2432   uint8_t bit2                    : 1;
2433   uint8_t bit3                    : 1;
2434   uint8_t bit4                    : 1;
2435   uint8_t bit5                    : 1;
2436   uint8_t bit6                    : 1;
2437   uint8_t bit7                    : 1;
2438 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2439   uint8_t bit7                    : 1;
2440   uint8_t bit6                    : 1;
2441   uint8_t bit5                    : 1;
2442   uint8_t bit4                    : 1;
2443   uint8_t bit3                    : 1;
2444   uint8_t bit2                    : 1;
2445   uint8_t bit1                    : 1;
2446   uint8_t bit0                    : 1;
2447 #endif /* DRV_BYTE_ORDER */
2448 } lsm6dsrx_sensor_hub_13_t;
2449 
2450 #define LSM6DSRX_SENSOR_HUB_14                0x0FU
2451 typedef struct
2452 {
2453 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2454   uint8_t bit0                    : 1;
2455   uint8_t bit1                    : 1;
2456   uint8_t bit2                    : 1;
2457   uint8_t bit3                    : 1;
2458   uint8_t bit4                    : 1;
2459   uint8_t bit5                    : 1;
2460   uint8_t bit6                    : 1;
2461   uint8_t bit7                    : 1;
2462 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2463   uint8_t bit7                    : 1;
2464   uint8_t bit6                    : 1;
2465   uint8_t bit5                    : 1;
2466   uint8_t bit4                    : 1;
2467   uint8_t bit3                    : 1;
2468   uint8_t bit2                    : 1;
2469   uint8_t bit1                    : 1;
2470   uint8_t bit0                    : 1;
2471 #endif /* DRV_BYTE_ORDER */
2472 } lsm6dsrx_sensor_hub_14_t;
2473 
2474 #define LSM6DSRX_SENSOR_HUB_15                0x10U
2475 typedef struct
2476 {
2477 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2478   uint8_t bit0                    : 1;
2479   uint8_t bit1                    : 1;
2480   uint8_t bit2                    : 1;
2481   uint8_t bit3                    : 1;
2482   uint8_t bit4                    : 1;
2483   uint8_t bit5                    : 1;
2484   uint8_t bit6                    : 1;
2485   uint8_t bit7                    : 1;
2486 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2487   uint8_t bit7                    : 1;
2488   uint8_t bit6                    : 1;
2489   uint8_t bit5                    : 1;
2490   uint8_t bit4                    : 1;
2491   uint8_t bit3                    : 1;
2492   uint8_t bit2                    : 1;
2493   uint8_t bit1                    : 1;
2494   uint8_t bit0                    : 1;
2495 #endif /* DRV_BYTE_ORDER */
2496 } lsm6dsrx_sensor_hub_15_t;
2497 
2498 #define LSM6DSRX_SENSOR_HUB_16                0x11U
2499 typedef struct
2500 {
2501 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2502   uint8_t bit0                    : 1;
2503   uint8_t bit1                    : 1;
2504   uint8_t bit2                    : 1;
2505   uint8_t bit3                    : 1;
2506   uint8_t bit4                    : 1;
2507   uint8_t bit5                    : 1;
2508   uint8_t bit6                    : 1;
2509   uint8_t bit7                    : 1;
2510 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2511   uint8_t bit7                    : 1;
2512   uint8_t bit6                    : 1;
2513   uint8_t bit5                    : 1;
2514   uint8_t bit4                    : 1;
2515   uint8_t bit3                    : 1;
2516   uint8_t bit2                    : 1;
2517   uint8_t bit1                    : 1;
2518   uint8_t bit0                    : 1;
2519 #endif /* DRV_BYTE_ORDER */
2520 } lsm6dsrx_sensor_hub_16_t;
2521 
2522 #define LSM6DSRX_SENSOR_HUB_17                0x12U
2523 typedef struct
2524 {
2525 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2526   uint8_t bit0                    : 1;
2527   uint8_t bit1                    : 1;
2528   uint8_t bit2                    : 1;
2529   uint8_t bit3                    : 1;
2530   uint8_t bit4                    : 1;
2531   uint8_t bit5                    : 1;
2532   uint8_t bit6                    : 1;
2533   uint8_t bit7                    : 1;
2534 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2535   uint8_t bit7                    : 1;
2536   uint8_t bit6                    : 1;
2537   uint8_t bit5                    : 1;
2538   uint8_t bit4                    : 1;
2539   uint8_t bit3                    : 1;
2540   uint8_t bit2                    : 1;
2541   uint8_t bit1                    : 1;
2542   uint8_t bit0                    : 1;
2543 #endif /* DRV_BYTE_ORDER */
2544 } lsm6dsrx_sensor_hub_17_t;
2545 
2546 #define LSM6DSRX_SENSOR_HUB_18                0x13U
2547 typedef struct
2548 {
2549 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2550   uint8_t bit0                    : 1;
2551   uint8_t bit1                    : 1;
2552   uint8_t bit2                    : 1;
2553   uint8_t bit3                    : 1;
2554   uint8_t bit4                    : 1;
2555   uint8_t bit5                    : 1;
2556   uint8_t bit6                    : 1;
2557   uint8_t bit7                    : 1;
2558 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2559   uint8_t bit7                    : 1;
2560   uint8_t bit6                    : 1;
2561   uint8_t bit5                    : 1;
2562   uint8_t bit4                    : 1;
2563   uint8_t bit3                    : 1;
2564   uint8_t bit2                    : 1;
2565   uint8_t bit1                    : 1;
2566   uint8_t bit0                    : 1;
2567 #endif /* DRV_BYTE_ORDER */
2568 } lsm6dsrx_sensor_hub_18_t;
2569 
2570 #define LSM6DSRX_MASTER_CONFIG                0x14U
2571 typedef struct
2572 {
2573 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2574   uint8_t aux_sens_on              : 2;
2575   uint8_t master_on                : 1;
2576   uint8_t shub_pu_en               : 1;
2577   uint8_t pass_through_mode        : 1;
2578   uint8_t start_config             : 1;
2579   uint8_t write_once               : 1;
2580   uint8_t rst_master_regs          : 1;
2581 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2582   uint8_t rst_master_regs          : 1;
2583   uint8_t write_once               : 1;
2584   uint8_t start_config             : 1;
2585   uint8_t pass_through_mode        : 1;
2586   uint8_t shub_pu_en               : 1;
2587   uint8_t master_on                : 1;
2588   uint8_t aux_sens_on              : 2;
2589 #endif /* DRV_BYTE_ORDER */
2590 } lsm6dsrx_master_config_t;
2591 
2592 #define LSM6DSRX_SLV0_ADD                     0x15U
2593 typedef struct
2594 {
2595 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2596   uint8_t rw_0                     : 1;
2597   uint8_t slave0                   : 7;
2598 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2599   uint8_t slave0                   : 7;
2600   uint8_t rw_0                     : 1;
2601 #endif /* DRV_BYTE_ORDER */
2602 } lsm6dsrx_slv0_add_t;
2603 
2604 #define LSM6DSRX_SLV0_SUBADD                  0x16U
2605 typedef struct
2606 {
2607   uint8_t slave0_reg               : 8;
2608 } lsm6dsrx_slv0_subadd_t;
2609 
2610 #define LSM6DSRX_SLV0_CONFIG                  0x17U
2611 typedef struct
2612 {
2613 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2614   uint8_t slave0_numop             : 3;
2615   uint8_t batch_ext_sens_0_en      : 1;
2616   uint8_t not_used_01              : 2;
2617   uint8_t shub_odr                 : 2;
2618 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2619   uint8_t shub_odr                 : 2;
2620   uint8_t not_used_01              : 2;
2621   uint8_t batch_ext_sens_0_en      : 1;
2622   uint8_t slave0_numop             : 3;
2623 #endif /* DRV_BYTE_ORDER */
2624 } lsm6dsrx_slv0_config_t;
2625 
2626 #define LSM6DSRX_SLV1_ADD                     0x18U
2627 typedef struct
2628 {
2629 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2630   uint8_t r_1                      : 1;
2631   uint8_t slave1_add               : 7;
2632 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2633   uint8_t slave1_add               : 7;
2634   uint8_t r_1                      : 1;
2635 #endif /* DRV_BYTE_ORDER */
2636 } lsm6dsrx_slv1_add_t;
2637 
2638 #define LSM6DSRX_SLV1_SUBADD                  0x19U
2639 typedef struct
2640 {
2641   uint8_t slave1_reg               : 8;
2642 } lsm6dsrx_slv1_subadd_t;
2643 
2644 #define LSM6DSRX_SLV1_CONFIG                  0x1AU
2645 typedef struct
2646 {
2647 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2648   uint8_t slave1_numop             : 3;
2649   uint8_t batch_ext_sens_1_en      : 1;
2650   uint8_t not_used_01              : 4;
2651 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2652   uint8_t not_used_01              : 4;
2653   uint8_t batch_ext_sens_1_en      : 1;
2654   uint8_t slave1_numop             : 3;
2655 #endif /* DRV_BYTE_ORDER */
2656 } lsm6dsrx_slv1_config_t;
2657 
2658 #define LSM6DSRX_SLV2_ADD                     0x1BU
2659 typedef struct
2660 {
2661 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2662   uint8_t r_2                      : 1;
2663   uint8_t slave2_add               : 7;
2664 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2665   uint8_t slave2_add               : 7;
2666   uint8_t r_2                      : 1;
2667 #endif /* DRV_BYTE_ORDER */
2668 } lsm6dsrx_slv2_add_t;
2669 
2670 #define LSM6DSRX_SLV2_SUBADD                  0x1CU
2671 typedef struct
2672 {
2673   uint8_t slave2_reg               : 8;
2674 } lsm6dsrx_slv2_subadd_t;
2675 
2676 #define LSM6DSRX_SLV2_CONFIG                  0x1DU
2677 typedef struct
2678 {
2679 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2680   uint8_t slave2_numop             : 3;
2681   uint8_t batch_ext_sens_2_en      : 1;
2682   uint8_t not_used_01              : 4;
2683 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2684   uint8_t not_used_01              : 4;
2685   uint8_t batch_ext_sens_2_en      : 1;
2686   uint8_t slave2_numop             : 3;
2687 #endif /* DRV_BYTE_ORDER */
2688 } lsm6dsrx_slv2_config_t;
2689 
2690 #define LSM6DSRX_SLV3_ADD                     0x1EU
2691 typedef struct
2692 {
2693 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2694   uint8_t r_3                      : 1;
2695   uint8_t slave3_add               : 7;
2696 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2697   uint8_t slave3_add               : 7;
2698   uint8_t r_3                      : 1;
2699 #endif /* DRV_BYTE_ORDER */
2700 } lsm6dsrx_slv3_add_t;
2701 
2702 #define LSM6DSRX_SLV3_SUBADD                  0x1FU
2703 typedef struct
2704 {
2705   uint8_t slave3_reg               : 8;
2706 } lsm6dsrx_slv3_subadd_t;
2707 
2708 #define LSM6DSRX_SLV3_CONFIG                  0x20U
2709 typedef struct
2710 {
2711 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2712   uint8_t slave3_numop             : 3;
2713   uint8_t batch_ext_sens_3_en      : 1;
2714   uint8_t not_used_01              : 4;
2715 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2716   uint8_t not_used_01              : 4;
2717   uint8_t batch_ext_sens_3_en      : 1;
2718   uint8_t slave3_numop             : 3;
2719 #endif /* DRV_BYTE_ORDER */
2720 } lsm6dsrx_slv3_config_t;
2721 
2722 #define LSM6DSRX_DATAWRITE_SLV0  0x21U
2723 typedef struct
2724 {
2725   uint8_t slave0_dataw             : 8;
2726 } lsm6dsrx_datawrite_slv0_t;
2727 
2728 #define LSM6DSRX_STATUS_MASTER                0x22U
2729 typedef struct
2730 {
2731 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
2732   uint8_t sens_hub_endop           : 1;
2733   uint8_t not_used_01              : 2;
2734   uint8_t slave0_nack              : 1;
2735   uint8_t slave1_nack              : 1;
2736   uint8_t slave2_nack              : 1;
2737   uint8_t slave3_nack              : 1;
2738   uint8_t wr_once_done             : 1;
2739 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
2740   uint8_t wr_once_done             : 1;
2741   uint8_t slave3_nack              : 1;
2742   uint8_t slave2_nack              : 1;
2743   uint8_t slave1_nack              : 1;
2744   uint8_t slave0_nack              : 1;
2745   uint8_t not_used_01              : 2;
2746   uint8_t sens_hub_endop           : 1;
2747 #endif /* DRV_BYTE_ORDER */
2748 } lsm6dsrx_status_master_t;
2749 
2750 /**
2751   * @}
2752   *
2753   */
2754 
2755 /**
2756   * @defgroup LSM6DSRX_Register_Union
2757   * @brief    This union group all the registers having a bit-field
2758   *           description.
2759   *           This union is useful but it's not needed by the driver.
2760   *
2761   *           REMOVING this union you are compliant with:
2762   *           MISRA-C 2012 [Rule 19.2] -> " Union are not allowed "
2763   *
2764   * @{
2765   *
2766   */
2767 typedef union
2768 {
2769   lsm6dsrx_func_cfg_access_t               func_cfg_access;
2770   lsm6dsrx_pin_ctrl_t                      pin_ctrl;
2771   lsm6dsrx_s4s_tph_l_t                     s4s_tph_l;
2772   lsm6dsrx_s4s_tph_h_t                     s4s_tph_h;
2773   lsm6dsrx_s4s_rr_t                        s4s_rr;
2774   lsm6dsrx_fifo_ctrl1_t                    fifo_ctrl1;
2775   lsm6dsrx_fifo_ctrl2_t                    fifo_ctrl2;
2776   lsm6dsrx_fifo_ctrl3_t                    fifo_ctrl3;
2777   lsm6dsrx_fifo_ctrl4_t                    fifo_ctrl4;
2778   lsm6dsrx_counter_bdr_reg1_t              counter_bdr_reg1;
2779   lsm6dsrx_counter_bdr_reg2_t              counter_bdr_reg2;
2780   lsm6dsrx_int1_ctrl_t                     int1_ctrl;
2781   lsm6dsrx_int2_ctrl_t                     int2_ctrl;
2782   lsm6dsrx_ctrl1_xl_t                      ctrl1_xl;
2783   lsm6dsrx_ctrl2_g_t                       ctrl2_g;
2784   lsm6dsrx_ctrl3_c_t                       ctrl3_c;
2785   lsm6dsrx_ctrl4_c_t                       ctrl4_c;
2786   lsm6dsrx_ctrl5_c_t                       ctrl5_c;
2787   lsm6dsrx_ctrl6_c_t                       ctrl6_c;
2788   lsm6dsrx_ctrl7_g_t                       ctrl7_g;
2789   lsm6dsrx_ctrl8_xl_t                      ctrl8_xl;
2790   lsm6dsrx_ctrl9_xl_t                      ctrl9_xl;
2791   lsm6dsrx_ctrl10_c_t                      ctrl10_c;
2792   lsm6dsrx_all_int_src_t                   all_int_src;
2793   lsm6dsrx_wake_up_src_t                   wake_up_src;
2794   lsm6dsrx_tap_src_t                       tap_src;
2795   lsm6dsrx_d6d_src_t                       d6d_src;
2796   lsm6dsrx_status_reg_t                    status_reg;
2797   lsm6dsrx_status_spiaux_t                 status_spiaux;
2798   lsm6dsrx_fifo_status1_t                  fifo_status1;
2799   lsm6dsrx_fifo_status2_t                  fifo_status2;
2800   lsm6dsrx_tap_cfg0_t                      tap_cfg0;
2801   lsm6dsrx_tap_cfg1_t                      tap_cfg1;
2802   lsm6dsrx_tap_cfg2_t                      tap_cfg2;
2803   lsm6dsrx_tap_ths_6d_t                    tap_ths_6d;
2804   lsm6dsrx_int_dur2_t                      int_dur2;
2805   lsm6dsrx_wake_up_ths_t                   wake_up_ths;
2806   lsm6dsrx_wake_up_dur_t                   wake_up_dur;
2807   lsm6dsrx_free_fall_t                     free_fall;
2808   lsm6dsrx_md1_cfg_t                       md1_cfg;
2809   lsm6dsrx_md2_cfg_t                       md2_cfg;
2810   lsm6dsrx_s4s_st_cmd_code_t               s4s_st_cmd_code;
2811   lsm6dsrx_s4s_dt_reg_t                    s4s_dt_reg;
2812   lsm6dsrx_i3c_bus_avb_t                   i3c_bus_avb;
2813   lsm6dsrx_internal_freq_fine_t            internal_freq_fine;
2814   lsm6dsrx_int_ois_t                       int_ois;
2815   lsm6dsrx_ctrl1_ois_t                     ctrl1_ois;
2816   lsm6dsrx_ctrl2_ois_t                     ctrl2_ois;
2817   lsm6dsrx_ctrl3_ois_t                     ctrl3_ois;
2818   lsm6dsrx_fifo_data_out_tag_t             fifo_data_out_tag;
2819   lsm6dsrx_page_sel_t                      page_sel;
2820   lsm6dsrx_emb_func_en_a_t                 emb_func_en_a;
2821   lsm6dsrx_emb_func_en_b_t                 emb_func_en_b;
2822   lsm6dsrx_page_address_t                  page_address;
2823   lsm6dsrx_page_value_t                    page_value;
2824   lsm6dsrx_emb_func_int1_t                 emb_func_int1;
2825   lsm6dsrx_fsm_int1_a_t                    fsm_int1_a;
2826   lsm6dsrx_fsm_int1_b_t                    fsm_int1_b;
2827   lsm6dsrx_mlc_int1_t                      mlc_int1;
2828   lsm6dsrx_emb_func_int2_t                 emb_func_int2;
2829   lsm6dsrx_fsm_int2_a_t                    fsm_int2_a;
2830   lsm6dsrx_fsm_int2_b_t                    fsm_int2_b;
2831   lsm6dsrx_mlc_int2_t                      mlc_int2;
2832   lsm6dsrx_emb_func_status_t               emb_func_status;
2833   lsm6dsrx_fsm_status_a_t                  fsm_status_a;
2834   lsm6dsrx_fsm_status_b_t                  fsm_status_b;
2835   lsm6dsrx_mlc_status_mainpage_t           mlc_status_mainpage;
2836   lsm6dsrx_page_rw_t                       page_rw;
2837   lsm6dsrx_emb_func_fifo_cfg_t             emb_func_fifo_cfg;
2838   lsm6dsrx_fsm_enable_a_t                  fsm_enable_a;
2839   lsm6dsrx_fsm_enable_b_t                  fsm_enable_b;
2840   lsm6dsrx_fsm_long_counter_clear_t        fsm_long_counter_clear;
2841   lsm6dsrx_fsm_outs1_t                     fsm_outs1;
2842   lsm6dsrx_fsm_outs2_t                     fsm_outs2;
2843   lsm6dsrx_fsm_outs3_t                     fsm_outs3;
2844   lsm6dsrx_fsm_outs4_t                     fsm_outs4;
2845   lsm6dsrx_fsm_outs5_t                     fsm_outs5;
2846   lsm6dsrx_fsm_outs6_t                     fsm_outs6;
2847   lsm6dsrx_fsm_outs7_t                     fsm_outs7;
2848   lsm6dsrx_fsm_outs8_t                     fsm_outs8;
2849   lsm6dsrx_fsm_outs9_t                     fsm_outs9;
2850   lsm6dsrx_fsm_outs10_t                    fsm_outs10;
2851   lsm6dsrx_fsm_outs11_t                    fsm_outs11;
2852   lsm6dsrx_fsm_outs12_t                    fsm_outs12;
2853   lsm6dsrx_fsm_outs13_t                    fsm_outs13;
2854   lsm6dsrx_fsm_outs14_t                    fsm_outs14;
2855   lsm6dsrx_fsm_outs15_t                    fsm_outs15;
2856   lsm6dsrx_fsm_outs16_t                    fsm_outs16;
2857   lsm6dsrx_emb_func_odr_cfg_b_t            emb_func_odr_cfg_b;
2858   lsm6dsrx_emb_func_odr_cfg_c_t            emb_func_odr_cfg_c_t;
2859   lsm6dsrx_emb_func_src_t                  emb_func_src;
2860   lsm6dsrx_emb_func_init_a_t               emb_func_init_a;
2861   lsm6dsrx_emb_func_init_b_t               emb_func_init_b;
2862   lsm6dsrx_mag_cfg_a_t                     mag_cfg_a;
2863   lsm6dsrx_mag_cfg_b_t                     mag_cfg_b;
2864   lsm6dsrx_pedo_cmd_reg_t                  pedo_cmd_reg;
2865   lsm6dsrx_sensor_hub_1_t                  sensor_hub_1;
2866   lsm6dsrx_sensor_hub_2_t                  sensor_hub_2;
2867   lsm6dsrx_sensor_hub_3_t                  sensor_hub_3;
2868   lsm6dsrx_sensor_hub_4_t                  sensor_hub_4;
2869   lsm6dsrx_sensor_hub_5_t                  sensor_hub_5;
2870   lsm6dsrx_sensor_hub_6_t                  sensor_hub_6;
2871   lsm6dsrx_sensor_hub_7_t                  sensor_hub_7;
2872   lsm6dsrx_sensor_hub_8_t                  sensor_hub_8;
2873   lsm6dsrx_sensor_hub_9_t                  sensor_hub_9;
2874   lsm6dsrx_sensor_hub_10_t                 sensor_hub_10;
2875   lsm6dsrx_sensor_hub_11_t                 sensor_hub_11;
2876   lsm6dsrx_sensor_hub_12_t                 sensor_hub_12;
2877   lsm6dsrx_sensor_hub_13_t                 sensor_hub_13;
2878   lsm6dsrx_sensor_hub_14_t                 sensor_hub_14;
2879   lsm6dsrx_sensor_hub_15_t                 sensor_hub_15;
2880   lsm6dsrx_sensor_hub_16_t                 sensor_hub_16;
2881   lsm6dsrx_sensor_hub_17_t                 sensor_hub_17;
2882   lsm6dsrx_sensor_hub_18_t                 sensor_hub_18;
2883   lsm6dsrx_master_config_t                 master_config;
2884   lsm6dsrx_slv0_add_t                      slv0_add;
2885   lsm6dsrx_slv0_subadd_t                   slv0_subadd;
2886   lsm6dsrx_slv0_config_t                   slv0_config;
2887   lsm6dsrx_slv1_add_t                      slv1_add;
2888   lsm6dsrx_slv1_subadd_t                   slv1_subadd;
2889   lsm6dsrx_slv1_config_t                   slv1_config;
2890   lsm6dsrx_slv2_add_t                      slv2_add;
2891   lsm6dsrx_slv2_subadd_t                   slv2_subadd;
2892   lsm6dsrx_slv2_config_t                   slv2_config;
2893   lsm6dsrx_slv3_add_t                      slv3_add;
2894   lsm6dsrx_slv3_subadd_t                   slv3_subadd;
2895   lsm6dsrx_slv3_config_t                   slv3_config;
2896   lsm6dsrx_datawrite_slv0_t                datawrite_slv0;
2897   lsm6dsrx_status_master_t                 status_master;
2898   bitwise_t                                 bitwise;
2899   uint8_t                                   byte;
2900 } lsm6dsrx_reg_t;
2901 
2902 /**
2903   * @}
2904   *
2905   */
2906 
2907 #ifndef __weak
2908 #define __weak __attribute__((weak))
2909 #endif /* __weak */
2910 
2911 /*
2912  * These are the basic platform dependent I/O routines to read
2913  * and write device registers connected on a standard bus.
2914  * The driver keeps offering a default implementation based on function
2915  * pointers to read/write routines for backward compatibility.
2916  * The __weak directive allows the final application to overwrite
2917  * them with a custom implementation.
2918  */
2919 int32_t lsm6dsrx_read_reg(const stmdev_ctx_t *ctx, uint8_t reg,
2920                           uint8_t *data,
2921                           uint16_t len);
2922 int32_t lsm6dsrx_write_reg(const stmdev_ctx_t *ctx, uint8_t reg,
2923                            uint8_t *data,
2924                            uint16_t len);
2925 
2926 float_t lsm6dsrx_from_fs2g_to_mg(int16_t lsb);
2927 float_t lsm6dsrx_from_fs4g_to_mg(int16_t lsb);
2928 float_t lsm6dsrx_from_fs8g_to_mg(int16_t lsb);
2929 float_t lsm6dsrx_from_fs16g_to_mg(int16_t lsb);
2930 
2931 float_t lsm6dsrx_from_fs125dps_to_mdps(int16_t lsb);
2932 float_t lsm6dsrx_from_fs250dps_to_mdps(int16_t lsb);
2933 float_t lsm6dsrx_from_fs500dps_to_mdps(int16_t lsb);
2934 float_t lsm6dsrx_from_fs1000dps_to_mdps(int16_t lsb);
2935 float_t lsm6dsrx_from_fs2000dps_to_mdps(int16_t lsb);
2936 float_t lsm6dsrx_from_fs4000dps_to_mdps(int16_t lsb);
2937 
2938 float_t lsm6dsrx_from_lsb_to_celsius(int16_t lsb);
2939 
2940 uint64_t lsm6dsrx_from_lsb_to_nsec(uint32_t lsb);
2941 
2942 typedef enum
2943 {
2944   LSM6DSRX_2g   = 0,
2945   LSM6DSRX_16g  = 1, /* if XL_FS_MODE = '1' -> LSM6DSRX_2g */
2946   LSM6DSRX_4g   = 2,
2947   LSM6DSRX_8g   = 3,
2948 } lsm6dsrx_fs_xl_t;
2949 int32_t lsm6dsrx_xl_full_scale_set(const stmdev_ctx_t *ctx,
2950                                    lsm6dsrx_fs_xl_t val);
2951 int32_t lsm6dsrx_xl_full_scale_get(const stmdev_ctx_t *ctx,
2952                                    lsm6dsrx_fs_xl_t *val);
2953 
2954 typedef enum
2955 {
2956   LSM6DSRX_XL_ODR_OFF    = 0,
2957   LSM6DSRX_XL_ODR_12Hz5  = 1,
2958   LSM6DSRX_XL_ODR_26Hz   = 2,
2959   LSM6DSRX_XL_ODR_52Hz   = 3,
2960   LSM6DSRX_XL_ODR_104Hz  = 4,
2961   LSM6DSRX_XL_ODR_208Hz  = 5,
2962   LSM6DSRX_XL_ODR_416Hz  = 6,
2963   LSM6DSRX_XL_ODR_833Hz  = 7,
2964   LSM6DSRX_XL_ODR_1666Hz = 8,
2965   LSM6DSRX_XL_ODR_3332Hz = 9,
2966   LSM6DSRX_XL_ODR_6667Hz = 10,
2967   LSM6DSRX_XL_ODR_1Hz6   = 11, /* (low power only) */
2968 } lsm6dsrx_odr_xl_t;
2969 int32_t lsm6dsrx_xl_data_rate_set(const stmdev_ctx_t *ctx,
2970                                   lsm6dsrx_odr_xl_t val);
2971 int32_t lsm6dsrx_xl_data_rate_get(const stmdev_ctx_t *ctx,
2972                                   lsm6dsrx_odr_xl_t *val);
2973 
2974 typedef enum
2975 {
2976   LSM6DSRX_125dps = 2,
2977   LSM6DSRX_250dps = 0,
2978   LSM6DSRX_500dps = 4,
2979   LSM6DSRX_1000dps = 8,
2980   LSM6DSRX_2000dps = 12,
2981   LSM6DSRX_4000dps = 1,
2982 } lsm6dsrx_fs_g_t;
2983 int32_t lsm6dsrx_gy_full_scale_set(const stmdev_ctx_t *ctx,
2984                                    lsm6dsrx_fs_g_t val);
2985 int32_t lsm6dsrx_gy_full_scale_get(const stmdev_ctx_t *ctx,
2986                                    lsm6dsrx_fs_g_t *val);
2987 
2988 typedef enum
2989 {
2990   LSM6DSRX_GY_ODR_OFF    = 0,
2991   LSM6DSRX_GY_ODR_12Hz5  = 1,
2992   LSM6DSRX_GY_ODR_26Hz   = 2,
2993   LSM6DSRX_GY_ODR_52Hz   = 3,
2994   LSM6DSRX_GY_ODR_104Hz  = 4,
2995   LSM6DSRX_GY_ODR_208Hz  = 5,
2996   LSM6DSRX_GY_ODR_416Hz  = 6,
2997   LSM6DSRX_GY_ODR_833Hz  = 7,
2998   LSM6DSRX_GY_ODR_1666Hz = 8,
2999   LSM6DSRX_GY_ODR_3332Hz = 9,
3000   LSM6DSRX_GY_ODR_6667Hz = 10,
3001 } lsm6dsrx_odr_g_t;
3002 int32_t lsm6dsrx_gy_data_rate_set(const stmdev_ctx_t *ctx,
3003                                   lsm6dsrx_odr_g_t val);
3004 int32_t lsm6dsrx_gy_data_rate_get(const stmdev_ctx_t *ctx,
3005                                   lsm6dsrx_odr_g_t *val);
3006 
3007 int32_t lsm6dsrx_block_data_update_set(const stmdev_ctx_t *ctx,
3008                                        uint8_t val);
3009 int32_t lsm6dsrx_block_data_update_get(const stmdev_ctx_t *ctx,
3010                                        uint8_t *val);
3011 
3012 typedef enum
3013 {
3014   LSM6DSRX_LSb_1mg  = 0,
3015   LSM6DSRX_LSb_16mg = 1,
3016 } lsm6dsrx_usr_off_w_t;
3017 int32_t lsm6dsrx_xl_offset_weight_set(const stmdev_ctx_t *ctx,
3018                                       lsm6dsrx_usr_off_w_t val);
3019 int32_t lsm6dsrx_xl_offset_weight_get(const stmdev_ctx_t *ctx,
3020                                       lsm6dsrx_usr_off_w_t *val);
3021 
3022 typedef enum
3023 {
3024   LSM6DSRX_HIGH_PERFORMANCE_MD  = 0,
3025   LSM6DSRX_LOW_NORMAL_POWER_MD  = 1,
3026 } lsm6dsrx_xl_hm_mode_t;
3027 int32_t lsm6dsrx_xl_power_mode_set(const stmdev_ctx_t *ctx,
3028                                    lsm6dsrx_xl_hm_mode_t val);
3029 int32_t lsm6dsrx_xl_power_mode_get(const stmdev_ctx_t *ctx,
3030                                    lsm6dsrx_xl_hm_mode_t *val);
3031 
3032 typedef enum
3033 {
3034   LSM6DSRX_GY_HIGH_PERFORMANCE  = 0,
3035   LSM6DSRX_GY_NORMAL            = 1,
3036 } lsm6dsrx_g_hm_mode_t;
3037 int32_t lsm6dsrx_gy_power_mode_set(const stmdev_ctx_t *ctx,
3038                                    lsm6dsrx_g_hm_mode_t val);
3039 int32_t lsm6dsrx_gy_power_mode_get(const stmdev_ctx_t *ctx,
3040                                    lsm6dsrx_g_hm_mode_t *val);
3041 
3042 typedef struct
3043 {
3044   lsm6dsrx_all_int_src_t           all_int_src;
3045   lsm6dsrx_wake_up_src_t           wake_up_src;
3046   lsm6dsrx_tap_src_t               tap_src;
3047   lsm6dsrx_d6d_src_t               d6d_src;
3048   lsm6dsrx_status_reg_t            status_reg;
3049   lsm6dsrx_emb_func_status_t       emb_func_status;
3050   lsm6dsrx_fsm_status_a_t          fsm_status_a;
3051   lsm6dsrx_fsm_status_b_t          fsm_status_b;
3052   lsm6dsrx_mlc_status_mainpage_t   mlc_status;
3053 } lsm6dsrx_all_sources_t;
3054 int32_t lsm6dsrx_all_sources_get(const stmdev_ctx_t *ctx,
3055                                  lsm6dsrx_all_sources_t *val);
3056 
3057 int32_t lsm6dsrx_status_reg_get(const stmdev_ctx_t *ctx,
3058                                 lsm6dsrx_status_reg_t *val);
3059 
3060 int32_t lsm6dsrx_xl_flag_data_ready_get(const stmdev_ctx_t *ctx,
3061                                         uint8_t *val);
3062 
3063 int32_t lsm6dsrx_gy_flag_data_ready_get(const stmdev_ctx_t *ctx,
3064                                         uint8_t *val);
3065 
3066 int32_t lsm6dsrx_temp_flag_data_ready_get(const stmdev_ctx_t *ctx,
3067                                           uint8_t *val);
3068 
3069 int32_t lsm6dsrx_xl_usr_offset_x_set(const stmdev_ctx_t *ctx,
3070                                      uint8_t *val);
3071 int32_t lsm6dsrx_xl_usr_offset_x_get(const stmdev_ctx_t *ctx,
3072                                      uint8_t *val);
3073 
3074 int32_t lsm6dsrx_xl_usr_offset_y_set(const stmdev_ctx_t *ctx,
3075                                      uint8_t *val);
3076 int32_t lsm6dsrx_xl_usr_offset_y_get(const stmdev_ctx_t *ctx,
3077                                      uint8_t *val);
3078 
3079 int32_t lsm6dsrx_xl_usr_offset_z_set(const stmdev_ctx_t *ctx,
3080                                      uint8_t *val);
3081 int32_t lsm6dsrx_xl_usr_offset_z_get(const stmdev_ctx_t *ctx,
3082                                      uint8_t *val);
3083 
3084 int32_t lsm6dsrx_xl_usr_offset_set(const stmdev_ctx_t *ctx, uint8_t val);
3085 int32_t lsm6dsrx_xl_usr_offset_get(const stmdev_ctx_t *ctx, uint8_t *val);
3086 
3087 int32_t lsm6dsrx_timestamp_rst(const stmdev_ctx_t *ctx);
3088 
3089 int32_t lsm6dsrx_timestamp_set(const stmdev_ctx_t *ctx, uint8_t val);
3090 int32_t lsm6dsrx_timestamp_get(const stmdev_ctx_t *ctx, uint8_t *val);
3091 
3092 int32_t lsm6dsrx_timestamp_raw_get(const stmdev_ctx_t *ctx, uint32_t *val);
3093 
3094 typedef enum
3095 {
3096   LSM6DSRX_NO_ROUND      = 0,
3097   LSM6DSRX_ROUND_XL      = 1,
3098   LSM6DSRX_ROUND_GY      = 2,
3099   LSM6DSRX_ROUND_GY_XL   = 3,
3100 } lsm6dsrx_rounding_t;
3101 int32_t lsm6dsrx_rounding_mode_set(const stmdev_ctx_t *ctx,
3102                                    lsm6dsrx_rounding_t val);
3103 int32_t lsm6dsrx_rounding_mode_get(const stmdev_ctx_t *ctx,
3104                                    lsm6dsrx_rounding_t *val);
3105 
3106 int32_t lsm6dsrx_temperature_raw_get(const stmdev_ctx_t *ctx, int16_t *val);
3107 
3108 int32_t lsm6dsrx_angular_rate_raw_get(const stmdev_ctx_t *ctx, int16_t *val);
3109 
3110 int32_t lsm6dsrx_acceleration_raw_get(const stmdev_ctx_t *ctx, int16_t *val);
3111 
3112 int32_t lsm6dsrx_fifo_out_raw_get(const stmdev_ctx_t *ctx, uint8_t *val);
3113 
3114 int32_t lsm6dsrx_mlc_out_get(const stmdev_ctx_t *ctx, uint8_t *val);
3115 
3116 int32_t lsm6dsrx_odr_cal_reg_set(const stmdev_ctx_t *ctx, uint8_t val);
3117 int32_t lsm6dsrx_odr_cal_reg_get(const stmdev_ctx_t *ctx, uint8_t *val);
3118 
3119 int32_t lsm6dsrx_number_of_steps_get(const stmdev_ctx_t *ctx, uint16_t *val);
3120 
3121 int32_t lsm6dsrx_steps_reset(const stmdev_ctx_t *ctx);
3122 
3123 typedef enum
3124 {
3125   LSM6DSRX_USER_BANK           = 0,
3126   LSM6DSRX_SENSOR_HUB_BANK     = 1,
3127   LSM6DSRX_EMBEDDED_FUNC_BANK  = 2,
3128 } lsm6dsrx_reg_access_t;
3129 int32_t lsm6dsrx_mem_bank_set(const stmdev_ctx_t *ctx,
3130                               lsm6dsrx_reg_access_t val);
3131 int32_t lsm6dsrx_mem_bank_get(const stmdev_ctx_t *ctx,
3132                               lsm6dsrx_reg_access_t *val);
3133 
3134 int32_t lsm6dsrx_ln_pg_write_byte(const stmdev_ctx_t *ctx, uint16_t address,
3135                                   uint8_t *val);
3136 int32_t lsm6dsrx_ln_pg_write(const stmdev_ctx_t *ctx, uint16_t address,
3137                              uint8_t *buf, uint8_t len);
3138 int32_t lsm6dsrx_ln_pg_read_byte(const stmdev_ctx_t *ctx, uint16_t add,
3139                                  uint8_t *val);
3140 int32_t lsm6dsrx_ln_pg_read(const stmdev_ctx_t *ctx, uint16_t address,
3141                             uint8_t *val);
3142 
3143 typedef enum
3144 {
3145   LSM6DSRX_DRDY_LATCHED = 0,
3146   LSM6DSRX_DRDY_PULSED  = 1,
3147 } lsm6dsrx_dataready_pulsed_t;
3148 int32_t lsm6dsrx_data_ready_mode_set(const stmdev_ctx_t *ctx,
3149                                      lsm6dsrx_dataready_pulsed_t val);
3150 int32_t lsm6dsrx_data_ready_mode_get(const stmdev_ctx_t *ctx,
3151                                      lsm6dsrx_dataready_pulsed_t *val);
3152 
3153 int32_t lsm6dsrx_device_id_get(const stmdev_ctx_t *ctx, uint8_t *val);
3154 
3155 int32_t lsm6dsrx_reset_set(const stmdev_ctx_t *ctx, uint8_t val);
3156 int32_t lsm6dsrx_reset_get(const stmdev_ctx_t *ctx, uint8_t *val);
3157 
3158 int32_t lsm6dsrx_auto_increment_set(const stmdev_ctx_t *ctx, uint8_t val);
3159 int32_t lsm6dsrx_auto_increment_get(const stmdev_ctx_t *ctx, uint8_t *val);
3160 
3161 int32_t lsm6dsrx_boot_set(const stmdev_ctx_t *ctx, uint8_t val);
3162 int32_t lsm6dsrx_boot_get(const stmdev_ctx_t *ctx, uint8_t *val);
3163 
3164 typedef enum
3165 {
3166   LSM6DSRX_XL_ST_DISABLE  = 0,
3167   LSM6DSRX_XL_ST_POSITIVE = 1,
3168   LSM6DSRX_XL_ST_NEGATIVE = 2,
3169 } lsm6dsrx_st_xl_t;
3170 int32_t lsm6dsrx_xl_self_test_set(const stmdev_ctx_t *ctx,
3171                                   lsm6dsrx_st_xl_t val);
3172 int32_t lsm6dsrx_xl_self_test_get(const stmdev_ctx_t *ctx,
3173                                   lsm6dsrx_st_xl_t *val);
3174 
3175 typedef enum
3176 {
3177   LSM6DSRX_GY_ST_DISABLE  = 0,
3178   LSM6DSRX_GY_ST_POSITIVE = 1,
3179   LSM6DSRX_GY_ST_NEGATIVE = 3,
3180 } lsm6dsrx_st_g_t;
3181 int32_t lsm6dsrx_gy_self_test_set(const stmdev_ctx_t *ctx,
3182                                   lsm6dsrx_st_g_t val);
3183 int32_t lsm6dsrx_gy_self_test_get(const stmdev_ctx_t *ctx,
3184                                   lsm6dsrx_st_g_t *val);
3185 
3186 int32_t lsm6dsrx_xl_filter_lp2_set(const stmdev_ctx_t *ctx, uint8_t val);
3187 int32_t lsm6dsrx_xl_filter_lp2_get(const stmdev_ctx_t *ctx, uint8_t *val);
3188 
3189 int32_t lsm6dsrx_gy_filter_lp1_set(const stmdev_ctx_t *ctx, uint8_t val);
3190 int32_t lsm6dsrx_gy_filter_lp1_get(const stmdev_ctx_t *ctx, uint8_t *val);
3191 
3192 int32_t lsm6dsrx_filter_settling_mask_set(const stmdev_ctx_t *ctx, uint8_t val);
3193 int32_t lsm6dsrx_filter_settling_mask_get(const stmdev_ctx_t *ctx, uint8_t *val);
3194 
3195 typedef enum
3196 {
3197   LSM6DSRX_ULTRA_LIGHT  = 0,
3198   LSM6DSRX_VERY_LIGHT   = 1,
3199   LSM6DSRX_LIGHT        = 2,
3200   LSM6DSRX_MEDIUM       = 3,
3201   LSM6DSRX_STRONG       = 4,
3202   LSM6DSRX_VERY_STRONG  = 5,
3203   LSM6DSRX_AGGRESSIVE   = 6,
3204   LSM6DSRX_XTREME       = 7,
3205 } lsm6dsrx_ftype_t;
3206 int32_t lsm6dsrx_gy_lp1_bandwidth_set(const stmdev_ctx_t *ctx,
3207                                       lsm6dsrx_ftype_t val);
3208 int32_t lsm6dsrx_gy_lp1_bandwidth_get(const stmdev_ctx_t *ctx,
3209                                       lsm6dsrx_ftype_t *val);
3210 
3211 int32_t lsm6dsrx_xl_lp2_on_6d_set(const stmdev_ctx_t *ctx, uint8_t val);
3212 int32_t lsm6dsrx_xl_lp2_on_6d_get(const stmdev_ctx_t *ctx, uint8_t *val);
3213 
3214 typedef enum
3215 {
3216   LSM6DSRX_HP_PATH_DISABLE_ON_OUT    = 0x00,
3217   LSM6DSRX_SLOPE_ODR_DIV_4           = 0x10,
3218   LSM6DSRX_HP_ODR_DIV_10             = 0x11,
3219   LSM6DSRX_HP_ODR_DIV_20             = 0x12,
3220   LSM6DSRX_HP_ODR_DIV_45             = 0x13,
3221   LSM6DSRX_HP_ODR_DIV_100            = 0x14,
3222   LSM6DSRX_HP_ODR_DIV_200            = 0x15,
3223   LSM6DSRX_HP_ODR_DIV_400            = 0x16,
3224   LSM6DSRX_HP_ODR_DIV_800            = 0x17,
3225   LSM6DSRX_HP_REF_MD_ODR_DIV_10      = 0x31,
3226   LSM6DSRX_HP_REF_MD_ODR_DIV_20      = 0x32,
3227   LSM6DSRX_HP_REF_MD_ODR_DIV_45      = 0x33,
3228   LSM6DSRX_HP_REF_MD_ODR_DIV_100     = 0x34,
3229   LSM6DSRX_HP_REF_MD_ODR_DIV_200     = 0x35,
3230   LSM6DSRX_HP_REF_MD_ODR_DIV_400     = 0x36,
3231   LSM6DSRX_HP_REF_MD_ODR_DIV_800     = 0x37,
3232   LSM6DSRX_LP_ODR_DIV_10             = 0x01,
3233   LSM6DSRX_LP_ODR_DIV_20             = 0x02,
3234   LSM6DSRX_LP_ODR_DIV_45             = 0x03,
3235   LSM6DSRX_LP_ODR_DIV_100            = 0x04,
3236   LSM6DSRX_LP_ODR_DIV_200            = 0x05,
3237   LSM6DSRX_LP_ODR_DIV_400            = 0x06,
3238   LSM6DSRX_LP_ODR_DIV_800            = 0x07,
3239 } lsm6dsrx_hp_slope_xl_en_t;
3240 int32_t lsm6dsrx_xl_hp_path_on_out_set(const stmdev_ctx_t *ctx,
3241                                        lsm6dsrx_hp_slope_xl_en_t val);
3242 int32_t lsm6dsrx_xl_hp_path_on_out_get(const stmdev_ctx_t *ctx,
3243                                        lsm6dsrx_hp_slope_xl_en_t *val);
3244 
3245 int32_t lsm6dsrx_xl_fast_settling_set(const stmdev_ctx_t *ctx, uint8_t val);
3246 int32_t lsm6dsrx_xl_fast_settling_get(const stmdev_ctx_t *ctx, uint8_t *val);
3247 
3248 typedef enum
3249 {
3250   LSM6DSRX_USE_SLOPE = 0,
3251   LSM6DSRX_USE_HPF   = 1,
3252 } lsm6dsrx_slope_fds_t;
3253 int32_t lsm6dsrx_xl_hp_path_internal_set(const stmdev_ctx_t *ctx,
3254                                          lsm6dsrx_slope_fds_t val);
3255 int32_t lsm6dsrx_xl_hp_path_internal_get(const stmdev_ctx_t *ctx,
3256                                          lsm6dsrx_slope_fds_t *val);
3257 
3258 typedef enum
3259 {
3260   LSM6DSRX_HP_FILTER_NONE     = 0x00,
3261   LSM6DSRX_HP_FILTER_16mHz    = 0x80,
3262   LSM6DSRX_HP_FILTER_65mHz    = 0x81,
3263   LSM6DSRX_HP_FILTER_260mHz   = 0x82,
3264   LSM6DSRX_HP_FILTER_1Hz04    = 0x83,
3265 } lsm6dsrx_hpm_g_t;
3266 int32_t lsm6dsrx_gy_hp_path_internal_set(const stmdev_ctx_t *ctx,
3267                                          lsm6dsrx_hpm_g_t val);
3268 int32_t lsm6dsrx_gy_hp_path_internal_get(const stmdev_ctx_t *ctx,
3269                                          lsm6dsrx_hpm_g_t *val);
3270 
3271 typedef enum
3272 {
3273   LSM6DSRX_AUX_PULL_UP_DISC       = 0,
3274   LSM6DSRX_AUX_PULL_UP_CONNECT    = 1,
3275 } lsm6dsrx_ois_pu_dis_t;
3276 int32_t lsm6dsrx_aux_sdo_ocs_mode_set(const stmdev_ctx_t *ctx,
3277                                       lsm6dsrx_ois_pu_dis_t val);
3278 int32_t lsm6dsrx_aux_sdo_ocs_mode_get(const stmdev_ctx_t *ctx,
3279                                       lsm6dsrx_ois_pu_dis_t *val);
3280 
3281 typedef enum
3282 {
3283   LSM6DSRX_AUX_ON                    = 1,
3284   LSM6DSRX_AUX_ON_BY_AUX_INTERFACE   = 0,
3285 } lsm6dsrx_ois_on_t;
3286 int32_t lsm6dsrx_aux_pw_on_ctrl_set(const stmdev_ctx_t *ctx,
3287                                     lsm6dsrx_ois_on_t val);
3288 int32_t lsm6dsrx_aux_pw_on_ctrl_get(const stmdev_ctx_t *ctx,
3289                                     lsm6dsrx_ois_on_t *val);
3290 
3291 int32_t lsm6dsrx_aux_status_reg_get(const stmdev_ctx_t *ctx,
3292                                     lsm6dsrx_status_spiaux_t *val);
3293 
3294 int32_t lsm6dsrx_aux_xl_flag_data_ready_get(const stmdev_ctx_t *ctx,
3295                                             uint8_t *val);
3296 
3297 int32_t lsm6dsrx_aux_gy_flag_data_ready_get(const stmdev_ctx_t *ctx,
3298                                             uint8_t *val);
3299 
3300 int32_t lsm6dsrx_aux_gy_flag_settling_get(const stmdev_ctx_t *ctx,
3301                                           uint8_t *val);
3302 
3303 typedef enum
3304 {
3305   LSM6DSRX_AUX_XL_DISABLE = 0,
3306   LSM6DSRX_AUX_XL_POS     = 1,
3307   LSM6DSRX_AUX_XL_NEG     = 2,
3308 } lsm6dsrx_st_xl_ois_t;
3309 int32_t lsm6dsrx_aux_xl_self_test_set(const stmdev_ctx_t *ctx,
3310                                       lsm6dsrx_st_xl_ois_t val);
3311 int32_t lsm6dsrx_aux_xl_self_test_get(const stmdev_ctx_t *ctx,
3312                                       lsm6dsrx_st_xl_ois_t *val);
3313 
3314 typedef enum
3315 {
3316   LSM6DSRX_AUX_DEN_ACTIVE_LOW     = 0,
3317   LSM6DSRX_AUX_DEN_ACTIVE_HIGH    = 1,
3318 } lsm6dsrx_den_lh_ois_t;
3319 int32_t lsm6dsrx_aux_den_polarity_set(const stmdev_ctx_t *ctx,
3320                                       lsm6dsrx_den_lh_ois_t val);
3321 int32_t lsm6dsrx_aux_den_polarity_get(const stmdev_ctx_t *ctx,
3322                                       lsm6dsrx_den_lh_ois_t *val);
3323 
3324 typedef enum
3325 {
3326   LSM6DSRX_AUX_DEN_DISABLE         = 0,
3327   LSM6DSRX_AUX_DEN_LEVEL_LATCH     = 3,
3328   LSM6DSRX_AUX_DEN_LEVEL_TRIG      = 2,
3329 } lsm6dsrx_lvl2_ois_t;
3330 int32_t lsm6dsrx_aux_den_mode_set(const stmdev_ctx_t *ctx,
3331                                   lsm6dsrx_lvl2_ois_t val);
3332 int32_t lsm6dsrx_aux_den_mode_get(const stmdev_ctx_t *ctx,
3333                                   lsm6dsrx_lvl2_ois_t *val);
3334 
3335 int32_t lsm6dsrx_aux_drdy_on_int2_set(const stmdev_ctx_t *ctx, uint8_t val);
3336 int32_t lsm6dsrx_aux_drdy_on_int2_get(const stmdev_ctx_t *ctx, uint8_t *val);
3337 
3338 typedef enum
3339 {
3340   LSM6DSRX_AUX_DISABLE  = 0,
3341   LSM6DSRX_MODE_3_GY    = 1,
3342   LSM6DSRX_MODE_4_GY_XL = 3,
3343 } lsm6dsrx_ois_en_spi2_t;
3344 int32_t lsm6dsrx_aux_mode_set(const stmdev_ctx_t *ctx,
3345                               lsm6dsrx_ois_en_spi2_t val);
3346 int32_t lsm6dsrx_aux_mode_get(const stmdev_ctx_t *ctx,
3347                               lsm6dsrx_ois_en_spi2_t *val);
3348 
3349 typedef enum
3350 {
3351   LSM6DSRX_125dps_AUX  =  0x04,
3352   LSM6DSRX_250dps_AUX  =  0x00,
3353   LSM6DSRX_500dps_AUX  =  0x01,
3354   LSM6DSRX_1000dps_AUX =  0x02,
3355   LSM6DSRX_2000dps_AUX =  0x03,
3356 } lsm6dsrx_fs_g_ois_t;
3357 int32_t lsm6dsrx_aux_gy_full_scale_set(const stmdev_ctx_t *ctx,
3358                                        lsm6dsrx_fs_g_ois_t val);
3359 int32_t lsm6dsrx_aux_gy_full_scale_get(const stmdev_ctx_t *ctx,
3360                                        lsm6dsrx_fs_g_ois_t *val);
3361 
3362 typedef enum
3363 {
3364   LSM6DSRX_AUX_SPI_4_WIRE = 0,
3365   LSM6DSRX_AUX_SPI_3_WIRE = 1,
3366 } lsm6dsrx_sim_ois_t;
3367 int32_t lsm6dsrx_aux_spi_mode_set(const stmdev_ctx_t *ctx,
3368                                   lsm6dsrx_sim_ois_t val);
3369 int32_t lsm6dsrx_aux_spi_mode_get(const stmdev_ctx_t *ctx,
3370                                   lsm6dsrx_sim_ois_t *val);
3371 
3372 typedef enum
3373 {
3374   LSM6DSRX_351Hz39 = 0,
3375   LSM6DSRX_236Hz63 = 1,
3376   LSM6DSRX_172Hz70 = 2,
3377   LSM6DSRX_937Hz91 = 3,
3378 } lsm6dsrx_ftype_ois_t;
3379 int32_t lsm6dsrx_aux_gy_lp1_bandwidth_set(const stmdev_ctx_t *ctx,
3380                                           lsm6dsrx_ftype_ois_t val);
3381 int32_t lsm6dsrx_aux_gy_lp1_bandwidth_get(const stmdev_ctx_t *ctx,
3382                                           lsm6dsrx_ftype_ois_t *val);
3383 
3384 typedef enum
3385 {
3386   LSM6DSRX_AUX_HP_DISABLE = 0x00,
3387   LSM6DSRX_AUX_HP_Hz016   = 0x10,
3388   LSM6DSRX_AUX_HP_Hz065   = 0x11,
3389   LSM6DSRX_AUX_HP_Hz260   = 0x12,
3390   LSM6DSRX_AUX_HP_1Hz040  = 0x13,
3391 } lsm6dsrx_hpm_ois_t;
3392 int32_t lsm6dsrx_aux_gy_hp_bandwidth_set(const stmdev_ctx_t *ctx,
3393                                          lsm6dsrx_hpm_ois_t val);
3394 int32_t lsm6dsrx_aux_gy_hp_bandwidth_get(const stmdev_ctx_t *ctx,
3395                                          lsm6dsrx_hpm_ois_t *val);
3396 
3397 typedef enum
3398 {
3399   LSM6DSRX_ENABLE_CLAMP  = 0,
3400   LSM6DSRX_DISABLE_CLAMP = 1,
3401 } lsm6dsrx_st_ois_clampdis_t;
3402 int32_t lsm6dsrx_aux_gy_clamp_set(const stmdev_ctx_t *ctx,
3403                                   lsm6dsrx_st_ois_clampdis_t val);
3404 int32_t lsm6dsrx_aux_gy_clamp_get(const stmdev_ctx_t *ctx,
3405                                   lsm6dsrx_st_ois_clampdis_t *val);
3406 
3407 typedef enum
3408 {
3409   LSM6DSRX_AUX_GY_DISABLE = 0,
3410   LSM6DSRX_AUX_GY_POS     = 1,
3411   LSM6DSRX_AUX_GY_NEG     = 3,
3412 } lsm6dsrx_st_ois_t;
3413 int32_t lsm6dsrx_aux_gy_self_test_set(const stmdev_ctx_t *ctx,
3414                                       lsm6dsrx_st_ois_t val);
3415 int32_t lsm6dsrx_aux_gy_self_test_get(const stmdev_ctx_t *ctx,
3416                                       lsm6dsrx_st_ois_t *val);
3417 
3418 typedef enum
3419 {
3420   LSM6DSRX_631Hz = 0,
3421   LSM6DSRX_295Hz = 1,
3422   LSM6DSRX_140Hz = 2,
3423   LSM6DSRX_68Hz2 = 3,
3424   LSM6DSRX_33Hz6 = 4,
3425   LSM6DSRX_16Hz7 = 5,
3426   LSM6DSRX_8Hz3  = 6,
3427   LSM6DSRX_4Hz11 = 7,
3428 } lsm6dsrx_filter_xl_conf_ois_t;
3429 int32_t lsm6dsrx_aux_xl_bandwidth_set(const stmdev_ctx_t *ctx,
3430                                       lsm6dsrx_filter_xl_conf_ois_t val);
3431 int32_t lsm6dsrx_aux_xl_bandwidth_get(const stmdev_ctx_t *ctx,
3432                                       lsm6dsrx_filter_xl_conf_ois_t *val);
3433 
3434 typedef enum
3435 {
3436   LSM6DSRX_AUX_2g  = 0,
3437   LSM6DSRX_AUX_16g = 1,
3438   LSM6DSRX_AUX_4g  = 2,
3439   LSM6DSRX_AUX_8g  = 3,
3440 } lsm6dsrx_fs_xl_ois_t;
3441 int32_t lsm6dsrx_aux_xl_full_scale_set(const stmdev_ctx_t *ctx,
3442                                        lsm6dsrx_fs_xl_ois_t val);
3443 int32_t lsm6dsrx_aux_xl_full_scale_get(const stmdev_ctx_t *ctx,
3444                                        lsm6dsrx_fs_xl_ois_t *val);
3445 
3446 typedef enum
3447 {
3448   LSM6DSRX_PULL_UP_DISC       = 0,
3449   LSM6DSRX_PULL_UP_CONNECT    = 1,
3450 } lsm6dsrx_sdo_pu_en_t;
3451 int32_t lsm6dsrx_sdo_sa0_mode_set(const stmdev_ctx_t *ctx,
3452                                   lsm6dsrx_sdo_pu_en_t val);
3453 int32_t lsm6dsrx_sdo_sa0_mode_get(const stmdev_ctx_t *ctx,
3454                                   lsm6dsrx_sdo_pu_en_t *val);
3455 
3456 typedef enum
3457 {
3458   LSM6DSRX_PULL_DOWN_CONNECT       = 0,
3459   LSM6DSRX_PULL_DOWN_DISC          = 1,
3460 } lsm6dsrx_pd_dis_int1_t;
3461 int32_t lsm6dsrx_int1_mode_set(const stmdev_ctx_t *ctx,
3462                                lsm6dsrx_pd_dis_int1_t val);
3463 int32_t lsm6dsrx_int1_mode_get(const stmdev_ctx_t *ctx,
3464                                lsm6dsrx_pd_dis_int1_t *val);
3465 
3466 typedef enum
3467 {
3468   LSM6DSRX_SPI_4_WIRE = 0,
3469   LSM6DSRX_SPI_3_WIRE = 1,
3470 } lsm6dsrx_sim_t;
3471 int32_t lsm6dsrx_spi_mode_set(const stmdev_ctx_t *ctx,
3472                               lsm6dsrx_sim_t val);
3473 int32_t lsm6dsrx_spi_mode_get(const stmdev_ctx_t *ctx,
3474                               lsm6dsrx_sim_t *val);
3475 
3476 typedef enum
3477 {
3478   LSM6DSRX_I2C_ENABLE  = 0,
3479   LSM6DSRX_I2C_DISABLE = 1,
3480 } lsm6dsrx_i2c_disable_t;
3481 int32_t lsm6dsrx_i2c_interface_set(const stmdev_ctx_t *ctx,
3482                                    lsm6dsrx_i2c_disable_t val);
3483 int32_t lsm6dsrx_i2c_interface_get(const stmdev_ctx_t *ctx,
3484                                    lsm6dsrx_i2c_disable_t *val);
3485 
3486 typedef enum
3487 {
3488   LSM6DSRX_I3C_DISABLE         = 0x80,
3489   LSM6DSRX_I3C_ENABLE_T_50us   = 0x00,
3490   LSM6DSRX_I3C_ENABLE_T_2us    = 0x01,
3491   LSM6DSRX_I3C_ENABLE_T_1ms    = 0x02,
3492   LSM6DSRX_I3C_ENABLE_T_25ms   = 0x03,
3493 } lsm6dsrx_i3c_disable_t;
3494 int32_t lsm6dsrx_i3c_disable_set(const stmdev_ctx_t *ctx,
3495                                  lsm6dsrx_i3c_disable_t val);
3496 int32_t lsm6dsrx_i3c_disable_get(const stmdev_ctx_t *ctx,
3497                                  lsm6dsrx_i3c_disable_t *val);
3498 
3499 typedef struct
3500 {
3501   lsm6dsrx_int1_ctrl_t          int1_ctrl;
3502   lsm6dsrx_md1_cfg_t            md1_cfg;
3503   lsm6dsrx_emb_func_int1_t      emb_func_int1;
3504   lsm6dsrx_fsm_int1_a_t         fsm_int1_a;
3505   lsm6dsrx_fsm_int1_b_t         fsm_int1_b;
3506   lsm6dsrx_mlc_int1_t           mlc_int1;
3507 } lsm6dsrx_pin_int1_route_t;
3508 int32_t lsm6dsrx_pin_int1_route_set(const stmdev_ctx_t *ctx,
3509                                     lsm6dsrx_pin_int1_route_t *val);
3510 int32_t lsm6dsrx_pin_int1_route_get(const stmdev_ctx_t *ctx,
3511                                     lsm6dsrx_pin_int1_route_t *val);
3512 
3513 typedef struct
3514 {
3515   lsm6dsrx_int2_ctrl_t          int2_ctrl;
3516   lsm6dsrx_md2_cfg_t            md2_cfg;
3517   lsm6dsrx_emb_func_int2_t      emb_func_int2;
3518   lsm6dsrx_fsm_int2_a_t         fsm_int2_a;
3519   lsm6dsrx_fsm_int2_b_t         fsm_int2_b;
3520   lsm6dsrx_mlc_int2_t           mlc_int2;
3521 } lsm6dsrx_pin_int2_route_t;
3522 int32_t lsm6dsrx_pin_int2_route_set(const stmdev_ctx_t *ctx,
3523                                     lsm6dsrx_pin_int2_route_t *val);
3524 int32_t lsm6dsrx_pin_int2_route_get(const stmdev_ctx_t *ctx,
3525                                     lsm6dsrx_pin_int2_route_t *val);
3526 
3527 typedef enum
3528 {
3529   LSM6DSRX_PUSH_PULL   = 0,
3530   LSM6DSRX_OPEN_DRAIN  = 1,
3531 } lsm6dsrx_pp_od_t;
3532 int32_t lsm6dsrx_pin_mode_set(const stmdev_ctx_t *ctx,
3533                               lsm6dsrx_pp_od_t val);
3534 int32_t lsm6dsrx_pin_mode_get(const stmdev_ctx_t *ctx,
3535                               lsm6dsrx_pp_od_t *val);
3536 
3537 typedef enum
3538 {
3539   LSM6DSRX_ACTIVE_HIGH = 0,
3540   LSM6DSRX_ACTIVE_LOW  = 1,
3541 } lsm6dsrx_h_lactive_t;
3542 int32_t lsm6dsrx_pin_polarity_set(const stmdev_ctx_t *ctx,
3543                                   lsm6dsrx_h_lactive_t val);
3544 int32_t lsm6dsrx_pin_polarity_get(const stmdev_ctx_t *ctx,
3545                                   lsm6dsrx_h_lactive_t *val);
3546 
3547 int32_t lsm6dsrx_all_on_int1_set(const stmdev_ctx_t *ctx, uint8_t val);
3548 int32_t lsm6dsrx_all_on_int1_get(const stmdev_ctx_t *ctx, uint8_t *val);
3549 
3550 typedef enum
3551 {
3552   LSM6DSRX_ALL_INT_PULSED            = 0,
3553   LSM6DSRX_BASE_LATCHED_EMB_PULSED   = 1,
3554   LSM6DSRX_BASE_PULSED_EMB_LATCHED   = 2,
3555   LSM6DSRX_ALL_INT_LATCHED           = 3,
3556 } lsm6dsrx_lir_t;
3557 int32_t lsm6dsrx_int_notification_set(const stmdev_ctx_t *ctx,
3558                                       lsm6dsrx_lir_t val);
3559 int32_t lsm6dsrx_int_notification_get(const stmdev_ctx_t *ctx,
3560                                       lsm6dsrx_lir_t *val);
3561 
3562 typedef enum
3563 {
3564   LSM6DSRX_LSb_FS_DIV_64       = 0,
3565   LSM6DSRX_LSb_FS_DIV_256      = 1,
3566 } lsm6dsrx_wake_ths_w_t;
3567 int32_t lsm6dsrx_wkup_ths_weight_set(const stmdev_ctx_t *ctx,
3568                                      lsm6dsrx_wake_ths_w_t val);
3569 int32_t lsm6dsrx_wkup_ths_weight_get(const stmdev_ctx_t *ctx,
3570                                      lsm6dsrx_wake_ths_w_t *val);
3571 
3572 int32_t lsm6dsrx_wkup_threshold_set(const stmdev_ctx_t *ctx, uint8_t val);
3573 int32_t lsm6dsrx_wkup_threshold_get(const stmdev_ctx_t *ctx,
3574                                     uint8_t *val);
3575 
3576 int32_t lsm6dsrx_xl_usr_offset_on_wkup_set(const stmdev_ctx_t *ctx,
3577                                            uint8_t val);
3578 int32_t lsm6dsrx_xl_usr_offset_on_wkup_get(const stmdev_ctx_t *ctx,
3579                                            uint8_t *val);
3580 
3581 int32_t lsm6dsrx_wkup_dur_set(const stmdev_ctx_t *ctx, uint8_t val);
3582 int32_t lsm6dsrx_wkup_dur_get(const stmdev_ctx_t *ctx, uint8_t *val);
3583 
3584 int32_t lsm6dsrx_gy_sleep_mode_set(const stmdev_ctx_t *ctx, uint8_t val);
3585 int32_t lsm6dsrx_gy_sleep_mode_get(const stmdev_ctx_t *ctx, uint8_t *val);
3586 
3587 typedef enum
3588 {
3589   LSM6DSRX_DRIVE_SLEEP_CHG_EVENT = 0,
3590   LSM6DSRX_DRIVE_SLEEP_STATUS    = 1,
3591 } lsm6dsrx_sleep_status_on_int_t;
3592 int32_t lsm6dsrx_act_pin_notification_set(const stmdev_ctx_t *ctx,
3593                                           lsm6dsrx_sleep_status_on_int_t val);
3594 int32_t lsm6dsrx_act_pin_notification_get(const stmdev_ctx_t *ctx,
3595                                           lsm6dsrx_sleep_status_on_int_t *val);
3596 
3597 typedef enum
3598 {
3599   LSM6DSRX_XL_AND_GY_NOT_AFFECTED      = 0,
3600   LSM6DSRX_XL_12Hz5_GY_NOT_AFFECTED    = 1,
3601   LSM6DSRX_XL_12Hz5_GY_SLEEP           = 2,
3602   LSM6DSRX_XL_12Hz5_GY_PD              = 3,
3603 } lsm6dsrx_inact_en_t;
3604 int32_t lsm6dsrx_act_mode_set(const stmdev_ctx_t *ctx,
3605                               lsm6dsrx_inact_en_t val);
3606 int32_t lsm6dsrx_act_mode_get(const stmdev_ctx_t *ctx,
3607                               lsm6dsrx_inact_en_t *val);
3608 
3609 int32_t lsm6dsrx_act_sleep_dur_set(const stmdev_ctx_t *ctx, uint8_t val);
3610 int32_t lsm6dsrx_act_sleep_dur_get(const stmdev_ctx_t *ctx, uint8_t *val);
3611 
3612 int32_t lsm6dsrx_tap_detection_on_z_set(const stmdev_ctx_t *ctx,
3613                                         uint8_t val);
3614 int32_t lsm6dsrx_tap_detection_on_z_get(const stmdev_ctx_t *ctx,
3615                                         uint8_t *val);
3616 
3617 int32_t lsm6dsrx_tap_detection_on_y_set(const stmdev_ctx_t *ctx,
3618                                         uint8_t val);
3619 int32_t lsm6dsrx_tap_detection_on_y_get(const stmdev_ctx_t *ctx,
3620                                         uint8_t *val);
3621 
3622 int32_t lsm6dsrx_tap_detection_on_x_set(const stmdev_ctx_t *ctx,
3623                                         uint8_t val);
3624 int32_t lsm6dsrx_tap_detection_on_x_get(const stmdev_ctx_t *ctx,
3625                                         uint8_t *val);
3626 
3627 int32_t lsm6dsrx_tap_threshold_x_set(const stmdev_ctx_t *ctx,
3628                                      uint8_t val);
3629 int32_t lsm6dsrx_tap_threshold_x_get(const stmdev_ctx_t *ctx,
3630                                      uint8_t *val);
3631 
3632 typedef enum
3633 {
3634   LSM6DSRX_XYZ = 0,
3635   LSM6DSRX_YXZ = 1,
3636   LSM6DSRX_XZY = 2,
3637   LSM6DSRX_ZYX = 3,
3638   LSM6DSRX_YZX = 5,
3639   LSM6DSRX_ZXY = 6,
3640 } lsm6dsrx_tap_priority_t;
3641 int32_t lsm6dsrx_tap_axis_priority_set(const stmdev_ctx_t *ctx,
3642                                        lsm6dsrx_tap_priority_t val);
3643 int32_t lsm6dsrx_tap_axis_priority_get(const stmdev_ctx_t *ctx,
3644                                        lsm6dsrx_tap_priority_t *val);
3645 
3646 int32_t lsm6dsrx_tap_threshold_y_set(const stmdev_ctx_t *ctx,
3647                                      uint8_t val);
3648 int32_t lsm6dsrx_tap_threshold_y_get(const stmdev_ctx_t *ctx,
3649                                      uint8_t *val);
3650 
3651 int32_t lsm6dsrx_tap_threshold_z_set(const stmdev_ctx_t *ctx,
3652                                      uint8_t val);
3653 int32_t lsm6dsrx_tap_threshold_z_get(const stmdev_ctx_t *ctx,
3654                                      uint8_t *val);
3655 
3656 int32_t lsm6dsrx_tap_shock_set(const stmdev_ctx_t *ctx, uint8_t val);
3657 int32_t lsm6dsrx_tap_shock_get(const stmdev_ctx_t *ctx, uint8_t *val);
3658 
3659 int32_t lsm6dsrx_tap_quiet_set(const stmdev_ctx_t *ctx, uint8_t val);
3660 int32_t lsm6dsrx_tap_quiet_get(const stmdev_ctx_t *ctx, uint8_t *val);
3661 
3662 int32_t lsm6dsrx_tap_dur_set(const stmdev_ctx_t *ctx, uint8_t val);
3663 int32_t lsm6dsrx_tap_dur_get(const stmdev_ctx_t *ctx, uint8_t *val);
3664 
3665 typedef enum
3666 {
3667   LSM6DSRX_ONLY_SINGLE        = 0,
3668   LSM6DSRX_BOTH_SINGLE_DOUBLE = 1,
3669 } lsm6dsrx_single_double_tap_t;
3670 int32_t lsm6dsrx_tap_mode_set(const stmdev_ctx_t *ctx,
3671                               lsm6dsrx_single_double_tap_t val);
3672 int32_t lsm6dsrx_tap_mode_get(const stmdev_ctx_t *ctx,
3673                               lsm6dsrx_single_double_tap_t *val);
3674 
3675 typedef enum
3676 {
3677   LSM6DSRX_DEG_80  = 0,
3678   LSM6DSRX_DEG_70  = 1,
3679   LSM6DSRX_DEG_60  = 2,
3680   LSM6DSRX_DEG_50  = 3,
3681 } lsm6dsrx_sixd_ths_t;
3682 int32_t lsm6dsrx_6d_threshold_set(const stmdev_ctx_t *ctx,
3683                                   lsm6dsrx_sixd_ths_t val);
3684 int32_t lsm6dsrx_6d_threshold_get(const stmdev_ctx_t *ctx,
3685                                   lsm6dsrx_sixd_ths_t *val);
3686 
3687 int32_t lsm6dsrx_4d_mode_set(const stmdev_ctx_t *ctx, uint8_t val);
3688 int32_t lsm6dsrx_4d_mode_get(const stmdev_ctx_t *ctx, uint8_t *val);
3689 
3690 typedef enum
3691 {
3692   LSM6DSRX_FF_TSH_156mg = 0,
3693   LSM6DSRX_FF_TSH_219mg = 1,
3694   LSM6DSRX_FF_TSH_250mg = 2,
3695   LSM6DSRX_FF_TSH_312mg = 3,
3696   LSM6DSRX_FF_TSH_344mg = 4,
3697   LSM6DSRX_FF_TSH_406mg = 5,
3698   LSM6DSRX_FF_TSH_469mg = 6,
3699   LSM6DSRX_FF_TSH_500mg = 7,
3700 } lsm6dsrx_ff_ths_t;
3701 int32_t lsm6dsrx_ff_threshold_set(const stmdev_ctx_t *ctx,
3702                                   lsm6dsrx_ff_ths_t val);
3703 int32_t lsm6dsrx_ff_threshold_get(const stmdev_ctx_t *ctx,
3704                                   lsm6dsrx_ff_ths_t *val);
3705 
3706 int32_t lsm6dsrx_ff_dur_set(const stmdev_ctx_t *ctx, uint8_t val);
3707 int32_t lsm6dsrx_ff_dur_get(const stmdev_ctx_t *ctx, uint8_t *val);
3708 
3709 int32_t lsm6dsrx_fifo_watermark_set(const stmdev_ctx_t *ctx,
3710                                     uint16_t val);
3711 int32_t lsm6dsrx_fifo_watermark_get(const stmdev_ctx_t *ctx,
3712                                     uint16_t *val);
3713 
3714 int32_t lsm6dsrx_compression_algo_init_set(const stmdev_ctx_t *ctx,
3715                                            uint8_t val);
3716 int32_t lsm6dsrx_compression_algo_init_get(const stmdev_ctx_t *ctx,
3717                                            uint8_t *val);
3718 
3719 typedef enum
3720 {
3721   LSM6DSRX_CMP_DISABLE  = 0x00,
3722   LSM6DSRX_CMP_ALWAYS   = 0x04,
3723   LSM6DSRX_CMP_8_TO_1   = 0x05,
3724   LSM6DSRX_CMP_16_TO_1  = 0x06,
3725   LSM6DSRX_CMP_32_TO_1  = 0x07,
3726 } lsm6dsrx_uncoptr_rate_t;
3727 int32_t lsm6dsrx_compression_algo_set(const stmdev_ctx_t *ctx,
3728                                       lsm6dsrx_uncoptr_rate_t val);
3729 int32_t lsm6dsrx_compression_algo_get(const stmdev_ctx_t *ctx,
3730                                       lsm6dsrx_uncoptr_rate_t *val);
3731 
3732 int32_t lsm6dsrx_fifo_virtual_sens_odr_chg_set(const stmdev_ctx_t *ctx,
3733                                                uint8_t val);
3734 int32_t lsm6dsrx_fifo_virtual_sens_odr_chg_get(const stmdev_ctx_t *ctx,
3735                                                uint8_t *val);
3736 
3737 int32_t lsm6dsrx_compression_algo_real_time_set(const stmdev_ctx_t *ctx,
3738                                                 uint8_t val);
3739 int32_t lsm6dsrx_compression_algo_real_time_get(const stmdev_ctx_t *ctx,
3740                                                 uint8_t *val);
3741 
3742 int32_t lsm6dsrx_fifo_stop_on_wtm_set(const stmdev_ctx_t *ctx,
3743                                       uint8_t val);
3744 int32_t lsm6dsrx_fifo_stop_on_wtm_get(const stmdev_ctx_t *ctx,
3745                                       uint8_t *val);
3746 
3747 typedef enum
3748 {
3749   LSM6DSRX_XL_NOT_BATCHED       =  0,
3750   LSM6DSRX_XL_BATCHED_AT_12Hz5   =  1,
3751   LSM6DSRX_XL_BATCHED_AT_26Hz    =  2,
3752   LSM6DSRX_XL_BATCHED_AT_52Hz    =  3,
3753   LSM6DSRX_XL_BATCHED_AT_104Hz   =  4,
3754   LSM6DSRX_XL_BATCHED_AT_208Hz   =  5,
3755   LSM6DSRX_XL_BATCHED_AT_417Hz   =  6,
3756   LSM6DSRX_XL_BATCHED_AT_833Hz   =  7,
3757   LSM6DSRX_XL_BATCHED_AT_1667Hz  =  8,
3758   LSM6DSRX_XL_BATCHED_AT_3333Hz  =  9,
3759   LSM6DSRX_XL_BATCHED_AT_6667Hz  = 10,
3760   LSM6DSRX_XL_BATCHED_AT_6Hz5    = 11,
3761 } lsm6dsrx_bdr_xl_t;
3762 int32_t lsm6dsrx_fifo_xl_batch_set(const stmdev_ctx_t *ctx,
3763                                    lsm6dsrx_bdr_xl_t val);
3764 int32_t lsm6dsrx_fifo_xl_batch_get(const stmdev_ctx_t *ctx,
3765                                    lsm6dsrx_bdr_xl_t *val);
3766 
3767 typedef enum
3768 {
3769   LSM6DSRX_GY_NOT_BATCHED         = 0,
3770   LSM6DSRX_GY_BATCHED_AT_12Hz5    = 1,
3771   LSM6DSRX_GY_BATCHED_AT_26Hz     = 2,
3772   LSM6DSRX_GY_BATCHED_AT_52Hz     = 3,
3773   LSM6DSRX_GY_BATCHED_AT_104Hz    = 4,
3774   LSM6DSRX_GY_BATCHED_AT_208Hz    = 5,
3775   LSM6DSRX_GY_BATCHED_AT_417Hz    = 6,
3776   LSM6DSRX_GY_BATCHED_AT_833Hz    = 7,
3777   LSM6DSRX_GY_BATCHED_AT_1667Hz   = 8,
3778   LSM6DSRX_GY_BATCHED_AT_3333Hz   = 9,
3779   LSM6DSRX_GY_BATCHED_AT_6667Hz   = 10,
3780   LSM6DSRX_GY_BATCHED_6Hz5        = 11,
3781 } lsm6dsrx_bdr_gy_t;
3782 int32_t lsm6dsrx_fifo_gy_batch_set(const stmdev_ctx_t *ctx,
3783                                    lsm6dsrx_bdr_gy_t val);
3784 int32_t lsm6dsrx_fifo_gy_batch_get(const stmdev_ctx_t *ctx,
3785                                    lsm6dsrx_bdr_gy_t *val);
3786 
3787 typedef enum
3788 {
3789   LSM6DSRX_BYPASS_MODE             = 0,
3790   LSM6DSRX_FIFO_MODE               = 1,
3791   LSM6DSRX_STREAM_TO_FIFO_MODE     = 3,
3792   LSM6DSRX_BYPASS_TO_STREAM_MODE   = 4,
3793   LSM6DSRX_STREAM_MODE             = 6,
3794   LSM6DSRX_BYPASS_TO_FIFO_MODE     = 7,
3795 } lsm6dsrx_fifo_mode_t;
3796 int32_t lsm6dsrx_fifo_mode_set(const stmdev_ctx_t *ctx,
3797                                lsm6dsrx_fifo_mode_t val);
3798 int32_t lsm6dsrx_fifo_mode_get(const stmdev_ctx_t *ctx,
3799                                lsm6dsrx_fifo_mode_t *val);
3800 
3801 typedef enum
3802 {
3803   LSM6DSRX_TEMP_NOT_BATCHED        = 0,
3804   LSM6DSRX_TEMP_BATCHED_AT_52Hz    = 1,
3805   LSM6DSRX_TEMP_BATCHED_AT_12Hz5   = 2,
3806   LSM6DSRX_TEMP_BATCHED_AT_1Hz6    = 3,
3807 } lsm6dsrx_odr_t_batch_t;
3808 int32_t lsm6dsrx_fifo_temp_batch_set(const stmdev_ctx_t *ctx,
3809                                      lsm6dsrx_odr_t_batch_t val);
3810 int32_t lsm6dsrx_fifo_temp_batch_get(const stmdev_ctx_t *ctx,
3811                                      lsm6dsrx_odr_t_batch_t *val);
3812 
3813 typedef enum
3814 {
3815   LSM6DSRX_NO_DECIMATION = 0,
3816   LSM6DSRX_DEC_1         = 1,
3817   LSM6DSRX_DEC_8         = 2,
3818   LSM6DSRX_DEC_32        = 3,
3819 } lsm6dsrx_odr_ts_batch_t;
3820 int32_t lsm6dsrx_fifo_timestamp_decimation_set(const stmdev_ctx_t *ctx,
3821                                                lsm6dsrx_odr_ts_batch_t val);
3822 int32_t lsm6dsrx_fifo_timestamp_decimation_get(const stmdev_ctx_t *ctx,
3823                                                lsm6dsrx_odr_ts_batch_t *val);
3824 
3825 typedef enum
3826 {
3827   LSM6DSRX_XL_BATCH_EVENT   = 0,
3828   LSM6DSRX_GYRO_BATCH_EVENT = 1,
3829 } lsm6dsrx_trig_counter_bdr_t;
3830 int32_t lsm6dsrx_fifo_cnt_event_batch_set(const stmdev_ctx_t *ctx,
3831                                           lsm6dsrx_trig_counter_bdr_t val);
3832 int32_t lsm6dsrx_fifo_cnt_event_batch_get(const stmdev_ctx_t *ctx,
3833                                           lsm6dsrx_trig_counter_bdr_t *val);
3834 
3835 int32_t lsm6dsrx_rst_batch_counter_set(const stmdev_ctx_t *ctx,
3836                                        uint8_t val);
3837 int32_t lsm6dsrx_rst_batch_counter_get(const stmdev_ctx_t *ctx,
3838                                        uint8_t *val);
3839 
3840 int32_t lsm6dsrx_batch_counter_threshold_set(const stmdev_ctx_t *ctx,
3841                                              uint16_t val);
3842 int32_t lsm6dsrx_batch_counter_threshold_get(const stmdev_ctx_t *ctx,
3843                                              uint16_t *val);
3844 
3845 int32_t lsm6dsrx_fifo_data_level_get(const stmdev_ctx_t *ctx,
3846                                      uint16_t *val);
3847 
3848 int32_t lsm6dsrx_fifo_status_get(const stmdev_ctx_t *ctx,
3849                                  lsm6dsrx_fifo_status2_t *val);
3850 
3851 int32_t lsm6dsrx_fifo_full_flag_get(const stmdev_ctx_t *ctx,
3852                                     uint8_t *val);
3853 
3854 int32_t lsm6dsrx_fifo_ovr_flag_get(const stmdev_ctx_t *ctx, uint8_t *val);
3855 
3856 int32_t lsm6dsrx_fifo_wtm_flag_get(const stmdev_ctx_t *ctx, uint8_t *val);
3857 
3858 typedef enum
3859 {
3860   LSM6DSRX_GYRO_NC_TAG    = 1,
3861   LSM6DSRX_XL_NC_TAG,
3862   LSM6DSRX_TEMPERATURE_TAG,
3863   LSM6DSRX_TIMESTAMP_TAG,
3864   LSM6DSRX_CFG_CHANGE_TAG,
3865   LSM6DSRX_XL_NC_T_2_TAG,
3866   LSM6DSRX_XL_NC_T_1_TAG,
3867   LSM6DSRX_XL_2XC_TAG,
3868   LSM6DSRX_XL_3XC_TAG,
3869   LSM6DSRX_GYRO_NC_T_2_TAG,
3870   LSM6DSRX_GYRO_NC_T_1_TAG,
3871   LSM6DSRX_GYRO_2XC_TAG,
3872   LSM6DSRX_GYRO_3XC_TAG,
3873   LSM6DSRX_SENSORHUB_SLAVE0_TAG,
3874   LSM6DSRX_SENSORHUB_SLAVE1_TAG,
3875   LSM6DSRX_SENSORHUB_SLAVE2_TAG,
3876   LSM6DSRX_SENSORHUB_SLAVE3_TAG,
3877   LSM6DSRX_STEP_CPUNTER_TAG,
3878   LSM6DSRX_GAME_ROTATION_TAG,
3879   LSM6DSRX_GEOMAG_ROTATION_TAG,
3880   LSM6DSRX_ROTATION_TAG,
3881   LSM6DSRX_SENSORHUB_NACK_TAG = 0x19,
3882 } lsm6dsrx_fifo_tag_t;
3883 int32_t lsm6dsrx_fifo_sensor_tag_get(const stmdev_ctx_t *ctx,
3884                                      lsm6dsrx_fifo_tag_t *val);
3885 
3886 int32_t lsm6dsrx_fifo_pedo_batch_set(const stmdev_ctx_t *ctx,
3887                                      uint8_t val);
3888 int32_t lsm6dsrx_fifo_pedo_batch_get(const stmdev_ctx_t *ctx,
3889                                      uint8_t *val);
3890 
3891 int32_t lsm6dsrx_sh_batch_slave_0_set(const stmdev_ctx_t *ctx,
3892                                       uint8_t val);
3893 int32_t lsm6dsrx_sh_batch_slave_0_get(const stmdev_ctx_t *ctx,
3894                                       uint8_t *val);
3895 
3896 int32_t lsm6dsrx_sh_batch_slave_1_set(const stmdev_ctx_t *ctx,
3897                                       uint8_t val);
3898 int32_t lsm6dsrx_sh_batch_slave_1_get(const stmdev_ctx_t *ctx,
3899                                       uint8_t *val);
3900 
3901 int32_t lsm6dsrx_sh_batch_slave_2_set(const stmdev_ctx_t *ctx,
3902                                       uint8_t val);
3903 int32_t lsm6dsrx_sh_batch_slave_2_get(const stmdev_ctx_t *ctx,
3904                                       uint8_t *val);
3905 
3906 int32_t lsm6dsrx_sh_batch_slave_3_set(const stmdev_ctx_t *ctx,
3907                                       uint8_t val);
3908 int32_t lsm6dsrx_sh_batch_slave_3_get(const stmdev_ctx_t *ctx,
3909                                       uint8_t *val);
3910 
3911 typedef enum
3912 {
3913   LSM6DSRX_DEN_DISABLE    = 0,
3914   LSM6DSRX_LEVEL_FIFO     = 6,
3915   LSM6DSRX_LEVEL_LETCHED  = 3,
3916   LSM6DSRX_LEVEL_TRIGGER  = 2,
3917   LSM6DSRX_EDGE_TRIGGER   = 4,
3918 } lsm6dsrx_den_mode_t;
3919 int32_t lsm6dsrx_den_mode_set(const stmdev_ctx_t *ctx,
3920                               lsm6dsrx_den_mode_t val);
3921 int32_t lsm6dsrx_den_mode_get(const stmdev_ctx_t *ctx,
3922                               lsm6dsrx_den_mode_t *val);
3923 
3924 typedef enum
3925 {
3926   LSM6DSRX_DEN_ACT_LOW  = 0,
3927   LSM6DSRX_DEN_ACT_HIGH = 1,
3928 } lsm6dsrx_den_lh_t;
3929 int32_t lsm6dsrx_den_polarity_set(const stmdev_ctx_t *ctx,
3930                                   lsm6dsrx_den_lh_t val);
3931 int32_t lsm6dsrx_den_polarity_get(const stmdev_ctx_t *ctx,
3932                                   lsm6dsrx_den_lh_t *val);
3933 
3934 typedef enum
3935 {
3936   LSM6DSRX_STAMP_IN_GY_DATA     = 0,
3937   LSM6DSRX_STAMP_IN_XL_DATA     = 1,
3938   LSM6DSRX_STAMP_IN_GY_XL_DATA  = 2,
3939 } lsm6dsrx_den_xl_g_t;
3940 int32_t lsm6dsrx_den_enable_set(const stmdev_ctx_t *ctx,
3941                                 lsm6dsrx_den_xl_g_t val);
3942 int32_t lsm6dsrx_den_enable_get(const stmdev_ctx_t *ctx,
3943                                 lsm6dsrx_den_xl_g_t *val);
3944 
3945 int32_t lsm6dsrx_den_mark_axis_x_set(const stmdev_ctx_t *ctx,
3946                                      uint8_t val);
3947 int32_t lsm6dsrx_den_mark_axis_x_get(const stmdev_ctx_t *ctx,
3948                                      uint8_t *val);
3949 
3950 int32_t lsm6dsrx_den_mark_axis_y_set(const stmdev_ctx_t *ctx,
3951                                      uint8_t val);
3952 int32_t lsm6dsrx_den_mark_axis_y_get(const stmdev_ctx_t *ctx,
3953                                      uint8_t *val);
3954 
3955 int32_t lsm6dsrx_den_mark_axis_z_set(const stmdev_ctx_t *ctx,
3956                                      uint8_t val);
3957 int32_t lsm6dsrx_den_mark_axis_z_get(const stmdev_ctx_t *ctx,
3958                                      uint8_t *val);
3959 
3960 int32_t lsm6dsrx_pedo_sens_set(const stmdev_ctx_t *ctx, uint8_t val);
3961 int32_t lsm6dsrx_pedo_sens_get(const stmdev_ctx_t *ctx, uint8_t *val);
3962 
3963 int32_t lsm6dsrx_pedo_step_detect_get(const stmdev_ctx_t *ctx,
3964                                       uint8_t *val);
3965 
3966 int32_t lsm6dsrx_pedo_debounce_steps_set(const stmdev_ctx_t *ctx,
3967                                          uint8_t *val);
3968 int32_t lsm6dsrx_pedo_debounce_steps_get(const stmdev_ctx_t *ctx,
3969                                          uint8_t *val);
3970 
3971 int32_t lsm6dsrx_pedo_steps_period_set(const stmdev_ctx_t *ctx,
3972                                        uint16_t val);
3973 int32_t lsm6dsrx_pedo_steps_period_get(const stmdev_ctx_t *ctx,
3974                                        uint16_t *val);
3975 
3976 typedef enum
3977 {
3978   LSM6DSRX_EVERY_STEP     = 0,
3979   LSM6DSRX_COUNT_OVERFLOW = 1,
3980 } lsm6dsrx_carry_count_en_t;
3981 int32_t lsm6dsrx_pedo_int_mode_set(const stmdev_ctx_t *ctx,
3982                                    lsm6dsrx_carry_count_en_t val);
3983 int32_t lsm6dsrx_pedo_int_mode_get(const stmdev_ctx_t *ctx,
3984                                    lsm6dsrx_carry_count_en_t *val);
3985 
3986 int32_t lsm6dsrx_motion_sens_set(const stmdev_ctx_t *ctx, uint8_t val);
3987 int32_t lsm6dsrx_motion_sens_get(const stmdev_ctx_t *ctx, uint8_t *val);
3988 
3989 int32_t lsm6dsrx_motion_flag_data_ready_get(const stmdev_ctx_t *ctx,
3990                                             uint8_t *val);
3991 
3992 int32_t lsm6dsrx_tilt_sens_set(const stmdev_ctx_t *ctx, uint8_t val);
3993 int32_t lsm6dsrx_tilt_sens_get(const stmdev_ctx_t *ctx, uint8_t *val);
3994 
3995 int32_t lsm6dsrx_tilt_flag_data_ready_get(const stmdev_ctx_t *ctx,
3996                                           uint8_t *val);
3997 
3998 int32_t lsm6dsrx_mag_sensitivity_set(const stmdev_ctx_t *ctx,
3999                                      uint16_t val);
4000 int32_t lsm6dsrx_mag_sensitivity_get(const stmdev_ctx_t *ctx,
4001                                      uint16_t *val);
4002 
4003 int32_t lsm6dsrx_mag_offset_set(const stmdev_ctx_t *ctx, int16_t *val);
4004 int32_t lsm6dsrx_mag_offset_get(const stmdev_ctx_t *ctx, int16_t *val);
4005 
4006 int32_t lsm6dsrx_mag_soft_iron_set(const stmdev_ctx_t *ctx,
4007                                    uint16_t *val);
4008 int32_t lsm6dsrx_mag_soft_iron_get(const stmdev_ctx_t *ctx,
4009                                    uint16_t *val);
4010 
4011 typedef enum
4012 {
4013   LSM6DSRX_Z_EQ_Y     = 0,
4014   LSM6DSRX_Z_EQ_MIN_Y = 1,
4015   LSM6DSRX_Z_EQ_X     = 2,
4016   LSM6DSRX_Z_EQ_MIN_X = 3,
4017   LSM6DSRX_Z_EQ_MIN_Z = 4,
4018   LSM6DSRX_Z_EQ_Z     = 5,
4019 } lsm6dsrx_mag_z_axis_t;
4020 int32_t lsm6dsrx_mag_z_orient_set(const stmdev_ctx_t *ctx,
4021                                   lsm6dsrx_mag_z_axis_t val);
4022 int32_t lsm6dsrx_mag_z_orient_get(const stmdev_ctx_t *ctx,
4023                                   lsm6dsrx_mag_z_axis_t *val);
4024 
4025 typedef enum
4026 {
4027   LSM6DSRX_Y_EQ_Y     = 0,
4028   LSM6DSRX_Y_EQ_MIN_Y = 1,
4029   LSM6DSRX_Y_EQ_X     = 2,
4030   LSM6DSRX_Y_EQ_MIN_X = 3,
4031   LSM6DSRX_Y_EQ_MIN_Z = 4,
4032   LSM6DSRX_Y_EQ_Z     = 5,
4033 } lsm6dsrx_mag_y_axis_t;
4034 int32_t lsm6dsrx_mag_y_orient_set(const stmdev_ctx_t *ctx,
4035                                   lsm6dsrx_mag_y_axis_t val);
4036 int32_t lsm6dsrx_mag_y_orient_get(const stmdev_ctx_t *ctx,
4037                                   lsm6dsrx_mag_y_axis_t *val);
4038 
4039 typedef enum
4040 {
4041   LSM6DSRX_X_EQ_Y     = 0,
4042   LSM6DSRX_X_EQ_MIN_Y = 1,
4043   LSM6DSRX_X_EQ_X     = 2,
4044   LSM6DSRX_X_EQ_MIN_X = 3,
4045   LSM6DSRX_X_EQ_MIN_Z = 4,
4046   LSM6DSRX_X_EQ_Z     = 5,
4047 } lsm6dsrx_mag_x_axis_t;
4048 int32_t lsm6dsrx_mag_x_orient_set(const stmdev_ctx_t *ctx,
4049                                   lsm6dsrx_mag_x_axis_t val);
4050 int32_t lsm6dsrx_mag_x_orient_get(const stmdev_ctx_t *ctx,
4051                                   lsm6dsrx_mag_x_axis_t *val);
4052 
4053 int32_t lsm6dsrx_long_cnt_flag_data_ready_get(const stmdev_ctx_t *ctx,
4054                                               uint8_t *val);
4055 
4056 int32_t lsm6dsrx_emb_fsm_en_set(const stmdev_ctx_t *ctx, uint8_t val);
4057 int32_t lsm6dsrx_emb_fsm_en_get(const stmdev_ctx_t *ctx, uint8_t *val);
4058 
4059 typedef struct
4060 {
4061   lsm6dsrx_fsm_enable_a_t          fsm_enable_a;
4062   lsm6dsrx_fsm_enable_b_t          fsm_enable_b;
4063 } lsm6dsrx_emb_fsm_enable_t;
4064 int32_t lsm6dsrx_fsm_enable_set(const stmdev_ctx_t *ctx,
4065                                 lsm6dsrx_emb_fsm_enable_t *val);
4066 int32_t lsm6dsrx_fsm_enable_get(const stmdev_ctx_t *ctx,
4067                                 lsm6dsrx_emb_fsm_enable_t *val);
4068 
4069 int32_t lsm6dsrx_long_cnt_set(const stmdev_ctx_t *ctx, uint16_t val);
4070 int32_t lsm6dsrx_long_cnt_get(const stmdev_ctx_t *ctx, uint16_t *val);
4071 
4072 typedef enum
4073 {
4074   LSM6DSRX_LC_NORMAL     = 0,
4075   LSM6DSRX_LC_CLEAR      = 1,
4076   LSM6DSRX_LC_CLEAR_DONE = 2,
4077 } lsm6dsrx_fsm_lc_clr_t;
4078 int32_t lsm6dsrx_long_clr_set(const stmdev_ctx_t *ctx,
4079                               lsm6dsrx_fsm_lc_clr_t val);
4080 int32_t lsm6dsrx_long_clr_get(const stmdev_ctx_t *ctx,
4081                               lsm6dsrx_fsm_lc_clr_t *val);
4082 
4083 typedef struct
4084 {
4085   lsm6dsrx_fsm_outs1_t    fsm_outs1;
4086   lsm6dsrx_fsm_outs2_t    fsm_outs2;
4087   lsm6dsrx_fsm_outs3_t    fsm_outs3;
4088   lsm6dsrx_fsm_outs4_t    fsm_outs4;
4089   lsm6dsrx_fsm_outs5_t    fsm_outs5;
4090   lsm6dsrx_fsm_outs6_t    fsm_outs6;
4091   lsm6dsrx_fsm_outs7_t    fsm_outs7;
4092   lsm6dsrx_fsm_outs8_t    fsm_outs8;
4093   lsm6dsrx_fsm_outs9_t    fsm_outs9;
4094   lsm6dsrx_fsm_outs10_t    fsm_outs10;
4095   lsm6dsrx_fsm_outs11_t    fsm_outs11;
4096   lsm6dsrx_fsm_outs12_t    fsm_outs12;
4097   lsm6dsrx_fsm_outs13_t    fsm_outs13;
4098   lsm6dsrx_fsm_outs14_t    fsm_outs14;
4099   lsm6dsrx_fsm_outs15_t    fsm_outs15;
4100   lsm6dsrx_fsm_outs16_t    fsm_outs16;
4101 } lsm6dsrx_fsm_out_t;
4102 int32_t lsm6dsrx_fsm_out_get(const stmdev_ctx_t *ctx,
4103                              lsm6dsrx_fsm_out_t *val);
4104 
4105 typedef enum
4106 {
4107   LSM6DSRX_ODR_FSM_12Hz5 = 0,
4108   LSM6DSRX_ODR_FSM_26Hz  = 1,
4109   LSM6DSRX_ODR_FSM_52Hz  = 2,
4110   LSM6DSRX_ODR_FSM_104Hz = 3,
4111 } lsm6dsrx_fsm_odr_t;
4112 int32_t lsm6dsrx_fsm_data_rate_set(const stmdev_ctx_t *ctx,
4113                                    lsm6dsrx_fsm_odr_t val);
4114 int32_t lsm6dsrx_fsm_data_rate_get(const stmdev_ctx_t *ctx,
4115                                    lsm6dsrx_fsm_odr_t *val);
4116 
4117 int32_t lsm6dsrx_fsm_init_set(const stmdev_ctx_t *ctx, uint8_t val);
4118 int32_t lsm6dsrx_fsm_init_get(const stmdev_ctx_t *ctx, uint8_t *val);
4119 
4120 int32_t lsm6dsrx_long_cnt_int_value_set(const stmdev_ctx_t *ctx,
4121                                         uint16_t val);
4122 int32_t lsm6dsrx_long_cnt_int_value_get(const stmdev_ctx_t *ctx,
4123                                         uint16_t *val);
4124 
4125 int32_t lsm6dsrx_fsm_number_of_programs_set(const stmdev_ctx_t *ctx,
4126                                             uint8_t *val);
4127 int32_t lsm6dsrx_fsm_number_of_programs_get(const stmdev_ctx_t *ctx,
4128                                             uint8_t *val);
4129 
4130 int32_t lsm6dsrx_fsm_start_address_set(const stmdev_ctx_t *ctx,
4131                                        uint16_t val);
4132 int32_t lsm6dsrx_fsm_start_address_get(const stmdev_ctx_t *ctx,
4133                                        uint16_t *val);
4134 
4135 int32_t lsm6dsrx_mlc_set(const stmdev_ctx_t *ctx, uint8_t val);
4136 int32_t lsm6dsrx_mlc_get(const stmdev_ctx_t *ctx, uint8_t *val);
4137 
4138 int32_t lsm6dsrx_mlc_status_get(const stmdev_ctx_t *ctx,
4139                                 lsm6dsrx_mlc_status_mainpage_t *val);
4140 
4141 typedef enum
4142 {
4143   LSM6DSRX_ODR_PRGS_12Hz5 = 0,
4144   LSM6DSRX_ODR_PRGS_26Hz  = 1,
4145   LSM6DSRX_ODR_PRGS_52Hz  = 2,
4146   LSM6DSRX_ODR_PRGS_104Hz = 3,
4147 } lsm6dsrx_mlc_odr_t;
4148 int32_t lsm6dsrx_mlc_data_rate_set(const stmdev_ctx_t *ctx,
4149                                    lsm6dsrx_mlc_odr_t val);
4150 int32_t lsm6dsrx_mlc_data_rate_get(const stmdev_ctx_t *ctx,
4151                                    lsm6dsrx_mlc_odr_t *val);
4152 
4153 int32_t lsm6dsrx_mlc_out_get(const stmdev_ctx_t *ctx, uint8_t *buff);
4154 int32_t lsm6dsrx_mlc_mag_sensitivity_set(const stmdev_ctx_t *ctx, uint16_t val);
4155 int32_t lsm6dsrx_mlc_mag_sensitivity_get(const stmdev_ctx_t *ctx, uint16_t *val);
4156 
4157 typedef struct
4158 {
4159   lsm6dsrx_sensor_hub_1_t   sh_byte_1;
4160   lsm6dsrx_sensor_hub_2_t   sh_byte_2;
4161   lsm6dsrx_sensor_hub_3_t   sh_byte_3;
4162   lsm6dsrx_sensor_hub_4_t   sh_byte_4;
4163   lsm6dsrx_sensor_hub_5_t   sh_byte_5;
4164   lsm6dsrx_sensor_hub_6_t   sh_byte_6;
4165   lsm6dsrx_sensor_hub_7_t   sh_byte_7;
4166   lsm6dsrx_sensor_hub_8_t   sh_byte_8;
4167   lsm6dsrx_sensor_hub_9_t   sh_byte_9;
4168   lsm6dsrx_sensor_hub_10_t  sh_byte_10;
4169   lsm6dsrx_sensor_hub_11_t  sh_byte_11;
4170   lsm6dsrx_sensor_hub_12_t  sh_byte_12;
4171   lsm6dsrx_sensor_hub_13_t  sh_byte_13;
4172   lsm6dsrx_sensor_hub_14_t  sh_byte_14;
4173   lsm6dsrx_sensor_hub_15_t  sh_byte_15;
4174   lsm6dsrx_sensor_hub_16_t  sh_byte_16;
4175   lsm6dsrx_sensor_hub_17_t  sh_byte_17;
4176   lsm6dsrx_sensor_hub_18_t  sh_byte_18;
4177 } lsm6dsrx_emb_sh_read_t;
4178 int32_t lsm6dsrx_sh_read_data_raw_get(const stmdev_ctx_t *ctx,
4179                                       lsm6dsrx_emb_sh_read_t *val,
4180                                       uint8_t len);
4181 
4182 typedef enum
4183 {
4184   LSM6DSRX_SLV_0       = 0,
4185   LSM6DSRX_SLV_0_1     = 1,
4186   LSM6DSRX_SLV_0_1_2   = 2,
4187   LSM6DSRX_SLV_0_1_2_3 = 3,
4188 } lsm6dsrx_aux_sens_on_t;
4189 int32_t lsm6dsrx_sh_slave_connected_set(const stmdev_ctx_t *ctx,
4190                                         lsm6dsrx_aux_sens_on_t val);
4191 int32_t lsm6dsrx_sh_slave_connected_get(const stmdev_ctx_t *ctx,
4192                                         lsm6dsrx_aux_sens_on_t *val);
4193 
4194 int32_t lsm6dsrx_sh_master_set(const stmdev_ctx_t *ctx, uint8_t val);
4195 int32_t lsm6dsrx_sh_master_get(const stmdev_ctx_t *ctx, uint8_t *val);
4196 
4197 typedef enum
4198 {
4199   LSM6DSRX_EXT_PULL_UP      = 0,
4200   LSM6DSRX_INTERNAL_PULL_UP = 1,
4201 } lsm6dsrx_shub_pu_en_t;
4202 int32_t lsm6dsrx_sh_pin_mode_set(const stmdev_ctx_t *ctx,
4203                                  lsm6dsrx_shub_pu_en_t val);
4204 int32_t lsm6dsrx_sh_pin_mode_get(const stmdev_ctx_t *ctx,
4205                                  lsm6dsrx_shub_pu_en_t *val);
4206 
4207 int32_t lsm6dsrx_sh_pass_through_set(const stmdev_ctx_t *ctx,
4208                                      uint8_t val);
4209 int32_t lsm6dsrx_sh_pass_through_get(const stmdev_ctx_t *ctx,
4210                                      uint8_t *val);
4211 
4212 typedef enum
4213 {
4214   LSM6DSRX_EXT_ON_INT2_PIN = 1,
4215   LSM6DSRX_XL_GY_DRDY      = 0,
4216 } lsm6dsrx_start_config_t;
4217 int32_t lsm6dsrx_sh_syncro_mode_set(const stmdev_ctx_t *ctx,
4218                                     lsm6dsrx_start_config_t val);
4219 int32_t lsm6dsrx_sh_syncro_mode_get(const stmdev_ctx_t *ctx,
4220                                     lsm6dsrx_start_config_t *val);
4221 
4222 typedef enum
4223 {
4224   LSM6DSRX_EACH_SH_CYCLE    = 0,
4225   LSM6DSRX_ONLY_FIRST_CYCLE = 1,
4226 } lsm6dsrx_write_once_t;
4227 int32_t lsm6dsrx_sh_write_mode_set(const stmdev_ctx_t *ctx,
4228                                    lsm6dsrx_write_once_t val);
4229 int32_t lsm6dsrx_sh_write_mode_get(const stmdev_ctx_t *ctx,
4230                                    lsm6dsrx_write_once_t *val);
4231 
4232 int32_t lsm6dsrx_sh_reset_set(const stmdev_ctx_t *ctx);
4233 int32_t lsm6dsrx_sh_reset_get(const stmdev_ctx_t *ctx, uint8_t *val);
4234 
4235 typedef enum
4236 {
4237   LSM6DSRX_SH_ODR_104Hz = 0,
4238   LSM6DSRX_SH_ODR_52Hz  = 1,
4239   LSM6DSRX_SH_ODR_26Hz  = 2,
4240   LSM6DSRX_SH_ODR_13Hz  = 3,
4241 } lsm6dsrx_shub_odr_t;
4242 int32_t lsm6dsrx_sh_data_rate_set(const stmdev_ctx_t *ctx,
4243                                   lsm6dsrx_shub_odr_t val);
4244 int32_t lsm6dsrx_sh_data_rate_get(const stmdev_ctx_t *ctx,
4245                                   lsm6dsrx_shub_odr_t *val);
4246 
4247 typedef struct
4248 {
4249   uint8_t   slv0_add;
4250   uint8_t   slv0_subadd;
4251   uint8_t   slv0_data;
4252 } lsm6dsrx_sh_cfg_write_t;
4253 int32_t lsm6dsrx_sh_cfg_write(const stmdev_ctx_t *ctx,
4254                               lsm6dsrx_sh_cfg_write_t *val);
4255 
4256 typedef struct
4257 {
4258   uint8_t   slv_add;
4259   uint8_t   slv_subadd;
4260   uint8_t   slv_len;
4261 } lsm6dsrx_sh_cfg_read_t;
4262 int32_t lsm6dsrx_sh_slv0_cfg_read(const stmdev_ctx_t *ctx,
4263                                   lsm6dsrx_sh_cfg_read_t *val);
4264 int32_t lsm6dsrx_sh_slv1_cfg_read(const stmdev_ctx_t *ctx,
4265                                   lsm6dsrx_sh_cfg_read_t *val);
4266 int32_t lsm6dsrx_sh_slv2_cfg_read(const stmdev_ctx_t *ctx,
4267                                   lsm6dsrx_sh_cfg_read_t *val);
4268 int32_t lsm6dsrx_sh_slv3_cfg_read(const stmdev_ctx_t *ctx,
4269                                   lsm6dsrx_sh_cfg_read_t *val);
4270 
4271 int32_t lsm6dsrx_sh_status_get(const stmdev_ctx_t *ctx,
4272                                lsm6dsrx_status_master_t *val);
4273 
4274 typedef enum
4275 {
4276   LSM6DSRX_S4S_TPH_7bit   = 0,
4277   LSM6DSRX_S4S_TPH_15bit  = 1,
4278 } lsm6dsrx_s4s_tph_res_t;
4279 int32_t lsm6dsrx_s4s_tph_res_set(const stmdev_ctx_t *ctx,
4280                                  lsm6dsrx_s4s_tph_res_t val);
4281 int32_t lsm6dsrx_s4s_tph_res_get(const stmdev_ctx_t *ctx,
4282                                  lsm6dsrx_s4s_tph_res_t *val);
4283 
4284 int32_t lsm6dsrx_s4s_tph_val_set(const stmdev_ctx_t *ctx, uint16_t val);
4285 int32_t lsm6dsrx_s4s_tph_val_get(const stmdev_ctx_t *ctx, uint16_t *val);
4286 
4287 typedef enum
4288 {
4289   LSM6DSRX_S4S_DT_RES_11 = 0,
4290   LSM6DSRX_S4S_DT_RES_12 = 1,
4291   LSM6DSRX_S4S_DT_RES_13 = 2,
4292   LSM6DSRX_S4S_DT_RES_14 = 3,
4293 } lsm6dsrx_s4s_res_ratio_t;
4294 int32_t lsm6dsrx_s4s_res_ratio_set(const stmdev_ctx_t *ctx,
4295                                    lsm6dsrx_s4s_res_ratio_t val);
4296 int32_t lsm6dsrx_s4s_res_ratio_get(const stmdev_ctx_t *ctx,
4297                                    lsm6dsrx_s4s_res_ratio_t *val);
4298 
4299 int32_t lsm6dsrx_s4s_command_set(const stmdev_ctx_t *ctx, uint8_t val);
4300 int32_t lsm6dsrx_s4s_command_get(const stmdev_ctx_t *ctx, uint8_t *val);
4301 
4302 int32_t lsm6dsrx_s4s_dt_set(const stmdev_ctx_t *ctx, uint8_t val);
4303 int32_t lsm6dsrx_s4s_dt_get(const stmdev_ctx_t *ctx, uint8_t *val);
4304 
4305 /**
4306   *@}
4307   *
4308   */
4309 
4310 #ifdef __cplusplus
4311 }
4312 #endif
4313 
4314 #endif /* LSM6DSRX_REGS_H */
4315 
4316 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
4317