1 /** 2 ****************************************************************************** 3 * @file lsm6dsv_reg.h 4 * @author Sensors Software Solution Team 5 * @brief This file contains all the functions prototypes for the 6 * lsm6dsv_reg.c driver. 7 ****************************************************************************** 8 * @attention 9 * 10 * <h2><center>© Copyright (c) 2024 STMicroelectronics. 11 * All rights reserved.</center></h2> 12 * 13 * This software component is licensed by ST under BSD 3-Clause license, 14 * the "License"; You may not use this file except in compliance with the 15 * License. You may obtain a copy of the License at: 16 * opensource.org/licenses/BSD-3-Clause 17 * 18 ****************************************************************************** 19 */ 20 21 /* Define to prevent recursive inclusion -------------------------------------*/ 22 #ifndef LSM6DSV_REGS_H 23 #define LSM6DSV_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 LSM6DSV 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 LSM6DSV_Infos 167 * @{ 168 * 169 */ 170 171 /** I2C Device Address 8 bit format if SA0=0 -> D5 if SA0=1 -> D7 **/ 172 #define LSM6DSV_I2C_ADD_L 0xD5U 173 #define LSM6DSV_I2C_ADD_H 0xD7U 174 175 /** Device Identification (Who am I) **/ 176 #define LSM6DSV_ID 0x70U 177 178 /** 179 * @} 180 * 181 */ 182 183 /** @defgroup bitfields page main 184 * @{ 185 * 186 */ 187 188 #define LSM6DSV_FUNC_CFG_ACCESS 0x1U 189 typedef struct 190 { 191 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 192 uint8_t ois_ctrl_from_ui : 1; 193 uint8_t spi2_reset : 1; 194 uint8_t sw_por : 1; 195 uint8_t fsm_wr_ctrl_en : 1; 196 uint8_t not_used0 : 2; 197 uint8_t shub_reg_access : 1; 198 uint8_t emb_func_reg_access : 1; 199 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 200 uint8_t emb_func_reg_access : 1; 201 uint8_t shub_reg_access : 1; 202 uint8_t not_used0 : 2; 203 uint8_t fsm_wr_ctrl_en : 1; 204 uint8_t sw_por : 1; 205 uint8_t spi2_reset : 1; 206 uint8_t ois_ctrl_from_ui : 1; 207 #endif /* DRV_BYTE_ORDER */ 208 } lsm6dsv_func_cfg_access_t; 209 210 #define LSM6DSV_PIN_CTRL 0x2U 211 typedef struct 212 { 213 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 214 uint8_t not_used0 : 5; 215 uint8_t ibhr_por_en : 1; 216 uint8_t sdo_pu_en : 1; 217 uint8_t ois_pu_dis : 1; 218 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 219 uint8_t ois_pu_dis : 1; 220 uint8_t sdo_pu_en : 1; 221 uint8_t ibhr_por_en : 1; 222 uint8_t not_used0 : 5; 223 #endif /* DRV_BYTE_ORDER */ 224 } lsm6dsv_pin_ctrl_t; 225 226 #define LSM6DSV_IF_CFG 0x3U 227 typedef struct 228 { 229 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 230 uint8_t i2c_i3c_disable : 1; 231 uint8_t not_used0 : 1; 232 uint8_t sim : 1; 233 uint8_t pp_od : 1; 234 uint8_t h_lactive : 1; 235 uint8_t asf_ctrl : 1; 236 uint8_t shub_pu_en : 1; 237 uint8_t sda_pu_en : 1; 238 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 239 uint8_t sda_pu_en : 1; 240 uint8_t shub_pu_en : 1; 241 uint8_t asf_ctrl : 1; 242 uint8_t h_lactive : 1; 243 uint8_t pp_od : 1; 244 uint8_t sim : 1; 245 uint8_t not_used0 : 1; 246 uint8_t i2c_i3c_disable : 1; 247 #endif /* DRV_BYTE_ORDER */ 248 } lsm6dsv_if_cfg_t; 249 250 #define LSM6DSV_ODR_TRIG_CFG 0x6U 251 typedef struct 252 { 253 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 254 uint8_t odr_trig_nodr : 8; 255 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 256 uint8_t odr_trig_nodr : 8; 257 #endif /* DRV_BYTE_ORDER */ 258 } lsm6dsv_odr_trig_cfg_t; 259 260 #define LSM6DSV_FIFO_CTRL1 0x7U 261 typedef struct 262 { 263 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 264 uint8_t wtm : 8; 265 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 266 uint8_t wtm : 8; 267 #endif /* DRV_BYTE_ORDER */ 268 } lsm6dsv_fifo_ctrl1_t; 269 270 #define LSM6DSV_FIFO_CTRL2 0x8U 271 typedef struct 272 { 273 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 274 uint8_t xl_dualc_batch_from_fsm : 1; 275 uint8_t uncompr_rate : 2; 276 uint8_t not_used0 : 1; 277 uint8_t odr_chg_en : 1; 278 uint8_t not_used1 : 1; 279 uint8_t fifo_compr_rt_en : 1; 280 uint8_t stop_on_wtm : 1; 281 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 282 uint8_t stop_on_wtm : 1; 283 uint8_t fifo_compr_rt_en : 1; 284 uint8_t not_used1 : 1; 285 uint8_t odr_chg_en : 1; 286 uint8_t not_used0 : 1; 287 uint8_t uncompr_rate : 2; 288 uint8_t xl_dualc_batch_from_fsm : 1; 289 #endif /* DRV_BYTE_ORDER */ 290 } lsm6dsv_fifo_ctrl2_t; 291 292 #define LSM6DSV_FIFO_CTRL3 0x9U 293 typedef struct 294 { 295 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 296 uint8_t bdr_xl : 4; 297 uint8_t bdr_gy : 4; 298 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 299 uint8_t bdr_gy : 4; 300 uint8_t bdr_xl : 4; 301 #endif /* DRV_BYTE_ORDER */ 302 } lsm6dsv_fifo_ctrl3_t; 303 304 #define LSM6DSV_FIFO_CTRL4 0x0AU 305 typedef struct 306 { 307 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 308 uint8_t fifo_mode : 3; 309 uint8_t g_eis_fifo_en : 1; 310 uint8_t odr_t_batch : 2; 311 uint8_t dec_ts_batch : 2; 312 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 313 uint8_t dec_ts_batch : 2; 314 uint8_t odr_t_batch : 2; 315 uint8_t g_eis_fifo_en : 1; 316 uint8_t fifo_mode : 3; 317 #endif /* DRV_BYTE_ORDER */ 318 } lsm6dsv_fifo_ctrl4_t; 319 320 #define LSM6DSV_COUNTER_BDR_REG1 0x0BU 321 typedef struct 322 { 323 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 324 uint8_t cnt_bdr_th : 2; 325 uint8_t not_used0 : 3; 326 uint8_t trig_counter_bdr : 2; 327 uint8_t not_used1 : 1; 328 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 329 uint8_t not_used1 : 1; 330 uint8_t trig_counter_bdr : 2; 331 uint8_t not_used0 : 3; 332 uint8_t cnt_bdr_th : 2; 333 #endif /* DRV_BYTE_ORDER */ 334 } lsm6dsv_counter_bdr_reg1_t; 335 336 #define LSM6DSV_COUNTER_BDR_REG2 0x0CU 337 typedef struct 338 { 339 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 340 uint8_t cnt_bdr_th : 8; 341 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 342 uint8_t cnt_bdr_th : 8; 343 #endif /* DRV_BYTE_ORDER */ 344 } lsm6dsv_counter_bdr_reg2_t; 345 346 #define LSM6DSV_INT1_CTRL 0x0DU 347 typedef struct 348 { 349 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 350 uint8_t int1_drdy_xl : 1; 351 uint8_t int1_drdy_g : 1; 352 uint8_t not_used0 : 1; 353 uint8_t int1_fifo_th : 1; 354 uint8_t int1_fifo_ovr : 1; 355 uint8_t int1_fifo_full : 1; 356 uint8_t int1_cnt_bdr : 1; 357 uint8_t not_used1 : 1; 358 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 359 uint8_t not_used1 : 1; 360 uint8_t int1_cnt_bdr : 1; 361 uint8_t int1_fifo_full : 1; 362 uint8_t int1_fifo_ovr : 1; 363 uint8_t int1_fifo_th : 1; 364 uint8_t not_used0 : 1; 365 uint8_t int1_drdy_g : 1; 366 uint8_t int1_drdy_xl : 1; 367 #endif /* DRV_BYTE_ORDER */ 368 } lsm6dsv_int1_ctrl_t; 369 370 #define LSM6DSV_INT2_CTRL 0x0EU 371 typedef struct 372 { 373 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 374 uint8_t int2_drdy_xl : 1; 375 uint8_t int2_drdy_g : 1; 376 uint8_t int2_drdy_g_eis : 1; 377 uint8_t int2_fifo_th : 1; 378 uint8_t int2_fifo_ovr : 1; 379 uint8_t int2_fifo_full : 1; 380 uint8_t int2_cnt_bdr : 1; 381 uint8_t int2_emb_func_endop : 1; 382 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 383 uint8_t int2_emb_func_endop : 1; 384 uint8_t int2_cnt_bdr : 1; 385 uint8_t int2_fifo_full : 1; 386 uint8_t int2_fifo_ovr : 1; 387 uint8_t int2_fifo_th : 1; 388 uint8_t int2_drdy_g_eis : 1; 389 uint8_t int2_drdy_g : 1; 390 uint8_t int2_drdy_xl : 1; 391 #endif /* DRV_BYTE_ORDER */ 392 } lsm6dsv_int2_ctrl_t; 393 394 #define LSM6DSV_WHO_AM_I 0x0FU 395 typedef struct 396 { 397 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 398 uint8_t id : 8; 399 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 400 uint8_t id : 8; 401 #endif /* DRV_BYTE_ORDER */ 402 } lsm6dsv_who_am_i_t; 403 404 #define LSM6DSV_CTRL1 0x10U 405 typedef struct 406 { 407 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 408 uint8_t odr_xl : 4; 409 uint8_t op_mode_xl : 3; 410 uint8_t not_used0 : 1; 411 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 412 uint8_t not_used0 : 1; 413 uint8_t op_mode_xl : 3; 414 uint8_t odr_xl : 4; 415 #endif /* DRV_BYTE_ORDER */ 416 } lsm6dsv_ctrl1_t; 417 418 #define LSM6DSV_CTRL2 0x11U 419 typedef struct 420 { 421 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 422 uint8_t odr_g : 4; 423 uint8_t op_mode_g : 3; 424 uint8_t not_used0 : 1; 425 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 426 uint8_t not_used0 : 1; 427 uint8_t op_mode_g : 3; 428 uint8_t odr_g : 4; 429 #endif /* DRV_BYTE_ORDER */ 430 } lsm6dsv_ctrl2_t; 431 432 #define LSM6DSV_CTRL3 0x12U 433 typedef struct 434 { 435 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 436 uint8_t sw_reset : 1; 437 uint8_t not_used0 : 1; 438 uint8_t if_inc : 1; 439 uint8_t not_used1 : 3; 440 uint8_t bdu : 1; 441 uint8_t boot : 1; 442 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 443 uint8_t boot : 1; 444 uint8_t bdu : 1; 445 uint8_t not_used1 : 3; 446 uint8_t if_inc : 1; 447 uint8_t not_used0 : 1; 448 uint8_t sw_reset : 1; 449 #endif /* DRV_BYTE_ORDER */ 450 } lsm6dsv_ctrl3_t; 451 452 #define LSM6DSV_CTRL4 0x13U 453 typedef struct 454 { 455 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 456 uint8_t int2_in_lh : 1; 457 uint8_t drdy_pulsed : 1; 458 uint8_t int2_drdy_temp : 1; 459 uint8_t drdy_mask : 1; 460 uint8_t int2_on_int1 : 1; 461 uint8_t not_used0 : 3; 462 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 463 uint8_t not_used0 : 3; 464 uint8_t int2_on_int1 : 1; 465 uint8_t drdy_mask : 1; 466 uint8_t int2_drdy_temp : 1; 467 uint8_t drdy_pulsed : 1; 468 uint8_t int2_in_lh : 1; 469 #endif /* DRV_BYTE_ORDER */ 470 } lsm6dsv_ctrl4_t; 471 472 #define LSM6DSV_CTRL5 0x14U 473 typedef struct 474 { 475 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 476 uint8_t int_en_i3c : 1; 477 uint8_t bus_act_sel : 2; 478 uint8_t not_used0 : 5; 479 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 480 uint8_t not_used0 : 5; 481 uint8_t bus_act_sel : 2; 482 uint8_t int_en_i3c : 1; 483 #endif /* DRV_BYTE_ORDER */ 484 } lsm6dsv_ctrl5_t; 485 486 #define LSM6DSV_CTRL6 0x15U 487 typedef struct 488 { 489 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 490 uint8_t fs_g : 4; 491 uint8_t lpf1_g_bw : 3; 492 uint8_t not_used0 : 1; 493 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 494 uint8_t not_used0 : 1; 495 uint8_t lpf1_g_bw : 3; 496 uint8_t fs_g : 4; 497 #endif /* DRV_BYTE_ORDER */ 498 } lsm6dsv_ctrl6_t; 499 500 #define LSM6DSV_CTRL7 0x16U 501 typedef struct 502 { 503 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 504 uint8_t lpf1_g_en : 1; 505 uint8_t not_used0 : 7; 506 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 507 uint8_t not_used0 : 7; 508 uint8_t lpf1_g_en : 1; 509 #endif /* DRV_BYTE_ORDER */ 510 } lsm6dsv_ctrl7_t; 511 512 #define LSM6DSV_CTRL8 0x17U 513 typedef struct 514 { 515 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 516 uint8_t fs_xl : 2; 517 uint8_t not_used0 : 1; 518 uint8_t xl_dualc_en : 1; 519 uint8_t not_used1 : 1; 520 uint8_t hp_lpf2_xl_bw : 3; 521 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 522 uint8_t hp_lpf2_xl_bw : 3; 523 uint8_t not_used1 : 1; 524 uint8_t xl_dualc_en : 1; 525 uint8_t not_used0 : 1; 526 uint8_t fs_xl : 2; 527 #endif /* DRV_BYTE_ORDER */ 528 } lsm6dsv_ctrl8_t; 529 530 #define LSM6DSV_CTRL9 0x18U 531 typedef struct 532 { 533 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 534 uint8_t usr_off_on_out : 1; 535 uint8_t usr_off_w : 1; 536 uint8_t not_used0 : 1; 537 uint8_t lpf2_xl_en : 1; 538 uint8_t hp_slope_xl_en : 1; 539 uint8_t xl_fastsettl_mode : 1; 540 uint8_t hp_ref_mode_xl : 1; 541 uint8_t not_used1 : 1; 542 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 543 uint8_t not_used1 : 1; 544 uint8_t hp_ref_mode_xl : 1; 545 uint8_t xl_fastsettl_mode : 1; 546 uint8_t hp_slope_xl_en : 1; 547 uint8_t lpf2_xl_en : 1; 548 uint8_t not_used0 : 1; 549 uint8_t usr_off_w : 1; 550 uint8_t usr_off_on_out : 1; 551 #endif /* DRV_BYTE_ORDER */ 552 } lsm6dsv_ctrl9_t; 553 554 #define LSM6DSV_CTRL10 0x19U 555 typedef struct 556 { 557 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 558 uint8_t st_xl : 2; 559 uint8_t st_g : 2; 560 uint8_t not_used0 : 2; 561 uint8_t emb_func_debug : 1; 562 uint8_t not_used1 : 1; 563 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 564 uint8_t not_used1 : 1; 565 uint8_t emb_func_debug : 1; 566 uint8_t not_used0 : 2; 567 uint8_t st_g : 2; 568 uint8_t st_xl : 2; 569 #endif /* DRV_BYTE_ORDER */ 570 } lsm6dsv_ctrl10_t; 571 572 #define LSM6DSV_CTRL_STATUS 0x1AU 573 typedef struct 574 { 575 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 576 uint8_t not_used0 : 2; 577 uint8_t fsm_wr_ctrl_status : 1; 578 uint8_t not_used1 : 5; 579 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 580 uint8_t not_used1 : 5; 581 uint8_t fsm_wr_ctrl_status : 1; 582 uint8_t not_used0 : 2; 583 #endif /* DRV_BYTE_ORDER */ 584 } lsm6dsv_ctrl_status_t; 585 586 #define LSM6DSV_FIFO_STATUS1 0x1BU 587 typedef struct 588 { 589 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 590 uint8_t diff_fifo : 8; 591 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 592 uint8_t diff_fifo : 8; 593 #endif /* DRV_BYTE_ORDER */ 594 } lsm6dsv_fifo_status1_t; 595 596 #define LSM6DSV_FIFO_STATUS2 0x1CU 597 typedef struct 598 { 599 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 600 uint8_t diff_fifo : 1; 601 uint8_t not_used0 : 2; 602 uint8_t fifo_ovr_latched : 1; 603 uint8_t counter_bdr_ia : 1; 604 uint8_t fifo_full_ia : 1; 605 uint8_t fifo_ovr_ia : 1; 606 uint8_t fifo_wtm_ia : 1; 607 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 608 uint8_t fifo_wtm_ia : 1; 609 uint8_t fifo_ovr_ia : 1; 610 uint8_t fifo_full_ia : 1; 611 uint8_t counter_bdr_ia : 1; 612 uint8_t fifo_ovr_latched : 1; 613 uint8_t not_used0 : 2; 614 uint8_t diff_fifo : 1; 615 #endif /* DRV_BYTE_ORDER */ 616 } lsm6dsv_fifo_status2_t; 617 618 #define LSM6DSV_ALL_INT_SRC 0x1DU 619 typedef struct 620 { 621 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 622 uint8_t ff_ia : 1; 623 uint8_t wu_ia : 1; 624 uint8_t tap_ia : 1; 625 uint8_t not_used0 : 1; 626 uint8_t d6d_ia : 1; 627 uint8_t sleep_change_ia : 1; 628 uint8_t shub_ia : 1; 629 uint8_t emb_func_ia : 1; 630 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 631 uint8_t emb_func_ia : 1; 632 uint8_t shub_ia : 1; 633 uint8_t sleep_change_ia : 1; 634 uint8_t d6d_ia : 1; 635 uint8_t not_used0 : 1; 636 uint8_t tap_ia : 1; 637 uint8_t wu_ia : 1; 638 uint8_t ff_ia : 1; 639 #endif /* DRV_BYTE_ORDER */ 640 } lsm6dsv_all_int_src_t; 641 642 #define LSM6DSV_STATUS_REG 0x1EU 643 typedef struct 644 { 645 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 646 uint8_t xlda : 1; 647 uint8_t gda : 1; 648 uint8_t tda : 1; 649 uint8_t not_used1 : 1; 650 uint8_t gda_eis : 1; 651 uint8_t ois_drdy : 1; 652 uint8_t not_used0 : 1; 653 uint8_t timestamp_endcount : 1; 654 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 655 uint8_t timestamp_endcount : 1; 656 uint8_t not_used0 : 1; 657 uint8_t ois_drdy : 1; 658 uint8_t gda_eis : 1; 659 uint8_t not_used1 : 1; 660 uint8_t tda : 1; 661 uint8_t gda : 1; 662 uint8_t xlda : 1; 663 #endif /* DRV_BYTE_ORDER */ 664 } lsm6dsv_status_reg_t; 665 666 #define LSM6DSV_OUT_TEMP_L 0x20U 667 typedef struct 668 { 669 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 670 uint8_t temp : 8; 671 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 672 uint8_t temp : 8; 673 #endif /* DRV_BYTE_ORDER */ 674 } lsm6dsv_out_temp_l_t; 675 676 #define LSM6DSV_OUT_TEMP_H 0x21U 677 typedef struct 678 { 679 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 680 uint8_t temp : 8; 681 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 682 uint8_t temp : 8; 683 #endif /* DRV_BYTE_ORDER */ 684 } lsm6dsv_out_temp_h_t; 685 686 #define LSM6DSV_OUTX_L_G 0x22U 687 typedef struct 688 { 689 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 690 uint8_t outx_g : 8; 691 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 692 uint8_t outx_g : 8; 693 #endif /* DRV_BYTE_ORDER */ 694 } lsm6dsv_outx_l_g_t; 695 696 #define LSM6DSV_OUTX_H_G 0x23U 697 typedef struct 698 { 699 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 700 uint8_t outx_g : 8; 701 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 702 uint8_t outx_g : 8; 703 #endif /* DRV_BYTE_ORDER */ 704 } lsm6dsv_outx_h_g_t; 705 706 #define LSM6DSV_OUTY_L_G 0x24U 707 typedef struct 708 { 709 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 710 uint8_t outy_g : 8; 711 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 712 uint8_t outy_g : 8; 713 #endif /* DRV_BYTE_ORDER */ 714 } lsm6dsv_outy_l_g_t; 715 716 #define LSM6DSV_OUTY_H_G 0x25U 717 typedef struct 718 { 719 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 720 uint8_t outy_g : 8; 721 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 722 uint8_t outy_g : 8; 723 #endif /* DRV_BYTE_ORDER */ 724 } lsm6dsv_outy_h_g_t; 725 726 #define LSM6DSV_OUTZ_L_G 0x26U 727 typedef struct 728 { 729 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 730 uint8_t outz_g : 8; 731 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 732 uint8_t outz_g : 8; 733 #endif /* DRV_BYTE_ORDER */ 734 } lsm6dsv_outz_l_g_t; 735 736 #define LSM6DSV_OUTZ_H_G 0x27U 737 typedef struct 738 { 739 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 740 uint8_t outz_g : 8; 741 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 742 uint8_t outz_g : 8; 743 #endif /* DRV_BYTE_ORDER */ 744 } lsm6dsv_outz_h_g_t; 745 746 #define LSM6DSV_OUTX_L_A 0x28U 747 typedef struct 748 { 749 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 750 uint8_t outx_a : 8; 751 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 752 uint8_t outx_a : 8; 753 #endif /* DRV_BYTE_ORDER */ 754 } lsm6dsv_outx_l_a_t; 755 756 #define LSM6DSV_OUTX_H_A 0x29U 757 typedef struct 758 { 759 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 760 uint8_t outx_a : 8; 761 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 762 uint8_t outx_a : 8; 763 #endif /* DRV_BYTE_ORDER */ 764 } lsm6dsv_outx_h_a_t; 765 766 #define LSM6DSV_OUTY_L_A 0x2AU 767 typedef struct 768 { 769 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 770 uint8_t outy_a : 8; 771 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 772 uint8_t outy_a : 8; 773 #endif /* DRV_BYTE_ORDER */ 774 } lsm6dsv_outy_l_a_t; 775 776 #define LSM6DSV_OUTY_H_A 0x2BU 777 typedef struct 778 { 779 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 780 uint8_t outy_a : 8; 781 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 782 uint8_t outy_a : 8; 783 #endif /* DRV_BYTE_ORDER */ 784 } lsm6dsv_outy_h_a_t; 785 786 #define LSM6DSV_OUTZ_L_A 0x2CU 787 typedef struct 788 { 789 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 790 uint8_t outz_a : 8; 791 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 792 uint8_t outz_a : 8; 793 #endif /* DRV_BYTE_ORDER */ 794 } lsm6dsv_outz_l_a_t; 795 796 #define LSM6DSV_OUTZ_H_A 0x2DU 797 typedef struct 798 { 799 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 800 uint8_t outz_a : 8; 801 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 802 uint8_t outz_a : 8; 803 #endif /* DRV_BYTE_ORDER */ 804 } lsm6dsv_outz_h_a_t; 805 806 #define LSM6DSV_UI_OUTX_L_G_OIS_EIS 0x2EU 807 typedef struct 808 { 809 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 810 uint8_t ui_outx_g_ois_eis : 8; 811 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 812 uint8_t ui_outx_g_ois_eis : 8; 813 #endif /* DRV_BYTE_ORDER */ 814 } lsm6dsv_ui_outx_l_g_ois_eis_t; 815 816 #define LSM6DSV_UI_OUTX_H_G_OIS_EIS 0x2FU 817 typedef struct 818 { 819 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 820 uint8_t ui_outx_g_ois_eis : 8; 821 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 822 uint8_t ui_outx_g_ois_eis : 8; 823 #endif /* DRV_BYTE_ORDER */ 824 } lsm6dsv_ui_outx_h_g_ois_eis_t; 825 826 #define LSM6DSV_UI_OUTY_L_G_OIS_EIS 0x30U 827 typedef struct 828 { 829 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 830 uint8_t ui_outy_g_ois_eis : 8; 831 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 832 uint8_t ui_outy_g_ois_eis : 8; 833 #endif /* DRV_BYTE_ORDER */ 834 } lsm6dsv_ui_outy_l_g_ois_eis_t; 835 836 #define LSM6DSV_UI_OUTY_H_G_OIS_EIS 0x31U 837 typedef struct 838 { 839 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 840 uint8_t ui_outy_g_ois_eis : 8; 841 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 842 uint8_t ui_outy_g_ois_eis : 8; 843 #endif /* DRV_BYTE_ORDER */ 844 } lsm6dsv_ui_outy_h_g_ois_eis_t; 845 846 #define LSM6DSV_UI_OUTZ_L_G_OIS_EIS 0x32U 847 typedef struct 848 { 849 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 850 uint8_t ui_outz_g_ois_eis : 8; 851 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 852 uint8_t ui_outz_g_ois_eis : 8; 853 #endif /* DRV_BYTE_ORDER */ 854 } lsm6dsv_ui_outz_l_g_ois_eis_t; 855 856 #define LSM6DSV_UI_OUTZ_H_G_OIS_EIS 0x33U 857 typedef struct 858 { 859 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 860 uint8_t ui_outz_g_ois_eis : 8; 861 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 862 uint8_t ui_outz_g_ois_eis : 8; 863 #endif /* DRV_BYTE_ORDER */ 864 } lsm6dsv_ui_outz_h_g_ois_eis_t; 865 866 #define LSM6DSV_UI_OUTX_L_A_OIS_DUALC 0x34U 867 typedef struct 868 { 869 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 870 uint8_t ui_outx_a_ois_dualc : 8; 871 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 872 uint8_t ui_outx_a_ois_dualc : 8; 873 #endif /* DRV_BYTE_ORDER */ 874 } lsm6dsv_ui_outx_l_a_ois_dualc_t; 875 876 #define LSM6DSV_UI_OUTX_H_A_OIS_DUALC 0x35U 877 typedef struct 878 { 879 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 880 uint8_t ui_outx_a_ois_dualc : 8; 881 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 882 uint8_t ui_outx_a_ois_dualc : 8; 883 #endif /* DRV_BYTE_ORDER */ 884 } lsm6dsv_ui_outx_h_a_ois_dualc_t; 885 886 #define LSM6DSV_UI_OUTY_L_A_OIS_DUALC 0x36U 887 typedef struct 888 { 889 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 890 uint8_t ui_outy_a_ois_dualc : 8; 891 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 892 uint8_t ui_outy_a_ois_dualc : 8; 893 #endif /* DRV_BYTE_ORDER */ 894 } lsm6dsv_ui_outy_l_a_ois_dualc_t; 895 896 #define LSM6DSV_UI_OUTY_H_A_OIS_DUALC 0x37U 897 typedef struct 898 { 899 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 900 uint8_t ui_outy_a_ois_dualc : 8; 901 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 902 uint8_t ui_outy_a_ois_dualc : 8; 903 #endif /* DRV_BYTE_ORDER */ 904 } lsm6dsv_ui_outy_h_a_ois_dualc_t; 905 906 #define LSM6DSV_UI_OUTZ_L_A_OIS_DUALC 0x38U 907 typedef struct 908 { 909 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 910 uint8_t ui_outz_a_ois_dualc : 8; 911 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 912 uint8_t ui_outz_a_ois_dualc : 8; 913 #endif /* DRV_BYTE_ORDER */ 914 } lsm6dsv_ui_outz_l_a_ois_dualc_t; 915 916 #define LSM6DSV_UI_OUTZ_H_A_OIS_DUALC 0x39U 917 typedef struct 918 { 919 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 920 uint8_t ui_outz_a_ois_dualc : 8; 921 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 922 uint8_t ui_outz_a_ois_dualc : 8; 923 #endif /* DRV_BYTE_ORDER */ 924 } lsm6dsv_ui_outz_h_a_ois_dualc_t; 925 926 #define LSM6DSV_TIMESTAMP0 0x40U 927 typedef struct 928 { 929 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 930 uint8_t timestamp : 8; 931 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 932 uint8_t timestamp : 8; 933 #endif /* DRV_BYTE_ORDER */ 934 } lsm6dsv_timestamp0_t; 935 936 #define LSM6DSV_TIMESTAMP1 0x41U 937 typedef struct 938 { 939 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 940 uint8_t timestamp : 8; 941 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 942 uint8_t timestamp : 8; 943 #endif /* DRV_BYTE_ORDER */ 944 } lsm6dsv_timestamp1_t; 945 946 #define LSM6DSV_TIMESTAMP2 0x42U 947 typedef struct 948 { 949 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 950 uint8_t timestamp : 8; 951 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 952 uint8_t timestamp : 8; 953 #endif /* DRV_BYTE_ORDER */ 954 } lsm6dsv_timestamp2_t; 955 956 #define LSM6DSV_TIMESTAMP3 0x43U 957 typedef struct 958 { 959 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 960 uint8_t timestamp : 8; 961 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 962 uint8_t timestamp : 8; 963 #endif /* DRV_BYTE_ORDER */ 964 } lsm6dsv_timestamp3_t; 965 966 #define LSM6DSV_UI_STATUS_REG_OIS 0x44U 967 typedef struct 968 { 969 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 970 uint8_t xlda_ois : 1; 971 uint8_t gda_ois : 1; 972 uint8_t gyro_settling : 1; 973 uint8_t not_used0 : 5; 974 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 975 uint8_t not_used0 : 5; 976 uint8_t gyro_settling : 1; 977 uint8_t gda_ois : 1; 978 uint8_t xlda_ois : 1; 979 #endif /* DRV_BYTE_ORDER */ 980 } lsm6dsv_ui_status_reg_ois_t; 981 982 #define LSM6DSV_WAKE_UP_SRC 0x45U 983 typedef struct 984 { 985 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 986 uint8_t z_wu : 1; 987 uint8_t y_wu : 1; 988 uint8_t x_wu : 1; 989 uint8_t wu_ia : 1; 990 uint8_t sleep_state : 1; 991 uint8_t ff_ia : 1; 992 uint8_t sleep_change_ia : 1; 993 uint8_t not_used0 : 1; 994 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 995 uint8_t not_used0 : 1; 996 uint8_t sleep_change_ia : 1; 997 uint8_t ff_ia : 1; 998 uint8_t sleep_state : 1; 999 uint8_t wu_ia : 1; 1000 uint8_t x_wu : 1; 1001 uint8_t y_wu : 1; 1002 uint8_t z_wu : 1; 1003 #endif /* DRV_BYTE_ORDER */ 1004 } lsm6dsv_wake_up_src_t; 1005 1006 #define LSM6DSV_TAP_SRC 0x46U 1007 typedef struct 1008 { 1009 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1010 uint8_t z_tap : 1; 1011 uint8_t y_tap : 1; 1012 uint8_t x_tap : 1; 1013 uint8_t tap_sign : 1; 1014 uint8_t double_tap : 1; 1015 uint8_t single_tap : 1; 1016 uint8_t tap_ia : 1; 1017 uint8_t not_used0 : 1; 1018 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1019 uint8_t not_used0 : 1; 1020 uint8_t tap_ia : 1; 1021 uint8_t single_tap : 1; 1022 uint8_t double_tap : 1; 1023 uint8_t tap_sign : 1; 1024 uint8_t x_tap : 1; 1025 uint8_t y_tap : 1; 1026 uint8_t z_tap : 1; 1027 #endif /* DRV_BYTE_ORDER */ 1028 } lsm6dsv_tap_src_t; 1029 1030 #define LSM6DSV_D6D_SRC 0x47U 1031 typedef struct 1032 { 1033 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1034 uint8_t xl : 1; 1035 uint8_t xh : 1; 1036 uint8_t yl : 1; 1037 uint8_t yh : 1; 1038 uint8_t zl : 1; 1039 uint8_t zh : 1; 1040 uint8_t d6d_ia : 1; 1041 uint8_t not_used0 : 1; 1042 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1043 uint8_t not_used0 : 1; 1044 uint8_t d6d_ia : 1; 1045 uint8_t zh : 1; 1046 uint8_t zl : 1; 1047 uint8_t yh : 1; 1048 uint8_t yl : 1; 1049 uint8_t xh : 1; 1050 uint8_t xl : 1; 1051 #endif /* DRV_BYTE_ORDER */ 1052 } lsm6dsv_d6d_src_t; 1053 1054 #define LSM6DSV_STATUS_MASTER_MAINPAGE 0x48U 1055 typedef struct 1056 { 1057 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1058 uint8_t sens_hub_endop : 1; 1059 uint8_t not_used0 : 2; 1060 uint8_t slave0_nack : 1; 1061 uint8_t slave1_nack : 1; 1062 uint8_t slave2_nack : 1; 1063 uint8_t slave3_nack : 1; 1064 uint8_t wr_once_done : 1; 1065 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1066 uint8_t wr_once_done : 1; 1067 uint8_t slave3_nack : 1; 1068 uint8_t slave2_nack : 1; 1069 uint8_t slave1_nack : 1; 1070 uint8_t slave0_nack : 1; 1071 uint8_t not_used0 : 2; 1072 uint8_t sens_hub_endop : 1; 1073 #endif /* DRV_BYTE_ORDER */ 1074 } lsm6dsv_status_master_mainpage_t; 1075 1076 #define LSM6DSV_EMB_FUNC_STATUS_MAINPAGE 0x49U 1077 typedef struct 1078 { 1079 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1080 uint8_t not_used0 : 3; 1081 uint8_t is_step_det : 1; 1082 uint8_t is_tilt : 1; 1083 uint8_t is_sigmot : 1; 1084 uint8_t not_used1 : 1; 1085 uint8_t is_fsm_lc : 1; 1086 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1087 uint8_t is_fsm_lc : 1; 1088 uint8_t not_used1 : 1; 1089 uint8_t is_sigmot : 1; 1090 uint8_t is_tilt : 1; 1091 uint8_t is_step_det : 1; 1092 uint8_t not_used0 : 3; 1093 #endif /* DRV_BYTE_ORDER */ 1094 } lsm6dsv_emb_func_status_mainpage_t; 1095 1096 #define LSM6DSV_FSM_STATUS_MAINPAGE 0x4AU 1097 typedef struct 1098 { 1099 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1100 uint8_t is_fsm1 : 1; 1101 uint8_t is_fsm2 : 1; 1102 uint8_t is_fsm3 : 1; 1103 uint8_t is_fsm4 : 1; 1104 uint8_t is_fsm5 : 1; 1105 uint8_t is_fsm6 : 1; 1106 uint8_t is_fsm7 : 1; 1107 uint8_t is_fsm8 : 1; 1108 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1109 uint8_t is_fsm8 : 1; 1110 uint8_t is_fsm7 : 1; 1111 uint8_t is_fsm6 : 1; 1112 uint8_t is_fsm5 : 1; 1113 uint8_t is_fsm4 : 1; 1114 uint8_t is_fsm3 : 1; 1115 uint8_t is_fsm2 : 1; 1116 uint8_t is_fsm1 : 1; 1117 #endif /* DRV_BYTE_ORDER */ 1118 } lsm6dsv_fsm_status_mainpage_t; 1119 1120 #define LSM6DSV_INTERNAL_FREQ 0x4FU 1121 typedef struct 1122 { 1123 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1124 uint8_t freq_fine : 8; 1125 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1126 uint8_t freq_fine : 8; 1127 #endif /* DRV_BYTE_ORDER */ 1128 } lsm6dsv_internal_freq_t; 1129 1130 #define LSM6DSV_FUNCTIONS_ENABLE 0x50U 1131 typedef struct 1132 { 1133 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1134 uint8_t inact_en : 2; 1135 uint8_t not_used0 : 1; 1136 uint8_t dis_rst_lir_all_int : 1; 1137 uint8_t not_used1 : 2; 1138 uint8_t timestamp_en : 1; 1139 uint8_t interrupts_enable : 1; 1140 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1141 uint8_t interrupts_enable : 1; 1142 uint8_t timestamp_en : 1; 1143 uint8_t not_used1 : 2; 1144 uint8_t dis_rst_lir_all_int : 1; 1145 uint8_t not_used0 : 1; 1146 uint8_t inact_en : 2; 1147 #endif /* DRV_BYTE_ORDER */ 1148 } lsm6dsv_functions_enable_t; 1149 1150 #define LSM6DSV_DEN 0x51U 1151 typedef struct 1152 { 1153 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1154 uint8_t den_xl_g : 1; 1155 uint8_t den_z : 1; 1156 uint8_t den_y : 1; 1157 uint8_t den_x : 1; 1158 uint8_t den_xl_en : 1; 1159 uint8_t lvl2_en : 1; 1160 uint8_t lvl1_en : 1; 1161 uint8_t not_used0 : 1; 1162 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1163 uint8_t not_used0 : 1; 1164 uint8_t lvl1_en : 1; 1165 uint8_t lvl2_en : 1; 1166 uint8_t den_xl_en : 1; 1167 uint8_t den_x : 1; 1168 uint8_t den_y : 1; 1169 uint8_t den_z : 1; 1170 uint8_t den_xl_g : 1; 1171 #endif /* DRV_BYTE_ORDER */ 1172 } lsm6dsv_den_t; 1173 1174 #define LSM6DSV_INACTIVITY_DUR 0x54U 1175 typedef struct 1176 { 1177 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1178 uint8_t inact_dur : 2; 1179 uint8_t xl_inact_odr : 2; 1180 uint8_t wu_inact_ths_w : 3; 1181 uint8_t sleep_status_on_int : 1; 1182 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1183 uint8_t sleep_status_on_int : 1; 1184 uint8_t wu_inact_ths_w : 3; 1185 uint8_t xl_inact_odr : 2; 1186 uint8_t inact_dur : 2; 1187 #endif /* DRV_BYTE_ORDER */ 1188 } lsm6dsv_inactivity_dur_t; 1189 1190 #define LSM6DSV_INACTIVITY_THS 0x55U 1191 typedef struct 1192 { 1193 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1194 uint8_t inact_ths : 6; 1195 uint8_t not_used0 : 2; 1196 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1197 uint8_t not_used0 : 2; 1198 uint8_t inact_ths : 6; 1199 #endif /* DRV_BYTE_ORDER */ 1200 } lsm6dsv_inactivity_ths_t; 1201 1202 #define LSM6DSV_TAP_CFG0 0x56U 1203 typedef struct 1204 { 1205 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1206 uint8_t lir : 1; 1207 uint8_t tap_z_en : 1; 1208 uint8_t tap_y_en : 1; 1209 uint8_t tap_x_en : 1; 1210 uint8_t slope_fds : 1; 1211 uint8_t hw_func_mask_xl_settl : 1; 1212 uint8_t low_pass_on_6d : 1; 1213 uint8_t not_used1 : 1; 1214 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1215 uint8_t not_used1 : 1; 1216 uint8_t low_pass_on_6d : 1; 1217 uint8_t hw_func_mask_xl_settl : 1; 1218 uint8_t slope_fds : 1; 1219 uint8_t tap_x_en : 1; 1220 uint8_t tap_y_en : 1; 1221 uint8_t tap_z_en : 1; 1222 uint8_t lir : 1; 1223 #endif /* DRV_BYTE_ORDER */ 1224 } lsm6dsv_tap_cfg0_t; 1225 1226 #define LSM6DSV_TAP_CFG1 0x57U 1227 typedef struct 1228 { 1229 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1230 uint8_t tap_ths_x : 5; 1231 uint8_t tap_priority : 3; 1232 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1233 uint8_t tap_priority : 3; 1234 uint8_t tap_ths_x : 5; 1235 #endif /* DRV_BYTE_ORDER */ 1236 } lsm6dsv_tap_cfg1_t; 1237 1238 #define LSM6DSV_TAP_CFG2 0x58U 1239 typedef struct 1240 { 1241 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1242 uint8_t tap_ths_y : 5; 1243 uint8_t not_used0 : 3; 1244 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1245 uint8_t not_used0 : 3; 1246 uint8_t tap_ths_y : 5; 1247 #endif /* DRV_BYTE_ORDER */ 1248 } lsm6dsv_tap_cfg2_t; 1249 1250 #define LSM6DSV_TAP_THS_6D 0x59U 1251 typedef struct 1252 { 1253 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1254 uint8_t tap_ths_z : 5; 1255 uint8_t sixd_ths : 2; 1256 uint8_t d4d_en : 1; 1257 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1258 uint8_t d4d_en : 1; 1259 uint8_t sixd_ths : 2; 1260 uint8_t tap_ths_z : 5; 1261 #endif /* DRV_BYTE_ORDER */ 1262 } lsm6dsv_tap_ths_6d_t; 1263 1264 #define LSM6DSV_TAP_DUR 0x5AU 1265 typedef struct 1266 { 1267 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1268 uint8_t shock : 2; 1269 uint8_t quiet : 2; 1270 uint8_t dur : 4; 1271 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1272 uint8_t dur : 4; 1273 uint8_t quiet : 2; 1274 uint8_t shock : 2; 1275 #endif /* DRV_BYTE_ORDER */ 1276 } lsm6dsv_tap_dur_t; 1277 1278 #define LSM6DSV_WAKE_UP_THS 0x5BU 1279 typedef struct 1280 { 1281 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1282 uint8_t wk_ths : 6; 1283 uint8_t usr_off_on_wu : 1; 1284 uint8_t single_double_tap : 1; 1285 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1286 uint8_t single_double_tap : 1; 1287 uint8_t usr_off_on_wu : 1; 1288 uint8_t wk_ths : 6; 1289 #endif /* DRV_BYTE_ORDER */ 1290 } lsm6dsv_wake_up_ths_t; 1291 1292 #define LSM6DSV_WAKE_UP_DUR 0x5CU 1293 typedef struct 1294 { 1295 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1296 uint8_t sleep_dur : 4; 1297 uint8_t not_used0 : 1; 1298 uint8_t wake_dur : 2; 1299 uint8_t ff_dur : 1; 1300 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1301 uint8_t ff_dur : 1; 1302 uint8_t wake_dur : 2; 1303 uint8_t not_used0 : 1; 1304 uint8_t sleep_dur : 4; 1305 #endif /* DRV_BYTE_ORDER */ 1306 } lsm6dsv_wake_up_dur_t; 1307 1308 #define LSM6DSV_FREE_FALL 0x5DU 1309 typedef struct 1310 { 1311 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1312 uint8_t ff_ths : 3; 1313 uint8_t ff_dur : 5; 1314 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1315 uint8_t ff_dur : 5; 1316 uint8_t ff_ths : 3; 1317 #endif /* DRV_BYTE_ORDER */ 1318 } lsm6dsv_free_fall_t; 1319 1320 #define LSM6DSV_MD1_CFG 0x5EU 1321 typedef struct 1322 { 1323 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1324 uint8_t int1_shub : 1; 1325 uint8_t int1_emb_func : 1; 1326 uint8_t int1_6d : 1; 1327 uint8_t int1_double_tap : 1; 1328 uint8_t int1_ff : 1; 1329 uint8_t int1_wu : 1; 1330 uint8_t int1_single_tap : 1; 1331 uint8_t int1_sleep_change : 1; 1332 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1333 uint8_t int1_sleep_change : 1; 1334 uint8_t int1_single_tap : 1; 1335 uint8_t int1_wu : 1; 1336 uint8_t int1_ff : 1; 1337 uint8_t int1_double_tap : 1; 1338 uint8_t int1_6d : 1; 1339 uint8_t int1_emb_func : 1; 1340 uint8_t int1_shub : 1; 1341 #endif /* DRV_BYTE_ORDER */ 1342 } lsm6dsv_md1_cfg_t; 1343 1344 #define LSM6DSV_MD2_CFG 0x5FU 1345 typedef struct 1346 { 1347 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1348 uint8_t int2_timestamp : 1; 1349 uint8_t int2_emb_func : 1; 1350 uint8_t int2_6d : 1; 1351 uint8_t int2_double_tap : 1; 1352 uint8_t int2_ff : 1; 1353 uint8_t int2_wu : 1; 1354 uint8_t int2_single_tap : 1; 1355 uint8_t int2_sleep_change : 1; 1356 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1357 uint8_t int2_sleep_change : 1; 1358 uint8_t int2_single_tap : 1; 1359 uint8_t int2_wu : 1; 1360 uint8_t int2_ff : 1; 1361 uint8_t int2_double_tap : 1; 1362 uint8_t int2_6d : 1; 1363 uint8_t int2_emb_func : 1; 1364 uint8_t int2_timestamp : 1; 1365 #endif /* DRV_BYTE_ORDER */ 1366 } lsm6dsv_md2_cfg_t; 1367 1368 #define LSM6DSV_HAODR_CFG 0x62U 1369 typedef struct 1370 { 1371 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1372 uint8_t haodr_sel : 2; 1373 uint8_t not_used0 : 6; 1374 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1375 uint8_t not_used0 : 6; 1376 uint8_t haodr_sel : 2; 1377 #endif /* DRV_BYTE_ORDER */ 1378 } lsm6dsv_haodr_cfg_t; 1379 1380 #define LSM6DSV_EMB_FUNC_CFG 0x63U 1381 typedef struct 1382 { 1383 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1384 uint8_t not_used0 : 3; 1385 uint8_t emb_func_disable : 1; 1386 uint8_t emb_func_irq_mask_xl_settl : 1; 1387 uint8_t emb_func_irq_mask_g_settl : 1; 1388 uint8_t not_used1 : 2; 1389 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1390 uint8_t not_used1 : 2; 1391 uint8_t emb_func_irq_mask_g_settl : 1; 1392 uint8_t emb_func_irq_mask_xl_settl : 1; 1393 uint8_t emb_func_disable : 1; 1394 uint8_t not_used0 : 3; 1395 #endif /* DRV_BYTE_ORDER */ 1396 } lsm6dsv_emb_func_cfg_t; 1397 1398 #define LSM6DSV_UI_HANDSHAKE_CTRL 0x64U 1399 typedef struct 1400 { 1401 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1402 uint8_t ui_shared_req : 1; 1403 uint8_t ui_shared_ack : 1; 1404 uint8_t not_used0 : 6; 1405 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1406 uint8_t not_used0 : 6; 1407 uint8_t ui_shared_ack : 1; 1408 uint8_t ui_shared_req : 1; 1409 #endif /* DRV_BYTE_ORDER */ 1410 } lsm6dsv_ui_handshake_ctrl_t; 1411 1412 #define LSM6DSV_UI_SPI2_SHARED_0 0x65U 1413 typedef struct 1414 { 1415 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1416 uint8_t ui_spi2_shared : 8; 1417 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1418 uint8_t ui_spi2_shared : 8; 1419 #endif /* DRV_BYTE_ORDER */ 1420 } lsm6dsv_ui_spi2_shared_0_t; 1421 1422 #define LSM6DSV_UI_SPI2_SHARED_1 0x66U 1423 typedef struct 1424 { 1425 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1426 uint8_t ui_spi2_shared : 8; 1427 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1428 uint8_t ui_spi2_shared : 8; 1429 #endif /* DRV_BYTE_ORDER */ 1430 } lsm6dsv_ui_spi2_shared_1_t; 1431 1432 #define LSM6DSV_UI_SPI2_SHARED_2 0x67U 1433 typedef struct 1434 { 1435 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1436 uint8_t ui_spi2_shared : 8; 1437 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1438 uint8_t ui_spi2_shared : 8; 1439 #endif /* DRV_BYTE_ORDER */ 1440 } lsm6dsv_ui_spi2_shared_2_t; 1441 1442 #define LSM6DSV_UI_SPI2_SHARED_3 0x68U 1443 typedef struct 1444 { 1445 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1446 uint8_t ui_spi2_shared : 8; 1447 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1448 uint8_t ui_spi2_shared : 8; 1449 #endif /* DRV_BYTE_ORDER */ 1450 } lsm6dsv_ui_spi2_shared_3_t; 1451 1452 #define LSM6DSV_UI_SPI2_SHARED_4 0x69U 1453 typedef struct 1454 { 1455 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1456 uint8_t ui_spi2_shared : 8; 1457 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1458 uint8_t ui_spi2_shared : 8; 1459 #endif /* DRV_BYTE_ORDER */ 1460 } lsm6dsv_ui_spi2_shared_4_t; 1461 1462 #define LSM6DSV_UI_SPI2_SHARED_5 0x6AU 1463 typedef struct 1464 { 1465 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1466 uint8_t ui_spi2_shared : 8; 1467 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1468 uint8_t ui_spi2_shared : 8; 1469 #endif /* DRV_BYTE_ORDER */ 1470 } lsm6dsv_ui_spi2_shared_5_t; 1471 1472 #define LSM6DSV_CTRL_EIS 0x6BU 1473 typedef struct 1474 { 1475 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1476 uint8_t fs_g_eis : 3; 1477 uint8_t g_eis_on_g_ois_out_reg : 1; 1478 uint8_t lpf_g_eis_bw : 1; 1479 uint8_t not_used0 : 1; 1480 uint8_t odr_g_eis : 2; 1481 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1482 uint8_t odr_g_eis : 2; 1483 uint8_t not_used0 : 1; 1484 uint8_t lpf_g_eis_bw : 1; 1485 uint8_t g_eis_on_g_ois_out_reg : 1; 1486 uint8_t fs_g_eis : 3; 1487 #endif /* DRV_BYTE_ORDER */ 1488 } lsm6dsv_ctrl_eis_t; 1489 1490 #define LSM6DSV_UI_INT_OIS 0x6FU 1491 typedef struct 1492 { 1493 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1494 uint8_t not_used0 : 4; 1495 uint8_t st_ois_clampdis : 1; 1496 uint8_t not_used1 : 1; 1497 uint8_t drdy_mask_ois : 1; 1498 uint8_t int2_drdy_ois : 1; 1499 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1500 uint8_t int2_drdy_ois : 1; 1501 uint8_t drdy_mask_ois : 1; 1502 uint8_t not_used1 : 1; 1503 uint8_t st_ois_clampdis : 1; 1504 uint8_t not_used0 : 4; 1505 #endif /* DRV_BYTE_ORDER */ 1506 } lsm6dsv_ui_int_ois_t; 1507 1508 #define LSM6DSV_UI_CTRL1_OIS 0x70U 1509 typedef struct 1510 { 1511 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1512 uint8_t spi2_read_en : 1; 1513 uint8_t ois_g_en : 1; 1514 uint8_t ois_xl_en : 1; 1515 uint8_t not_used0 : 2; 1516 uint8_t sim_ois : 1; 1517 uint8_t not_used1 : 2; 1518 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1519 uint8_t not_used1 : 2; 1520 uint8_t sim_ois : 1; 1521 uint8_t not_used0 : 2; 1522 uint8_t ois_xl_en : 1; 1523 uint8_t ois_g_en : 1; 1524 uint8_t spi2_read_en : 1; 1525 #endif /* DRV_BYTE_ORDER */ 1526 } lsm6dsv_ui_ctrl1_ois_t; 1527 1528 #define LSM6DSV_UI_CTRL2_OIS 0x71U 1529 typedef struct 1530 { 1531 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1532 uint8_t fs_g_ois : 3; 1533 uint8_t lpf1_g_ois_bw : 2; 1534 uint8_t not_used0 : 3; 1535 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1536 uint8_t not_used0 : 3; 1537 uint8_t lpf1_g_ois_bw : 2; 1538 uint8_t fs_g_ois : 3; 1539 #endif /* DRV_BYTE_ORDER */ 1540 } lsm6dsv_ui_ctrl2_ois_t; 1541 1542 #define LSM6DSV_UI_CTRL3_OIS 0x72U 1543 typedef struct 1544 { 1545 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1546 uint8_t fs_xl_ois : 2; 1547 uint8_t not_used0 : 1; 1548 uint8_t lpf_xl_ois_bw : 3; 1549 uint8_t not_used1 : 2; 1550 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1551 uint8_t not_used1 : 2; 1552 uint8_t lpf_xl_ois_bw : 3; 1553 uint8_t not_used0 : 1; 1554 uint8_t fs_xl_ois : 2; 1555 #endif /* DRV_BYTE_ORDER */ 1556 } lsm6dsv_ui_ctrl3_ois_t; 1557 1558 #define LSM6DSV_X_OFS_USR 0x73U 1559 typedef struct 1560 { 1561 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1562 uint8_t x_ofs_usr : 8; 1563 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1564 uint8_t x_ofs_usr : 8; 1565 #endif /* DRV_BYTE_ORDER */ 1566 } lsm6dsv_x_ofs_usr_t; 1567 1568 #define LSM6DSV_Y_OFS_USR 0x74U 1569 typedef struct 1570 { 1571 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1572 uint8_t y_ofs_usr : 8; 1573 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1574 uint8_t y_ofs_usr : 8; 1575 #endif /* DRV_BYTE_ORDER */ 1576 } lsm6dsv_y_ofs_usr_t; 1577 1578 #define LSM6DSV_Z_OFS_USR 0x75U 1579 typedef struct 1580 { 1581 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1582 uint8_t z_ofs_usr : 8; 1583 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1584 uint8_t z_ofs_usr : 8; 1585 #endif /* DRV_BYTE_ORDER */ 1586 } lsm6dsv_z_ofs_usr_t; 1587 1588 #define LSM6DSV_FIFO_DATA_OUT_TAG 0x78U 1589 typedef struct 1590 { 1591 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1592 uint8_t not_used0 : 1; 1593 uint8_t tag_cnt : 2; 1594 uint8_t tag_sensor : 5; 1595 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1596 uint8_t tag_sensor : 5; 1597 uint8_t tag_cnt : 2; 1598 uint8_t not_used0 : 1; 1599 #endif /* DRV_BYTE_ORDER */ 1600 } lsm6dsv_fifo_data_out_tag_t; 1601 1602 #define LSM6DSV_FIFO_DATA_OUT_X_L 0x79U 1603 typedef struct 1604 { 1605 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1606 uint8_t fifo_data_out : 8; 1607 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1608 uint8_t fifo_data_out : 8; 1609 #endif /* DRV_BYTE_ORDER */ 1610 } lsm6dsv_fifo_data_out_x_l_t; 1611 1612 #define LSM6DSV_FIFO_DATA_OUT_X_H 0x7AU 1613 typedef struct 1614 { 1615 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1616 uint8_t fifo_data_out : 8; 1617 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1618 uint8_t fifo_data_out : 8; 1619 #endif /* DRV_BYTE_ORDER */ 1620 } lsm6dsv_fifo_data_out_x_h_t; 1621 1622 #define LSM6DSV_FIFO_DATA_OUT_Y_L 0x7BU 1623 typedef struct 1624 { 1625 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1626 uint8_t fifo_data_out : 8; 1627 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1628 uint8_t fifo_data_out : 8; 1629 #endif /* DRV_BYTE_ORDER */ 1630 } lsm6dsv_fifo_data_out_y_l_t; 1631 1632 #define LSM6DSV_FIFO_DATA_OUT_Y_H 0x7CU 1633 typedef struct 1634 { 1635 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1636 uint8_t fifo_data_out : 8; 1637 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1638 uint8_t fifo_data_out : 8; 1639 #endif /* DRV_BYTE_ORDER */ 1640 } lsm6dsv_fifo_data_out_y_h_t; 1641 1642 #define LSM6DSV_FIFO_DATA_OUT_Z_L 0x7DU 1643 typedef struct 1644 { 1645 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1646 uint8_t fifo_data_out : 8; 1647 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1648 uint8_t fifo_data_out : 8; 1649 #endif /* DRV_BYTE_ORDER */ 1650 } lsm6dsv_fifo_data_out_z_l_t; 1651 1652 #define LSM6DSV_FIFO_DATA_OUT_Z_H 0x7EU 1653 typedef struct 1654 { 1655 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1656 uint8_t fifo_data_out : 8; 1657 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1658 uint8_t fifo_data_out : 8; 1659 #endif /* DRV_BYTE_ORDER */ 1660 } lsm6dsv_fifo_data_out_z_h_t; 1661 1662 /** 1663 * @} 1664 * 1665 */ 1666 1667 /** @defgroup bitfields page spi2 1668 * @{ 1669 * 1670 */ 1671 1672 #define LSM6DSV_SPI2_WHO_AM_I 0x0FU 1673 typedef struct 1674 { 1675 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1676 uint8_t id : 8; 1677 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1678 uint8_t id : 8; 1679 #endif /* DRV_BYTE_ORDER */ 1680 } lsm6dsv_spi2_who_am_i_t; 1681 1682 #define LSM6DSV_SPI2_STATUS_REG_OIS 0x1EU 1683 typedef struct 1684 { 1685 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1686 uint8_t xlda : 1; 1687 uint8_t gda : 1; 1688 uint8_t gyro_settling : 1; 1689 uint8_t not_used0 : 5; 1690 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1691 uint8_t not_used0 : 5; 1692 uint8_t gyro_settling : 1; 1693 uint8_t gda : 1; 1694 uint8_t xlda : 1; 1695 #endif /* DRV_BYTE_ORDER */ 1696 } lsm6dsv_spi2_status_reg_ois_t; 1697 1698 #define LSM6DSV_SPI2_OUT_TEMP_L 0x20U 1699 typedef struct 1700 { 1701 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1702 uint8_t temp : 8; 1703 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1704 uint8_t temp : 8; 1705 #endif /* DRV_BYTE_ORDER */ 1706 } lsm6dsv_spi2_out_temp_l_t; 1707 1708 #define LSM6DSV_SPI2_OUT_TEMP_H 0x21U 1709 typedef struct 1710 { 1711 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1712 uint8_t temp : 8; 1713 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1714 uint8_t temp : 8; 1715 #endif /* DRV_BYTE_ORDER */ 1716 } lsm6dsv_spi2_out_temp_h_t; 1717 1718 #define LSM6DSV_SPI2_OUTX_L_G_OIS 0x22U 1719 typedef struct 1720 { 1721 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1722 uint8_t spi2_outx_g_ois : 8; 1723 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1724 uint8_t spi2_outx_g_ois : 8; 1725 #endif /* DRV_BYTE_ORDER */ 1726 } lsm6dsv_spi2_outx_l_g_ois_t; 1727 1728 #define LSM6DSV_SPI2_OUTX_H_G_OIS 0x23U 1729 typedef struct 1730 { 1731 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1732 uint8_t spi2_outx_g_ois : 8; 1733 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1734 uint8_t spi2_outx_g_ois : 8; 1735 #endif /* DRV_BYTE_ORDER */ 1736 } lsm6dsv_spi2_outx_h_g_ois_t; 1737 1738 #define LSM6DSV_SPI2_OUTY_L_G_OIS 0x24U 1739 typedef struct 1740 { 1741 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1742 uint8_t spi2_outy_g_ois : 8; 1743 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1744 uint8_t spi2_outy_g_ois : 8; 1745 #endif /* DRV_BYTE_ORDER */ 1746 } lsm6dsv_spi2_outy_l_g_ois_t; 1747 1748 #define LSM6DSV_SPI2_OUTY_H_G_OIS 0x25U 1749 typedef struct 1750 { 1751 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1752 uint8_t spi2_outy_g_ois : 8; 1753 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1754 uint8_t spi2_outy_g_ois : 8; 1755 #endif /* DRV_BYTE_ORDER */ 1756 } lsm6dsv_spi2_outy_h_g_ois_t; 1757 1758 #define LSM6DSV_SPI2_OUTZ_L_G_OIS 0x26U 1759 typedef struct 1760 { 1761 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1762 uint8_t spi2_outz_g_ois : 8; 1763 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1764 uint8_t spi2_outz_g_ois : 8; 1765 #endif /* DRV_BYTE_ORDER */ 1766 } lsm6dsv_spi2_outz_l_g_ois_t; 1767 1768 #define LSM6DSV_SPI2_OUTZ_H_G_OIS 0x27U 1769 typedef struct 1770 { 1771 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1772 uint8_t spi2_outz_g_ois : 8; 1773 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1774 uint8_t spi2_outz_g_ois : 8; 1775 #endif /* DRV_BYTE_ORDER */ 1776 } lsm6dsv_spi2_outz_h_g_ois_t; 1777 1778 #define LSM6DSV_SPI2_OUTX_L_A_OIS 0x28U 1779 typedef struct 1780 { 1781 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1782 uint8_t spi2_outx_a_ois : 8; 1783 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1784 uint8_t spi2_outx_a_ois : 8; 1785 #endif /* DRV_BYTE_ORDER */ 1786 } lsm6dsv_spi2_outx_l_a_ois_t; 1787 1788 #define LSM6DSV_SPI2_OUTX_H_A_OIS 0x29U 1789 typedef struct 1790 { 1791 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1792 uint8_t spi2_outx_a_ois : 8; 1793 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1794 uint8_t spi2_outx_a_ois : 8; 1795 #endif /* DRV_BYTE_ORDER */ 1796 } lsm6dsv_spi2_outx_h_a_ois_t; 1797 1798 #define LSM6DSV_SPI2_OUTY_L_A_OIS 0x2AU 1799 typedef struct 1800 { 1801 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1802 uint8_t spi2_outy_a_ois : 8; 1803 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1804 uint8_t spi2_outy_a_ois : 8; 1805 #endif /* DRV_BYTE_ORDER */ 1806 } lsm6dsv_spi2_outy_l_a_ois_t; 1807 1808 #define LSM6DSV_SPI2_OUTY_H_A_OIS 0x2BU 1809 typedef struct 1810 { 1811 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1812 uint8_t spi2_outy_a_ois : 8; 1813 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1814 uint8_t spi2_outy_a_ois : 8; 1815 #endif /* DRV_BYTE_ORDER */ 1816 } lsm6dsv_spi2_outy_h_a_ois_t; 1817 1818 #define LSM6DSV_SPI2_OUTZ_L_A_OIS 0x2CU 1819 typedef struct 1820 { 1821 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1822 uint8_t spi2_outz_a_ois : 8; 1823 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1824 uint8_t spi2_outz_a_ois : 8; 1825 #endif /* DRV_BYTE_ORDER */ 1826 } lsm6dsv_spi2_outz_l_a_ois_t; 1827 1828 #define LSM6DSV_SPI2_OUTZ_H_A_OIS 0x2DU 1829 typedef struct 1830 { 1831 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1832 uint8_t spi2_outz_a_ois : 8; 1833 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1834 uint8_t spi2_outz_a_ois : 8; 1835 #endif /* DRV_BYTE_ORDER */ 1836 } lsm6dsv_spi2_outz_h_a_ois_t; 1837 1838 #define LSM6DSV_SPI2_HANDSHAKE_CTRL 0x6EU 1839 typedef struct 1840 { 1841 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1842 uint8_t spi2_shared_ack : 1; 1843 uint8_t spi2_shared_req : 1; 1844 uint8_t not_used0 : 6; 1845 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1846 uint8_t not_used0 : 6; 1847 uint8_t spi2_shared_req : 1; 1848 uint8_t spi2_shared_ack : 1; 1849 #endif /* DRV_BYTE_ORDER */ 1850 } lsm6dsv_spi2_handshake_ctrl_t; 1851 1852 #define LSM6DSV_SPI2_INT_OIS 0x6FU 1853 typedef struct 1854 { 1855 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1856 uint8_t st_xl_ois : 2; 1857 uint8_t st_g_ois : 2; 1858 uint8_t st_ois_clampdis : 1; 1859 uint8_t not_used0 : 1; 1860 uint8_t drdy_mask_ois : 1; 1861 uint8_t int2_drdy_ois : 1; 1862 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1863 uint8_t int2_drdy_ois : 1; 1864 uint8_t drdy_mask_ois : 1; 1865 uint8_t not_used0 : 1; 1866 uint8_t st_ois_clampdis : 1; 1867 uint8_t st_g_ois : 2; 1868 uint8_t st_xl_ois : 2; 1869 #endif /* DRV_BYTE_ORDER */ 1870 } lsm6dsv_spi2_int_ois_t; 1871 1872 #define LSM6DSV_SPI2_CTRL1_OIS 0x70U 1873 typedef struct 1874 { 1875 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1876 uint8_t spi2_read_en : 1; 1877 uint8_t ois_g_en : 1; 1878 uint8_t ois_xl_en : 1; 1879 uint8_t not_used0 : 2; 1880 uint8_t sim_ois : 1; 1881 uint8_t not_used1 : 2; 1882 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1883 uint8_t not_used1 : 2; 1884 uint8_t sim_ois : 1; 1885 uint8_t not_used0 : 2; 1886 uint8_t ois_xl_en : 1; 1887 uint8_t ois_g_en : 1; 1888 uint8_t spi2_read_en : 1; 1889 #endif /* DRV_BYTE_ORDER */ 1890 } lsm6dsv_spi2_ctrl1_ois_t; 1891 1892 #define LSM6DSV_SPI2_CTRL2_OIS 0x71U 1893 typedef struct 1894 { 1895 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1896 uint8_t fs_g_ois : 3; 1897 uint8_t lpf1_g_ois_bw : 2; 1898 uint8_t not_used0 : 3; 1899 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1900 uint8_t not_used0 : 3; 1901 uint8_t lpf1_g_ois_bw : 2; 1902 uint8_t fs_g_ois : 3; 1903 #endif /* DRV_BYTE_ORDER */ 1904 } lsm6dsv_spi2_ctrl2_ois_t; 1905 1906 #define LSM6DSV_SPI2_CTRL3_OIS 0x72U 1907 typedef struct 1908 { 1909 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1910 uint8_t fs_xl_ois : 2; 1911 uint8_t not_used0 : 1; 1912 uint8_t lpf_xl_ois_bw : 3; 1913 uint8_t not_used1 : 2; 1914 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1915 uint8_t not_used1 : 2; 1916 uint8_t lpf_xl_ois_bw : 3; 1917 uint8_t not_used0 : 1; 1918 uint8_t fs_xl_ois : 2; 1919 #endif /* DRV_BYTE_ORDER */ 1920 } lsm6dsv_spi2_ctrl3_ois_t; 1921 1922 /** 1923 * @} 1924 * 1925 */ 1926 1927 /** @defgroup bitfields page embedded 1928 * @{ 1929 * 1930 */ 1931 1932 #define LSM6DSV_PAGE_SEL 0x2U 1933 typedef struct 1934 { 1935 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1936 uint8_t not_used0 : 4; 1937 uint8_t page_sel : 4; 1938 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1939 uint8_t page_sel : 4; 1940 uint8_t not_used0 : 4; 1941 #endif /* DRV_BYTE_ORDER */ 1942 } lsm6dsv_page_sel_t; 1943 1944 #define LSM6DSV_EMB_FUNC_EN_A 0x4U 1945 typedef struct 1946 { 1947 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1948 uint8_t not_used0 : 1; 1949 uint8_t sflp_game_en : 1; 1950 uint8_t not_used2 : 1; 1951 uint8_t pedo_en : 1; 1952 uint8_t tilt_en : 1; 1953 uint8_t sign_motion_en : 1; 1954 uint8_t not_used1 : 2; 1955 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1956 uint8_t not_used1 : 2; 1957 uint8_t sign_motion_en : 1; 1958 uint8_t tilt_en : 1; 1959 uint8_t pedo_en : 1; 1960 uint8_t not_used2 : 1; 1961 uint8_t sflp_game_en : 1; 1962 uint8_t not_used0 : 1; 1963 #endif /* DRV_BYTE_ORDER */ 1964 } lsm6dsv_emb_func_en_a_t; 1965 1966 #define LSM6DSV_EMB_FUNC_EN_B 0x5U 1967 typedef struct 1968 { 1969 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1970 uint8_t fsm_en : 1; 1971 uint8_t not_used0 : 2; 1972 uint8_t fifo_compr_en : 1; 1973 uint8_t not_used1 : 4; 1974 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1975 uint8_t not_used1 : 4; 1976 uint8_t fifo_compr_en : 1; 1977 uint8_t not_used0 : 2; 1978 uint8_t fsm_en : 1; 1979 #endif /* DRV_BYTE_ORDER */ 1980 } lsm6dsv_emb_func_en_b_t; 1981 1982 #define LSM6DSV_EMB_FUNC_EXEC_STATUS 0x7U 1983 typedef struct 1984 { 1985 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 1986 uint8_t emb_func_endop : 1; 1987 uint8_t emb_func_exec_ovr : 1; 1988 uint8_t not_used0 : 6; 1989 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 1990 uint8_t not_used0 : 6; 1991 uint8_t emb_func_exec_ovr : 1; 1992 uint8_t emb_func_endop : 1; 1993 #endif /* DRV_BYTE_ORDER */ 1994 } lsm6dsv_emb_func_exec_status_t; 1995 1996 #define LSM6DSV_PAGE_ADDRESS 0x8U 1997 typedef struct 1998 { 1999 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2000 uint8_t page_addr : 8; 2001 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2002 uint8_t page_addr : 8; 2003 #endif /* DRV_BYTE_ORDER */ 2004 } lsm6dsv_page_address_t; 2005 2006 #define LSM6DSV_PAGE_VALUE 0x9U 2007 typedef struct 2008 { 2009 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2010 uint8_t page_value : 8; 2011 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2012 uint8_t page_value : 8; 2013 #endif /* DRV_BYTE_ORDER */ 2014 } lsm6dsv_page_value_t; 2015 2016 #define LSM6DSV_EMB_FUNC_INT1 0x0AU 2017 typedef struct 2018 { 2019 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2020 uint8_t not_used0 : 3; 2021 uint8_t int1_step_detector : 1; 2022 uint8_t int1_tilt : 1; 2023 uint8_t int1_sig_mot : 1; 2024 uint8_t not_used1 : 1; 2025 uint8_t int1_fsm_lc : 1; 2026 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2027 uint8_t int1_fsm_lc : 1; 2028 uint8_t not_used1 : 1; 2029 uint8_t int1_sig_mot : 1; 2030 uint8_t int1_tilt : 1; 2031 uint8_t int1_step_detector : 1; 2032 uint8_t not_used0 : 3; 2033 #endif /* DRV_BYTE_ORDER */ 2034 } lsm6dsv_emb_func_int1_t; 2035 2036 #define LSM6DSV_FSM_INT1 0x0BU 2037 typedef struct 2038 { 2039 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2040 uint8_t int1_fsm1 : 1; 2041 uint8_t int1_fsm2 : 1; 2042 uint8_t int1_fsm3 : 1; 2043 uint8_t int1_fsm4 : 1; 2044 uint8_t int1_fsm5 : 1; 2045 uint8_t int1_fsm6 : 1; 2046 uint8_t int1_fsm7 : 1; 2047 uint8_t int1_fsm8 : 1; 2048 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2049 uint8_t int1_fsm8 : 1; 2050 uint8_t int1_fsm7 : 1; 2051 uint8_t int1_fsm6 : 1; 2052 uint8_t int1_fsm5 : 1; 2053 uint8_t int1_fsm4 : 1; 2054 uint8_t int1_fsm3 : 1; 2055 uint8_t int1_fsm2 : 1; 2056 uint8_t int1_fsm1 : 1; 2057 #endif /* DRV_BYTE_ORDER */ 2058 } lsm6dsv_fsm_int1_t; 2059 2060 #define LSM6DSV_EMB_FUNC_INT2 0x0EU 2061 typedef struct 2062 { 2063 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2064 uint8_t not_used0 : 3; 2065 uint8_t int2_step_detector : 1; 2066 uint8_t int2_tilt : 1; 2067 uint8_t int2_sig_mot : 1; 2068 uint8_t not_used1 : 1; 2069 uint8_t int2_fsm_lc : 1; 2070 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2071 uint8_t int2_fsm_lc : 1; 2072 uint8_t not_used1 : 1; 2073 uint8_t int2_sig_mot : 1; 2074 uint8_t int2_tilt : 1; 2075 uint8_t int2_step_detector : 1; 2076 uint8_t not_used0 : 3; 2077 #endif /* DRV_BYTE_ORDER */ 2078 } lsm6dsv_emb_func_int2_t; 2079 2080 #define LSM6DSV_FSM_INT2 0x0FU 2081 typedef struct 2082 { 2083 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2084 uint8_t int2_fsm1 : 1; 2085 uint8_t int2_fsm2 : 1; 2086 uint8_t int2_fsm3 : 1; 2087 uint8_t int2_fsm4 : 1; 2088 uint8_t int2_fsm5 : 1; 2089 uint8_t int2_fsm6 : 1; 2090 uint8_t int2_fsm7 : 1; 2091 uint8_t int2_fsm8 : 1; 2092 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2093 uint8_t int2_fsm8 : 1; 2094 uint8_t int2_fsm7 : 1; 2095 uint8_t int2_fsm6 : 1; 2096 uint8_t int2_fsm5 : 1; 2097 uint8_t int2_fsm4 : 1; 2098 uint8_t int2_fsm3 : 1; 2099 uint8_t int2_fsm2 : 1; 2100 uint8_t int2_fsm1 : 1; 2101 #endif /* DRV_BYTE_ORDER */ 2102 } lsm6dsv_fsm_int2_t; 2103 2104 #define LSM6DSV_EMB_FUNC_STATUS 0x12U 2105 typedef struct 2106 { 2107 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2108 uint8_t not_used0 : 3; 2109 uint8_t is_step_det : 1; 2110 uint8_t is_tilt : 1; 2111 uint8_t is_sigmot : 1; 2112 uint8_t not_used1 : 1; 2113 uint8_t is_fsm_lc : 1; 2114 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2115 uint8_t is_fsm_lc : 1; 2116 uint8_t not_used1 : 1; 2117 uint8_t is_sigmot : 1; 2118 uint8_t is_tilt : 1; 2119 uint8_t is_step_det : 1; 2120 uint8_t not_used0 : 3; 2121 #endif /* DRV_BYTE_ORDER */ 2122 } lsm6dsv_emb_func_status_t; 2123 2124 #define LSM6DSV_FSM_STATUS 0x13U 2125 typedef struct 2126 { 2127 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2128 uint8_t is_fsm1 : 1; 2129 uint8_t is_fsm2 : 1; 2130 uint8_t is_fsm3 : 1; 2131 uint8_t is_fsm4 : 1; 2132 uint8_t is_fsm5 : 1; 2133 uint8_t is_fsm6 : 1; 2134 uint8_t is_fsm7 : 1; 2135 uint8_t is_fsm8 : 1; 2136 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2137 uint8_t is_fsm8 : 1; 2138 uint8_t is_fsm7 : 1; 2139 uint8_t is_fsm6 : 1; 2140 uint8_t is_fsm5 : 1; 2141 uint8_t is_fsm4 : 1; 2142 uint8_t is_fsm3 : 1; 2143 uint8_t is_fsm2 : 1; 2144 uint8_t is_fsm1 : 1; 2145 #endif /* DRV_BYTE_ORDER */ 2146 } lsm6dsv_fsm_status_t; 2147 2148 #define LSM6DSV_PAGE_RW 0x17U 2149 typedef struct 2150 { 2151 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2152 uint8_t not_used0 : 5; 2153 uint8_t page_read : 1; 2154 uint8_t page_write : 1; 2155 uint8_t emb_func_lir : 1; 2156 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2157 uint8_t emb_func_lir : 1; 2158 uint8_t page_write : 1; 2159 uint8_t page_read : 1; 2160 uint8_t not_used0 : 5; 2161 #endif /* DRV_BYTE_ORDER */ 2162 } lsm6dsv_page_rw_t; 2163 2164 #define LSM6DSV_EMB_FUNC_FIFO_EN_A 0x44U 2165 typedef struct 2166 { 2167 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2168 uint8_t not_used0 : 1; 2169 uint8_t sflp_game_fifo_en : 1; 2170 uint8_t not_used1 : 2; 2171 uint8_t sflp_gravity_fifo_en : 1; 2172 uint8_t sflp_gbias_fifo_en : 1; 2173 uint8_t step_counter_fifo_en : 1; 2174 uint8_t not_used2 : 1; 2175 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2176 uint8_t not_used2 : 1; 2177 uint8_t step_counter_fifo_en : 1; 2178 uint8_t sflp_gbias_fifo_en : 1; 2179 uint8_t sflp_gravity_fifo_en : 1; 2180 uint8_t not_used1 : 2; 2181 uint8_t sflp_game_fifo_en : 1; 2182 uint8_t not_used0 : 1; 2183 #endif /* DRV_BYTE_ORDER */ 2184 } lsm6dsv_emb_func_fifo_en_a_t; 2185 2186 #define LSM6DSV_FSM_ENABLE 0x46U 2187 typedef struct 2188 { 2189 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2190 uint8_t fsm1_en : 1; 2191 uint8_t fsm2_en : 1; 2192 uint8_t fsm3_en : 1; 2193 uint8_t fsm4_en : 1; 2194 uint8_t fsm5_en : 1; 2195 uint8_t fsm6_en : 1; 2196 uint8_t fsm7_en : 1; 2197 uint8_t fsm8_en : 1; 2198 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2199 uint8_t fsm8_en : 1; 2200 uint8_t fsm7_en : 1; 2201 uint8_t fsm6_en : 1; 2202 uint8_t fsm5_en : 1; 2203 uint8_t fsm4_en : 1; 2204 uint8_t fsm3_en : 1; 2205 uint8_t fsm2_en : 1; 2206 uint8_t fsm1_en : 1; 2207 #endif /* DRV_BYTE_ORDER */ 2208 } lsm6dsv_fsm_enable_t; 2209 2210 #define LSM6DSV_FSM_LONG_COUNTER_L 0x48U 2211 typedef struct 2212 { 2213 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2214 uint8_t fsm_lc : 8; 2215 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2216 uint8_t fsm_lc : 8; 2217 #endif /* DRV_BYTE_ORDER */ 2218 } lsm6dsv_fsm_long_counter_l_t; 2219 2220 #define LSM6DSV_FSM_LONG_COUNTER_H 0x49U 2221 typedef struct 2222 { 2223 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2224 uint8_t fsm_lc : 8; 2225 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2226 uint8_t fsm_lc : 8; 2227 #endif /* DRV_BYTE_ORDER */ 2228 } lsm6dsv_fsm_long_counter_h_t; 2229 2230 #define LSM6DSV_INT_ACK_MASK 0x4BU 2231 typedef struct 2232 { 2233 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2234 uint8_t iack_mask : 8; 2235 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2236 uint8_t iack_mask : 8; 2237 #endif /* DRV_BYTE_ORDER */ 2238 } lsm6dsv_int_ack_mask_t; 2239 2240 #define LSM6DSV_FSM_OUTS1 0x4CU 2241 typedef struct 2242 { 2243 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2244 uint8_t fsm1_n_v : 1; 2245 uint8_t fsm1_p_v : 1; 2246 uint8_t fsm1_n_z : 1; 2247 uint8_t fsm1_p_z : 1; 2248 uint8_t fsm1_n_y : 1; 2249 uint8_t fsm1_p_y : 1; 2250 uint8_t fsm1_n_x : 1; 2251 uint8_t fsm1_p_x : 1; 2252 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2253 uint8_t fsm1_p_x : 1; 2254 uint8_t fsm1_n_x : 1; 2255 uint8_t fsm1_p_y : 1; 2256 uint8_t fsm1_n_y : 1; 2257 uint8_t fsm1_p_z : 1; 2258 uint8_t fsm1_n_z : 1; 2259 uint8_t fsm1_p_v : 1; 2260 uint8_t fsm1_n_v : 1; 2261 #endif /* DRV_BYTE_ORDER */ 2262 } lsm6dsv_fsm_outs1_t; 2263 2264 #define LSM6DSV_FSM_OUTS2 0x4DU 2265 typedef struct 2266 { 2267 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2268 uint8_t fsm2_n_v : 1; 2269 uint8_t fsm2_p_v : 1; 2270 uint8_t fsm2_n_z : 1; 2271 uint8_t fsm2_p_z : 1; 2272 uint8_t fsm2_n_y : 1; 2273 uint8_t fsm2_p_y : 1; 2274 uint8_t fsm2_n_x : 1; 2275 uint8_t fsm2_p_x : 1; 2276 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2277 uint8_t fsm2_p_x : 1; 2278 uint8_t fsm2_n_x : 1; 2279 uint8_t fsm2_p_y : 1; 2280 uint8_t fsm2_n_y : 1; 2281 uint8_t fsm2_p_z : 1; 2282 uint8_t fsm2_n_z : 1; 2283 uint8_t fsm2_p_v : 1; 2284 uint8_t fsm2_n_v : 1; 2285 #endif /* DRV_BYTE_ORDER */ 2286 } lsm6dsv_fsm_outs2_t; 2287 2288 #define LSM6DSV_FSM_OUTS3 0x4EU 2289 typedef struct 2290 { 2291 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2292 uint8_t fsm3_n_v : 1; 2293 uint8_t fsm3_p_v : 1; 2294 uint8_t fsm3_n_z : 1; 2295 uint8_t fsm3_p_z : 1; 2296 uint8_t fsm3_n_y : 1; 2297 uint8_t fsm3_p_y : 1; 2298 uint8_t fsm3_n_x : 1; 2299 uint8_t fsm3_p_x : 1; 2300 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2301 uint8_t fsm3_p_x : 1; 2302 uint8_t fsm3_n_x : 1; 2303 uint8_t fsm3_p_y : 1; 2304 uint8_t fsm3_n_y : 1; 2305 uint8_t fsm3_p_z : 1; 2306 uint8_t fsm3_n_z : 1; 2307 uint8_t fsm3_p_v : 1; 2308 uint8_t fsm3_n_v : 1; 2309 #endif /* DRV_BYTE_ORDER */ 2310 } lsm6dsv_fsm_outs3_t; 2311 2312 #define LSM6DSV_FSM_OUTS4 0x4FU 2313 typedef struct 2314 { 2315 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2316 uint8_t fsm4_n_v : 1; 2317 uint8_t fsm4_p_v : 1; 2318 uint8_t fsm4_n_z : 1; 2319 uint8_t fsm4_p_z : 1; 2320 uint8_t fsm4_n_y : 1; 2321 uint8_t fsm4_p_y : 1; 2322 uint8_t fsm4_n_x : 1; 2323 uint8_t fsm4_p_x : 1; 2324 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2325 uint8_t fsm4_p_x : 1; 2326 uint8_t fsm4_n_x : 1; 2327 uint8_t fsm4_p_y : 1; 2328 uint8_t fsm4_n_y : 1; 2329 uint8_t fsm4_p_z : 1; 2330 uint8_t fsm4_n_z : 1; 2331 uint8_t fsm4_p_v : 1; 2332 uint8_t fsm4_n_v : 1; 2333 #endif /* DRV_BYTE_ORDER */ 2334 } lsm6dsv_fsm_outs4_t; 2335 2336 #define LSM6DSV_FSM_OUTS5 0x50U 2337 typedef struct 2338 { 2339 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2340 uint8_t fsm5_n_v : 1; 2341 uint8_t fsm5_p_v : 1; 2342 uint8_t fsm5_n_z : 1; 2343 uint8_t fsm5_p_z : 1; 2344 uint8_t fsm5_n_y : 1; 2345 uint8_t fsm5_p_y : 1; 2346 uint8_t fsm5_n_x : 1; 2347 uint8_t fsm5_p_x : 1; 2348 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2349 uint8_t fsm5_p_x : 1; 2350 uint8_t fsm5_n_x : 1; 2351 uint8_t fsm5_p_y : 1; 2352 uint8_t fsm5_n_y : 1; 2353 uint8_t fsm5_p_z : 1; 2354 uint8_t fsm5_n_z : 1; 2355 uint8_t fsm5_p_v : 1; 2356 uint8_t fsm5_n_v : 1; 2357 #endif /* DRV_BYTE_ORDER */ 2358 } lsm6dsv_fsm_outs5_t; 2359 2360 #define LSM6DSV_FSM_OUTS6 0x51U 2361 typedef struct 2362 { 2363 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2364 uint8_t fsm6_n_v : 1; 2365 uint8_t fsm6_p_v : 1; 2366 uint8_t fsm6_n_z : 1; 2367 uint8_t fsm6_p_z : 1; 2368 uint8_t fsm6_n_y : 1; 2369 uint8_t fsm6_p_y : 1; 2370 uint8_t fsm6_n_x : 1; 2371 uint8_t fsm6_p_x : 1; 2372 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2373 uint8_t fsm6_p_x : 1; 2374 uint8_t fsm6_n_x : 1; 2375 uint8_t fsm6_p_y : 1; 2376 uint8_t fsm6_n_y : 1; 2377 uint8_t fsm6_p_z : 1; 2378 uint8_t fsm6_n_z : 1; 2379 uint8_t fsm6_p_v : 1; 2380 uint8_t fsm6_n_v : 1; 2381 #endif /* DRV_BYTE_ORDER */ 2382 } lsm6dsv_fsm_outs6_t; 2383 2384 #define LSM6DSV_FSM_OUTS7 0x52U 2385 typedef struct 2386 { 2387 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2388 uint8_t fsm7_n_v : 1; 2389 uint8_t fsm7_p_v : 1; 2390 uint8_t fsm7_n_z : 1; 2391 uint8_t fsm7_p_z : 1; 2392 uint8_t fsm7_n_y : 1; 2393 uint8_t fsm7_p_y : 1; 2394 uint8_t fsm7_n_x : 1; 2395 uint8_t fsm7_p_x : 1; 2396 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2397 uint8_t fsm7_p_x : 1; 2398 uint8_t fsm7_n_x : 1; 2399 uint8_t fsm7_p_y : 1; 2400 uint8_t fsm7_n_y : 1; 2401 uint8_t fsm7_p_z : 1; 2402 uint8_t fsm7_n_z : 1; 2403 uint8_t fsm7_p_v : 1; 2404 uint8_t fsm7_n_v : 1; 2405 #endif /* DRV_BYTE_ORDER */ 2406 } lsm6dsv_fsm_outs7_t; 2407 2408 #define LSM6DSV_FSM_OUTS8 0x53U 2409 typedef struct 2410 { 2411 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2412 uint8_t fsm8_n_v : 1; 2413 uint8_t fsm8_p_v : 1; 2414 uint8_t fsm8_n_z : 1; 2415 uint8_t fsm8_p_z : 1; 2416 uint8_t fsm8_n_y : 1; 2417 uint8_t fsm8_p_y : 1; 2418 uint8_t fsm8_n_x : 1; 2419 uint8_t fsm8_p_x : 1; 2420 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2421 uint8_t fsm8_p_x : 1; 2422 uint8_t fsm8_n_x : 1; 2423 uint8_t fsm8_p_y : 1; 2424 uint8_t fsm8_n_y : 1; 2425 uint8_t fsm8_p_z : 1; 2426 uint8_t fsm8_n_z : 1; 2427 uint8_t fsm8_p_v : 1; 2428 uint8_t fsm8_n_v : 1; 2429 #endif /* DRV_BYTE_ORDER */ 2430 } lsm6dsv_fsm_outs8_t; 2431 2432 #define LSM6DSV_SFLP_ODR 0x5EU 2433 typedef struct 2434 { 2435 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2436 uint8_t not_used0 : 3; 2437 uint8_t sflp_game_odr : 3; 2438 uint8_t not_used1 : 2; 2439 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2440 uint8_t not_used1 : 2; 2441 uint8_t sflp_game_odr : 3; 2442 uint8_t not_used0 : 3; 2443 #endif /* DRV_BYTE_ORDER */ 2444 } lsm6dsv_sflp_odr_t; 2445 2446 #define LSM6DSV_FSM_ODR 0x5FU 2447 typedef struct 2448 { 2449 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2450 uint8_t not_used0 : 3; 2451 uint8_t fsm_odr : 3; 2452 uint8_t not_used1 : 2; 2453 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2454 uint8_t not_used1 : 2; 2455 uint8_t fsm_odr : 3; 2456 uint8_t not_used0 : 3; 2457 #endif /* DRV_BYTE_ORDER */ 2458 } lsm6dsv_fsm_odr_t; 2459 2460 #define LSM6DSV_STEP_COUNTER_L 0x62U 2461 typedef struct 2462 { 2463 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2464 uint8_t step : 8; 2465 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2466 uint8_t step : 8; 2467 #endif /* DRV_BYTE_ORDER */ 2468 } lsm6dsv_step_counter_l_t; 2469 2470 #define LSM6DSV_STEP_COUNTER_H 0x63U 2471 typedef struct 2472 { 2473 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2474 uint8_t step : 8; 2475 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2476 uint8_t step : 8; 2477 #endif /* DRV_BYTE_ORDER */ 2478 } lsm6dsv_step_counter_h_t; 2479 2480 #define LSM6DSV_EMB_FUNC_SRC 0x64U 2481 typedef struct 2482 { 2483 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2484 uint8_t not_used0 : 2; 2485 uint8_t stepcounter_bit_set : 1; 2486 uint8_t step_overflow : 1; 2487 uint8_t step_count_delta_ia : 1; 2488 uint8_t step_detected : 1; 2489 uint8_t not_used1 : 1; 2490 uint8_t pedo_rst_step : 1; 2491 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2492 uint8_t pedo_rst_step : 1; 2493 uint8_t not_used1 : 1; 2494 uint8_t step_detected : 1; 2495 uint8_t step_count_delta_ia : 1; 2496 uint8_t step_overflow : 1; 2497 uint8_t stepcounter_bit_set : 1; 2498 uint8_t not_used0 : 2; 2499 #endif /* DRV_BYTE_ORDER */ 2500 } lsm6dsv_emb_func_src_t; 2501 2502 #define LSM6DSV_EMB_FUNC_INIT_A 0x66U 2503 typedef struct 2504 { 2505 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2506 uint8_t not_used0 : 1; 2507 uint8_t sflp_game_init : 1; 2508 uint8_t not_used2 : 1; 2509 uint8_t step_det_init : 1; 2510 uint8_t tilt_init : 1; 2511 uint8_t sig_mot_init : 1; 2512 uint8_t not_used1 : 2; 2513 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2514 uint8_t not_used1 : 2; 2515 uint8_t sig_mot_init : 1; 2516 uint8_t tilt_init : 1; 2517 uint8_t step_det_init : 1; 2518 uint8_t not_used2 : 1; 2519 uint8_t sflp_game_init : 1; 2520 uint8_t not_used0 : 1; 2521 #endif /* DRV_BYTE_ORDER */ 2522 } lsm6dsv_emb_func_init_a_t; 2523 2524 #define LSM6DSV_EMB_FUNC_INIT_B 0x67U 2525 typedef struct 2526 { 2527 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2528 uint8_t fsm_init : 1; 2529 uint8_t not_used0 : 2; 2530 uint8_t fifo_compr_init : 1; 2531 uint8_t not_used1 : 4; 2532 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2533 uint8_t not_used1 : 4; 2534 uint8_t fifo_compr_init : 1; 2535 uint8_t not_used0 : 2; 2536 uint8_t fsm_init : 1; 2537 #endif /* DRV_BYTE_ORDER */ 2538 } lsm6dsv_emb_func_init_b_t; 2539 2540 /** 2541 * @} 2542 * 2543 */ 2544 2545 /** @defgroup bitfields page pg0_emb_adv 2546 * @{ 2547 * 2548 */ 2549 #define LSM6DSV_EMB_ADV_PG_0 0x000U 2550 2551 #define LSM6DSV_SFLP_GAME_GBIASX_L 0x6EU 2552 typedef struct 2553 { 2554 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2555 uint8_t gbiasx : 8; 2556 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2557 uint8_t gbiasx : 8; 2558 #endif /* DRV_BYTE_ORDER */ 2559 } lsm6dsv_sflp_game_gbiasx_l_t; 2560 2561 #define LSM6DSV_SFLP_GAME_GBIASX_H 0x6FU 2562 typedef struct 2563 { 2564 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2565 uint8_t gbiasx : 8; 2566 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2567 uint8_t gbiasx : 8; 2568 #endif /* DRV_BYTE_ORDER */ 2569 } lsm6dsv_sflp_game_gbiasx_h_t; 2570 2571 #define LSM6DSV_SFLP_GAME_GBIASY_L 0x70U 2572 typedef struct 2573 { 2574 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2575 uint8_t gbiasy : 8; 2576 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2577 uint8_t gbiasy : 8; 2578 #endif /* DRV_BYTE_ORDER */ 2579 } lsm6dsv_sflp_game_gbiasy_l_t; 2580 2581 #define LSM6DSV_SFLP_GAME_GBIASY_H 0x71U 2582 typedef struct 2583 { 2584 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2585 uint8_t gbiasy : 8; 2586 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2587 uint8_t gbiasy : 8; 2588 #endif /* DRV_BYTE_ORDER */ 2589 } lsm6dsv_sflp_game_gbiasy_h_t; 2590 2591 #define LSM6DSV_SFLP_GAME_GBIASZ_L 0x72U 2592 typedef struct 2593 { 2594 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2595 uint8_t gbiasz : 8; 2596 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2597 uint8_t gbiasz : 8; 2598 #endif /* DRV_BYTE_ORDER */ 2599 } lsm6dsv_sflp_game_gbiasz_l_t; 2600 2601 #define LSM6DSV_SFLP_GAME_GBIASZ_H 0x73U 2602 typedef struct 2603 { 2604 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2605 uint8_t gbiasz : 8; 2606 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2607 uint8_t gbiasz : 8; 2608 #endif /* DRV_BYTE_ORDER */ 2609 } lsm6dsv_sflp_game_gbiasz_h_t; 2610 2611 #define LSM6DSV_FSM_EXT_SENSITIVITY_L 0xBAU 2612 typedef struct 2613 { 2614 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2615 uint8_t fsm_ext_s : 8; 2616 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2617 uint8_t fsm_ext_s : 8; 2618 #endif /* DRV_BYTE_ORDER */ 2619 } lsm6dsv_fsm_ext_sensitivity_l_t; 2620 2621 #define LSM6DSV_FSM_EXT_SENSITIVITY_H 0xBBU 2622 typedef struct 2623 { 2624 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2625 uint8_t fsm_ext_s : 8; 2626 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2627 uint8_t fsm_ext_s : 8; 2628 #endif /* DRV_BYTE_ORDER */ 2629 } lsm6dsv_fsm_ext_sensitivity_h_t; 2630 2631 #define LSM6DSV_FSM_EXT_OFFX_L 0xC0U 2632 typedef struct 2633 { 2634 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2635 uint8_t fsm_ext_offx : 8; 2636 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2637 uint8_t fsm_ext_offx : 8; 2638 #endif /* DRV_BYTE_ORDER */ 2639 } lsm6dsv_fsm_ext_offx_l_t; 2640 2641 #define LSM6DSV_FSM_EXT_OFFX_H 0xC1U 2642 typedef struct 2643 { 2644 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2645 uint8_t fsm_ext_offx : 8; 2646 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2647 uint8_t fsm_ext_offx : 8; 2648 #endif /* DRV_BYTE_ORDER */ 2649 } lsm6dsv_fsm_ext_offx_h_t; 2650 2651 #define LSM6DSV_FSM_EXT_OFFY_L 0xC2U 2652 typedef struct 2653 { 2654 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2655 uint8_t fsm_ext_offy : 8; 2656 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2657 uint8_t fsm_ext_offy : 8; 2658 #endif /* DRV_BYTE_ORDER */ 2659 } lsm6dsv_fsm_ext_offy_l_t; 2660 2661 #define LSM6DSV_FSM_EXT_OFFY_H 0xC3U 2662 typedef struct 2663 { 2664 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2665 uint8_t fsm_ext_offy : 8; 2666 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2667 uint8_t fsm_ext_offy : 8; 2668 #endif /* DRV_BYTE_ORDER */ 2669 } lsm6dsv_fsm_ext_offy_h_t; 2670 2671 #define LSM6DSV_FSM_EXT_OFFZ_L 0xC4U 2672 typedef struct 2673 { 2674 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2675 uint8_t fsm_ext_offz : 8; 2676 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2677 uint8_t fsm_ext_offz : 8; 2678 #endif /* DRV_BYTE_ORDER */ 2679 } lsm6dsv_fsm_ext_offz_l_t; 2680 2681 #define LSM6DSV_FSM_EXT_OFFZ_H 0xC5U 2682 typedef struct 2683 { 2684 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2685 uint8_t fsm_ext_offz : 8; 2686 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2687 uint8_t fsm_ext_offz : 8; 2688 #endif /* DRV_BYTE_ORDER */ 2689 } lsm6dsv_fsm_ext_offz_h_t; 2690 2691 #define LSM6DSV_FSM_EXT_MATRIX_XX_L 0xC6U 2692 typedef struct 2693 { 2694 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2695 uint8_t fsm_ext_mat_xx : 8; 2696 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2697 uint8_t fsm_ext_mat_xx : 8; 2698 #endif /* DRV_BYTE_ORDER */ 2699 } lsm6dsv_fsm_ext_matrix_xx_l_t; 2700 2701 #define LSM6DSV_FSM_EXT_MATRIX_XX_H 0xC7U 2702 typedef struct 2703 { 2704 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2705 uint8_t fsm_ext_mat_xx : 8; 2706 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2707 uint8_t fsm_ext_mat_xx : 8; 2708 #endif /* DRV_BYTE_ORDER */ 2709 } lsm6dsv_fsm_ext_matrix_xx_h_t; 2710 2711 #define LSM6DSV_FSM_EXT_MATRIX_XY_L 0xC8U 2712 typedef struct 2713 { 2714 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2715 uint8_t fsm_ext_mat_xy : 8; 2716 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2717 uint8_t fsm_ext_mat_xy : 8; 2718 #endif /* DRV_BYTE_ORDER */ 2719 } lsm6dsv_fsm_ext_matrix_xy_l_t; 2720 2721 #define LSM6DSV_FSM_EXT_MATRIX_XY_H 0xC9U 2722 typedef struct 2723 { 2724 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2725 uint8_t fsm_ext_mat_xy : 8; 2726 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2727 uint8_t fsm_ext_mat_xy : 8; 2728 #endif /* DRV_BYTE_ORDER */ 2729 } lsm6dsv_fsm_ext_matrix_xy_h_t; 2730 2731 #define LSM6DSV_FSM_EXT_MATRIX_XZ_L 0xCAU 2732 typedef struct 2733 { 2734 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2735 uint8_t fsm_ext_mat_xz : 8; 2736 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2737 uint8_t fsm_ext_mat_xz : 8; 2738 #endif /* DRV_BYTE_ORDER */ 2739 } lsm6dsv_fsm_ext_matrix_xz_l_t; 2740 2741 #define LSM6DSV_FSM_EXT_MATRIX_XZ_H 0xCBU 2742 typedef struct 2743 { 2744 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2745 uint8_t fsm_ext_mat_xz : 8; 2746 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2747 uint8_t fsm_ext_mat_xz : 8; 2748 #endif /* DRV_BYTE_ORDER */ 2749 } lsm6dsv_fsm_ext_matrix_xz_h_t; 2750 2751 #define LSM6DSV_FSM_EXT_MATRIX_YY_L 0xCCU 2752 typedef struct 2753 { 2754 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2755 uint8_t fsm_ext_mat_yy : 8; 2756 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2757 uint8_t fsm_ext_mat_yy : 8; 2758 #endif /* DRV_BYTE_ORDER */ 2759 } lsm6dsv_fsm_ext_matrix_yy_l_t; 2760 2761 #define LSM6DSV_FSM_EXT_MATRIX_YY_H 0xCDU 2762 typedef struct 2763 { 2764 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2765 uint8_t fsm_ext_mat_yy : 8; 2766 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2767 uint8_t fsm_ext_mat_yy : 8; 2768 #endif /* DRV_BYTE_ORDER */ 2769 } lsm6dsv_fsm_ext_matrix_yy_h_t; 2770 2771 #define LSM6DSV_FSM_EXT_MATRIX_YZ_L 0xCEU 2772 typedef struct 2773 { 2774 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2775 uint8_t fsm_ext_mat_yz : 8; 2776 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2777 uint8_t fsm_ext_mat_yz : 8; 2778 #endif /* DRV_BYTE_ORDER */ 2779 } lsm6dsv_fsm_ext_matrix_yz_l_t; 2780 2781 #define LSM6DSV_FSM_EXT_MATRIX_YZ_H 0xCFU 2782 typedef struct 2783 { 2784 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2785 uint8_t fsm_ext_mat_yz : 8; 2786 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2787 uint8_t fsm_ext_mat_yz : 8; 2788 #endif /* DRV_BYTE_ORDER */ 2789 } lsm6dsv_fsm_ext_matrix_yz_h_t; 2790 2791 #define LSM6DSV_FSM_EXT_MATRIX_ZZ_L 0xD0U 2792 typedef struct 2793 { 2794 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2795 uint8_t fsm_ext_mat_zz : 8; 2796 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2797 uint8_t fsm_ext_mat_zz : 8; 2798 #endif /* DRV_BYTE_ORDER */ 2799 } lsm6dsv_fsm_ext_matrix_zz_l_t; 2800 2801 #define LSM6DSV_FSM_EXT_MATRIX_ZZ_H 0xD1U 2802 typedef struct 2803 { 2804 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2805 uint8_t fsm_ext_mat_zz : 8; 2806 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2807 uint8_t fsm_ext_mat_zz : 8; 2808 #endif /* DRV_BYTE_ORDER */ 2809 } lsm6dsv_fsm_ext_matrix_zz_h_t; 2810 2811 #define LSM6DSV_EXT_CFG_A 0xD4U 2812 typedef struct 2813 { 2814 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2815 uint8_t ext_z_axis : 3; 2816 uint8_t not_used0 : 1; 2817 uint8_t ext_y_axis : 3; 2818 uint8_t not_used1 : 1; 2819 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2820 uint8_t not_used1 : 1; 2821 uint8_t ext_y_axis : 3; 2822 uint8_t not_used0 : 1; 2823 uint8_t ext_z_axis : 3; 2824 #endif /* DRV_BYTE_ORDER */ 2825 } lsm6dsv_ext_cfg_a_t; 2826 2827 #define LSM6DSV_EXT_CFG_B 0xD5U 2828 typedef struct 2829 { 2830 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2831 uint8_t ext_x_axis : 3; 2832 uint8_t not_used0 : 5; 2833 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2834 uint8_t not_used0 : 5; 2835 uint8_t ext_x_axis : 3; 2836 #endif /* DRV_BYTE_ORDER */ 2837 } lsm6dsv_ext_cfg_b_t; 2838 2839 /** 2840 * @} 2841 * 2842 */ 2843 2844 /** @defgroup bitfields page pg1_emb_adv 2845 * @{ 2846 * 2847 */ 2848 #define LSM6DSV_EMB_ADV_PG_1 0x100U 2849 2850 #define LSM6DSV_FSM_LC_TIMEOUT_L 0x7AU 2851 typedef struct 2852 { 2853 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2854 uint8_t fsm_lc_timeout : 8; 2855 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2856 uint8_t fsm_lc_timeout : 8; 2857 #endif /* DRV_BYTE_ORDER */ 2858 } lsm6dsv_fsm_lc_timeout_l_t; 2859 2860 #define LSM6DSV_FSM_LC_TIMEOUT_H 0x7BU 2861 typedef struct 2862 { 2863 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2864 uint8_t fsm_lc_timeout : 8; 2865 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2866 uint8_t fsm_lc_timeout : 8; 2867 #endif /* DRV_BYTE_ORDER */ 2868 } lsm6dsv_fsm_lc_timeout_h_t; 2869 2870 #define LSM6DSV_FSM_PROGRAMS 0x7CU 2871 typedef struct 2872 { 2873 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2874 uint8_t fsm_n_prog : 8; 2875 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2876 uint8_t fsm_n_prog : 8; 2877 #endif /* DRV_BYTE_ORDER */ 2878 } lsm6dsv_fsm_programs_t; 2879 2880 #define LSM6DSV_FSM_START_ADD_L 0x7EU 2881 typedef struct 2882 { 2883 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2884 uint8_t fsm_start : 8; 2885 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2886 uint8_t fsm_start : 8; 2887 #endif /* DRV_BYTE_ORDER */ 2888 } lsm6dsv_fsm_start_add_l_t; 2889 2890 #define LSM6DSV_FSM_START_ADD_H 0x7FU 2891 typedef struct 2892 { 2893 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2894 uint8_t fsm_start : 8; 2895 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2896 uint8_t fsm_start : 8; 2897 #endif /* DRV_BYTE_ORDER */ 2898 } lsm6dsv_fsm_start_add_h_t; 2899 2900 #define LSM6DSV_PEDO_CMD_REG 0x83U 2901 typedef struct 2902 { 2903 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2904 uint8_t not_used0 : 3; 2905 uint8_t carry_count_en : 1; 2906 uint8_t not_used1 : 4; 2907 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2908 uint8_t not_used1 : 4; 2909 uint8_t carry_count_en : 1; 2910 uint8_t not_used0 : 3; 2911 #endif /* DRV_BYTE_ORDER */ 2912 } lsm6dsv_pedo_cmd_reg_t; 2913 2914 #define LSM6DSV_PEDO_DEB_STEPS_CONF 0x84U 2915 typedef struct 2916 { 2917 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2918 uint8_t deb_step : 8; 2919 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2920 uint8_t deb_step : 8; 2921 #endif /* DRV_BYTE_ORDER */ 2922 } lsm6dsv_pedo_deb_steps_conf_t; 2923 2924 #define LSM6DSV_PEDO_SC_DELTAT_L 0xD0U 2925 typedef struct 2926 { 2927 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2928 uint8_t pd_sc : 8; 2929 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2930 uint8_t pd_sc : 8; 2931 #endif /* DRV_BYTE_ORDER */ 2932 } lsm6dsv_pedo_sc_deltat_l_t; 2933 2934 #define LSM6DSV_PEDO_SC_DELTAT_H 0xD1U 2935 typedef struct 2936 { 2937 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2938 uint8_t pd_sc : 8; 2939 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2940 uint8_t pd_sc : 8; 2941 #endif /* DRV_BYTE_ORDER */ 2942 } lsm6dsv_pedo_sc_deltat_h_t; 2943 2944 /** @defgroup bitfields page pg2_emb_adv 2945 * @{ 2946 * 2947 */ 2948 #define LSM6DSV_EMB_ADV_PG_2 0x200U 2949 2950 #define LSM6DSV_EXT_FORMAT 0x00 2951 typedef struct 2952 { 2953 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2954 uint8_t not_used0 : 2; 2955 uint8_t ext_format_sel : 1; 2956 uint8_t not_used1 : 5; 2957 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2958 uint8_t not_used1 : 5; 2959 uint8_t ext_format_sel : 1; 2960 uint8_t not_used0 : 2; 2961 #endif /* DRV_BYTE_ORDER */ 2962 } lsm6dsv_ext_format_t; 2963 2964 #define LSM6DSV_EXT_3BYTE_SENSITIVITY_L 0x02U 2965 typedef struct 2966 { 2967 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2968 uint8_t ext_3byte_s : 8; 2969 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2970 uint8_t ext_3byte_s : 8; 2971 #endif /* DRV_BYTE_ORDER */ 2972 } lsm6dsv_ext_3byte_sensitivity_l_t; 2973 2974 #define LSM6DSV_EXT_3BYTE_SENSITIVITY_H 0x03U 2975 typedef struct 2976 { 2977 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2978 uint8_t ext_3byte_s : 8; 2979 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2980 uint8_t ext_3byte_s : 8; 2981 #endif /* DRV_BYTE_ORDER */ 2982 } lsm6dsv_ext_3byte_sensitivity_h_t; 2983 2984 #define LSM6DSV_EXT_3BYTE_OFFSET_XL 0x06U 2985 typedef struct 2986 { 2987 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2988 uint8_t ext_3byte_off : 8; 2989 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 2990 uint8_t ext_3byte_off : 8; 2991 #endif /* DRV_BYTE_ORDER */ 2992 } lsm6dsv_ext_3byte_offset_xl_t; 2993 2994 #define LSM6DSV_EXT_3BYTE_OFFSET_L 0x07U 2995 typedef struct 2996 { 2997 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 2998 uint8_t ext_3byte_off : 8; 2999 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3000 uint8_t ext_3byte_off : 8; 3001 #endif /* DRV_BYTE_ORDER */ 3002 } lsm6dsv_ext_3byte_offset_l_t; 3003 3004 #define LSM6DSV_EXT_3BYTE_OFFSET_H 0x08U 3005 typedef struct 3006 { 3007 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3008 uint8_t ext_3byte_off : 8; 3009 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3010 uint8_t ext_3byte_off : 8; 3011 #endif /* DRV_BYTE_ORDER */ 3012 } lsm6dsv_ext_3byte_offset_h_t; 3013 3014 /** 3015 * @} 3016 * 3017 */ 3018 3019 /** @defgroup bitfields page sensor_hub 3020 * @{ 3021 * 3022 */ 3023 3024 #define LSM6DSV_SENSOR_HUB_1 0x2U 3025 typedef struct 3026 { 3027 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3028 uint8_t sensorhub1 : 8; 3029 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3030 uint8_t sensorhub1 : 8; 3031 #endif /* DRV_BYTE_ORDER */ 3032 } lsm6dsv_sensor_hub_1_t; 3033 3034 #define LSM6DSV_SENSOR_HUB_2 0x3U 3035 typedef struct 3036 { 3037 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3038 uint8_t sensorhub2 : 8; 3039 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3040 uint8_t sensorhub2 : 8; 3041 #endif /* DRV_BYTE_ORDER */ 3042 } lsm6dsv_sensor_hub_2_t; 3043 3044 #define LSM6DSV_SENSOR_HUB_3 0x4U 3045 typedef struct 3046 { 3047 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3048 uint8_t sensorhub3 : 8; 3049 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3050 uint8_t sensorhub3 : 8; 3051 #endif /* DRV_BYTE_ORDER */ 3052 } lsm6dsv_sensor_hub_3_t; 3053 3054 #define LSM6DSV_SENSOR_HUB_4 0x5U 3055 typedef struct 3056 { 3057 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3058 uint8_t sensorhub4 : 8; 3059 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3060 uint8_t sensorhub4 : 8; 3061 #endif /* DRV_BYTE_ORDER */ 3062 } lsm6dsv_sensor_hub_4_t; 3063 3064 #define LSM6DSV_SENSOR_HUB_5 0x6U 3065 typedef struct 3066 { 3067 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3068 uint8_t sensorhub5 : 8; 3069 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3070 uint8_t sensorhub5 : 8; 3071 #endif /* DRV_BYTE_ORDER */ 3072 } lsm6dsv_sensor_hub_5_t; 3073 3074 #define LSM6DSV_SENSOR_HUB_6 0x7U 3075 typedef struct 3076 { 3077 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3078 uint8_t sensorhub6 : 8; 3079 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3080 uint8_t sensorhub6 : 8; 3081 #endif /* DRV_BYTE_ORDER */ 3082 } lsm6dsv_sensor_hub_6_t; 3083 3084 #define LSM6DSV_SENSOR_HUB_7 0x8U 3085 typedef struct 3086 { 3087 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3088 uint8_t sensorhub7 : 8; 3089 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3090 uint8_t sensorhub7 : 8; 3091 #endif /* DRV_BYTE_ORDER */ 3092 } lsm6dsv_sensor_hub_7_t; 3093 3094 #define LSM6DSV_SENSOR_HUB_8 0x9U 3095 typedef struct 3096 { 3097 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3098 uint8_t sensorhub8 : 8; 3099 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3100 uint8_t sensorhub8 : 8; 3101 #endif /* DRV_BYTE_ORDER */ 3102 } lsm6dsv_sensor_hub_8_t; 3103 3104 #define LSM6DSV_SENSOR_HUB_9 0x0AU 3105 typedef struct 3106 { 3107 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3108 uint8_t sensorhub9 : 8; 3109 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3110 uint8_t sensorhub9 : 8; 3111 #endif /* DRV_BYTE_ORDER */ 3112 } lsm6dsv_sensor_hub_9_t; 3113 3114 #define LSM6DSV_SENSOR_HUB_10 0x0BU 3115 typedef struct 3116 { 3117 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3118 uint8_t sensorhub10 : 8; 3119 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3120 uint8_t sensorhub10 : 8; 3121 #endif /* DRV_BYTE_ORDER */ 3122 } lsm6dsv_sensor_hub_10_t; 3123 3124 #define LSM6DSV_SENSOR_HUB_11 0x0CU 3125 typedef struct 3126 { 3127 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3128 uint8_t sensorhub11 : 8; 3129 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3130 uint8_t sensorhub11 : 8; 3131 #endif /* DRV_BYTE_ORDER */ 3132 } lsm6dsv_sensor_hub_11_t; 3133 3134 #define LSM6DSV_SENSOR_HUB_12 0x0DU 3135 typedef struct 3136 { 3137 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3138 uint8_t sensorhub12 : 8; 3139 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3140 uint8_t sensorhub12 : 8; 3141 #endif /* DRV_BYTE_ORDER */ 3142 } lsm6dsv_sensor_hub_12_t; 3143 3144 #define LSM6DSV_SENSOR_HUB_13 0x0EU 3145 typedef struct 3146 { 3147 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3148 uint8_t sensorhub13 : 8; 3149 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3150 uint8_t sensorhub13 : 8; 3151 #endif /* DRV_BYTE_ORDER */ 3152 } lsm6dsv_sensor_hub_13_t; 3153 3154 #define LSM6DSV_SENSOR_HUB_14 0x0FU 3155 typedef struct 3156 { 3157 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3158 uint8_t sensorhub14 : 8; 3159 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3160 uint8_t sensorhub14 : 8; 3161 #endif /* DRV_BYTE_ORDER */ 3162 } lsm6dsv_sensor_hub_14_t; 3163 3164 #define LSM6DSV_SENSOR_HUB_15 0x10U 3165 typedef struct 3166 { 3167 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3168 uint8_t sensorhub15 : 8; 3169 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3170 uint8_t sensorhub15 : 8; 3171 #endif /* DRV_BYTE_ORDER */ 3172 } lsm6dsv_sensor_hub_15_t; 3173 3174 #define LSM6DSV_SENSOR_HUB_16 0x11U 3175 typedef struct 3176 { 3177 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3178 uint8_t sensorhub16 : 8; 3179 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3180 uint8_t sensorhub16 : 8; 3181 #endif /* DRV_BYTE_ORDER */ 3182 } lsm6dsv_sensor_hub_16_t; 3183 3184 #define LSM6DSV_SENSOR_HUB_17 0x12U 3185 typedef struct 3186 { 3187 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3188 uint8_t sensorhub17 : 8; 3189 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3190 uint8_t sensorhub17 : 8; 3191 #endif /* DRV_BYTE_ORDER */ 3192 } lsm6dsv_sensor_hub_17_t; 3193 3194 #define LSM6DSV_SENSOR_HUB_18 0x13U 3195 typedef struct 3196 { 3197 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3198 uint8_t sensorhub18 : 8; 3199 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3200 uint8_t sensorhub18 : 8; 3201 #endif /* DRV_BYTE_ORDER */ 3202 } lsm6dsv_sensor_hub_18_t; 3203 3204 #define LSM6DSV_MASTER_CONFIG 0x14U 3205 typedef struct 3206 { 3207 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3208 uint8_t aux_sens_on : 2; 3209 uint8_t master_on : 1; 3210 uint8_t not_used0 : 1; 3211 uint8_t pass_through_mode : 1; 3212 uint8_t start_config : 1; 3213 uint8_t write_once : 1; 3214 uint8_t rst_master_regs : 1; 3215 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3216 uint8_t rst_master_regs : 1; 3217 uint8_t write_once : 1; 3218 uint8_t start_config : 1; 3219 uint8_t pass_through_mode : 1; 3220 uint8_t not_used0 : 1; 3221 uint8_t master_on : 1; 3222 uint8_t aux_sens_on : 2; 3223 #endif /* DRV_BYTE_ORDER */ 3224 } lsm6dsv_master_config_t; 3225 3226 #define LSM6DSV_SLV0_ADD 0x15U 3227 typedef struct 3228 { 3229 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3230 uint8_t rw_0 : 1; 3231 uint8_t slave0_add : 7; 3232 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3233 uint8_t slave0_add : 7; 3234 uint8_t rw_0 : 1; 3235 #endif /* DRV_BYTE_ORDER */ 3236 } lsm6dsv_slv0_add_t; 3237 3238 #define LSM6DSV_SLV0_SUBADD 0x16U 3239 typedef struct 3240 { 3241 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3242 uint8_t slave0_reg : 8; 3243 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3244 uint8_t slave0_reg : 8; 3245 #endif /* DRV_BYTE_ORDER */ 3246 } lsm6dsv_slv0_subadd_t; 3247 3248 #define LSM6DSV_SLV0_CONFIG 0x17U 3249 typedef struct 3250 { 3251 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3252 uint8_t slave0_numop : 3; 3253 uint8_t batch_ext_sens_0_en : 1; 3254 uint8_t not_used0 : 1; 3255 uint8_t shub_odr : 3; 3256 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3257 uint8_t shub_odr : 3; 3258 uint8_t not_used0 : 1; 3259 uint8_t batch_ext_sens_0_en : 1; 3260 uint8_t slave0_numop : 3; 3261 #endif /* DRV_BYTE_ORDER */ 3262 } lsm6dsv_slv0_config_t; 3263 3264 #define LSM6DSV_SLV1_ADD 0x18U 3265 typedef struct 3266 { 3267 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3268 uint8_t r_1 : 1; 3269 uint8_t slave1_add : 7; 3270 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3271 uint8_t slave1_add : 7; 3272 uint8_t r_1 : 1; 3273 #endif /* DRV_BYTE_ORDER */ 3274 } lsm6dsv_slv1_add_t; 3275 3276 #define LSM6DSV_SLV1_SUBADD 0x19U 3277 typedef struct 3278 { 3279 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3280 uint8_t slave1_reg : 8; 3281 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3282 uint8_t slave1_reg : 8; 3283 #endif /* DRV_BYTE_ORDER */ 3284 } lsm6dsv_slv1_subadd_t; 3285 3286 #define LSM6DSV_SLV1_CONFIG 0x1AU 3287 typedef struct 3288 { 3289 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3290 uint8_t slave1_numop : 3; 3291 uint8_t batch_ext_sens_1_en : 1; 3292 uint8_t not_used0 : 4; 3293 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3294 uint8_t not_used0 : 4; 3295 uint8_t batch_ext_sens_1_en : 1; 3296 uint8_t slave1_numop : 3; 3297 #endif /* DRV_BYTE_ORDER */ 3298 } lsm6dsv_slv1_config_t; 3299 3300 #define LSM6DSV_SLV2_ADD 0x1BU 3301 typedef struct 3302 { 3303 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3304 uint8_t r_2 : 1; 3305 uint8_t slave2_add : 7; 3306 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3307 uint8_t slave2_add : 7; 3308 uint8_t r_2 : 1; 3309 #endif /* DRV_BYTE_ORDER */ 3310 } lsm6dsv_slv2_add_t; 3311 3312 #define LSM6DSV_SLV2_SUBADD 0x1CU 3313 typedef struct 3314 { 3315 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3316 uint8_t slave2_reg : 8; 3317 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3318 uint8_t slave2_reg : 8; 3319 #endif /* DRV_BYTE_ORDER */ 3320 } lsm6dsv_slv2_subadd_t; 3321 3322 #define LSM6DSV_SLV2_CONFIG 0x1DU 3323 typedef struct 3324 { 3325 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3326 uint8_t slave2_numop : 3; 3327 uint8_t batch_ext_sens_2_en : 1; 3328 uint8_t not_used0 : 4; 3329 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3330 uint8_t not_used0 : 4; 3331 uint8_t batch_ext_sens_2_en : 1; 3332 uint8_t slave2_numop : 3; 3333 #endif /* DRV_BYTE_ORDER */ 3334 } lsm6dsv_slv2_config_t; 3335 3336 #define LSM6DSV_SLV3_ADD 0x1EU 3337 typedef struct 3338 { 3339 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3340 uint8_t r_3 : 1; 3341 uint8_t slave3_add : 7; 3342 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3343 uint8_t slave3_add : 7; 3344 uint8_t r_3 : 1; 3345 #endif /* DRV_BYTE_ORDER */ 3346 } lsm6dsv_slv3_add_t; 3347 3348 #define LSM6DSV_SLV3_SUBADD 0x1FU 3349 typedef struct 3350 { 3351 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3352 uint8_t slave3_reg : 8; 3353 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3354 uint8_t slave3_reg : 8; 3355 #endif /* DRV_BYTE_ORDER */ 3356 } lsm6dsv_slv3_subadd_t; 3357 3358 #define LSM6DSV_SLV3_CONFIG 0x20U 3359 typedef struct 3360 { 3361 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3362 uint8_t slave3_numop : 3; 3363 uint8_t batch_ext_sens_3_en : 1; 3364 uint8_t not_used0 : 4; 3365 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3366 uint8_t not_used0 : 4; 3367 uint8_t batch_ext_sens_3_en : 1; 3368 uint8_t slave3_numop : 3; 3369 #endif /* DRV_BYTE_ORDER */ 3370 } lsm6dsv_slv3_config_t; 3371 3372 #define LSM6DSV_DATAWRITE_SLV0 0x21U 3373 typedef struct 3374 { 3375 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3376 uint8_t slave0_dataw : 8; 3377 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3378 uint8_t slave0_dataw : 8; 3379 #endif /* DRV_BYTE_ORDER */ 3380 } lsm6dsv_datawrite_slv0_t; 3381 3382 #define LSM6DSV_STATUS_MASTER 0x22U 3383 typedef struct 3384 { 3385 #if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN 3386 uint8_t sens_hub_endop : 1; 3387 uint8_t not_used0 : 2; 3388 uint8_t slave0_nack : 1; 3389 uint8_t slave1_nack : 1; 3390 uint8_t slave2_nack : 1; 3391 uint8_t slave3_nack : 1; 3392 uint8_t wr_once_done : 1; 3393 #elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN 3394 uint8_t wr_once_done : 1; 3395 uint8_t slave3_nack : 1; 3396 uint8_t slave2_nack : 1; 3397 uint8_t slave1_nack : 1; 3398 uint8_t slave0_nack : 1; 3399 uint8_t not_used0 : 2; 3400 uint8_t sens_hub_endop : 1; 3401 #endif /* DRV_BYTE_ORDER */ 3402 } lsm6dsv_status_master_t; 3403 3404 /** 3405 * @} 3406 * 3407 */ 3408 3409 /** 3410 * @defgroup LSM6DSV_Register_Union 3411 * @brief This union group all the registers having a bit-field 3412 * description. 3413 * This union is useful but it's not needed by the driver. 3414 * 3415 * REMOVING this union you are compliant with: 3416 * MISRA-C 2012 [Rule 19.2] -> " Union are not allowed " 3417 * 3418 * @{ 3419 * 3420 */ 3421 typedef union 3422 { 3423 lsm6dsv_func_cfg_access_t func_cfg_access; 3424 lsm6dsv_pin_ctrl_t pin_ctrl; 3425 lsm6dsv_if_cfg_t if_cfg; 3426 lsm6dsv_odr_trig_cfg_t odr_trig_cfg; 3427 lsm6dsv_fifo_ctrl1_t fifo_ctrl1; 3428 lsm6dsv_fifo_ctrl2_t fifo_ctrl2; 3429 lsm6dsv_fifo_ctrl3_t fifo_ctrl3; 3430 lsm6dsv_fifo_ctrl4_t fifo_ctrl4; 3431 lsm6dsv_counter_bdr_reg1_t counter_bdr_reg1; 3432 lsm6dsv_counter_bdr_reg2_t counter_bdr_reg2; 3433 lsm6dsv_int1_ctrl_t int1_ctrl; 3434 lsm6dsv_int2_ctrl_t int2_ctrl; 3435 lsm6dsv_who_am_i_t who_am_i; 3436 lsm6dsv_ctrl1_t ctrl1; 3437 lsm6dsv_ctrl2_t ctrl2; 3438 lsm6dsv_ctrl3_t ctrl3; 3439 lsm6dsv_ctrl4_t ctrl4; 3440 lsm6dsv_ctrl5_t ctrl5; 3441 lsm6dsv_ctrl6_t ctrl6; 3442 lsm6dsv_ctrl7_t ctrl7; 3443 lsm6dsv_ctrl8_t ctrl8; 3444 lsm6dsv_ctrl9_t ctrl9; 3445 lsm6dsv_ctrl10_t ctrl10; 3446 lsm6dsv_ctrl_status_t ctrl_status; 3447 lsm6dsv_fifo_status1_t fifo_status1; 3448 lsm6dsv_fifo_status2_t fifo_status2; 3449 lsm6dsv_all_int_src_t all_int_src; 3450 lsm6dsv_status_reg_t status_reg; 3451 lsm6dsv_out_temp_l_t out_temp_l; 3452 lsm6dsv_out_temp_h_t out_temp_h; 3453 lsm6dsv_outx_l_g_t outx_l_g; 3454 lsm6dsv_outx_h_g_t outx_h_g; 3455 lsm6dsv_outy_l_g_t outy_l_g; 3456 lsm6dsv_outy_h_g_t outy_h_g; 3457 lsm6dsv_outz_l_g_t outz_l_g; 3458 lsm6dsv_outz_h_g_t outz_h_g; 3459 lsm6dsv_outx_l_a_t outx_l_a; 3460 lsm6dsv_outx_h_a_t outx_h_a; 3461 lsm6dsv_outy_l_a_t outy_l_a; 3462 lsm6dsv_outy_h_a_t outy_h_a; 3463 lsm6dsv_outz_l_a_t outz_l_a; 3464 lsm6dsv_outz_h_a_t outz_h_a; 3465 lsm6dsv_ui_outx_l_g_ois_eis_t ui_outx_l_g_ois_eis; 3466 lsm6dsv_ui_outx_h_g_ois_eis_t ui_outx_h_g_ois_eis; 3467 lsm6dsv_ui_outy_l_g_ois_eis_t ui_outy_l_g_ois_eis; 3468 lsm6dsv_ui_outy_h_g_ois_eis_t ui_outy_h_g_ois_eis; 3469 lsm6dsv_ui_outz_l_g_ois_eis_t ui_outz_l_g_ois_eis; 3470 lsm6dsv_ui_outz_h_g_ois_eis_t ui_outz_h_g_ois_eis; 3471 lsm6dsv_ui_outx_l_a_ois_dualc_t ui_outx_l_a_ois_dualc; 3472 lsm6dsv_ui_outx_h_a_ois_dualc_t ui_outx_h_a_ois_dualc; 3473 lsm6dsv_ui_outy_l_a_ois_dualc_t ui_outy_l_a_ois_dualc; 3474 lsm6dsv_ui_outy_h_a_ois_dualc_t ui_outy_h_a_ois_dualc; 3475 lsm6dsv_ui_outz_l_a_ois_dualc_t ui_outz_l_a_ois_dualc; 3476 lsm6dsv_ui_outz_h_a_ois_dualc_t ui_outz_h_a_ois_dualc; 3477 lsm6dsv_timestamp0_t timestamp0; 3478 lsm6dsv_timestamp1_t timestamp1; 3479 lsm6dsv_timestamp2_t timestamp2; 3480 lsm6dsv_timestamp3_t timestamp3; 3481 lsm6dsv_ui_status_reg_ois_t ui_status_reg_ois; 3482 lsm6dsv_wake_up_src_t wake_up_src; 3483 lsm6dsv_tap_src_t tap_src; 3484 lsm6dsv_d6d_src_t d6d_src; 3485 lsm6dsv_status_master_mainpage_t status_master_mainpage; 3486 lsm6dsv_emb_func_status_mainpage_t emb_func_status_mainpage; 3487 lsm6dsv_fsm_status_mainpage_t fsm_status_mainpage; 3488 lsm6dsv_internal_freq_t internal_freq; 3489 lsm6dsv_functions_enable_t functions_enable; 3490 lsm6dsv_den_t den; 3491 lsm6dsv_inactivity_dur_t inactivity_dur; 3492 lsm6dsv_inactivity_ths_t inactivity_ths; 3493 lsm6dsv_tap_cfg0_t tap_cfg0; 3494 lsm6dsv_tap_cfg1_t tap_cfg1; 3495 lsm6dsv_tap_cfg2_t tap_cfg2; 3496 lsm6dsv_tap_ths_6d_t tap_ths_6d; 3497 lsm6dsv_tap_dur_t tap_dur; 3498 lsm6dsv_wake_up_ths_t wake_up_ths; 3499 lsm6dsv_wake_up_dur_t wake_up_dur; 3500 lsm6dsv_free_fall_t free_fall; 3501 lsm6dsv_md1_cfg_t md1_cfg; 3502 lsm6dsv_md2_cfg_t md2_cfg; 3503 lsm6dsv_emb_func_cfg_t emb_func_cfg; 3504 lsm6dsv_ui_handshake_ctrl_t ui_handshake_ctrl; 3505 lsm6dsv_ui_spi2_shared_0_t ui_spi2_shared_0; 3506 lsm6dsv_ui_spi2_shared_1_t ui_spi2_shared_1; 3507 lsm6dsv_ui_spi2_shared_2_t ui_spi2_shared_2; 3508 lsm6dsv_ui_spi2_shared_3_t ui_spi2_shared_3; 3509 lsm6dsv_ui_spi2_shared_4_t ui_spi2_shared_4; 3510 lsm6dsv_ui_spi2_shared_5_t ui_spi2_shared_5; 3511 lsm6dsv_ctrl_eis_t ctrl_eis; 3512 lsm6dsv_ui_int_ois_t ui_int_ois; 3513 lsm6dsv_ui_ctrl1_ois_t ui_ctrl1_ois; 3514 lsm6dsv_ui_ctrl2_ois_t ui_ctrl2_ois; 3515 lsm6dsv_ui_ctrl3_ois_t ui_ctrl3_ois; 3516 lsm6dsv_x_ofs_usr_t x_ofs_usr; 3517 lsm6dsv_y_ofs_usr_t y_ofs_usr; 3518 lsm6dsv_z_ofs_usr_t z_ofs_usr; 3519 lsm6dsv_fifo_data_out_tag_t fifo_data_out_tag; 3520 lsm6dsv_fifo_data_out_x_l_t fifo_data_out_x_l; 3521 lsm6dsv_fifo_data_out_x_h_t fifo_data_out_x_h; 3522 lsm6dsv_fifo_data_out_y_l_t fifo_data_out_y_l; 3523 lsm6dsv_fifo_data_out_y_h_t fifo_data_out_y_h; 3524 lsm6dsv_fifo_data_out_z_l_t fifo_data_out_z_l; 3525 lsm6dsv_fifo_data_out_z_h_t fifo_data_out_z_h; 3526 lsm6dsv_spi2_who_am_i_t spi2_who_am_i; 3527 lsm6dsv_spi2_status_reg_ois_t spi2_status_reg_ois; 3528 lsm6dsv_spi2_out_temp_l_t spi2_out_temp_l; 3529 lsm6dsv_spi2_out_temp_h_t spi2_out_temp_h; 3530 lsm6dsv_spi2_outx_l_g_ois_t spi2_outx_l_g_ois; 3531 lsm6dsv_spi2_outx_h_g_ois_t spi2_outx_h_g_ois; 3532 lsm6dsv_spi2_outy_l_g_ois_t spi2_outy_l_g_ois; 3533 lsm6dsv_spi2_outy_h_g_ois_t spi2_outy_h_g_ois; 3534 lsm6dsv_spi2_outz_l_g_ois_t spi2_outz_l_g_ois; 3535 lsm6dsv_spi2_outz_h_g_ois_t spi2_outz_h_g_ois; 3536 lsm6dsv_spi2_outx_l_a_ois_t spi2_outx_l_a_ois; 3537 lsm6dsv_spi2_outx_h_a_ois_t spi2_outx_h_a_ois; 3538 lsm6dsv_spi2_outy_l_a_ois_t spi2_outy_l_a_ois; 3539 lsm6dsv_spi2_outy_h_a_ois_t spi2_outy_h_a_ois; 3540 lsm6dsv_spi2_outz_l_a_ois_t spi2_outz_l_a_ois; 3541 lsm6dsv_spi2_outz_h_a_ois_t spi2_outz_h_a_ois; 3542 lsm6dsv_spi2_handshake_ctrl_t spi2_handshake_ctrl; 3543 lsm6dsv_spi2_int_ois_t spi2_int_ois; 3544 lsm6dsv_spi2_ctrl1_ois_t spi2_ctrl1_ois; 3545 lsm6dsv_spi2_ctrl2_ois_t spi2_ctrl2_ois; 3546 lsm6dsv_spi2_ctrl3_ois_t spi2_ctrl3_ois; 3547 lsm6dsv_page_sel_t page_sel; 3548 lsm6dsv_emb_func_en_a_t emb_func_en_a; 3549 lsm6dsv_emb_func_en_b_t emb_func_en_b; 3550 lsm6dsv_emb_func_exec_status_t emb_func_exec_status; 3551 lsm6dsv_page_address_t page_address; 3552 lsm6dsv_page_value_t page_value; 3553 lsm6dsv_emb_func_int1_t emb_func_int1; 3554 lsm6dsv_fsm_int1_t fsm_int1; 3555 lsm6dsv_emb_func_int2_t emb_func_int2; 3556 lsm6dsv_fsm_int2_t fsm_int2; 3557 lsm6dsv_emb_func_status_t emb_func_status; 3558 lsm6dsv_fsm_status_t fsm_status; 3559 lsm6dsv_page_rw_t page_rw; 3560 lsm6dsv_emb_func_fifo_en_a_t emb_func_fifo_en_a; 3561 lsm6dsv_fsm_enable_t fsm_enable; 3562 lsm6dsv_fsm_long_counter_l_t fsm_long_counter_l; 3563 lsm6dsv_fsm_long_counter_h_t fsm_long_counter_h; 3564 lsm6dsv_int_ack_mask_t int_ack_mask; 3565 lsm6dsv_fsm_outs1_t fsm_outs1; 3566 lsm6dsv_fsm_outs2_t fsm_outs2; 3567 lsm6dsv_fsm_outs3_t fsm_outs3; 3568 lsm6dsv_fsm_outs4_t fsm_outs4; 3569 lsm6dsv_fsm_outs5_t fsm_outs5; 3570 lsm6dsv_fsm_outs6_t fsm_outs6; 3571 lsm6dsv_fsm_outs7_t fsm_outs7; 3572 lsm6dsv_fsm_outs8_t fsm_outs8; 3573 lsm6dsv_fsm_odr_t fsm_odr; 3574 lsm6dsv_step_counter_l_t step_counter_l; 3575 lsm6dsv_step_counter_h_t step_counter_h; 3576 lsm6dsv_emb_func_src_t emb_func_src; 3577 lsm6dsv_emb_func_init_a_t emb_func_init_a; 3578 lsm6dsv_emb_func_init_b_t emb_func_init_b; 3579 lsm6dsv_fsm_ext_sensitivity_l_t fsm_ext_sensitivity_l; 3580 lsm6dsv_fsm_ext_sensitivity_h_t fsm_ext_sensitivity_h; 3581 lsm6dsv_fsm_ext_offx_l_t fsm_ext_offx_l; 3582 lsm6dsv_fsm_ext_offx_h_t fsm_ext_offx_h; 3583 lsm6dsv_fsm_ext_offy_l_t fsm_ext_offy_l; 3584 lsm6dsv_fsm_ext_offy_h_t fsm_ext_offy_h; 3585 lsm6dsv_fsm_ext_offz_l_t fsm_ext_offz_l; 3586 lsm6dsv_fsm_ext_offz_h_t fsm_ext_offz_h; 3587 lsm6dsv_fsm_ext_matrix_xx_l_t fsm_ext_matrix_xx_l; 3588 lsm6dsv_fsm_ext_matrix_xx_h_t fsm_ext_matrix_xx_h; 3589 lsm6dsv_fsm_ext_matrix_xy_l_t fsm_ext_matrix_xy_l; 3590 lsm6dsv_fsm_ext_matrix_xy_h_t fsm_ext_matrix_xy_h; 3591 lsm6dsv_fsm_ext_matrix_xz_l_t fsm_ext_matrix_xz_l; 3592 lsm6dsv_fsm_ext_matrix_xz_h_t fsm_ext_matrix_xz_h; 3593 lsm6dsv_fsm_ext_matrix_yy_l_t fsm_ext_matrix_yy_l; 3594 lsm6dsv_fsm_ext_matrix_yy_h_t fsm_ext_matrix_yy_h; 3595 lsm6dsv_fsm_ext_matrix_yz_l_t fsm_ext_matrix_yz_l; 3596 lsm6dsv_fsm_ext_matrix_yz_h_t fsm_ext_matrix_yz_h; 3597 lsm6dsv_fsm_ext_matrix_zz_l_t fsm_ext_matrix_zz_l; 3598 lsm6dsv_fsm_ext_matrix_zz_h_t fsm_ext_matrix_zz_h; 3599 lsm6dsv_ext_cfg_a_t ext_cfg_a; 3600 lsm6dsv_ext_cfg_b_t ext_cfg_b; 3601 lsm6dsv_fsm_lc_timeout_l_t fsm_lc_timeout_l; 3602 lsm6dsv_fsm_lc_timeout_h_t fsm_lc_timeout_h; 3603 lsm6dsv_fsm_programs_t fsm_programs; 3604 lsm6dsv_fsm_start_add_l_t fsm_start_add_l; 3605 lsm6dsv_fsm_start_add_h_t fsm_start_add_h; 3606 lsm6dsv_pedo_cmd_reg_t pedo_cmd_reg; 3607 lsm6dsv_pedo_deb_steps_conf_t pedo_deb_steps_conf; 3608 lsm6dsv_pedo_sc_deltat_l_t pedo_sc_deltat_l; 3609 lsm6dsv_pedo_sc_deltat_h_t pedo_sc_deltat_h; 3610 lsm6dsv_sensor_hub_1_t sensor_hub_1; 3611 lsm6dsv_sensor_hub_2_t sensor_hub_2; 3612 lsm6dsv_sensor_hub_3_t sensor_hub_3; 3613 lsm6dsv_sensor_hub_4_t sensor_hub_4; 3614 lsm6dsv_sensor_hub_5_t sensor_hub_5; 3615 lsm6dsv_sensor_hub_6_t sensor_hub_6; 3616 lsm6dsv_sensor_hub_7_t sensor_hub_7; 3617 lsm6dsv_sensor_hub_8_t sensor_hub_8; 3618 lsm6dsv_sensor_hub_9_t sensor_hub_9; 3619 lsm6dsv_sensor_hub_10_t sensor_hub_10; 3620 lsm6dsv_sensor_hub_11_t sensor_hub_11; 3621 lsm6dsv_sensor_hub_12_t sensor_hub_12; 3622 lsm6dsv_sensor_hub_13_t sensor_hub_13; 3623 lsm6dsv_sensor_hub_14_t sensor_hub_14; 3624 lsm6dsv_sensor_hub_15_t sensor_hub_15; 3625 lsm6dsv_sensor_hub_16_t sensor_hub_16; 3626 lsm6dsv_sensor_hub_17_t sensor_hub_17; 3627 lsm6dsv_sensor_hub_18_t sensor_hub_18; 3628 lsm6dsv_master_config_t master_config; 3629 lsm6dsv_slv0_add_t slv0_add; 3630 lsm6dsv_slv0_subadd_t slv0_subadd; 3631 lsm6dsv_slv0_config_t slv0_config; 3632 lsm6dsv_slv1_add_t slv1_add; 3633 lsm6dsv_slv1_subadd_t slv1_subadd; 3634 lsm6dsv_slv1_config_t slv1_config; 3635 lsm6dsv_slv2_add_t slv2_add; 3636 lsm6dsv_slv2_subadd_t slv2_subadd; 3637 lsm6dsv_slv2_config_t slv2_config; 3638 lsm6dsv_slv3_add_t slv3_add; 3639 lsm6dsv_slv3_subadd_t slv3_subadd; 3640 lsm6dsv_slv3_config_t slv3_config; 3641 lsm6dsv_datawrite_slv0_t datawrite_slv0; 3642 lsm6dsv_status_master_t status_master; 3643 bitwise_t bitwise; 3644 uint8_t byte; 3645 } lsm6dsv_reg_t; 3646 3647 /** 3648 * @} 3649 * 3650 */ 3651 3652 #ifndef __weak 3653 #define __weak __attribute__((weak)) 3654 #endif /* __weak */ 3655 3656 /* 3657 * These are the basic platform dependent I/O routines to read 3658 * and write device registers connected on a standard bus. 3659 * The driver keeps offering a default implementation based on function 3660 * pointers to read/write routines for backward compatibility. 3661 * The __weak directive allows the final application to overwrite 3662 * them with a custom implementation. 3663 */ 3664 3665 int32_t lsm6dsv_read_reg(const stmdev_ctx_t *ctx, uint8_t reg, 3666 uint8_t *data, 3667 uint16_t len); 3668 int32_t lsm6dsv_write_reg(const stmdev_ctx_t *ctx, uint8_t reg, 3669 uint8_t *data, 3670 uint16_t len); 3671 3672 float_t lsm6dsv_from_sflp_to_mg(int16_t lsb); 3673 float_t lsm6dsv_from_fs2_to_mg(int16_t lsb); 3674 float_t lsm6dsv_from_fs4_to_mg(int16_t lsb); 3675 float_t lsm6dsv_from_fs8_to_mg(int16_t lsb); 3676 float_t lsm6dsv_from_fs16_to_mg(int16_t lsb); 3677 3678 float_t lsm6dsv_from_fs125_to_mdps(int16_t lsb); 3679 float_t lsm6dsv_from_fs500_to_mdps(int16_t lsb); 3680 float_t lsm6dsv_from_fs250_to_mdps(int16_t lsb); 3681 float_t lsm6dsv_from_fs1000_to_mdps(int16_t lsb); 3682 float_t lsm6dsv_from_fs2000_to_mdps(int16_t lsb); 3683 float_t lsm6dsv_from_fs4000_to_mdps(int16_t lsb); 3684 3685 float_t lsm6dsv_from_lsb_to_celsius(int16_t lsb); 3686 3687 float_t lsm6dsv_from_lsb_to_nsec(uint32_t lsb); 3688 3689 uint32_t lsm6dsv_from_f16_to_f32(uint16_t val); 3690 3691 int32_t lsm6dsv_xl_offset_on_out_set(const stmdev_ctx_t *ctx, uint8_t val); 3692 int32_t lsm6dsv_xl_offset_on_out_get(const stmdev_ctx_t *ctx, uint8_t *val); 3693 3694 typedef struct 3695 { 3696 float_t z_mg; 3697 float_t y_mg; 3698 float_t x_mg; 3699 } lsm6dsv_xl_offset_mg_t; 3700 int32_t lsm6dsv_xl_offset_mg_set(const stmdev_ctx_t *ctx, 3701 lsm6dsv_xl_offset_mg_t val); 3702 int32_t lsm6dsv_xl_offset_mg_get(const stmdev_ctx_t *ctx, 3703 lsm6dsv_xl_offset_mg_t *val); 3704 3705 typedef enum 3706 { 3707 LSM6DSV_READY = 0x0, 3708 LSM6DSV_GLOBAL_RST = 0x1, 3709 LSM6DSV_RESTORE_CAL_PARAM = 0x2, 3710 LSM6DSV_RESTORE_CTRL_REGS = 0x4, 3711 } lsm6dsv_reset_t; 3712 int32_t lsm6dsv_reset_set(const stmdev_ctx_t *ctx, lsm6dsv_reset_t val); 3713 int32_t lsm6dsv_reset_get(const stmdev_ctx_t *ctx, lsm6dsv_reset_t *val); 3714 3715 typedef enum 3716 { 3717 LSM6DSV_MAIN_MEM_BANK = 0x0, 3718 LSM6DSV_EMBED_FUNC_MEM_BANK = 0x1, 3719 LSM6DSV_SENSOR_HUB_MEM_BANK = 0x2, 3720 } lsm6dsv_mem_bank_t; 3721 int32_t lsm6dsv_mem_bank_set(const stmdev_ctx_t *ctx, lsm6dsv_mem_bank_t val); 3722 int32_t lsm6dsv_mem_bank_get(const stmdev_ctx_t *ctx, lsm6dsv_mem_bank_t *val); 3723 3724 int32_t lsm6dsv_device_id_get(const stmdev_ctx_t *ctx, uint8_t *val); 3725 3726 typedef enum 3727 { 3728 LSM6DSV_ODR_OFF = 0x0, 3729 LSM6DSV_ODR_AT_1Hz875 = 0x1, 3730 LSM6DSV_ODR_AT_7Hz5 = 0x2, 3731 LSM6DSV_ODR_AT_15Hz = 0x3, 3732 LSM6DSV_ODR_AT_30Hz = 0x4, 3733 LSM6DSV_ODR_AT_60Hz = 0x5, 3734 LSM6DSV_ODR_AT_120Hz = 0x6, 3735 LSM6DSV_ODR_AT_240Hz = 0x7, 3736 LSM6DSV_ODR_AT_480Hz = 0x8, 3737 LSM6DSV_ODR_AT_960Hz = 0x9, 3738 LSM6DSV_ODR_AT_1920Hz = 0xA, 3739 LSM6DSV_ODR_AT_3840Hz = 0xB, 3740 LSM6DSV_ODR_AT_7680Hz = 0xC, 3741 LSM6DSV_ODR_HA01_AT_15Hz625 = 0x13, 3742 LSM6DSV_ODR_HA01_AT_31Hz25 = 0x14, 3743 LSM6DSV_ODR_HA01_AT_62Hz5 = 0x15, 3744 LSM6DSV_ODR_HA01_AT_125Hz = 0x16, 3745 LSM6DSV_ODR_HA01_AT_250Hz = 0x17, 3746 LSM6DSV_ODR_HA01_AT_500Hz = 0x18, 3747 LSM6DSV_ODR_HA01_AT_1000Hz = 0x19, 3748 LSM6DSV_ODR_HA01_AT_2000Hz = 0x1A, 3749 LSM6DSV_ODR_HA01_AT_4000Hz = 0x1B, 3750 LSM6DSV_ODR_HA01_AT_8000Hz = 0x1C, 3751 LSM6DSV_ODR_HA02_AT_12Hz5 = 0x23, 3752 LSM6DSV_ODR_HA02_AT_25Hz = 0x24, 3753 LSM6DSV_ODR_HA02_AT_50Hz = 0x25, 3754 LSM6DSV_ODR_HA02_AT_100Hz = 0x26, 3755 LSM6DSV_ODR_HA02_AT_200Hz = 0x27, 3756 LSM6DSV_ODR_HA02_AT_400Hz = 0x28, 3757 LSM6DSV_ODR_HA02_AT_800Hz = 0x29, 3758 LSM6DSV_ODR_HA02_AT_1600Hz = 0x2A, 3759 LSM6DSV_ODR_HA02_AT_3200Hz = 0x2B, 3760 LSM6DSV_ODR_HA02_AT_6400Hz = 0x2C, 3761 } lsm6dsv_data_rate_t; 3762 int32_t lsm6dsv_xl_data_rate_set(const stmdev_ctx_t *ctx, 3763 lsm6dsv_data_rate_t val); 3764 int32_t lsm6dsv_xl_data_rate_get(const stmdev_ctx_t *ctx, 3765 lsm6dsv_data_rate_t *val); 3766 int32_t lsm6dsv_gy_data_rate_set(const stmdev_ctx_t *ctx, 3767 lsm6dsv_data_rate_t val); 3768 int32_t lsm6dsv_gy_data_rate_get(const stmdev_ctx_t *ctx, 3769 lsm6dsv_data_rate_t *val); 3770 3771 3772 typedef enum 3773 { 3774 LSM6DSV_XL_HIGH_PERFORMANCE_MD = 0x0, 3775 LSM6DSV_XL_HIGH_ACCURACY_ODR_MD = 0x1, 3776 LSM6DSV_XL_ODR_TRIGGERED_MD = 0x3, 3777 LSM6DSV_XL_LOW_POWER_2_AVG_MD = 0x4, 3778 LSM6DSV_XL_LOW_POWER_4_AVG_MD = 0x5, 3779 LSM6DSV_XL_LOW_POWER_8_AVG_MD = 0x6, 3780 LSM6DSV_XL_NORMAL_MD = 0x7, 3781 } lsm6dsv_xl_mode_t; 3782 int32_t lsm6dsv_xl_mode_set(const stmdev_ctx_t *ctx, lsm6dsv_xl_mode_t val); 3783 int32_t lsm6dsv_xl_mode_get(const stmdev_ctx_t *ctx, lsm6dsv_xl_mode_t *val); 3784 3785 typedef enum 3786 { 3787 LSM6DSV_GY_HIGH_PERFORMANCE_MD = 0x0, 3788 LSM6DSV_GY_HIGH_ACCURACY_ODR_MD = 0x1, 3789 LSM6DSV_GY_SLEEP_MD = 0x4, 3790 LSM6DSV_GY_LOW_POWER_MD = 0x5, 3791 } lsm6dsv_gy_mode_t; 3792 int32_t lsm6dsv_gy_mode_set(const stmdev_ctx_t *ctx, lsm6dsv_gy_mode_t val); 3793 int32_t lsm6dsv_gy_mode_get(const stmdev_ctx_t *ctx, lsm6dsv_gy_mode_t *val); 3794 3795 int32_t lsm6dsv_auto_increment_set(const stmdev_ctx_t *ctx, uint8_t val); 3796 int32_t lsm6dsv_auto_increment_get(const stmdev_ctx_t *ctx, uint8_t *val); 3797 3798 int32_t lsm6dsv_block_data_update_set(const stmdev_ctx_t *ctx, uint8_t val); 3799 int32_t lsm6dsv_block_data_update_get(const stmdev_ctx_t *ctx, uint8_t *val); 3800 3801 int32_t lsm6dsv_odr_trig_cfg_set(const stmdev_ctx_t *ctx, uint8_t val); 3802 int32_t lsm6dsv_odr_trig_cfg_get(const stmdev_ctx_t *ctx, uint8_t *val); 3803 3804 typedef enum 3805 { 3806 LSM6DSV_DRDY_LATCHED = 0x0, 3807 LSM6DSV_DRDY_PULSED = 0x1, 3808 } lsm6dsv_data_ready_mode_t; 3809 int32_t lsm6dsv_data_ready_mode_set(const stmdev_ctx_t *ctx, 3810 lsm6dsv_data_ready_mode_t val); 3811 int32_t lsm6dsv_data_ready_mode_get(const stmdev_ctx_t *ctx, 3812 lsm6dsv_data_ready_mode_t *val); 3813 3814 typedef struct 3815 { 3816 uint8_t enable : 1; /* interrupt enable */ 3817 uint8_t lir : 1; /* interrupt pulsed or latched */ 3818 } lsm6dsv_interrupt_mode_t; 3819 int32_t lsm6dsv_interrupt_enable_set(const stmdev_ctx_t *ctx, 3820 lsm6dsv_interrupt_mode_t val); 3821 int32_t lsm6dsv_interrupt_enable_get(const stmdev_ctx_t *ctx, 3822 lsm6dsv_interrupt_mode_t *val); 3823 3824 typedef enum 3825 { 3826 LSM6DSV_125dps = 0x0, 3827 LSM6DSV_250dps = 0x1, 3828 LSM6DSV_500dps = 0x2, 3829 LSM6DSV_1000dps = 0x3, 3830 LSM6DSV_2000dps = 0x4, 3831 LSM6DSV_4000dps = 0xc, 3832 } lsm6dsv_gy_full_scale_t; 3833 int32_t lsm6dsv_gy_full_scale_set(const stmdev_ctx_t *ctx, 3834 lsm6dsv_gy_full_scale_t val); 3835 int32_t lsm6dsv_gy_full_scale_get(const stmdev_ctx_t *ctx, 3836 lsm6dsv_gy_full_scale_t *val); 3837 3838 typedef enum 3839 { 3840 LSM6DSV_2g = 0x0, 3841 LSM6DSV_4g = 0x1, 3842 LSM6DSV_8g = 0x2, 3843 LSM6DSV_16g = 0x3, 3844 } lsm6dsv_xl_full_scale_t; 3845 int32_t lsm6dsv_xl_full_scale_set(const stmdev_ctx_t *ctx, 3846 lsm6dsv_xl_full_scale_t val); 3847 int32_t lsm6dsv_xl_full_scale_get(const stmdev_ctx_t *ctx, 3848 lsm6dsv_xl_full_scale_t *val); 3849 3850 int32_t lsm6dsv_xl_dual_channel_set(const stmdev_ctx_t *ctx, uint8_t val); 3851 int32_t lsm6dsv_xl_dual_channel_get(const stmdev_ctx_t *ctx, uint8_t *val); 3852 3853 typedef enum 3854 { 3855 LSM6DSV_XL_ST_DISABLE = 0x0, 3856 LSM6DSV_XL_ST_POSITIVE = 0x1, 3857 LSM6DSV_XL_ST_NEGATIVE = 0x2, 3858 } lsm6dsv_xl_self_test_t; 3859 int32_t lsm6dsv_xl_self_test_set(const stmdev_ctx_t *ctx, 3860 lsm6dsv_xl_self_test_t val); 3861 int32_t lsm6dsv_xl_self_test_get(const stmdev_ctx_t *ctx, 3862 lsm6dsv_xl_self_test_t *val); 3863 3864 typedef enum 3865 { 3866 LSM6DSV_OIS_XL_ST_DISABLE = 0x0, 3867 LSM6DSV_OIS_XL_ST_POSITIVE = 0x1, 3868 LSM6DSV_OIS_XL_ST_NEGATIVE = 0x2, 3869 } lsm6dsv_ois_xl_self_test_t; 3870 int32_t lsm6dsv_ois_xl_self_test_set(const stmdev_ctx_t *ctx, 3871 lsm6dsv_ois_xl_self_test_t val); 3872 int32_t lsm6dsv_ois_xl_self_test_get(const stmdev_ctx_t *ctx, 3873 lsm6dsv_ois_xl_self_test_t *val); 3874 3875 typedef enum 3876 { 3877 LSM6DSV_GY_ST_DISABLE = 0x0, 3878 LSM6DSV_GY_ST_POSITIVE = 0x1, 3879 LSM6DSV_GY_ST_NEGATIVE = 0x2, 3880 3881 } lsm6dsv_gy_self_test_t; 3882 int32_t lsm6dsv_gy_self_test_set(const stmdev_ctx_t *ctx, 3883 lsm6dsv_gy_self_test_t val); 3884 int32_t lsm6dsv_gy_self_test_get(const stmdev_ctx_t *ctx, 3885 lsm6dsv_gy_self_test_t *val); 3886 3887 typedef enum 3888 { 3889 LSM6DSV_OIS_GY_ST_DISABLE = 0x0, 3890 LSM6DSV_OIS_GY_ST_POSITIVE = 0x1, 3891 LSM6DSV_OIS_GY_ST_NEGATIVE = 0x2, 3892 LSM6DSV_OIS_GY_ST_CLAMP_POS = 0x5, 3893 LSM6DSV_OIS_GY_ST_CLAMP_NEG = 0x6, 3894 3895 } lsm6dsv_ois_gy_self_test_t; 3896 int32_t lsm6dsv_ois_gy_self_test_set(const stmdev_ctx_t *ctx, 3897 lsm6dsv_ois_gy_self_test_t val); 3898 int32_t lsm6dsv_ois_gy_self_test_get(const stmdev_ctx_t *ctx, 3899 lsm6dsv_ois_gy_self_test_t *val); 3900 3901 typedef struct 3902 { 3903 uint8_t drdy_xl : 1; 3904 uint8_t drdy_gy : 1; 3905 uint8_t drdy_temp : 1; 3906 uint8_t drdy_eis : 1; 3907 uint8_t drdy_ois : 1; 3908 uint8_t gy_settling : 1; 3909 uint8_t timestamp : 1; 3910 uint8_t free_fall : 1; 3911 uint8_t wake_up : 1; 3912 uint8_t wake_up_z : 1; 3913 uint8_t wake_up_y : 1; 3914 uint8_t wake_up_x : 1; 3915 uint8_t single_tap : 1; 3916 uint8_t double_tap : 1; 3917 uint8_t tap_z : 1; 3918 uint8_t tap_y : 1; 3919 uint8_t tap_x : 1; 3920 uint8_t tap_sign : 1; 3921 uint8_t six_d : 1; 3922 uint8_t six_d_xl : 1; 3923 uint8_t six_d_xh : 1; 3924 uint8_t six_d_yl : 1; 3925 uint8_t six_d_yh : 1; 3926 uint8_t six_d_zl : 1; 3927 uint8_t six_d_zh : 1; 3928 uint8_t sleep_change : 1; 3929 uint8_t sleep_state : 1; 3930 uint8_t step_detector : 1; 3931 uint8_t step_count_inc : 1; 3932 uint8_t step_count_overflow : 1; 3933 uint8_t step_on_delta_time : 1; 3934 uint8_t emb_func_stand_by : 1; 3935 uint8_t emb_func_time_exceed : 1; 3936 uint8_t tilt : 1; 3937 uint8_t sig_mot : 1; 3938 uint8_t fsm_lc : 1; 3939 uint8_t fsm1 : 1; 3940 uint8_t fsm2 : 1; 3941 uint8_t fsm3 : 1; 3942 uint8_t fsm4 : 1; 3943 uint8_t fsm5 : 1; 3944 uint8_t fsm6 : 1; 3945 uint8_t fsm7 : 1; 3946 uint8_t fsm8 : 1; 3947 uint8_t sh_endop : 1; 3948 uint8_t sh_slave0_nack : 1; 3949 uint8_t sh_slave1_nack : 1; 3950 uint8_t sh_slave2_nack : 1; 3951 uint8_t sh_slave3_nack : 1; 3952 uint8_t sh_wr_once : 1; 3953 uint8_t fifo_bdr : 1; 3954 uint8_t fifo_full : 1; 3955 uint8_t fifo_ovr : 1; 3956 uint8_t fifo_th : 1; 3957 } lsm6dsv_all_sources_t; 3958 int32_t lsm6dsv_all_sources_get(const stmdev_ctx_t *ctx, 3959 lsm6dsv_all_sources_t *val); 3960 3961 typedef struct 3962 { 3963 uint8_t drdy_xl : 1; 3964 uint8_t drdy_g : 1; 3965 uint8_t drdy_g_eis : 1; 3966 uint8_t drdy_temp : 1; 3967 uint8_t fifo_th : 1; 3968 uint8_t fifo_ovr : 1; 3969 uint8_t fifo_full : 1; 3970 uint8_t cnt_bdr : 1; 3971 uint8_t emb_func_endop : 1; 3972 uint8_t timestamp : 1; 3973 uint8_t shub : 1; 3974 uint8_t emb_func : 1; 3975 uint8_t sixd : 1; 3976 uint8_t single_tap : 1; 3977 uint8_t double_tap : 1; 3978 uint8_t wakeup : 1; 3979 uint8_t freefall : 1; 3980 uint8_t sleep_change : 1; 3981 } lsm6dsv_pin_int_route_t; 3982 int32_t lsm6dsv_pin_int1_route_set(const stmdev_ctx_t *ctx, 3983 lsm6dsv_pin_int_route_t *val); 3984 int32_t lsm6dsv_pin_int1_route_get(const stmdev_ctx_t *ctx, 3985 lsm6dsv_pin_int_route_t *val); 3986 int32_t lsm6dsv_pin_int2_route_set(const stmdev_ctx_t *ctx, 3987 lsm6dsv_pin_int_route_t *val); 3988 int32_t lsm6dsv_pin_int2_route_get(const stmdev_ctx_t *ctx, 3989 lsm6dsv_pin_int_route_t *val); 3990 3991 typedef struct 3992 { 3993 uint8_t step_det : 1; /* route step detection event on INT pad */ 3994 uint8_t tilt : 1; /* route tilt event on INT pad */ 3995 uint8_t sig_mot : 1; /* route significant motion event on INT pad */ 3996 uint8_t fsm_lc : 1; /* route FSM long counter event on INT pad */ 3997 } lsm6dsv_emb_pin_int_route_t; 3998 int32_t lsm6dsv_emb_pin_int1_route_set(const stmdev_ctx_t *ctx, 3999 const lsm6dsv_emb_pin_int_route_t *val); 4000 int32_t lsm6dsv_emb_pin_int1_route_get(const stmdev_ctx_t *ctx, 4001 lsm6dsv_emb_pin_int_route_t *val); 4002 int32_t lsm6dsv_emb_pin_int2_route_set(const stmdev_ctx_t *ctx, 4003 const lsm6dsv_emb_pin_int_route_t *val); 4004 int32_t lsm6dsv_emb_pin_int2_route_get(const stmdev_ctx_t *ctx, 4005 lsm6dsv_emb_pin_int_route_t *val); 4006 4007 typedef enum 4008 { 4009 LSM6DSV_INT_LATCH_DISABLE = 0x0, 4010 LSM6DSV_INT_LATCH_ENABLE = 0x1, 4011 } lsm6dsv_embedded_int_config_t; 4012 int32_t lsm6dsv_embedded_int_cfg_set(const stmdev_ctx_t *ctx, 4013 lsm6dsv_embedded_int_config_t val); 4014 int32_t lsm6dsv_embedded_int_cfg_get(const stmdev_ctx_t *ctx, 4015 lsm6dsv_embedded_int_config_t *val); 4016 4017 typedef struct 4018 { 4019 uint8_t tilt : 1; 4020 uint8_t sig_mot : 1; 4021 uint8_t fsm_lc : 1; 4022 uint8_t step_detector : 1; 4023 uint8_t step_count_inc : 1; 4024 uint8_t step_count_overflow : 1; 4025 uint8_t step_on_delta_time : 1; 4026 } lsm6dsv_embedded_status_t; 4027 int32_t lsm6dsv_embedded_status_get(const stmdev_ctx_t *ctx, 4028 lsm6dsv_embedded_status_t *val); 4029 4030 typedef struct 4031 { 4032 uint8_t drdy_xl : 1; 4033 uint8_t drdy_gy : 1; 4034 uint8_t drdy_temp : 1; 4035 } lsm6dsv_data_ready_t; 4036 int32_t lsm6dsv_flag_data_ready_get(const stmdev_ctx_t *ctx, 4037 lsm6dsv_data_ready_t *val); 4038 4039 int32_t lsm6dsv_int_ack_mask_set(const stmdev_ctx_t *ctx, uint8_t val); 4040 int32_t lsm6dsv_int_ack_mask_get(const stmdev_ctx_t *ctx, uint8_t *val); 4041 4042 int32_t lsm6dsv_temperature_raw_get(const stmdev_ctx_t *ctx, int16_t *val); 4043 4044 int32_t lsm6dsv_angular_rate_raw_get(const stmdev_ctx_t *ctx, int16_t *val); 4045 4046 int32_t lsm6dsv_ois_angular_rate_raw_get(const stmdev_ctx_t *ctx, int16_t *val); 4047 4048 int32_t lsm6dsv_ois_eis_angular_rate_raw_get(const stmdev_ctx_t *ctx, 4049 int16_t *val); 4050 4051 int32_t lsm6dsv_acceleration_raw_get(const stmdev_ctx_t *ctx, int16_t *val); 4052 4053 int32_t lsm6dsv_dual_acceleration_raw_get(const stmdev_ctx_t *ctx, int16_t *val); 4054 4055 int32_t lsm6dsv_ois_dual_acceleration_raw_get(const stmdev_ctx_t *ctx, 4056 int16_t *val); 4057 4058 int32_t lsm6dsv_odr_cal_reg_get(const stmdev_ctx_t *ctx, int8_t *val); 4059 4060 int32_t lsm6dsv_ln_pg_write(const stmdev_ctx_t *ctx, uint16_t address, 4061 uint8_t *buf, uint8_t len); 4062 int32_t lsm6dsv_ln_pg_read(const stmdev_ctx_t *ctx, uint16_t address, uint8_t *buf, 4063 uint8_t len); 4064 4065 int32_t lsm6dsv_emb_function_dbg_set(const stmdev_ctx_t *ctx, uint8_t val); 4066 int32_t lsm6dsv_emb_function_dbg_get(const stmdev_ctx_t *ctx, uint8_t *val); 4067 4068 typedef enum 4069 { 4070 LSM6DSV_DEN_ACT_LOW = 0x0, 4071 LSM6DSV_DEN_ACT_HIGH = 0x1, 4072 } lsm6dsv_den_polarity_t; 4073 int32_t lsm6dsv_den_polarity_set(const stmdev_ctx_t *ctx, 4074 lsm6dsv_den_polarity_t val); 4075 int32_t lsm6dsv_den_polarity_get(const stmdev_ctx_t *ctx, 4076 lsm6dsv_den_polarity_t *val); 4077 4078 typedef struct 4079 { 4080 uint8_t stamp_in_gy_data : 1; 4081 uint8_t stamp_in_xl_data : 1; 4082 uint8_t den_x : 1; 4083 uint8_t den_y : 1; 4084 uint8_t den_z : 1; 4085 enum 4086 { 4087 LSM6DSV_DEN_NOT_DEFINED = 0x00, 4088 LSM6DSV_LEVEL_TRIGGER = 0x02, 4089 LSM6DSV_LEVEL_LATCHED = 0x03, 4090 } mode; 4091 } lsm6dsv_den_conf_t; 4092 int32_t lsm6dsv_den_conf_set(const stmdev_ctx_t *ctx, lsm6dsv_den_conf_t val); 4093 int32_t lsm6dsv_den_conf_get(const stmdev_ctx_t *ctx, lsm6dsv_den_conf_t *val); 4094 4095 typedef enum 4096 { 4097 LSM6DSV_EIS_125dps = 0x0, 4098 LSM6DSV_EIS_250dps = 0x1, 4099 LSM6DSV_EIS_500dps = 0x2, 4100 LSM6DSV_EIS_1000dps = 0x3, 4101 LSM6DSV_EIS_2000dps = 0x4, 4102 } lsm6dsv_eis_gy_full_scale_t; 4103 int32_t lsm6dsv_eis_gy_full_scale_set(const stmdev_ctx_t *ctx, 4104 lsm6dsv_eis_gy_full_scale_t val); 4105 int32_t lsm6dsv_eis_gy_full_scale_get(const stmdev_ctx_t *ctx, 4106 lsm6dsv_eis_gy_full_scale_t *val); 4107 4108 int32_t lsm6dsv_eis_gy_on_spi2_set(const stmdev_ctx_t *ctx, uint8_t val); 4109 int32_t lsm6dsv_eis_gy_on_spi2_get(const stmdev_ctx_t *ctx, uint8_t *val); 4110 4111 typedef enum 4112 { 4113 LSM6DSV_EIS_ODR_OFF = 0x0, 4114 LSM6DSV_EIS_1920Hz = 0x1, 4115 LSM6DSV_EIS_960Hz = 0x2, 4116 } lsm6dsv_gy_eis_data_rate_t; 4117 int32_t lsm6dsv_gy_eis_data_rate_set(const stmdev_ctx_t *ctx, 4118 lsm6dsv_gy_eis_data_rate_t val); 4119 int32_t lsm6dsv_gy_eis_data_rate_get(const stmdev_ctx_t *ctx, 4120 lsm6dsv_gy_eis_data_rate_t *val); 4121 4122 int32_t lsm6dsv_fifo_watermark_set(const stmdev_ctx_t *ctx, uint8_t val); 4123 int32_t lsm6dsv_fifo_watermark_get(const stmdev_ctx_t *ctx, uint8_t *val); 4124 4125 int32_t lsm6dsv_fifo_xl_dual_fsm_batch_set(const stmdev_ctx_t *ctx, uint8_t val); 4126 int32_t lsm6dsv_fifo_xl_dual_fsm_batch_get(const stmdev_ctx_t *ctx, uint8_t *val); 4127 4128 typedef enum 4129 { 4130 LSM6DSV_CMP_DISABLE = 0x0, 4131 LSM6DSV_CMP_8_TO_1 = 0x1, 4132 LSM6DSV_CMP_16_TO_1 = 0x2, 4133 LSM6DSV_CMP_32_TO_1 = 0x3, 4134 } lsm6dsv_fifo_compress_algo_t; 4135 int32_t lsm6dsv_fifo_compress_algo_set(const stmdev_ctx_t *ctx, 4136 lsm6dsv_fifo_compress_algo_t val); 4137 int32_t lsm6dsv_fifo_compress_algo_get(const stmdev_ctx_t *ctx, 4138 lsm6dsv_fifo_compress_algo_t *val); 4139 4140 int32_t lsm6dsv_fifo_virtual_sens_odr_chg_set(const stmdev_ctx_t *ctx, 4141 uint8_t val); 4142 int32_t lsm6dsv_fifo_virtual_sens_odr_chg_get(const stmdev_ctx_t *ctx, 4143 uint8_t *val); 4144 4145 int32_t lsm6dsv_fifo_compress_algo_real_time_set(const stmdev_ctx_t *ctx, 4146 uint8_t val); 4147 int32_t lsm6dsv_fifo_compress_algo_real_time_get(const stmdev_ctx_t *ctx, 4148 uint8_t *val); 4149 4150 int32_t lsm6dsv_fifo_stop_on_wtm_set(const stmdev_ctx_t *ctx, uint8_t val); 4151 int32_t lsm6dsv_fifo_stop_on_wtm_get(const stmdev_ctx_t *ctx, uint8_t *val); 4152 4153 typedef enum 4154 { 4155 LSM6DSV_XL_NOT_BATCHED = 0x0, 4156 LSM6DSV_XL_BATCHED_AT_1Hz875 = 0x1, 4157 LSM6DSV_XL_BATCHED_AT_7Hz5 = 0x2, 4158 LSM6DSV_XL_BATCHED_AT_15Hz = 0x3, 4159 LSM6DSV_XL_BATCHED_AT_30Hz = 0x4, 4160 LSM6DSV_XL_BATCHED_AT_60Hz = 0x5, 4161 LSM6DSV_XL_BATCHED_AT_120Hz = 0x6, 4162 LSM6DSV_XL_BATCHED_AT_240Hz = 0x7, 4163 LSM6DSV_XL_BATCHED_AT_480Hz = 0x8, 4164 LSM6DSV_XL_BATCHED_AT_960Hz = 0x9, 4165 LSM6DSV_XL_BATCHED_AT_1920Hz = 0xa, 4166 LSM6DSV_XL_BATCHED_AT_3840Hz = 0xb, 4167 LSM6DSV_XL_BATCHED_AT_7680Hz = 0xc, 4168 } lsm6dsv_fifo_xl_batch_t; 4169 int32_t lsm6dsv_fifo_xl_batch_set(const stmdev_ctx_t *ctx, 4170 lsm6dsv_fifo_xl_batch_t val); 4171 int32_t lsm6dsv_fifo_xl_batch_get(const stmdev_ctx_t *ctx, 4172 lsm6dsv_fifo_xl_batch_t *val); 4173 4174 typedef enum 4175 { 4176 LSM6DSV_GY_NOT_BATCHED = 0x0, 4177 LSM6DSV_GY_BATCHED_AT_1Hz875 = 0x1, 4178 LSM6DSV_GY_BATCHED_AT_7Hz5 = 0x2, 4179 LSM6DSV_GY_BATCHED_AT_15Hz = 0x3, 4180 LSM6DSV_GY_BATCHED_AT_30Hz = 0x4, 4181 LSM6DSV_GY_BATCHED_AT_60Hz = 0x5, 4182 LSM6DSV_GY_BATCHED_AT_120Hz = 0x6, 4183 LSM6DSV_GY_BATCHED_AT_240Hz = 0x7, 4184 LSM6DSV_GY_BATCHED_AT_480Hz = 0x8, 4185 LSM6DSV_GY_BATCHED_AT_960Hz = 0x9, 4186 LSM6DSV_GY_BATCHED_AT_1920Hz = 0xa, 4187 LSM6DSV_GY_BATCHED_AT_3840Hz = 0xb, 4188 LSM6DSV_GY_BATCHED_AT_7680Hz = 0xc, 4189 } lsm6dsv_fifo_gy_batch_t; 4190 int32_t lsm6dsv_fifo_gy_batch_set(const stmdev_ctx_t *ctx, 4191 lsm6dsv_fifo_gy_batch_t val); 4192 int32_t lsm6dsv_fifo_gy_batch_get(const stmdev_ctx_t *ctx, 4193 lsm6dsv_fifo_gy_batch_t *val); 4194 4195 typedef enum 4196 { 4197 LSM6DSV_BYPASS_MODE = 0x0, 4198 LSM6DSV_FIFO_MODE = 0x1, 4199 LSM6DSV_STREAM_WTM_TO_FULL_MODE = 0x2, 4200 LSM6DSV_STREAM_TO_FIFO_MODE = 0x3, 4201 LSM6DSV_BYPASS_TO_STREAM_MODE = 0x4, 4202 LSM6DSV_STREAM_MODE = 0x6, 4203 LSM6DSV_BYPASS_TO_FIFO_MODE = 0x7, 4204 } lsm6dsv_fifo_mode_t; 4205 int32_t lsm6dsv_fifo_mode_set(const stmdev_ctx_t *ctx, lsm6dsv_fifo_mode_t val); 4206 int32_t lsm6dsv_fifo_mode_get(const stmdev_ctx_t *ctx, 4207 lsm6dsv_fifo_mode_t *val); 4208 4209 int32_t lsm6dsv_fifo_gy_eis_batch_set(const stmdev_ctx_t *ctx, uint8_t val); 4210 int32_t lsm6dsv_fifo_gy_eis_batch_get(const stmdev_ctx_t *ctx, uint8_t *val); 4211 4212 typedef enum 4213 { 4214 LSM6DSV_TEMP_NOT_BATCHED = 0x0, 4215 LSM6DSV_TEMP_BATCHED_AT_1Hz875 = 0x1, 4216 LSM6DSV_TEMP_BATCHED_AT_15Hz = 0x2, 4217 LSM6DSV_TEMP_BATCHED_AT_60Hz = 0x3, 4218 } lsm6dsv_fifo_temp_batch_t; 4219 int32_t lsm6dsv_fifo_temp_batch_set(const stmdev_ctx_t *ctx, 4220 lsm6dsv_fifo_temp_batch_t val); 4221 int32_t lsm6dsv_fifo_temp_batch_get(const stmdev_ctx_t *ctx, 4222 lsm6dsv_fifo_temp_batch_t *val); 4223 4224 typedef enum 4225 { 4226 LSM6DSV_TMSTMP_NOT_BATCHED = 0x0, 4227 LSM6DSV_TMSTMP_DEC_1 = 0x1, 4228 LSM6DSV_TMSTMP_DEC_8 = 0x2, 4229 LSM6DSV_TMSTMP_DEC_32 = 0x3, 4230 } lsm6dsv_fifo_timestamp_batch_t; 4231 int32_t lsm6dsv_fifo_timestamp_batch_set(const stmdev_ctx_t *ctx, 4232 lsm6dsv_fifo_timestamp_batch_t val); 4233 int32_t lsm6dsv_fifo_timestamp_batch_get(const stmdev_ctx_t *ctx, 4234 lsm6dsv_fifo_timestamp_batch_t *val); 4235 4236 int32_t lsm6dsv_fifo_batch_counter_threshold_set(const stmdev_ctx_t *ctx, 4237 uint16_t val); 4238 int32_t lsm6dsv_fifo_batch_counter_threshold_get(const stmdev_ctx_t *ctx, 4239 uint16_t *val); 4240 4241 typedef enum 4242 { 4243 LSM6DSV_XL_BATCH_EVENT = 0x0, 4244 LSM6DSV_GY_BATCH_EVENT = 0x1, 4245 LSM6DSV_GY_EIS_BATCH_EVENT = 0x2, 4246 } lsm6dsv_fifo_batch_cnt_event_t; 4247 int32_t lsm6dsv_fifo_batch_cnt_event_set(const stmdev_ctx_t *ctx, 4248 lsm6dsv_fifo_batch_cnt_event_t val); 4249 int32_t lsm6dsv_fifo_batch_cnt_event_get(const stmdev_ctx_t *ctx, 4250 lsm6dsv_fifo_batch_cnt_event_t *val); 4251 4252 typedef struct 4253 { 4254 uint16_t fifo_level : 9; 4255 uint8_t fifo_bdr : 1; 4256 uint8_t fifo_full : 1; 4257 uint8_t fifo_ovr : 1; 4258 uint8_t fifo_th : 1; 4259 } lsm6dsv_fifo_status_t; 4260 4261 int32_t lsm6dsv_fifo_status_get(const stmdev_ctx_t *ctx, 4262 lsm6dsv_fifo_status_t *val); 4263 4264 /* Accel data format in FIFO */ 4265 typedef struct 4266 { 4267 int16_t axis[3]; 4268 } lsm6dsv_fifo_xl; 4269 4270 /* Temperature data format in FIFO */ 4271 typedef struct 4272 { 4273 uint16_t temperature; 4274 } lsm6dsv_fifo_temperature; 4275 4276 /* Timestamp format in FIFO */ 4277 typedef struct 4278 { 4279 uint32_t timestamp; 4280 } lsm6dsv_fifo_timestamp; 4281 4282 /* Step counter data format in FIFO */ 4283 typedef struct 4284 { 4285 uint16_t steps; 4286 uint32_t timestamp; 4287 } lsm6dsv_fifo_step_counter; 4288 4289 typedef enum 4290 { 4291 LSM6DSV_FIFO_EMPTY = 0x0, 4292 LSM6DSV_GY_NC_TAG = 0x1, 4293 LSM6DSV_XL_NC_TAG = 0x2, 4294 LSM6DSV_TEMPERATURE_TAG = 0x3, 4295 LSM6DSV_TIMESTAMP_TAG = 0x4, 4296 LSM6DSV_CFG_CHANGE_TAG = 0x5, 4297 LSM6DSV_XL_NC_T_2_TAG = 0x6, 4298 LSM6DSV_XL_NC_T_1_TAG = 0x7, 4299 LSM6DSV_XL_2XC_TAG = 0x8, 4300 LSM6DSV_XL_3XC_TAG = 0x9, 4301 LSM6DSV_GY_NC_T_2_TAG = 0xA, 4302 LSM6DSV_GY_NC_T_1_TAG = 0xB, 4303 LSM6DSV_GY_2XC_TAG = 0xC, 4304 LSM6DSV_GY_3XC_TAG = 0xD, 4305 LSM6DSV_SENSORHUB_SLAVE0_TAG = 0xE, 4306 LSM6DSV_SENSORHUB_SLAVE1_TAG = 0xF, 4307 LSM6DSV_SENSORHUB_SLAVE2_TAG = 0x10, 4308 LSM6DSV_SENSORHUB_SLAVE3_TAG = 0x11, 4309 LSM6DSV_STEP_COUNTER_TAG = 0x12, 4310 LSM6DSV_SFLP_GAME_ROTATION_VECTOR_TAG = 0x13, 4311 LSM6DSV_SFLP_GYROSCOPE_BIAS_TAG = 0x16, 4312 LSM6DSV_SFLP_GRAVITY_VECTOR_TAG = 0x17, 4313 LSM6DSV_SENSORHUB_NACK_TAG = 0x19, 4314 LSM6DSV_XL_DUAL_CORE = 0x1D, 4315 LSM6DSV_GY_ENHANCED_EIS = 0x1E, 4316 } lsm6dsv_fifo_tag; 4317 4318 typedef struct 4319 { 4320 uint8_t tag : 5; 4321 uint8_t cnt : 2; 4322 uint8_t rsvd : 1; 4323 uint8_t data[6]; 4324 } lsm6dsv_fifo_out_raw_t; 4325 int32_t lsm6dsv_fifo_out_raw_get(const stmdev_ctx_t *ctx, 4326 lsm6dsv_fifo_out_raw_t *val); 4327 4328 int32_t lsm6dsv_fifo_stpcnt_batch_set(const stmdev_ctx_t *ctx, uint8_t val); 4329 int32_t lsm6dsv_fifo_stpcnt_batch_get(const stmdev_ctx_t *ctx, uint8_t *val); 4330 4331 int32_t lsm6dsv_fifo_sh_batch_slave_set(const stmdev_ctx_t *ctx, uint8_t idx, uint8_t val); 4332 int32_t lsm6dsv_fifo_sh_batch_slave_get(const stmdev_ctx_t *ctx, uint8_t idx, uint8_t *val); 4333 4334 typedef struct 4335 { 4336 uint8_t game_rotation : 1; 4337 uint8_t gravity : 1; 4338 uint8_t gbias : 1; 4339 } lsm6dsv_fifo_sflp_raw_t; 4340 int32_t lsm6dsv_fifo_sflp_batch_set(const stmdev_ctx_t *ctx, 4341 lsm6dsv_fifo_sflp_raw_t val); 4342 int32_t lsm6dsv_fifo_sflp_batch_get(const stmdev_ctx_t *ctx, 4343 lsm6dsv_fifo_sflp_raw_t *val); 4344 4345 typedef enum 4346 { 4347 LSM6DSV_AUTO = 0x0, 4348 LSM6DSV_ALWAYS_ACTIVE = 0x1, 4349 } lsm6dsv_filt_anti_spike_t; 4350 int32_t lsm6dsv_filt_anti_spike_set(const stmdev_ctx_t *ctx, 4351 lsm6dsv_filt_anti_spike_t val); 4352 int32_t lsm6dsv_filt_anti_spike_get(const stmdev_ctx_t *ctx, 4353 lsm6dsv_filt_anti_spike_t *val); 4354 4355 typedef struct 4356 { 4357 uint8_t drdy : 1; 4358 uint8_t ois_drdy : 1; 4359 uint8_t irq_xl : 1; 4360 uint8_t irq_g : 1; 4361 } lsm6dsv_filt_settling_mask_t; 4362 int32_t lsm6dsv_filt_settling_mask_set(const stmdev_ctx_t *ctx, 4363 lsm6dsv_filt_settling_mask_t val); 4364 int32_t lsm6dsv_filt_settling_mask_get(const stmdev_ctx_t *ctx, 4365 lsm6dsv_filt_settling_mask_t *val); 4366 4367 typedef struct 4368 { 4369 uint8_t ois_drdy : 1; 4370 } lsm6dsv_filt_ois_settling_mask_t; 4371 int32_t lsm6dsv_filt_ois_settling_mask_set(const stmdev_ctx_t *ctx, 4372 lsm6dsv_filt_ois_settling_mask_t val); 4373 int32_t lsm6dsv_filt_ois_settling_mask_get(const stmdev_ctx_t *ctx, 4374 lsm6dsv_filt_ois_settling_mask_t *val); 4375 4376 typedef enum 4377 { 4378 LSM6DSV_GY_ULTRA_LIGHT = 0x0, 4379 LSM6DSV_GY_VERY_LIGHT = 0x1, 4380 LSM6DSV_GY_LIGHT = 0x2, 4381 LSM6DSV_GY_MEDIUM = 0x3, 4382 LSM6DSV_GY_STRONG = 0x4, 4383 LSM6DSV_GY_VERY_STRONG = 0x5, 4384 LSM6DSV_GY_AGGRESSIVE = 0x6, 4385 LSM6DSV_GY_XTREME = 0x7, 4386 } lsm6dsv_filt_gy_lp1_bandwidth_t; 4387 int32_t lsm6dsv_filt_gy_lp1_bandwidth_set(const stmdev_ctx_t *ctx, 4388 lsm6dsv_filt_gy_lp1_bandwidth_t val); 4389 int32_t lsm6dsv_filt_gy_lp1_bandwidth_get(const stmdev_ctx_t *ctx, 4390 lsm6dsv_filt_gy_lp1_bandwidth_t *val); 4391 4392 int32_t lsm6dsv_filt_gy_lp1_set(const stmdev_ctx_t *ctx, uint8_t val); 4393 int32_t lsm6dsv_filt_gy_lp1_get(const stmdev_ctx_t *ctx, uint8_t *val); 4394 4395 typedef enum 4396 { 4397 LSM6DSV_XL_ULTRA_LIGHT = 0x0, 4398 LSM6DSV_XL_VERY_LIGHT = 0x1, 4399 LSM6DSV_XL_LIGHT = 0x2, 4400 LSM6DSV_XL_MEDIUM = 0x3, 4401 LSM6DSV_XL_STRONG = 0x4, 4402 LSM6DSV_XL_VERY_STRONG = 0x5, 4403 LSM6DSV_XL_AGGRESSIVE = 0x6, 4404 LSM6DSV_XL_XTREME = 0x7, 4405 } lsm6dsv_filt_xl_lp2_bandwidth_t; 4406 int32_t lsm6dsv_filt_xl_lp2_bandwidth_set(const stmdev_ctx_t *ctx, 4407 lsm6dsv_filt_xl_lp2_bandwidth_t val); 4408 int32_t lsm6dsv_filt_xl_lp2_bandwidth_get(const stmdev_ctx_t *ctx, 4409 lsm6dsv_filt_xl_lp2_bandwidth_t *val); 4410 4411 int32_t lsm6dsv_filt_xl_lp2_set(const stmdev_ctx_t *ctx, uint8_t val); 4412 int32_t lsm6dsv_filt_xl_lp2_get(const stmdev_ctx_t *ctx, uint8_t *val); 4413 4414 int32_t lsm6dsv_filt_xl_hp_set(const stmdev_ctx_t *ctx, uint8_t val); 4415 int32_t lsm6dsv_filt_xl_hp_get(const stmdev_ctx_t *ctx, uint8_t *val); 4416 4417 int32_t lsm6dsv_filt_xl_fast_settling_set(const stmdev_ctx_t *ctx, uint8_t val); 4418 int32_t lsm6dsv_filt_xl_fast_settling_get(const stmdev_ctx_t *ctx, uint8_t *val); 4419 4420 typedef enum 4421 { 4422 LSM6DSV_HP_MD_NORMAL = 0x0, 4423 LSM6DSV_HP_MD_REFERENCE = 0x1, 4424 } lsm6dsv_filt_xl_hp_mode_t; 4425 int32_t lsm6dsv_filt_xl_hp_mode_set(const stmdev_ctx_t *ctx, 4426 lsm6dsv_filt_xl_hp_mode_t val); 4427 int32_t lsm6dsv_filt_xl_hp_mode_get(const stmdev_ctx_t *ctx, 4428 lsm6dsv_filt_xl_hp_mode_t *val); 4429 4430 typedef enum 4431 { 4432 LSM6DSV_WK_FEED_SLOPE = 0x0, 4433 LSM6DSV_WK_FEED_HIGH_PASS = 0x1, 4434 LSM6DSV_WK_FEED_LP_WITH_OFFSET = 0x2, 4435 } lsm6dsv_filt_wkup_act_feed_t; 4436 int32_t lsm6dsv_filt_wkup_act_feed_set(const stmdev_ctx_t *ctx, 4437 lsm6dsv_filt_wkup_act_feed_t val); 4438 int32_t lsm6dsv_filt_wkup_act_feed_get(const stmdev_ctx_t *ctx, 4439 lsm6dsv_filt_wkup_act_feed_t *val); 4440 4441 int32_t lsm6dsv_mask_trigger_xl_settl_set(const stmdev_ctx_t *ctx, uint8_t val); 4442 int32_t lsm6dsv_mask_trigger_xl_settl_get(const stmdev_ctx_t *ctx, uint8_t *val); 4443 4444 typedef enum 4445 { 4446 LSM6DSV_SIXD_FEED_ODR_DIV_2 = 0x0, 4447 LSM6DSV_SIXD_FEED_LOW_PASS = 0x1, 4448 } lsm6dsv_filt_sixd_feed_t; 4449 int32_t lsm6dsv_filt_sixd_feed_set(const stmdev_ctx_t *ctx, 4450 lsm6dsv_filt_sixd_feed_t val); 4451 int32_t lsm6dsv_filt_sixd_feed_get(const stmdev_ctx_t *ctx, 4452 lsm6dsv_filt_sixd_feed_t *val); 4453 4454 typedef enum 4455 { 4456 LSM6DSV_EIS_LP_NORMAL = 0x0, 4457 LSM6DSV_EIS_LP_LIGHT = 0x1, 4458 } lsm6dsv_filt_gy_eis_lp_bandwidth_t; 4459 int32_t lsm6dsv_filt_gy_eis_lp_bandwidth_set(const stmdev_ctx_t *ctx, 4460 lsm6dsv_filt_gy_eis_lp_bandwidth_t val); 4461 int32_t lsm6dsv_filt_gy_eis_lp_bandwidth_get(const stmdev_ctx_t *ctx, 4462 lsm6dsv_filt_gy_eis_lp_bandwidth_t *val); 4463 4464 typedef enum 4465 { 4466 LSM6DSV_OIS_GY_LP_NORMAL = 0x0, 4467 LSM6DSV_OIS_GY_LP_STRONG = 0x1, 4468 LSM6DSV_OIS_GY_LP_AGGRESSIVE = 0x2, 4469 LSM6DSV_OIS_GY_LP_LIGHT = 0x3, 4470 } lsm6dsv_filt_gy_ois_lp_bandwidth_t; 4471 int32_t lsm6dsv_filt_gy_ois_lp_bandwidth_set(const stmdev_ctx_t *ctx, 4472 lsm6dsv_filt_gy_ois_lp_bandwidth_t val); 4473 int32_t lsm6dsv_filt_gy_ois_lp_bandwidth_get(const stmdev_ctx_t *ctx, 4474 lsm6dsv_filt_gy_ois_lp_bandwidth_t *val); 4475 4476 typedef enum 4477 { 4478 LSM6DSV_OIS_XL_LP_ULTRA_LIGHT = 0x0, 4479 LSM6DSV_OIS_XL_LP_VERY_LIGHT = 0x1, 4480 LSM6DSV_OIS_XL_LP_LIGHT = 0x2, 4481 LSM6DSV_OIS_XL_LP_NORMAL = 0x3, 4482 LSM6DSV_OIS_XL_LP_STRONG = 0x4, 4483 LSM6DSV_OIS_XL_LP_VERY_STRONG = 0x5, 4484 LSM6DSV_OIS_XL_LP_AGGRESSIVE = 0x6, 4485 LSM6DSV_OIS_XL_LP_XTREME = 0x7, 4486 } lsm6dsv_filt_xl_ois_lp_bandwidth_t; 4487 int32_t lsm6dsv_filt_xl_ois_lp_bandwidth_set(const stmdev_ctx_t *ctx, 4488 lsm6dsv_filt_xl_ois_lp_bandwidth_t val); 4489 int32_t lsm6dsv_filt_xl_ois_lp_bandwidth_get(const stmdev_ctx_t *ctx, 4490 lsm6dsv_filt_xl_ois_lp_bandwidth_t *val); 4491 4492 typedef enum 4493 { 4494 LSM6DSV_PROTECT_CTRL_REGS = 0x0, 4495 LSM6DSV_WRITE_CTRL_REG = 0x1, 4496 } lsm6dsv_fsm_permission_t; 4497 int32_t lsm6dsv_fsm_permission_set(const stmdev_ctx_t *ctx, 4498 lsm6dsv_fsm_permission_t val); 4499 int32_t lsm6dsv_fsm_permission_get(const stmdev_ctx_t *ctx, 4500 lsm6dsv_fsm_permission_t *val); 4501 int32_t lsm6dsv_fsm_permission_status(const stmdev_ctx_t *ctx, uint8_t *val); 4502 4503 typedef struct 4504 { 4505 uint8_t fsm1_en : 1; 4506 uint8_t fsm2_en : 1; 4507 uint8_t fsm3_en : 1; 4508 uint8_t fsm4_en : 1; 4509 uint8_t fsm5_en : 1; 4510 uint8_t fsm6_en : 1; 4511 uint8_t fsm7_en : 1; 4512 uint8_t fsm8_en : 1; 4513 } lsm6dsv_fsm_mode_t; 4514 int32_t lsm6dsv_fsm_mode_set(const stmdev_ctx_t *ctx, lsm6dsv_fsm_mode_t val); 4515 int32_t lsm6dsv_fsm_mode_get(const stmdev_ctx_t *ctx, lsm6dsv_fsm_mode_t *val); 4516 4517 int32_t lsm6dsv_fsm_long_cnt_set(const stmdev_ctx_t *ctx, uint16_t val); 4518 int32_t lsm6dsv_fsm_long_cnt_get(const stmdev_ctx_t *ctx, uint16_t *val); 4519 4520 4521 typedef struct 4522 { 4523 uint8_t fsm_outs1; 4524 uint8_t fsm_outs2; 4525 uint8_t fsm_outs3; 4526 uint8_t fsm_outs4; 4527 uint8_t fsm_outs5; 4528 uint8_t fsm_outs6; 4529 uint8_t fsm_outs7; 4530 uint8_t fsm_outs8; 4531 } lsm6dsv_fsm_out_t; 4532 int32_t lsm6dsv_fsm_out_get(const stmdev_ctx_t *ctx, lsm6dsv_fsm_out_t *val); 4533 4534 typedef enum 4535 { 4536 LSM6DSV_FSM_15Hz = 0x0, 4537 LSM6DSV_FSM_30Hz = 0x1, 4538 LSM6DSV_FSM_60Hz = 0x2, 4539 LSM6DSV_FSM_120Hz = 0x3, 4540 LSM6DSV_FSM_240Hz = 0x4, 4541 LSM6DSV_FSM_480Hz = 0x5, 4542 LSM6DSV_FSM_960Hz = 0x6, 4543 } lsm6dsv_fsm_data_rate_t; 4544 int32_t lsm6dsv_fsm_data_rate_set(const stmdev_ctx_t *ctx, 4545 lsm6dsv_fsm_data_rate_t val); 4546 int32_t lsm6dsv_fsm_data_rate_get(const stmdev_ctx_t *ctx, 4547 lsm6dsv_fsm_data_rate_t *val); 4548 4549 int32_t lsm6dsv_fsm_ext_sens_sensitivity_set(const stmdev_ctx_t *ctx, 4550 uint16_t val); 4551 int32_t lsm6dsv_fsm_ext_sens_sensitivity_get(const stmdev_ctx_t *ctx, 4552 uint16_t *val); 4553 4554 typedef struct 4555 { 4556 uint16_t z; 4557 uint16_t y; 4558 uint16_t x; 4559 } lsm6dsv_xl_fsm_ext_sens_offset_t; 4560 int32_t lsm6dsv_fsm_ext_sens_offset_set(const stmdev_ctx_t *ctx, 4561 lsm6dsv_xl_fsm_ext_sens_offset_t val); 4562 int32_t lsm6dsv_fsm_ext_sens_offset_get(const stmdev_ctx_t *ctx, 4563 lsm6dsv_xl_fsm_ext_sens_offset_t *val); 4564 4565 typedef struct 4566 { 4567 uint16_t xx; 4568 uint16_t xy; 4569 uint16_t xz; 4570 uint16_t yy; 4571 uint16_t yz; 4572 uint16_t zz; 4573 } lsm6dsv_xl_fsm_ext_sens_matrix_t; 4574 int32_t lsm6dsv_fsm_ext_sens_matrix_set(const stmdev_ctx_t *ctx, 4575 lsm6dsv_xl_fsm_ext_sens_matrix_t val); 4576 int32_t lsm6dsv_fsm_ext_sens_matrix_get(const stmdev_ctx_t *ctx, 4577 lsm6dsv_xl_fsm_ext_sens_matrix_t *val); 4578 4579 typedef enum 4580 { 4581 LSM6DSV_Z_EQ_Y = 0x0, 4582 LSM6DSV_Z_EQ_MIN_Y = 0x1, 4583 LSM6DSV_Z_EQ_X = 0x2, 4584 LSM6DSV_Z_EQ_MIN_X = 0x3, 4585 LSM6DSV_Z_EQ_MIN_Z = 0x4, 4586 LSM6DSV_Z_EQ_Z = 0x5, 4587 } lsm6dsv_fsm_ext_sens_z_orient_t; 4588 int32_t lsm6dsv_fsm_ext_sens_z_orient_set(const stmdev_ctx_t *ctx, 4589 lsm6dsv_fsm_ext_sens_z_orient_t val); 4590 int32_t lsm6dsv_fsm_ext_sens_z_orient_get(const stmdev_ctx_t *ctx, 4591 lsm6dsv_fsm_ext_sens_z_orient_t *val); 4592 4593 typedef enum 4594 { 4595 LSM6DSV_Y_EQ_Y = 0x0, 4596 LSM6DSV_Y_EQ_MIN_Y = 0x1, 4597 LSM6DSV_Y_EQ_X = 0x2, 4598 LSM6DSV_Y_EQ_MIN_X = 0x3, 4599 LSM6DSV_Y_EQ_MIN_Z = 0x4, 4600 LSM6DSV_Y_EQ_Z = 0x5, 4601 } lsm6dsv_fsm_ext_sens_y_orient_t; 4602 int32_t lsm6dsv_fsm_ext_sens_y_orient_set(const stmdev_ctx_t *ctx, 4603 lsm6dsv_fsm_ext_sens_y_orient_t val); 4604 int32_t lsm6dsv_fsm_ext_sens_y_orient_get(const stmdev_ctx_t *ctx, 4605 lsm6dsv_fsm_ext_sens_y_orient_t *val); 4606 4607 typedef enum 4608 { 4609 LSM6DSV_X_EQ_Y = 0x0, 4610 LSM6DSV_X_EQ_MIN_Y = 0x1, 4611 LSM6DSV_X_EQ_X = 0x2, 4612 LSM6DSV_X_EQ_MIN_X = 0x3, 4613 LSM6DSV_X_EQ_MIN_Z = 0x4, 4614 LSM6DSV_X_EQ_Z = 0x5, 4615 } lsm6dsv_fsm_ext_sens_x_orient_t; 4616 int32_t lsm6dsv_fsm_ext_sens_x_orient_set(const stmdev_ctx_t *ctx, 4617 lsm6dsv_fsm_ext_sens_x_orient_t val); 4618 int32_t lsm6dsv_fsm_ext_sens_x_orient_get(const stmdev_ctx_t *ctx, 4619 lsm6dsv_fsm_ext_sens_x_orient_t *val); 4620 4621 int32_t lsm6dsv_fsm_long_cnt_timeout_set(const stmdev_ctx_t *ctx, uint16_t val); 4622 int32_t lsm6dsv_fsm_long_cnt_timeout_get(const stmdev_ctx_t *ctx, uint16_t *val); 4623 4624 int32_t lsm6dsv_fsm_number_of_programs_set(const stmdev_ctx_t *ctx, uint8_t val); 4625 int32_t lsm6dsv_fsm_number_of_programs_get(const stmdev_ctx_t *ctx, uint8_t *val); 4626 4627 int32_t lsm6dsv_fsm_start_address_set(const stmdev_ctx_t *ctx, uint16_t val); 4628 int32_t lsm6dsv_fsm_start_address_get(const stmdev_ctx_t *ctx, uint16_t *val); 4629 4630 int32_t lsm6dsv_ff_time_windows_set(const stmdev_ctx_t *ctx, uint8_t val); 4631 int32_t lsm6dsv_ff_time_windows_get(const stmdev_ctx_t *ctx, uint8_t *val); 4632 4633 typedef enum 4634 { 4635 LSM6DSV_156_mg = 0x0, 4636 LSM6DSV_219_mg = 0x1, 4637 LSM6DSV_250_mg = 0x2, 4638 LSM6DSV_312_mg = 0x3, 4639 LSM6DSV_344_mg = 0x4, 4640 LSM6DSV_406_mg = 0x5, 4641 LSM6DSV_469_mg = 0x6, 4642 LSM6DSV_500_mg = 0x7, 4643 } lsm6dsv_ff_thresholds_t; 4644 int32_t lsm6dsv_ff_thresholds_set(const stmdev_ctx_t *ctx, 4645 lsm6dsv_ff_thresholds_t val); 4646 int32_t lsm6dsv_ff_thresholds_get(const stmdev_ctx_t *ctx, 4647 lsm6dsv_ff_thresholds_t *val); 4648 4649 typedef enum 4650 { 4651 LSM6DSV_OIS_CTRL_FROM_OIS = 0x0, 4652 LSM6DSV_OIS_CTRL_FROM_UI = 0x1, 4653 } lsm6dsv_ois_ctrl_mode_t; 4654 int32_t lsm6dsv_ois_ctrl_mode_set(const stmdev_ctx_t *ctx, 4655 lsm6dsv_ois_ctrl_mode_t val); 4656 int32_t lsm6dsv_ois_ctrl_mode_get(const stmdev_ctx_t *ctx, 4657 lsm6dsv_ois_ctrl_mode_t *val); 4658 4659 int32_t lsm6dsv_ois_reset_set(const stmdev_ctx_t *ctx, int8_t val); 4660 int32_t lsm6dsv_ois_reset_get(const stmdev_ctx_t *ctx, int8_t *val); 4661 4662 int32_t lsm6dsv_ois_interface_pull_up_set(const stmdev_ctx_t *ctx, uint8_t val); 4663 int32_t lsm6dsv_ois_interface_pull_up_get(const stmdev_ctx_t *ctx, uint8_t *val); 4664 4665 typedef struct 4666 { 4667 uint8_t ack : 1; 4668 uint8_t req : 1; 4669 } lsm6dsv_ois_handshake_t; 4670 int32_t lsm6dsv_ois_handshake_from_ui_set(const stmdev_ctx_t *ctx, 4671 lsm6dsv_ois_handshake_t val); 4672 int32_t lsm6dsv_ois_handshake_from_ui_get(const stmdev_ctx_t *ctx, 4673 lsm6dsv_ois_handshake_t *val); 4674 int32_t lsm6dsv_ois_handshake_from_ois_set(const stmdev_ctx_t *ctx, 4675 lsm6dsv_ois_handshake_t val); 4676 int32_t lsm6dsv_ois_handshake_from_ois_get(const stmdev_ctx_t *ctx, 4677 lsm6dsv_ois_handshake_t *val); 4678 4679 int32_t lsm6dsv_ois_shared_set(const stmdev_ctx_t *ctx, uint8_t val[6]); 4680 int32_t lsm6dsv_ois_shared_get(const stmdev_ctx_t *ctx, uint8_t val[6]); 4681 4682 int32_t lsm6dsv_ois_on_spi2_set(const stmdev_ctx_t *ctx, uint8_t val); 4683 int32_t lsm6dsv_ois_on_spi2_get(const stmdev_ctx_t *ctx, uint8_t *val); 4684 4685 typedef struct 4686 { 4687 uint8_t gy : 1; 4688 uint8_t xl : 1; 4689 } lsm6dsv_ois_chain_t; 4690 int32_t lsm6dsv_ois_chain_set(const stmdev_ctx_t *ctx, lsm6dsv_ois_chain_t val); 4691 int32_t lsm6dsv_ois_chain_get(const stmdev_ctx_t *ctx, 4692 lsm6dsv_ois_chain_t *val); 4693 4694 typedef enum 4695 { 4696 LSM6DSV_OIS_125dps = 0x0, 4697 LSM6DSV_OIS_250dps = 0x1, 4698 LSM6DSV_OIS_500dps = 0x2, 4699 LSM6DSV_OIS_1000dps = 0x3, 4700 LSM6DSV_OIS_2000dps = 0x4, 4701 } lsm6dsv_ois_gy_full_scale_t; 4702 int32_t lsm6dsv_ois_gy_full_scale_set(const stmdev_ctx_t *ctx, 4703 lsm6dsv_ois_gy_full_scale_t val); 4704 int32_t lsm6dsv_ois_gy_full_scale_get(const stmdev_ctx_t *ctx, 4705 lsm6dsv_ois_gy_full_scale_t *val); 4706 4707 typedef enum 4708 { 4709 LSM6DSV_OIS_2g = 0x0, 4710 LSM6DSV_OIS_4g = 0x1, 4711 LSM6DSV_OIS_8g = 0x2, 4712 LSM6DSV_OIS_16g = 0x3, 4713 } lsm6dsv_ois_xl_full_scale_t; 4714 int32_t lsm6dsv_ois_xl_full_scale_set(const stmdev_ctx_t *ctx, 4715 lsm6dsv_ois_xl_full_scale_t val); 4716 int32_t lsm6dsv_ois_xl_full_scale_get(const stmdev_ctx_t *ctx, 4717 lsm6dsv_ois_xl_full_scale_t *val); 4718 4719 typedef enum 4720 { 4721 LSM6DSV_DEG_80 = 0x0, 4722 LSM6DSV_DEG_70 = 0x1, 4723 LSM6DSV_DEG_60 = 0x2, 4724 LSM6DSV_DEG_50 = 0x3, 4725 } lsm6dsv_6d_threshold_t; 4726 int32_t lsm6dsv_6d_threshold_set(const stmdev_ctx_t *ctx, 4727 lsm6dsv_6d_threshold_t val); 4728 int32_t lsm6dsv_6d_threshold_get(const stmdev_ctx_t *ctx, 4729 lsm6dsv_6d_threshold_t *val); 4730 4731 int32_t lsm6dsv_4d_mode_set(const stmdev_ctx_t *ctx, uint8_t val); 4732 int32_t lsm6dsv_4d_mode_get(const stmdev_ctx_t *ctx, uint8_t *val); 4733 4734 typedef enum 4735 { 4736 LSM6DSV_SW_RST_DYN_ADDRESS_RST = 0x0, 4737 LSM6DSV_I3C_GLOBAL_RST = 0x1, 4738 } lsm6dsv_i3c_reset_mode_t; 4739 int32_t lsm6dsv_i3c_reset_mode_set(const stmdev_ctx_t *ctx, 4740 lsm6dsv_i3c_reset_mode_t val); 4741 int32_t lsm6dsv_i3c_reset_mode_get(const stmdev_ctx_t *ctx, 4742 lsm6dsv_i3c_reset_mode_t *val); 4743 4744 int32_t lsm6dsv_i3c_int_en_set(const stmdev_ctx_t *ctx, uint8_t val); 4745 int32_t lsm6dsv_i3c_int_en_get(const stmdev_ctx_t *ctx, uint8_t *val); 4746 4747 typedef enum 4748 { 4749 LSM6DSV_IBI_2us = 0x0, 4750 LSM6DSV_IBI_50us = 0x1, 4751 LSM6DSV_IBI_1ms = 0x2, 4752 LSM6DSV_IBI_25ms = 0x3, 4753 } lsm6dsv_i3c_ibi_time_t; 4754 int32_t lsm6dsv_i3c_ibi_time_set(const stmdev_ctx_t *ctx, 4755 lsm6dsv_i3c_ibi_time_t val); 4756 int32_t lsm6dsv_i3c_ibi_time_get(const stmdev_ctx_t *ctx, 4757 lsm6dsv_i3c_ibi_time_t *val); 4758 4759 int32_t lsm6dsv_sh_master_interface_pull_up_set(const stmdev_ctx_t *ctx, 4760 uint8_t val); 4761 int32_t lsm6dsv_sh_master_interface_pull_up_get(const stmdev_ctx_t *ctx, 4762 uint8_t *val); 4763 4764 int32_t lsm6dsv_sh_read_data_raw_get(const stmdev_ctx_t *ctx, uint8_t *val, 4765 uint8_t len); 4766 4767 typedef enum 4768 { 4769 LSM6DSV_SLV_0 = 0x0, 4770 LSM6DSV_SLV_0_1 = 0x1, 4771 LSM6DSV_SLV_0_1_2 = 0x2, 4772 LSM6DSV_SLV_0_1_2_3 = 0x3, 4773 } lsm6dsv_sh_slave_connected_t; 4774 int32_t lsm6dsv_sh_slave_connected_set(const stmdev_ctx_t *ctx, 4775 lsm6dsv_sh_slave_connected_t val); 4776 int32_t lsm6dsv_sh_slave_connected_get(const stmdev_ctx_t *ctx, 4777 lsm6dsv_sh_slave_connected_t *val); 4778 4779 int32_t lsm6dsv_sh_master_set(const stmdev_ctx_t *ctx, uint8_t val); 4780 int32_t lsm6dsv_sh_master_get(const stmdev_ctx_t *ctx, uint8_t *val); 4781 4782 int32_t lsm6dsv_sh_pass_through_set(const stmdev_ctx_t *ctx, uint8_t val); 4783 int32_t lsm6dsv_sh_pass_through_get(const stmdev_ctx_t *ctx, uint8_t *val); 4784 4785 typedef enum 4786 { 4787 LSM6DSV_SH_TRG_XL_GY_DRDY = 0x0, 4788 LSM6DSV_SH_TRIG_INT2 = 0x1, 4789 } lsm6dsv_sh_syncro_mode_t; 4790 int32_t lsm6dsv_sh_syncro_mode_set(const stmdev_ctx_t *ctx, 4791 lsm6dsv_sh_syncro_mode_t val); 4792 int32_t lsm6dsv_sh_syncro_mode_get(const stmdev_ctx_t *ctx, 4793 lsm6dsv_sh_syncro_mode_t *val); 4794 4795 typedef enum 4796 { 4797 LSM6DSV_EACH_SH_CYCLE = 0x0, 4798 LSM6DSV_ONLY_FIRST_CYCLE = 0x1, 4799 } lsm6dsv_sh_write_mode_t; 4800 int32_t lsm6dsv_sh_write_mode_set(const stmdev_ctx_t *ctx, 4801 lsm6dsv_sh_write_mode_t val); 4802 int32_t lsm6dsv_sh_write_mode_get(const stmdev_ctx_t *ctx, 4803 lsm6dsv_sh_write_mode_t *val); 4804 4805 int32_t lsm6dsv_sh_reset_set(const stmdev_ctx_t *ctx, uint8_t val); 4806 int32_t lsm6dsv_sh_reset_get(const stmdev_ctx_t *ctx, uint8_t *val); 4807 4808 typedef struct 4809 { 4810 uint8_t slv0_add; 4811 uint8_t slv0_subadd; 4812 uint8_t slv0_data; 4813 } lsm6dsv_sh_cfg_write_t; 4814 int32_t lsm6dsv_sh_cfg_write(const stmdev_ctx_t *ctx, 4815 lsm6dsv_sh_cfg_write_t *val); 4816 typedef enum 4817 { 4818 LSM6DSV_SH_15Hz = 0x1, 4819 LSM6DSV_SH_30Hz = 0x2, 4820 LSM6DSV_SH_60Hz = 0x3, 4821 LSM6DSV_SH_120Hz = 0x4, 4822 LSM6DSV_SH_240Hz = 0x5, 4823 LSM6DSV_SH_480Hz = 0x6, 4824 } lsm6dsv_sh_data_rate_t; 4825 int32_t lsm6dsv_sh_data_rate_set(const stmdev_ctx_t *ctx, 4826 lsm6dsv_sh_data_rate_t val); 4827 int32_t lsm6dsv_sh_data_rate_get(const stmdev_ctx_t *ctx, 4828 lsm6dsv_sh_data_rate_t *val); 4829 4830 typedef struct 4831 { 4832 uint8_t slv_add; 4833 uint8_t slv_subadd; 4834 uint8_t slv_len; 4835 } lsm6dsv_sh_cfg_read_t; 4836 int32_t lsm6dsv_sh_slv_cfg_read(const stmdev_ctx_t *ctx, uint8_t idx, 4837 lsm6dsv_sh_cfg_read_t *val); 4838 4839 int32_t lsm6dsv_sh_status_get(const stmdev_ctx_t *ctx, 4840 lsm6dsv_status_master_t *val); 4841 4842 int32_t lsm6dsv_ui_sdo_pull_up_set(const stmdev_ctx_t *ctx, uint8_t val); 4843 int32_t lsm6dsv_ui_sdo_pull_up_get(const stmdev_ctx_t *ctx, uint8_t *val); 4844 4845 typedef enum 4846 { 4847 LSM6DSV_I2C_I3C_ENABLE = 0x0, 4848 LSM6DSV_I2C_I3C_DISABLE = 0x1, 4849 } lsm6dsv_ui_i2c_i3c_mode_t; 4850 int32_t lsm6dsv_ui_i2c_i3c_mode_set(const stmdev_ctx_t *ctx, 4851 lsm6dsv_ui_i2c_i3c_mode_t val); 4852 int32_t lsm6dsv_ui_i2c_i3c_mode_get(const stmdev_ctx_t *ctx, 4853 lsm6dsv_ui_i2c_i3c_mode_t *val); 4854 4855 typedef enum 4856 { 4857 LSM6DSV_SPI_4_WIRE = 0x0, 4858 LSM6DSV_SPI_3_WIRE = 0x1, 4859 } lsm6dsv_spi_mode_t; 4860 int32_t lsm6dsv_spi_mode_set(const stmdev_ctx_t *ctx, lsm6dsv_spi_mode_t val); 4861 int32_t lsm6dsv_spi_mode_get(const stmdev_ctx_t *ctx, lsm6dsv_spi_mode_t *val); 4862 4863 int32_t lsm6dsv_ui_sda_pull_up_set(const stmdev_ctx_t *ctx, uint8_t val); 4864 int32_t lsm6dsv_ui_sda_pull_up_get(const stmdev_ctx_t *ctx, uint8_t *val); 4865 4866 typedef enum 4867 { 4868 LSM6DSV_SPI2_4_WIRE = 0x0, 4869 LSM6DSV_SPI2_3_WIRE = 0x1, 4870 } lsm6dsv_spi2_mode_t; 4871 int32_t lsm6dsv_spi2_mode_set(const stmdev_ctx_t *ctx, lsm6dsv_spi2_mode_t val); 4872 int32_t lsm6dsv_spi2_mode_get(const stmdev_ctx_t *ctx, 4873 lsm6dsv_spi2_mode_t *val); 4874 4875 int32_t lsm6dsv_sigmot_mode_set(const stmdev_ctx_t *ctx, uint8_t val); 4876 int32_t lsm6dsv_sigmot_mode_get(const stmdev_ctx_t *ctx, uint8_t *val); 4877 4878 typedef struct 4879 { 4880 uint8_t step_counter_enable : 1; 4881 } lsm6dsv_stpcnt_mode_t; 4882 int32_t lsm6dsv_stpcnt_mode_set(const stmdev_ctx_t *ctx, 4883 lsm6dsv_stpcnt_mode_t val); 4884 int32_t lsm6dsv_stpcnt_mode_get(const stmdev_ctx_t *ctx, 4885 lsm6dsv_stpcnt_mode_t *val); 4886 4887 int32_t lsm6dsv_stpcnt_steps_get(const stmdev_ctx_t *ctx, uint16_t *val); 4888 4889 int32_t lsm6dsv_stpcnt_rst_step_set(const stmdev_ctx_t *ctx, uint8_t val); 4890 int32_t lsm6dsv_stpcnt_rst_step_get(const stmdev_ctx_t *ctx, uint8_t *val); 4891 4892 int32_t lsm6dsv_stpcnt_debounce_set(const stmdev_ctx_t *ctx, uint8_t val); 4893 int32_t lsm6dsv_stpcnt_debounce_get(const stmdev_ctx_t *ctx, uint8_t *val); 4894 4895 int32_t lsm6dsv_stpcnt_period_set(const stmdev_ctx_t *ctx, uint16_t val); 4896 int32_t lsm6dsv_stpcnt_period_get(const stmdev_ctx_t *ctx, uint16_t *val); 4897 4898 int32_t lsm6dsv_sflp_game_rotation_set(const stmdev_ctx_t *ctx, uint8_t val); 4899 int32_t lsm6dsv_sflp_game_rotation_get(const stmdev_ctx_t *ctx, uint8_t *val); 4900 4901 typedef struct 4902 { 4903 float_t gbias_x; /* dps */ 4904 float_t gbias_y; /* dps */ 4905 float_t gbias_z; /* dps */ 4906 } lsm6dsv_sflp_gbias_t; 4907 int32_t lsm6dsv_sflp_game_gbias_set(const stmdev_ctx_t *ctx, 4908 lsm6dsv_sflp_gbias_t *val); 4909 4910 typedef enum 4911 { 4912 LSM6DSV_SFLP_15Hz = 0x0, 4913 LSM6DSV_SFLP_30Hz = 0x1, 4914 LSM6DSV_SFLP_60Hz = 0x2, 4915 LSM6DSV_SFLP_120Hz = 0x3, 4916 LSM6DSV_SFLP_240Hz = 0x4, 4917 LSM6DSV_SFLP_480Hz = 0x5, 4918 } lsm6dsv_sflp_data_rate_t; 4919 int32_t lsm6dsv_sflp_data_rate_set(const stmdev_ctx_t *ctx, 4920 lsm6dsv_sflp_data_rate_t val); 4921 int32_t lsm6dsv_sflp_data_rate_get(const stmdev_ctx_t *ctx, 4922 lsm6dsv_sflp_data_rate_t *val); 4923 4924 typedef struct 4925 { 4926 uint8_t tap_x_en : 1; 4927 uint8_t tap_y_en : 1; 4928 uint8_t tap_z_en : 1; 4929 } lsm6dsv_tap_detection_t; 4930 int32_t lsm6dsv_tap_detection_set(const stmdev_ctx_t *ctx, 4931 lsm6dsv_tap_detection_t val); 4932 int32_t lsm6dsv_tap_detection_get(const stmdev_ctx_t *ctx, 4933 lsm6dsv_tap_detection_t *val); 4934 4935 typedef struct 4936 { 4937 uint8_t x : 5; 4938 uint8_t y : 5; 4939 uint8_t z : 5; 4940 } lsm6dsv_tap_thresholds_t; 4941 int32_t lsm6dsv_tap_thresholds_set(const stmdev_ctx_t *ctx, 4942 lsm6dsv_tap_thresholds_t val); 4943 int32_t lsm6dsv_tap_thresholds_get(const stmdev_ctx_t *ctx, 4944 lsm6dsv_tap_thresholds_t *val); 4945 4946 typedef enum 4947 { 4948 LSM6DSV_XYZ = 0x0, 4949 LSM6DSV_YXZ = 0x1, 4950 LSM6DSV_XZY = 0x2, 4951 LSM6DSV_ZYX = 0x3, 4952 LSM6DSV_YZX = 0x5, 4953 LSM6DSV_ZXY = 0x6, 4954 } lsm6dsv_tap_axis_priority_t; 4955 int32_t lsm6dsv_tap_axis_priority_set(const stmdev_ctx_t *ctx, 4956 lsm6dsv_tap_axis_priority_t val); 4957 int32_t lsm6dsv_tap_axis_priority_get(const stmdev_ctx_t *ctx, 4958 lsm6dsv_tap_axis_priority_t *val); 4959 4960 typedef struct 4961 { 4962 uint8_t shock : 2; 4963 uint8_t quiet : 2; 4964 uint8_t tap_gap : 4; 4965 } lsm6dsv_tap_time_windows_t; 4966 int32_t lsm6dsv_tap_time_windows_set(const stmdev_ctx_t *ctx, 4967 lsm6dsv_tap_time_windows_t val); 4968 int32_t lsm6dsv_tap_time_windows_get(const stmdev_ctx_t *ctx, 4969 lsm6dsv_tap_time_windows_t *val); 4970 4971 typedef enum 4972 { 4973 LSM6DSV_ONLY_SINGLE = 0x0, 4974 LSM6DSV_BOTH_SINGLE_DOUBLE = 0x1, 4975 } lsm6dsv_tap_mode_t; 4976 int32_t lsm6dsv_tap_mode_set(const stmdev_ctx_t *ctx, lsm6dsv_tap_mode_t val); 4977 int32_t lsm6dsv_tap_mode_get(const stmdev_ctx_t *ctx, lsm6dsv_tap_mode_t *val); 4978 4979 int32_t lsm6dsv_tilt_mode_set(const stmdev_ctx_t *ctx, uint8_t val); 4980 int32_t lsm6dsv_tilt_mode_get(const stmdev_ctx_t *ctx, uint8_t *val); 4981 4982 int32_t lsm6dsv_timestamp_raw_get(const stmdev_ctx_t *ctx, uint32_t *val); 4983 4984 int32_t lsm6dsv_timestamp_set(const stmdev_ctx_t *ctx, uint8_t val); 4985 int32_t lsm6dsv_timestamp_get(const stmdev_ctx_t *ctx, uint8_t *val); 4986 4987 typedef enum 4988 { 4989 LSM6DSV_XL_AND_GY_NOT_AFFECTED = 0x0, 4990 LSM6DSV_XL_LOW_POWER_GY_NOT_AFFECTED = 0x1, 4991 LSM6DSV_XL_LOW_POWER_GY_SLEEP = 0x2, 4992 LSM6DSV_XL_LOW_POWER_GY_POWER_DOWN = 0x3, 4993 } lsm6dsv_act_mode_t; 4994 int32_t lsm6dsv_act_mode_set(const stmdev_ctx_t *ctx, lsm6dsv_act_mode_t val); 4995 int32_t lsm6dsv_act_mode_get(const stmdev_ctx_t *ctx, lsm6dsv_act_mode_t *val); 4996 4997 typedef enum 4998 { 4999 LSM6DSV_SLEEP_TO_ACT_AT_1ST_SAMPLE = 0x0, 5000 LSM6DSV_SLEEP_TO_ACT_AT_2ND_SAMPLE = 0x1, 5001 LSM6DSV_SLEEP_TO_ACT_AT_3RD_SAMPLE = 0x2, 5002 LSM6DSV_SLEEP_TO_ACT_AT_4th_SAMPLE = 0x3, 5003 } lsm6dsv_act_from_sleep_to_act_dur_t; 5004 int32_t lsm6dsv_act_from_sleep_to_act_dur_set(const stmdev_ctx_t *ctx, 5005 lsm6dsv_act_from_sleep_to_act_dur_t val); 5006 int32_t lsm6dsv_act_from_sleep_to_act_dur_get(const stmdev_ctx_t *ctx, 5007 lsm6dsv_act_from_sleep_to_act_dur_t *val); 5008 5009 typedef enum 5010 { 5011 LSM6DSV_1Hz875 = 0x0, 5012 LSM6DSV_15Hz = 0x1, 5013 LSM6DSV_30Hz = 0x2, 5014 LSM6DSV_60Hz = 0x3, 5015 } lsm6dsv_act_sleep_xl_odr_t; 5016 int32_t lsm6dsv_act_sleep_xl_odr_set(const stmdev_ctx_t *ctx, 5017 lsm6dsv_act_sleep_xl_odr_t val); 5018 int32_t lsm6dsv_act_sleep_xl_odr_get(const stmdev_ctx_t *ctx, 5019 lsm6dsv_act_sleep_xl_odr_t *val); 5020 5021 typedef struct 5022 { 5023 lsm6dsv_inactivity_dur_t inactivity_cfg; 5024 uint8_t inactivity_ths; 5025 uint8_t threshold; 5026 uint8_t duration; 5027 } lsm6dsv_act_thresholds_t; 5028 int32_t lsm6dsv_act_thresholds_set(const stmdev_ctx_t *ctx, 5029 lsm6dsv_act_thresholds_t *val); 5030 int32_t lsm6dsv_act_thresholds_get(const stmdev_ctx_t *ctx, 5031 lsm6dsv_act_thresholds_t *val); 5032 5033 typedef struct 5034 { 5035 uint8_t shock : 2; 5036 uint8_t quiet : 4; 5037 } lsm6dsv_act_wkup_time_windows_t; 5038 int32_t lsm6dsv_act_wkup_time_windows_set(const stmdev_ctx_t *ctx, 5039 lsm6dsv_act_wkup_time_windows_t val); 5040 int32_t lsm6dsv_act_wkup_time_windows_get(const stmdev_ctx_t *ctx, 5041 lsm6dsv_act_wkup_time_windows_t *val); 5042 5043 /** 5044 * @} 5045 * 5046 */ 5047 5048 #ifdef __cplusplus 5049 } 5050 #endif 5051 5052 #endif /*LSM6DSV_DRIVER_H */ 5053 5054 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 5055