enum registers {
// undocumented registers
XG_OFFS_TC = 0x00, //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD
YG_OFFS_TC = 0x01, //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD
ZG_OFFS_TC = 0x02, //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD
X_FINE_GAIN = 0x03, //[7:0] X_FINE_GAIN
Y_FINE_GAIN = 0x04, //[7:0] Y_FINE_GAIN
Z_FINE_GAIN = 0x05, //[7:0] Z_FINE_GAIN
XA_OFFS_H = 0x06, //[15:0] XA_OFFS
XA_OFFS_L = 0x07,
YA_OFFS_H = 0x08, //[15:0] YA_OFFS
YA_OFFS_L = 0x09,
ZA_OFFS_H = 0x0A, //[15:0] ZA_OFFS
ZA_OFFS_L = 0x0B,
// documented registers
SELF_TEST_X = 0x0D, //[7:5] XA_TEST[4-2], [4:0] XG_TEST[4-0]
SELF_TEST_Y = 0x0E, //[7:5] YA_TEST[4-2], [4:0] YG_TEST[4-0]
SELF_TEST_Z = 0x0F, //[7:5] ZA_TEST[4-2], [4:0] ZG_TEST[4-0]
SELF_TEST_A = 0x10, //[5:4] XA_TEST[1-0], [3:2] YA_TEST[1-0], [1:0] ZA_TEST[1-0]
XG_OFFS_USRH = 0x13, //[15:0] XG_OFFS_USR
XG_OFFS_USRL = 0x14,
YG_OFFS_USRH = 0x15, //[15:0] YG_OFFS_USR
YG_OFFS_USRL = 0x16,
ZG_OFFS_USRH = 0x17, //[15:0] ZG_OFFS_USR
ZG_OFFS_USRL = 0x18,
SMPLRT_DIV = 0x19, // Sample Rate Divider
CONFIG = 0x1A, // Configuration
GYRO_CONFIG = 0x1B, // Gyroscope Configuration
ACCEL_CONFIG = 0x1C, // Accelerometer Configuration
FF_THR = 0x1D, // Free-fall Threshold
FF_DUR = 0x1E, // Free-fall event duration
MOT_THR = 0x1F, // Motion Detection Threshold
MOT_DUR = 0x20, // Motion Detection Duration
ZRMOT_THR = 0x21, // Zero-Motion Detection Threshold
ZRMOT_DUR = 0x22, // Zero-Motion Detection Duration
FIFO_EN = 0x23, // FIFO Enable
I2C_MST_CTRL = 0x24, // I²C Master Control
I2C_SLV0_ADDR = 0x25,
I2C_SLV0_REG = 0x26,
I2C_SLV0_CTRL = 0x27,
I2C_SLV1_ADDR = 0x28,
I2C_SLV1_REG = 0x29,
I2C_SLV1_CTRL = 0x2A,
I2C_SLV2_ADDR = 0x2B,
I2C_SLV2_REG = 0x2C,
I2C_SLV2_CTRL = 0x2D,
I2C_SLV3_ADDR = 0x2E,
I2C_SLV3_REG = 0x2F,
I2C_SLV3_CTRL = 0x30,
I2C_SLV4_ADDR = 0x31,
I2C_SLV4_REG = 0x32,
I2C_SLV4_DO = 0x33,
I2C_SLV4_CTRL = 0x34,
I2C_SLV4_DI = 0x35,
I2C_MST_STATUS = 0x36, // I²C Master Status
INT_PIN_CFG = 0x37, // INT Pin / Bypass Enable Configuration
INT_ENABLE = 0x38, // Interrupt Enable
DMP_INT_STATUS = 0x39,
INT_STATUS = 0x3A, // Interrupt Status
ACCEL_XOUT_H = 0x3B, // Accelerometer Measurements
ACCEL_XOUT_L,
ACCEL_YOUT_H,
ACCEL_YOUT_L,
ACCEL_ZOUT_H,
ACCEL_ZOUT_L,
TEMP_OUT_H = 0x41, // Temperature Measurement
TEMP_OUT_L,
GYRO_XOUT_H = 0x43, // Gyroscope Measurements
GYRO_XOUT_L,
GYRO_YOUT_H,
GYRO_YOUT_L,
GYRO_ZOUT_H,
GYRO_ZOUT_L,
EXT_SENS_DATA_00 = 0x49, // External Sensor Data
EXT_SENS_DATA_01,
EXT_SENS_DATA_02,
EXT_SENS_DATA_03,
EXT_SENS_DATA_04,
EXT_SENS_DATA_05,
EXT_SENS_DATA_06,
EXT_SENS_DATA_07,
EXT_SENS_DATA_08,
EXT_SENS_DATA_09,
EXT_SENS_DATA_10,
EXT_SENS_DATA_11,
EXT_SENS_DATA_12,
EXT_SENS_DATA_13,
EXT_SENS_DATA_14,
EXT_SENS_DATA_15,
EXT_SENS_DATA_16,
EXT_SENS_DATA_17,
EXT_SENS_DATA_18,
EXT_SENS_DATA_19,
EXT_SENS_DATA_20,
EXT_SENS_DATA_21,
EXT_SENS_DATA_22,
EXT_SENS_DATA_23 = 0x60,
MOT_DETECT_STATUS = 0x61,
I2C_SLV0_DO = 0x63, // I²C Slave 0 Data Out
I2C_SLV1_DO,
I2C_SLV2_DO,
I2C_SLV3_DO,
I2C_MST_DELAY_CTRL = 0x67, // I²C Master Delay Control
SIGNAL_PATH_RESET = 0x68, // Signal Path Reset
MOT_DETECT_CTRL = 0x69, // Motion Detection Control
USER_CTRL = 0x6A, // User Control
PWR_MGMT_1 = 0x6B, // Power Management 1
PWR_MGMT_2 = 0x6C, // Power Management 2
BANK_SEL = 0x6D,
MEM_START_ADDR = 0x6E,
MEM_R_W = 0x6F,
DMP_CFG_1 = 0x70,
DMP_CFG_2 = 0x71,
FIFO_COUNT_H = 0x72, // FIFO Count Registers
FIFO_COUNT_L,
FIFO_R_W = 0x74, // FIFO Read Write
WHO_AM_I = 0x75
};