/*
 $License:
    Copyright (C) 2011 InvenSense Corporation, All Rights Reserved.
 $
 */
#ifndef DMPKEY_H__
#define DMPKEY_H__

// 4/26/2012, rah, MBARI - Had to break this into pieces, because
//   *%^&@# Metrowerks compiler complains about "Macro too complex".  POS.
#define KEY_CFG_25  0
#define KEY_CFG_24                 (KEY_CFG_25+1)
#define KEY_CFG_26                 (KEY_CFG_24+1)
#define KEY_CFG_21                 (KEY_CFG_26+1)
#define KEY_CFG_20                 (KEY_CFG_21+1)
#define KEY_CFG_TAP4               (KEY_CFG_20+1)
#define KEY_CFG_TAP5               (KEY_CFG_TAP4+1)
#define KEY_CFG_TAP6               (KEY_CFG_TAP5+1)
#define KEY_CFG_TAP7               (KEY_CFG_TAP6+1)
#define KEY_CFG_TAP0               (KEY_CFG_TAP7+1)
#define KEY_CFG_TAP1               (KEY_CFG_TAP0+1)
#define KEY_CFG_TAP2               (KEY_CFG_TAP1+1)
#define KEY_CFG_TAP3               (KEY_CFG_TAP2+1)
#define KEY_CFG_TAP_QUANTIZE       (KEY_CFG_TAP3+1)
#define KEY_CFG_TAP_JERK           (KEY_CFG_TAP_QUANTIZE+1)
#define KEY_CFG_TAP_SAVE_ACCB      (KEY_CFG_TAP_JERK+1)
#define KEY_CFG_TAP_CLEAR_STICKY   (KEY_CFG_TAP_SAVE_ACCB+1)
#define KEY_FCFG_ACCEL_INPUT       (KEY_CFG_TAP_CLEAR_STICKY +1)
#define KEY_FCFG_ACCEL_INIT        (KEY_FCFG_ACCEL_INPUT+1)
#define KEY_CFG_23                 (KEY_FCFG_ACCEL_INIT+1)
#define KEY_FCFG_1                 (KEY_CFG_23+1)
#define KEY_FCFG_3                 (KEY_FCFG_1+1)
#define KEY_FCFG_2                 (KEY_FCFG_3+1)
#define KEY_CFG_3D                 (KEY_FCFG_2+1)
#define KEY_CFG_3B                 (KEY_CFG_3D+1)
#define KEY_CFG_3C                 (KEY_CFG_3B+1)
#define KEY_FCFG_5                 (KEY_CFG_3C+1)
#define KEY_FCFG_4                 (KEY_FCFG_5+1)
#define KEY_FCFG_7                 (KEY_FCFG_4+1)
#define KEY_FCFG_FSCALE            (KEY_FCFG_7+1)
#define KEY_FCFG_AZ                (KEY_FCFG_FSCALE+1)
#define KEY_FCFG_6                 (KEY_FCFG_AZ+1)
#define KEY_FCFG_LSB4              (KEY_FCFG_6+1)
#define KEY_CFG_12                 (KEY_FCFG_LSB4+1)
#define KEY_CFG_14                 (KEY_CFG_12+1)
#define KEY_CFG_15                 (KEY_CFG_14+1)
#define KEY_CFG_16                 (KEY_CFG_15+1)
#define KEY_CFG_18                 (KEY_CFG_16+1)
#define KEY_CFG_6                  (KEY_CFG_18 + 1)
#define KEY_CFG_7                  (KEY_CFG_6+1)
#define KEY_CFG_4                  (KEY_CFG_7+1)
#define KEY_CFG_5                  (KEY_CFG_4+1)
#define KEY_CFG_2                  (KEY_CFG_5+1)
#define KEY_CFG_3                  (KEY_CFG_2+1)
#define KEY_CFG_1                  (KEY_CFG_3+1)
#define KEY_CFG_EXTERNAL           (KEY_CFG_1+1)
#define KEY_CFG_8                  (KEY_CFG_EXTERNAL+1)
#define KEY_CFG_9                  (KEY_CFG_8+1)
#define KEY_CFG_ORIENT_3           (KEY_CFG_9 + 1)
#define KEY_CFG_ORIENT_2           (KEY_CFG_ORIENT_3 + 1)
#define KEY_CFG_ORIENT_1           (KEY_CFG_ORIENT_2 + 1)
#define KEY_CFG_GYRO_SOURCE        (KEY_CFG_ORIENT_1 + 1)
#define KEY_CFG_ORIENT_IRQ_1       (KEY_CFG_GYRO_SOURCE + 1)
#define KEY_CFG_ORIENT_IRQ_2       (KEY_CFG_ORIENT_IRQ_1 + 1)
#define KEY_CFG_ORIENT_IRQ_3       (KEY_CFG_ORIENT_IRQ_2 + 1)
#define KEY_FCFG_MAG_VAL           (KEY_CFG_ORIENT_IRQ_3 + 1)
#define KEY_FCFG_MAG_MOV           (KEY_FCFG_MAG_VAL + 1)

