9#if defined(ICM_20948_USE_DMP)
11#if defined(ARDUINO_ARCH_MBED)
12const uint8_t dmp3_image[] = {
13#elif (defined(__AVR__) || defined(__arm__) || defined(__ARDUINO_ARC__) || defined(ESP8266)) && !defined(__linux__)
14#define ICM_20948_USE_PROGMEM_FOR_DMP
15#include <avr/pgmspace.h>
16const uint8_t dmp3_image[] PROGMEM = {
18const uint8_t dmp3_image[] = {
28 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 13, 12
32 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8
40 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10};
174 addr = (((Rw) ? 0x80 : 0x00) | addr);
197 bool txn_failed =
false;
221 uint32_t max_cycles = 1000;
223 bool peripheral4Done =
false;
224 while (!peripheral4Done)
229 peripheral4Done = (i2c_mst_status.I2C_PERIPH4_DONE );
230 peripheral4Done |= (count >= max_cycles);
234 txn_failed |= (count >= max_cycles);
277 bank = (bank << 4) & 0x30;
400 uint8_t whoami = 0x00;
830 uint8_t div1 = (smplrt.
a >> 8);
831 uint8_t div2 = (smplrt.
a & 0xFF);
838 uint8_t div = (smplrt.
g);
955ICM_20948_Status_e ICM_20948_i2c_controller_configure_peripheral(
ICM_20948_Device_t *pdev, uint8_t peripheral, uint8_t addr, uint8_t reg, uint8_t len,
bool Rw,
bool enable,
bool data_only,
bool grp,
bool swap, uint8_t dataOut)
959 uint8_t periph_addr_reg;
960 uint8_t periph_reg_reg;
961 uint8_t periph_ctrl_reg;
962 uint8_t periph_do_reg;
1021 dataOutByte.
DO = dataOut;
1031 subaddress.
REG = reg;
1063 const uint8_t numbytes = 14 + 9;
1064 uint8_t buff[numbytes];
1070 pagmt->
acc.
axes.
x = ((buff[0] << 8) | (buff[1] & 0xFF));
1071 pagmt->
acc.
axes.
y = ((buff[2] << 8) | (buff[3] & 0xFF));
1072 pagmt->
acc.
axes.
z = ((buff[4] << 8) | (buff[5] & 0xFF));
1074 pagmt->
gyr.
axes.
x = ((buff[6] << 8) | (buff[7] & 0xFF));
1075 pagmt->
gyr.
axes.
y = ((buff[8] << 8) | (buff[9] & 0xFF));
1076 pagmt->
gyr.
axes.
z = ((buff[10] << 8) | (buff[11] & 0xFF));
1078 pagmt->
tmp.
val = ((buff[12] << 8) | (buff[13] & 0xFF));
1081 pagmt->
mag.
axes.
x = ((buff[16] << 8) | (buff[15] & 0xFF));
1082 pagmt->
mag.
axes.
y = ((buff[18] << 8) | (buff[17] & 0xFF));
1083 pagmt->
mag.
axes.
z = ((buff[20] << 8) | (buff[19] & 0xFF));
1313#if defined(ICM_20948_USE_DMP)
1330 unsigned short memaddr;
1331 const unsigned char *data;
1332 unsigned short size;
1358 memaddr = load_addr;
1359 #ifdef ICM_20948_USE_PROGMEM_FOR_DMP
1369 if ((memaddr & 0xff) + write_size > 0x100)
1372 write_size = (memaddr & 0xff) + write_size - 0x100;
1374#ifdef ICM_20948_USE_PROGMEM_FOR_DMP
1375 memcpy_P(data_not_pg, data, write_size);
1384 memaddr += write_size;
1391 memaddr = load_addr;
1399 if ((memaddr & 0xff) + write_size > 0x100)
1402 write_size = (memaddr & 0xff) + write_size - 0x100;
1407#ifdef ICM_20948_USE_PROGMEM_FOR_DMP
1408 memcpy_P(data_not_pg, data, write_size);
1409 if (
memcmp(data_cmp, data_not_pg, write_size))
1411 if (
memcmp(data_cmp, data, write_size))
1416 memaddr += write_size;
1440 unsigned char start_address[2];
1442 start_address[0] = (
unsigned char)(address >> 8);
1443 start_address[1] = (
unsigned char)(address & 0xff);
1479 unsigned int bytesWritten = 0;
1480 unsigned int thisLen;
1481 unsigned char lBankSelected;
1482 unsigned char lStartAddrSelected;
1495 lBankSelected = (reg >> 8);
1507 while (bytesWritten < length)
1509 lStartAddrSelected = (reg & 0xff);
1523 thisLen = length - bytesWritten;
1535 bytesWritten += thisLen;
1552 unsigned int bytesRead = 0;
1553 unsigned int thisLen;
1554 unsigned char lBankSelected;
1555 unsigned char lStartAddrSelected;
1568 lBankSelected = (reg >> 8);
1580 while (bytesRead < length)
1582 lStartAddrSelected = (reg & 0xff);
1596 thisLen = length - bytesRead;
1608 bytesRead += thisLen;
1633 unsigned char odr_reg_val[2];
1634 odr_reg_val[0] = (
unsigned char)(interval >> 8);
1635 odr_reg_val[1] = (
unsigned char)(interval & 0xff);
1637 unsigned char odr_count_zero[2] = {0x00, 0x00};
1728 if (result2 > result)
1738 uint16_t inv_event_control = 0;
1739 uint16_t data_rdy_status = 0;
1751 if (delta == 0xFFFF)
1755 unsigned long androidSensorAsBitMask;
1756 if (androidSensor < 32)
1758 androidSensorAsBitMask = 1L << androidSensor;
1770 androidSensorAsBitMask = 1L << (androidSensor - 32);
1783 for (
int i = 0; i < 32; i++)
1785 androidSensorAsBitMask = 1L << i;
1826 uint16_t delta2 = 0;
1842 unsigned char data_output_control_reg[2];
1843 data_output_control_reg[0] = (
unsigned char)(delta >> 8);
1844 data_output_control_reg[1] = (
unsigned char)(delta & 0xff);
1853 data_output_control_reg[0] = (
unsigned char)(delta2 >> 8);
1854 data_output_control_reg[1] = (
unsigned char)(delta2 & 0xff);
1863 data_output_control_reg[0] = (
unsigned char)(data_rdy_status >> 8);
1864 data_output_control_reg[1] = (
unsigned char)(data_rdy_status & 0xff);
1887 data_output_control_reg[0] = (
unsigned char)(inv_event_control >> 8);
1888 data_output_control_reg[1] = (
unsigned char)(inv_event_control & 0xff);
1917 if (delta == 0xFFFF)
1921 unsigned long androidSensorAsBitMask;
1922 if (androidSensor < 32)
1924 androidSensorAsBitMask = 1L << androidSensor;
1936 androidSensorAsBitMask = 1L << (androidSensor - 32);
1949 for (
int i = 0; i < 32; i++)
1951 androidSensorAsBitMask = 1L << i;
1974 unsigned char data_intr_ctl[2];
1976 data_intr_ctl[0] = (
unsigned char)(delta >> 8);
1977 data_intr_ctl[1] = (
unsigned char)(delta & 0xff);
1999 uint16_t fifo_count;
2009 uint16_t aShort = 0;
2015 aShort |= ((uint16_t)fifoBytes[i]) << (8 - (i * 8));
2039 aShort |= ((uint16_t)fifoBytes[i]) << (8 - (i * 8));
2120 data->
ALS[i] = fifoBytes[i];
2286 aWord |= ((uint32_t)fifoBytes[i]) << (24 - (i * 8));
2310 aShort |= ((uint16_t)fifoBytes[i]) << (8 - (i * 8));
2332 aShort |= ((uint16_t)fifoBytes[i]) << (8 - (i * 8));
2354 aShort |= ((uint16_t)fifoBytes[i]) << (8 - (i * 8));
2402 aShort |= ((uint16_t)fifoBytes[i]) << (8 - (i * 8));
2463 aShort |= ((uint16_t)fifoBytes[i]) << (8 - (i * 8));
2597 unsigned long long const MagicConstant = 264446880937391LL;
2598 unsigned long long const MagicConstantScale = 100000LL;
2599 unsigned long long ResultLL;
2603 ResultLL = (MagicConstant * (
long long)(1ULL << gyro_level) * (1 + div) / (1270 - (pll & 0x7F)) / MagicConstantScale);
2607 ResultLL = (MagicConstant * (
long long)(1ULL << gyro_level) * (1 + div) / (1270 + pll) / MagicConstantScale);
2614 if (ResultLL > 0x7FFFFFFF)
2615 gyro_sf = 0x7FFFFFFF;
2617 gyro_sf = (long)ResultLL;
2622 unsigned char gyro_sf_reg[4];
2623 gyro_sf_reg[0] = (
unsigned char)(gyro_sf >> 24);
2624 gyro_sf_reg[1] = (
unsigned char)(gyro_sf >> 16);
2625 gyro_sf_reg[2] = (
unsigned char)(gyro_sf >> 8);
2626 gyro_sf_reg[3] = (
unsigned char)(gyro_sf & 0xff);
ICM_20948_Status_e ICM_20948_reset_DMP(ICM_20948_Device_t *pdev)
ICM_20948_Status_e ICM_20948_i2c_master_reset(ICM_20948_Device_t *pdev)
ICM_20948_Status_e ICM_20948_enable_FIFO(ICM_20948_Device_t *pdev, bool enable)
uint8_t sensor_type_2_android_sensor(enum inv_icm20948_sensor sensor)
ICM_20948_Status_e inv_icm20948_write_mems(ICM_20948_Device_t *pdev, unsigned short reg, unsigned int length, const unsigned char *data)
Write data to a register in DMP memory.
const int DMP_Secondary_On_Off_Byte_Ordering[icm_20948_DMP_Secondary_On_Off_Bytes]
ICM_20948_Status_e ICM_20948_sleep(ICM_20948_Device_t *pdev, bool on)
ICM_20948_Status_e inv_icm20948_read_dmp_data(ICM_20948_Device_t *pdev, icm_20948_DMP_data_t *data)
ICM_20948_Status_e ICM_20948_wom_threshold(ICM_20948_Device_t *pdev, ICM_20948_ACCEL_WOM_THR_t *write, ICM_20948_ACCEL_WOM_THR_t *read)
ICM_20948_Status_e inv_icm20948_enable_dmp_sensor_int(ICM_20948_Device_t *pdev, enum inv_icm20948_sensor sensor, int state)
ICM_20948_Status_e ICM_20948_set_FIFO_mode(ICM_20948_Device_t *pdev, bool snapshot)
ICM_20948_Status_e inv_icm20948_set_gyro_sf(ICM_20948_Device_t *pdev, unsigned char div, int gyro_level)
ICM_20948_Status_e ICM_20948_set_clock_source(ICM_20948_Device_t *pdev, ICM_20948_PWR_MGMT_1_CLKSEL_e source)
ICM_20948_Status_e ICM_20948_set_sample_rate(ICM_20948_Device_t *pdev, ICM_20948_InternalSensorID_bm sensors, ICM_20948_smplrt_t smplrt)
const int DMP_Raw_Gyro_Byte_Ordering[icm_20948_DMP_Raw_Gyro_Bytes+icm_20948_DMP_Gyro_Bias_Bytes]
ICM_20948_Status_e ICM_20948_set_full_scale(ICM_20948_Device_t *pdev, ICM_20948_InternalSensorID_bm sensors, ICM_20948_fss_t fss)
ICM_20948_Status_e ICM_20948_int_pin_cfg(ICM_20948_Device_t *pdev, ICM_20948_INT_PIN_CFG_t *write, ICM_20948_INT_PIN_CFG_t *read)
ICM_20948_Status_e ICM_20948_get_who_am_i(ICM_20948_Device_t *pdev, uint8_t *whoami)
ICM_20948_Status_e ICM_20948_i2c_controller_periph4_txn(ICM_20948_Device_t *pdev, uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len, bool Rw, bool send_reg_addr)
ICM_20948_Status_e ICM_20948_int_enable(ICM_20948_Device_t *pdev, ICM_20948_INT_enable_t *write, ICM_20948_INT_enable_t *read)
enum inv_icm20948_sensor inv_icm20948_sensor_android_2_sensor_type(int sensor)
ICM_20948_Status_e ICM_20948_get_agmt(ICM_20948_Device_t *pdev, ICM_20948_AGMT_t *pagmt)
ICM_20948_Status_e ICM_20948_check_id(ICM_20948_Device_t *pdev)
const ICM_20948_Serif_t NullSerif
ICM_20948_Status_e ICM_20948_data_ready(ICM_20948_Device_t *pdev)
ICM_20948_Status_e inv_icm20948_set_dmp_sensor_period(ICM_20948_Device_t *pdev, enum DMP_ODR_Registers odr_reg, uint16_t interval)
ICM_20948_Status_e inv_icm20948_read_mems(ICM_20948_Device_t *pdev, unsigned short reg, unsigned int length, unsigned char *data)
Read data from a register in DMP memory.
const uint16_t inv_androidSensor_to_control_bits[ANDROID_SENSOR_NUM_MAX]
ICM_20948_Status_e ICM_20948_get_FIFO_count(ICM_20948_Device_t *pdev, uint16_t *count)
ICM_20948_Status_e ICM_20948_set_dmp_start_address(ICM_20948_Device_t *pdev, unsigned short address)
ICM_20948_Status_e ICM_20948_i2c_master_passthrough(ICM_20948_Device_t *pdev, bool passthrough)
ICM_20948_Status_e ICM_20948_read_FIFO(ICM_20948_Device_t *pdev, uint8_t *data, uint8_t len)
ICM_20948_Status_e inv_icm20948_enable_dmp_sensor(ICM_20948_Device_t *pdev, enum inv_icm20948_sensor sensor, int state)
ICM_20948_Status_e ICM_20948_execute_r(ICM_20948_Device_t *pdev, uint8_t regaddr, uint8_t *pdata, uint32_t len)
ICM_20948_Status_e ICM_20948_i2c_controller_configure_peripheral(ICM_20948_Device_t *pdev, uint8_t peripheral, uint8_t addr, uint8_t reg, uint8_t len, bool Rw, bool enable, bool data_only, bool grp, bool swap, uint8_t dataOut)
ICM_20948_Status_e ICM_20948_set_dlpf_cfg(ICM_20948_Device_t *pdev, ICM_20948_InternalSensorID_bm sensors, ICM_20948_dlpcfg_t cfg)
ICM_20948_Status_e ICM_20948_i2c_master_enable(ICM_20948_Device_t *pdev, bool enable)
const int DMP_PQuat6_Byte_Ordering[icm_20948_DMP_PQuat6_Bytes]
ICM_20948_Status_e ICM_20948_enable_dlpf(ICM_20948_Device_t *pdev, ICM_20948_InternalSensorID_bm sensors, bool enable)
ICM_20948_Status_e inv_icm20948_firmware_load(ICM_20948_Device_t *pdev, const unsigned char *data_start, unsigned short size_start, unsigned short load_addr)
Loads the DMP firmware from SRAM.
ICM_20948_Status_e ICM_20948_execute_w(ICM_20948_Device_t *pdev, uint8_t regaddr, uint8_t *pdata, uint32_t len)
ICM_20948_Status_e ICM_20948_sw_reset(ICM_20948_Device_t *pdev)
ICM_20948_Status_e ICM_20948_set_sample_mode(ICM_20948_Device_t *pdev, ICM_20948_InternalSensorID_bm sensors, ICM_20948_LP_CONFIG_CYCLE_e mode)
ICM_20948_Status_e ICM_20948_firmware_load(ICM_20948_Device_t *pdev)
ICM_20948_Status_e ICM_20948_i2c_master_single_r(ICM_20948_Device_t *pdev, uint8_t addr, uint8_t reg, uint8_t *data)
ICM_20948_Status_e ICM_20948_i2c_master_single_w(ICM_20948_Device_t *pdev, uint8_t addr, uint8_t reg, uint8_t *data)
const int DMP_Activity_Recognition_Byte_Ordering[icm_20948_DMP_Activity_Recognition_Bytes]
ICM_20948_Status_e ICM_20948_reset_FIFO(ICM_20948_Device_t *pdev)
const int DMP_Quat9_Byte_Ordering[icm_20948_DMP_Quat9_Bytes]
ICM_20948_Status_e ICM_20948_init_struct(ICM_20948_Device_t *pdev)
ICM_20948_Status_e ICM_20948_low_power(ICM_20948_Device_t *pdev, bool on)
const int DMP_Quat6_Byte_Ordering[icm_20948_DMP_Quat6_Bytes]
ICM_20948_Status_e ICM_20948_set_bank(ICM_20948_Device_t *pdev, uint8_t bank)
ICM_20948_Status_e ICM_20948_enable_DMP(ICM_20948_Device_t *pdev, bool enable)
ICM_20948_Status_e ICM_20948_link_serif(ICM_20948_Device_t *pdev, const ICM_20948_Serif_t *s)
ICM_20948_Status_e ICM_20948_wom_logic(ICM_20948_Device_t *pdev, ICM_20948_ACCEL_INTEL_CTRL_t *write, ICM_20948_ACCEL_INTEL_CTRL_t *read)
int memcmp(const void *, const void *, size_t)
#define INV_MAX_SERIAL_WRITE
Max size that can be written across I2C or SPI data lines.
#define INV_MAX_SERIAL_READ
Max size that can be read across I2C or SPI data lines.
ICM_20948_InternalSensorID_bm
@ ICM_20948_Stat_InvalDMPRegister
@ ICM_20948_Stat_ParamErr
@ ICM_20948_Stat_FIFONoDataAvail
@ ICM_20948_Stat_FIFOIncompleteData
@ ICM_20948_Stat_FIFOMoreDataAvail
@ ICM_20948_Stat_DMPNotSupported
@ ICM_20948_Stat_DMPVerifyFail
@ ICM_20948_Stat_SensorNotSupported
#define icm_20948_DMP_Gyro_Bias_Bytes
#define icm_20948_DMP_Header2_Bytes
#define INV_NEEDS_GYRO_MASK
#define INV_NEEDS_ACCEL_MASK1
#define icm_20948_DMP_Gyro_Accuracy_Bytes
#define icm_20948_DMP_Secondary_On_Off_Bytes
#define icm_20948_DMP_Pickup_Bytes
#define icm_20948_DMP_Pressure_Bytes
@ DMP_Motion_Event_Control_Pedometer_Interrupt
@ DMP_Motion_Event_Control_Compass_Calibr
@ DMP_Motion_Event_Control_Accel_Calibr
@ DMP_Motion_Event_Control_Gyro_Calibr
@ DMP_Motion_Event_Control_9axis
@ DMP_Motion_Event_Control_Geomag
#define icm_20948_DMP_Compass_Bytes
@ DMP_Data_Output_Control_1_Step_Detector
@ DMP_Data_Output_Control_1_Quat9
@ DMP_Data_Output_Control_1_Accel
@ DMP_Data_Output_Control_1_Compass_Calibr
@ DMP_Data_Output_Control_1_Gyro
@ DMP_Data_Output_Control_1_Compass
@ DMP_Data_Output_Control_1_Step_Ind_0
@ DMP_Data_Output_Control_1_Step_Ind_1
@ DMP_Data_Output_Control_1_Geomag
@ DMP_Data_Output_Control_1_Gyro_Calibr
@ DMP_Data_Output_Control_1_Step_Ind_2
@ DMP_header2_bitmap_Accel_Accuracy
@ DMP_header2_bitmap_Secondary_On_Off
@ DMP_header2_bitmap_Fsync
@ DMP_header2_bitmap_Pickup
@ DMP_header2_bitmap_Gyro_Accuracy
@ DMP_header2_bitmap_Compass_Accuracy
@ DMP_header2_bitmap_Activity_Recog
#define icm_20948_DMP_Quat6_Bytes
#define ODR_CNTR_CPASS_CALIBR
#define icm_20948_DMP_Compass_Calibr_Bytes
#define icm_20948_DMP_Accel_Accuracy_Bytes
#define INV_NEEDS_ACCEL_MASK
#define icm_20948_DMP_Raw_Accel_Bytes
@ DMP_header_bitmap_Header2
@ DMP_header_bitmap_Quat9
@ DMP_header_bitmap_Pressure
@ DMP_header_bitmap_Geomag
@ DMP_header_bitmap_Gyro_Calibr
@ DMP_header_bitmap_Step_Detector
@ DMP_header_bitmap_Quat6
@ DMP_header_bitmap_Accel
@ DMP_header_bitmap_Compass
@ DMP_header_bitmap_PQuat6
@ DMP_header_bitmap_Compass_Calibr
#define icm_20948_DMP_Quat9_Bytes
@ DMP_Data_ready_Secondary_Compass
#define icm_20948_DMP_PQuat6_Bytes
#define icm_20948_DMP_Footer_Bytes
#define INV_NEEDS_GYRO_MASK1
#define ODR_CNTR_GYRO_CALIBR
@ ANDROID_SENSOR_GYROSCOPE
@ ANDROID_SENSOR_LINEAR_ACCELERATION
@ ANDROID_SENSOR_ACTIVITY_CLASSIFICATON
@ ANDROID_SENSOR_GAME_ROTATION_VECTOR
@ ANDROID_SENSOR_ROTATION_VECTOR
@ ANDROID_SENSOR_RAW_GYROSCOPE
@ ANDROID_SENSOR_MAGNETIC_FIELD_UNCALIBRATED
@ ANDROID_SENSOR_RAW_ACCELEROMETER
@ ANDROID_SENSOR_STEP_DETECTOR
@ ANDROID_SENSOR_GYROSCOPE_UNCALIBRATED
@ ANDROID_SENSOR_ORIENTATION
@ ANDROID_SENSOR_GEOMAGNETIC_FIELD
@ ANDROID_SENSOR_GEOMAGNETIC_ROTATION_VECTOR
@ ANDROID_SENSOR_WAKEUP_SIGNIFICANT_MOTION
@ ANDROID_SENSOR_ACCELEROMETER
@ ANDROID_SENSOR_STEP_COUNTER
@ ANDROID_SENSOR_FLIP_PICKUP
@ ANDROID_SENSOR_WAKEUP_TILT_DETECTOR
#define icm_20948_DMP_Header_Bytes
@ DMP_ODR_Reg_Cpass_Calibr
@ DMP_ODR_Reg_Gyro_Calibr
#define icm_20948_DMP_Maximum_Bytes
#define icm_20948_DMP_ALS_Bytes
#define INV_NEEDS_COMPASS_MASK1
#define icm_20948_DMP_Compass_Accuracy_Bytes
#define icm_20948_DMP_Geomag_Bytes
inv_icm20948_sensor
Sensor identifier for control function.
@ INV_ICM20948_SENSOR_FLIP_PICKUP
@ INV_ICM20948_SENSOR_ORIENTATION
@ INV_ICM20948_SENSOR_ACTIVITY_CLASSIFICATON
@ INV_ICM20948_SENSOR_ACCELEROMETER
@ INV_ICM20948_SENSOR_STEP_COUNTER
@ INV_ICM20948_SENSOR_GEOMAGNETIC_ROTATION_VECTOR
@ INV_ICM20948_SENSOR_GRAVITY
@ INV_ICM20948_SENSOR_GYROSCOPE
@ INV_ICM20948_SENSOR_GYROSCOPE_UNCALIBRATED
@ INV_ICM20948_SENSOR_WAKEUP_TILT_DETECTOR
@ INV_ICM20948_SENSOR_WAKEUP_SIGNIFICANT_MOTION
@ INV_ICM20948_SENSOR_STEP_DETECTOR
@ INV_ICM20948_SENSOR_ROTATION_VECTOR
@ INV_ICM20948_SENSOR_RAW_ACCELEROMETER
@ INV_ICM20948_SENSOR_GEOMAGNETIC_FIELD
@ INV_ICM20948_SENSOR_RAW_GYROSCOPE
@ INV_ICM20948_SENSOR_GAME_ROTATION_VECTOR
@ INV_ICM20948_SENSOR_MAX
@ INV_ICM20948_SENSOR_B2S
@ INV_ICM20948_SENSOR_MAGNETIC_FIELD_UNCALIBRATED
@ INV_ICM20948_SENSOR_LINEAR_ACCELERATION
#define icm_20948_DMP_Raw_Gyro_Bytes
#define ODR_CNTR_PRESSURE
#define icm_20948_DMP_Activity_Recognition_Bytes
#define INV_NEEDS_COMPASS_MASK
#define icm_20948_DMP_Step_Detector_Bytes
@ DMP_Data_Output_Control_2_Compass_Accuracy
@ DMP_Data_Output_Control_2_Accel_Accuracy
@ DMP_Data_Output_Control_2_Gyro_Accuracy
ICM_20948_PWR_MGMT_1_CLKSEL_e
ICM_20948_LP_CONFIG_CYCLE_e
@ AGB3_REG_I2C_PERIPH2_REG
@ AGB3_REG_I2C_PERIPH3_CTRL
@ AGB3_REG_I2C_PERIPH4_REG
@ AGB3_REG_I2C_PERIPH2_DO
@ AGB3_REG_I2C_PERIPH1_DO
@ AGB0_REG_INT_PIN_CONFIG
@ AGB3_REG_I2C_PERIPH2_ADDR
@ AGB1_REG_TIMEBASE_CORRECTION_PLL
@ AGB3_REG_I2C_PERIPH4_CTRL
@ AGB2_REG_GYRO_SMPLRT_DIV
@ AGB3_REG_I2C_PERIPH4_DO
@ AGB3_REG_I2C_PERIPH1_CTRL
@ AGB3_REG_I2C_PERIPH0_DO
@ AGB3_REG_I2C_PERIPH0_ADDR
@ AGB3_REG_I2C_PERIPH3_ADDR
@ AGB2_REG_PRGM_START_ADDRH
@ AGB3_REG_I2C_PERIPH2_CTRL
@ AGB3_REG_I2C_PERIPH4_ADDR
@ AGB3_REG_I2C_PERIPH3_DO
@ AGB2_REG_ACCEL_INTEL_CTRL
@ AGB3_REG_I2C_PERIPH1_REG
@ AGB2_REG_ACCEL_SMPLRT_DIV_1
@ AGB0_REG_MEM_START_ADDR
@ AGB2_REG_ACCEL_CONFIG_2
@ AGB0_REG_I2C_MST_STATUS
@ AGB3_REG_I2C_PERIPH3_REG
@ AGB2_REG_ACCEL_SMPLRT_DIV_2
@ AGB3_REG_I2C_PERIPH0_CTRL
@ AGB3_REG_I2C_PERIPH1_ADDR
@ AGB3_REG_I2C_PERIPH4_DI
@ AGB3_REG_I2C_PERIPH0_REG
uint8_t ACCEL_INTEL_MODE_INT
ICM_20948_axis3named_t acc
ICM_20948_axis3named_t mag
union ICM_20948_AGMT_t::@3 tmp
ICM_20948_axis3named_t gyr
uint32_t _enabled_Android_0
uint32_t _enabled_Android_1
uint32_t _enabled_Android_intr_1
const ICM_20948_Serif_t * _serif
uint32_t _enabled_Android_intr_0
bool _dmp_firmware_available
uint8_t RAW_DATA_0_RDY_EN
uint8_t RAW_DATA_0_RDY_INT
uint8_t RAW_DATA_0_RDY_EN
uint8_t FIFO_OVERFLOW_EN_1
uint8_t FIFO_OVERFLOW_EN_4
uint8_t FIFO_OVERFLOW_EN_2
uint8_t FIFO_OVERFLOW_EN_0
uint8_t FIFO_OVERFLOW_EN_3
ICM_20948_Status_e(* read)(uint8_t regaddr, uint8_t *pdata, uint32_t len, void *user)
ICM_20948_Status_e(* write)(uint8_t regaddr, uint8_t *pdata, uint32_t len, void *user)
union icm_20948_DMP_data_t::@6 Compass
uint16_t Compass_Accuracy
union icm_20948_DMP_data_t::@10 Geomag
union icm_20948_DMP_data_t::@5 Raw_Gyro
union icm_20948_DMP_data_t::@12 Compass_Calibr
union icm_20948_DMP_data_t::@14 Secondary_On_Off
uint32_t Pedometer_Timestamp
union icm_20948_DMP_data_t::@9 PQuat6
uint8_t ALS[icm_20948_DMP_ALS_Bytes]
uint8_t Bytes[icm_20948_DMP_Raw_Accel_Bytes]
union icm_20948_DMP_data_t::@7 Quat6
union icm_20948_DMP_data_t::@4 Raw_Accel
union icm_20948_DMP_data_t::@13 Activity_Recognition
union icm_20948_DMP_data_t::@8 Quat9
uint8_t FIFO_OVERFLOW_EN_1
uint8_t FIFO_OVERFLOW_EN_2
uint8_t FIFO_OVERFLOW_EN_4
uint8_t FIFO_OVERFLOW_EN_3
uint8_t FIFO_OVERFLOW_EN_0
struct ICM_20948_INT_ENABLE_2_t::@26 individual
struct ICM_20948_INT_ENABLE_3_t::@28 individual
struct ICM_20948_axis3named_t::@2 axes