C++程序  |  177行  |  6.04 KB

/*
 $License:
   Copyright 2011 InvenSense, Inc.

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
  $
 */
/*******************************************************************************
 *
 * $Id: mldl.h 5639 2011-06-14 01:23:05Z nroyer $
 *
 *******************************************************************************/

#ifndef MLDL_H
#define MLDL_H

#include "mltypes.h"
#include "mlsl.h"
#include <linux/mpu.h>
#include "mldl_cfg.h"
#ifdef INV_INCLUDE_LEGACY_HEADERS
#include "mldl_legacy.h"
#endif

    /* ------------ */
    /* - Defines. - */
    /* ------------ */

typedef enum _DEVICE_CONFIG {
    DEVICE_MPU_ACCEL = 0,
    DEVICE_MPU,
    NUM_OF_DEVICES
} DEVICE_CONFIG;

#define SERIAL_I2C                  0
#define SERIAL_SPI                  1

#define DATAMODE_MANUAL             0   // Manual data mode
#define DATAMODE_AUTO               1   // Auto data mode

#define DATASRC_IMMEDIATE           0   // Return data immediately
#define DATASRC_WHENREADY           1   // Only return data when new data is available
#define DATASRC_FIFO                2   // Use FIFO for data

#define SENSOR_DATA_GYROX           0x0001
#define SENSOR_DATA_GYROY           0x0002
#define SENSOR_DATA_GYROZ           0x0004
#define SENSOR_DATA_ACCELX          0x0008
#define SENSOR_DATA_ACCELY          0x0010
#define SENSOR_DATA_ACCELZ          0x0020
#define SENSOR_DATA_AUX1            0x0040
#define SENSOR_DATA_AUX2            0x0080
#define SENSOR_DATA_AUX3            0x0100
#define SENSOR_DATA_TEMP            0x0200

#define INTPIN_MPU                  0

#define INTLOGIC_HIGH               0
#define INTLOGIC_LOW                1

#define INTTYPE_PUSHPULL            0
#define INTTYPE_OPENDRAIN           1

#define INTLATCH_DISABLE            0
#define INTLATCH_ENABLE             1

#define MPUINT_MPU_READY            0x04
#define MPUINT_DMP_DONE             0x02
#define MPUINT_DATA_READY           0x01

#define INTLATCHCLEAR_READSTATUS    0
#define INTLATCHCLEAR_ANYREAD       1

#define DMP_DONTRUN                 0
#define DMP_RUN                     1

    /*---- defines for external interrupt status (via external call into library) ----*/
#define INT_CLEAR                   0
#define INT_TRIGGERED               1

typedef enum {
    INTSRC_MPU = 0,
    INTSRC_AUX1,
    INTSRC_AUX2,
    INTSRC_AUX3,
    INTSRC_TIMER,
    INTSRC_UNKNOWN,
    INTSRC_MPU_FIFO,
    INTSRC_MPU_MOTION,
    NUM_OF_INTSOURCES,
} INT_SOURCE;

    /* --------------- */
    /* - Structures. - */
    /* --------------- */

    /* --------------- */
    /* - Variables.  - */
    /* --------------- */

    /* --------------------- */
    /* - Function p-types. - */
    /* --------------------- */
#ifdef __cplusplus
extern "C" {
#endif

    inv_error_t inv_dl_open(void *mlslHandle);
    inv_error_t inv_dl_close(void);

    inv_error_t inv_dl_start(unsigned long sensors);
    inv_error_t inv_dl_stop(unsigned long sensors);

    struct mldl_cfg *inv_get_dl_config(void);

    inv_error_t inv_init_requested_sensors(unsigned long sensors);
    unsigned char inv_get_mpu_slave_addr(void);
    inv_error_t inv_get_dl_ctrl_dmp(unsigned char enableRun,
                                    unsigned char enableFIFO);
    inv_error_t inv_get_dl_cfg_int(unsigned char triggers);
    inv_error_t inv_dl_cfg_sampling(unsigned char lpf, unsigned char divider);
    inv_error_t inv_set_full_scale(float fullScale);
    inv_error_t inv_set_external_sync(unsigned char extSync);
    inv_error_t inv_set_ignore_system_suspend(unsigned char ignore);
    inv_error_t inv_clock_source(unsigned char clkSource);
    inv_error_t inv_get_mpu_memory(unsigned short key,
                                   unsigned short length,
                                   unsigned char *buffer);
    inv_error_t inv_set_mpu_memory(unsigned short key,
                                   unsigned short length,
                                   const unsigned char *buffer);
    inv_error_t inv_load_dmp(const unsigned char *buffer,
                             unsigned short length,
                             unsigned short startAddress);

    unsigned char inv_get_slicon_rev(void);
    inv_error_t inv_set_offsetTC(const unsigned char *tc);
    inv_error_t inv_set_offset(const short *offset);

    /* Functions for setting and retrieving the DMP memory */
    inv_error_t inv_get_mpu_memory_original(unsigned short key,
                                            unsigned short length,
                                            unsigned char *buffer);
    void inv_set_get_address(unsigned short (*func) (unsigned short key));
    unsigned short inv_dl_get_address(unsigned short key);
    uint_fast8_t inv_dmpkey_supported(unsigned short key);

    inv_error_t inv_get_interrupt_status(unsigned char intPin,
                                         unsigned char *value);
    unsigned char inv_get_interrupt_trigger(unsigned char index);
    void inv_clear_interrupt_trigger(unsigned char index);
    inv_error_t inv_interrupt_handler(unsigned char intSource);

    /** Only exposed for testing purposes */
    inv_error_t inv_set_mpu_memory_one_bank(unsigned char bank,
                                            unsigned short memAddr,
                                            unsigned short length,
                                            const unsigned char *buffer);
    inv_error_t inv_get_mpu_memory_one_bank(unsigned char bank,
                                            unsigned char memAddr,
                                            unsigned short length,
                                            unsigned char *buffer);
#ifdef __cplusplus
}
#endif
#endif                          // MLDL_H