//#define KEY_D_0_22                 (KEY_FCFG_MAG_MOV + 1)
#define KEY_D_0_22                 57
#define KEY_D_0_24                 (KEY_D_0_22+1)
#define KEY_D_0_36                 (KEY_D_0_24+1)
#define KEY_D_0_52                 (KEY_D_0_36+1)
#define KEY_D_0_96                 (KEY_D_0_52+1)
#define KEY_D_0_104                (KEY_D_0_96+1)
#define KEY_D_0_108                (KEY_D_0_104+1)
#define KEY_D_0_163                (KEY_D_0_108+1)
#define KEY_D_0_188                (KEY_D_0_163+1)
#define KEY_D_0_192                (KEY_D_0_188+1)
#define KEY_D_0_224                (KEY_D_0_192+1)
#define KEY_D_0_228                (KEY_D_0_224+1)
#define KEY_D_0_232                (KEY_D_0_228+1)
#define KEY_D_0_236                (KEY_D_0_232+1)

#define KEY_DMP_PREVPTAT           (KEY_D_0_236+1)
#define KEY_D_1_2                  (KEY_DMP_PREVPTAT+1)
#define KEY_D_1_4                  (KEY_D_1_2 + 1)
#define KEY_D_1_8                  (KEY_D_1_4 + 1)
#define KEY_D_1_10                 (KEY_D_1_8+1)
#define KEY_D_1_24                 (KEY_D_1_10+1)
#define KEY_D_1_28                 (KEY_D_1_24+1)
#define KEY_D_1_92                 (KEY_D_1_28+1)
#define KEY_D_1_96                 (KEY_D_1_92+1)
#define KEY_D_1_98                 (KEY_D_1_96+1)
#define KEY_D_1_106                (KEY_D_1_98+1)
#define KEY_D_1_108                (KEY_D_1_106+1)
#define KEY_D_1_112                (KEY_D_1_108+1)
#define KEY_D_1_128                (KEY_D_1_112+1)
#define KEY_D_1_152                (KEY_D_1_128+1)
#define KEY_D_1_168                (KEY_D_1_152+1)
#define KEY_D_1_175                (KEY_D_1_168+1)
#define KEY_D_1_178                (KEY_D_1_175+1)
#define KEY_D_1_179                (KEY_D_1_178+1)
#define KEY_D_1_236                (KEY_D_1_179+1)
#define KEY_D_1_244                (KEY_D_1_236+1)
#define KEY_D_2_12                 (KEY_D_1_244+1)
#define KEY_D_2_96                 (KEY_D_2_12+1)
#define KEY_D_2_108                (KEY_D_2_96+1)
#define KEY_D_2_244                (KEY_D_2_108+1)
#define KEY_D_2_248                (KEY_D_2_244+1)
#define KEY_D_2_252                (KEY_D_2_248+1)

// Compass Keys
//#define KEY_CPASS_BIAS_X            (KEY_D_2_252+1)
#define KEY_CPASS_BIAS_X            98
#define KEY_CPASS_BIAS_Y            (KEY_CPASS_BIAS_X+1)
#define KEY_CPASS_BIAS_Z            (KEY_CPASS_BIAS_Y+1)
#define KEY_CPASS_MTX_00            (KEY_CPASS_BIAS_Z+1)
#define KEY_CPASS_MTX_01            (KEY_CPASS_MTX_00+1)
#define KEY_CPASS_MTX_02            (KEY_CPASS_MTX_01+1)
#define KEY_CPASS_MTX_10            (KEY_CPASS_MTX_02+1)
#define KEY_CPASS_MTX_11            (KEY_CPASS_MTX_10+1)
#define KEY_CPASS_MTX_12            (KEY_CPASS_MTX_11+1)
#define KEY_CPASS_MTX_20            (KEY_CPASS_MTX_12+1)
#define KEY_CPASS_MTX_21            (KEY_CPASS_MTX_20+1)
#define KEY_CPASS_MTX_22            (KEY_CPASS_MTX_21+1)

// Mantis Keys
#define KEY_CFG_MOTION_BIAS         (KEY_CPASS_MTX_22+1)

#define KEY_DMP_TAPW_MIN           (KEY_CFG_MOTION_BIAS+1)
#define KEY_DMP_TAP_THR_X          (KEY_DMP_TAPW_MIN+1)
#define KEY_DMP_TAP_THR_Y          (KEY_DMP_TAP_THR_X+1)
#define KEY_DMP_TAP_THR_Z          (KEY_DMP_TAP_THR_Y+1)
#define KEY_DMP_SH_TH_Y            (KEY_DMP_TAP_THR_Z+1)
#define KEY_DMP_SH_TH_X            (KEY_DMP_SH_TH_Y+1)
#define KEY_DMP_SH_TH_Z            (KEY_DMP_SH_TH_X+1)
#define KEY_DMP_ORIENT             (KEY_DMP_SH_TH_Z+1)
#define KEY_D_ACT0                 (KEY_DMP_ORIENT+1)
#define KEY_D_ACSX                 (KEY_D_ACT0+1)
#define KEY_D_ACSY                 (KEY_D_ACSX+1)
#define KEY_D_ACSZ                 (KEY_D_ACSY+1)

// Pedometer Standalone only keys
#define KEY_D_PEDSTD_BP_B          (KEY_D_ACSZ+1)
#define KEY_D_PEDSTD_HP_A          (KEY_D_PEDSTD_BP_B+1)
#define KEY_D_PEDSTD_HP_B          (KEY_D_PEDSTD_HP_A+1)
#define KEY_D_PEDSTD_BP_A4         (KEY_D_PEDSTD_HP_B+1)
#define KEY_D_PEDSTD_BP_A3         (KEY_D_PEDSTD_BP_A4+1)
#define KEY_D_PEDSTD_BP_A2         (KEY_D_PEDSTD_BP_A3+1)
#define KEY_D_PEDSTD_BP_A1         (KEY_D_PEDSTD_BP_A2+1)
#define KEY_D_PEDSTD_INT_THRSH     (KEY_D_PEDSTD_BP_A1+1)
#define KEY_D_PEDSTD_CLIP          (KEY_D_PEDSTD_INT_THRSH+1)
#define KEY_D_PEDSTD_SB            (KEY_D_PEDSTD_CLIP+1)
#define KEY_D_PEDSTD_SB_TIME       (KEY_D_PEDSTD_SB+1)
#define KEY_D_PEDSTD_PEAKTHRSH     (KEY_D_PEDSTD_SB_TIME+1)
#define KEY_D_PEDSTD_TIML          (KEY_D_PEDSTD_PEAKTHRSH+1)
#define KEY_D_PEDSTD_TIMH          (KEY_D_PEDSTD_TIML+1)
#define KEY_D_PEDSTD_PEAK          (KEY_D_PEDSTD_TIMH+1)
#define KEY_D_PEDSTD_TIMECTR       (KEY_D_PEDSTD_PEAK+1)
#define KEY_D_PEDSTD_STEPCTR       (KEY_D_PEDSTD_TIMECTR+1)
#define KEY_D_PEDSTD_WALKTIME      (KEY_D_PEDSTD_STEPCTR+1)

// EIS Keys
//#define KEY_P_EIS_FIFO_FOOTER      (KEY_D_PEDSTD_WALKTIME+1)
#define KEY_P_EIS_FIFO_FOOTER      141
#define KEY_P_EIS_FIFO_YSHIFT      (KEY_P_EIS_FIFO_FOOTER+1)
#define KEY_P_EIS_DATA_RATE        (KEY_P_EIS_FIFO_YSHIFT+1)
#define KEY_P_EIS_FIFO_XSHIFT      (KEY_P_EIS_DATA_RATE+1)
#define KEY_P_EIS_FIFO_SYNC        (KEY_P_EIS_FIFO_XSHIFT+1)
#define KEY_P_EIS_FIFO_ZSHIFT      (KEY_P_EIS_FIFO_SYNC+1)
#define KEY_P_EIS_FIFO_READY       (KEY_P_EIS_FIFO_ZSHIFT+1)
#define KEY_DMP_FOOTER             (KEY_P_EIS_FIFO_READY+1)
#define KEY_DMP_INTX_HC            (KEY_DMP_FOOTER+1)
#define KEY_DMP_INTX_PH            (KEY_DMP_INTX_HC+1)
#define KEY_DMP_INTX_SH            (KEY_DMP_INTX_PH+1)
#define KEY_DMP_AINV_SH            (KEY_DMP_INTX_SH +1)
#define KEY_DMP_A_INV_XH           (KEY_DMP_AINV_SH+1)
#define KEY_DMP_AINV_PH            (KEY_DMP_A_INV_XH+1)
#define KEY_DMP_CTHX_H             (KEY_DMP_AINV_PH+1)
#define KEY_DMP_CTHY_H             (KEY_DMP_CTHX_H+1)
#define KEY_DMP_CTHZ_H             (KEY_DMP_CTHY_H+1)
#define KEY_DMP_NCTHX_H            (KEY_DMP_CTHZ_H+1)
#define KEY_DMP_NCTHY_H            (KEY_DMP_NCTHX_H+1)
#define KEY_DMP_NCTHZ_H            (KEY_DMP_NCTHY_H+1)
#define KEY_DMP_CTSQ_XH            (KEY_DMP_NCTHZ_H+1)
#define KEY_DMP_CTSQ_YH            (KEY_DMP_CTSQ_XH+1)
#define KEY_DMP_CTSQ_ZH            (KEY_DMP_CTSQ_YH+1)
#define KEY_DMP_INTX_H             (KEY_DMP_CTSQ_ZH+1)
#define KEY_DMP_INTY_H             (KEY_DMP_INTX_H+1)
#define KEY_DMP_INTZ_H             (KEY_DMP_INTY_H+1)
#define KEY_DMP_HPX_H              (KEY_DMP_INTZ_H+1)
#define KEY_DMP_HPY_H              (KEY_DMP_HPX_H+1)
#define KEY_DMP_HPZ_H              (KEY_DMP_HPY_H+1)

// Stream Keys
#define KEY_STREAM_P_GYRO_Z        (KEY_DMP_HPZ_H + 1)
#define KEY_STREAM_P_GYRO_Y        (KEY_STREAM_P_GYRO_Z+1)
#define KEY_STREAM_P_GYRO_X        (KEY_STREAM_P_GYRO_Y+1)
#define KEY_STREAM_P_TEMP          (KEY_STREAM_P_GYRO_X+1)
#define KEY_STREAM_P_AUX_Y         (KEY_STREAM_P_TEMP+1)
#define KEY_STREAM_P_AUX_X         (KEY_STREAM_P_AUX_Y+1)
#define KEY_STREAM_P_AUX_Z         (KEY_STREAM_P_AUX_X+1)
#define KEY_STREAM_P_ACCEL_Y       (KEY_STREAM_P_AUX_Z+1)
#define KEY_STREAM_P_ACCEL_X       (KEY_STREAM_P_ACCEL_Y+1)
#define KEY_STREAM_P_FOOTER        (KEY_STREAM_P_ACCEL_X+1)
#define KEY_STREAM_P_ACCEL_Z       (KEY_STREAM_P_FOOTER+1)

#define NUM_KEYS (KEY_STREAM_P_ACCEL_Z+1)

    typedef struct {
        unsigned short key;
        unsigned short addr;
    } tKeyLabel;
    
#define DINA0A 0x0a
#define DINA22 0x22
#define DINA42 0x42
#define DINA5A 0x5a

#define DINA06 0x06
#define DINA0E 0x0e
#define DINA16 0x16
#define DINA1E 0x1e
#define DINA26 0x26
#define DINA2E 0x2e
#define DINA36 0x36
#define DINA3E 0x3e
#define DINA46 0x46
#define DINA4E 0x4e
#define DINA56 0x56
#define DINA5E 0x5e
#define DINA66 0x66
#define DINA6E 0x6e
#define DINA76 0x76
#define DINA7E 0x7e

#define DINA00 0x00
#define DINA08 0x08
#define DINA10 0x10
#define DINA18 0x18
#define DINA20 0x20
#define DINA28 0x28
#define DINA30 0x30
#define DINA38 0x38
#define DINA40 0x40
#define DINA48 0x48
#define DINA50 0x50
#define DINA58 0x58
#define DINA60 0x60
#define DINA68 0x68
#define DINA70 0x70
#define DINA78 0x78

#define DINA04 0x04
#define DINA0C 0x0c
#define DINA14 0x14
#define DINA1C 0x1C
#define DINA24 0x24
#define DINA2C 0x2c
#define DINA34 0x34
#define DINA3C 0x3c
#define DINA44 0x44
#define DINA4C 0x4c
#define DINA54 0x54
#define DINA5C 0x5c
#define DINA64 0x64
#define DINA6C 0x6c
#define DINA74 0x74
#define DINA7C 0x7c

#define DINA01 0x01
#define DINA09 0x09
#define DINA11 0x11
#define DINA19 0x19
#define DINA21 0x21
#define DINA29 0x29
#define DINA31 0x31
#define DINA39 0x39
#define DINA41 0x41
#define DINA49 0x49
#define DINA51 0x51
#define DINA59 0x59
#define DINA61 0x61
#define DINA69 0x69
#define DINA71 0x71
#define DINA79 0x79

#define DINA25 0x25
#define DINA2D 0x2d
#define DINA35 0x35
#define DINA3D 0x3d
#define DINA4D 0x4d
#define DINA55 0x55
#define DINA5D 0x5D
#define DINA6D 0x6d
#define DINA75 0x75
#define DINA7D 0x7d

#define DINC00 0x00
#define DINC01 0x01
#define DINC02 0x02
#define DINC03 0x03
#define DINC08 0x08
#define DINC09 0x09
#define DINC0A 0x0a
#define DINC0B 0x0b
#define DINC10 0x10
#define DINC11 0x11
#define DINC12 0x12
#define DINC13 0x13
#define DINC18 0x18
#define DINC19 0x19
#define DINC1A 0x1a
#define DINC1B 0x1b

#define DINC20 0x20
#define DINC21 0x21
#define DINC22 0x22
#define DINC23 0x23
#define DINC28 0x28
#define DINC29 0x29
#define DINC2A 0x2a
#define DINC2B 0x2b
#define DINC30 0x30
#define DINC31 0x31
#define DINC32 0x32
#define DINC33 0x33
#define DINC38 0x38
#define DINC39 0x39
#define DINC3A 0x3a
#define DINC3B 0x3b

#define DINC40 0x40
#define DINC41 0x41
#define DINC42 0x42
#define DINC43 0x43
#define DINC48 0x48
#define DINC49 0x49
#define DINC4A 0x4a
#define DINC4B 0x4b
#define DINC50 0x50
#define DINC51 0x51
#define DINC52 0x52
#define DINC53 0x53
#define DINC58 0x58
#define DINC59 0x59
#define DINC5A 0x5a
#define DINC5B 0x5b

#define DINC60 0x60
#define DINC61 0x61
#define DINC62 0x62
#define DINC63 0x63
#define DINC68 0x68
#define DINC69 0x69
#define DINC6A 0x6a
#define DINC6B 0x6b
#define DINC70 0x70
#define DINC71 0x71
#define DINC72 0x72
#define DINC73 0x73
#define DINC78 0x78
#define DINC79 0x79
#define DINC7A 0x7a
#define DINC7B 0x7b

#if defined CONFIG_MPU_SENSORS_MPU3050
#define DINA80 0x80
#define DINA90 0x90
#define DINAA0 0xa0
#define DINAC9 0xc9
#define DINACB 0xcb
#define DINACD 0xcd
#define DINACF 0xcf
#define DINAC8 0xc8
#define DINACA 0xca
#define DINACC 0xcc
#define DINACE 0xce
#define DINAD8 0xd8
#define DINADD 0xdd
#define DINAF8 0xf8
#define DINAFE 0xfe
#define DINAC0 0xc0
#define DINAC1 0xc1
#define DINAC2 0xc2
#define DINAC3 0xc3
#define DINAC4 0xc4
#define DINAC5 0xc5
#elif defined CONFIG_MPU_SENSORS_MPU6050A2 || \
	defined CONFIG_MPU_SENSORS_MPU6050B1

#define DINA80 0x80
#define DINA90 0x90
#define DINAA0 0xa0
#define DINAC9 0xc9
#define DINACB 0xcb
#define DINACD 0xcd
#define DINACF 0xcf
#define DINAC8 0xc8
#define DINACA 0xca
#define DINACC 0xcc
#define DINACE 0xce
#define DINAD8 0xd8
#define DINADD 0xdd
#define DINAF8 0xf0
#define DINAFE 0xfe

#define DINBF8 0xf8
#define DINAC0 0xb0
#define DINAC1 0xb1
#define DINAC2 0xb4
#define DINAC3 0xb5
#define DINAC4 0xb8
#define DINAC5 0xb9
#define DINBC0 0xc0
#define DINBC2 0xc2
#define DINBC4 0xc4
#define DINBC6 0xc6
#else
#error No CONFIG_MPU_SENSORS_xxxx has been defined.
#endif


#endif // DMPKEY_H__
