/** * This file was taken from InvenSense MotionApps v6.12 library and * refactored for the hoverboard-sideboard-hack project. * * Copyright (C) 2020-2021 Emanuel FERU * Copyright (C) 2011-2012 InvenSense Corporation, All Rights Reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ // Define to prevent recursive inclusion #ifndef MPU6050_H #define MPU6050_H #include #include "defines.h" //-------------------------------------------- #define INV_X_GYRO (0x40) #define INV_Y_GYRO (0x20) #define INV_Z_GYRO (0x10) #define INV_XYZ_GYRO (INV_X_GYRO | INV_Y_GYRO | INV_Z_GYRO) #define INV_XYZ_ACCEL (0x08) #define INV_XYZ_COMPASS (0x01) #define MPU_INT_STATUS_DATA_READY (0x0001) #define MPU_INT_STATUS_DMP (0x0002) #define MPU_INT_STATUS_PLL_READY (0x0004) #define MPU_INT_STATUS_I2C_MST (0x0008) #define MPU_INT_STATUS_FIFO_OVERFLOW (0x0010) #define MPU_INT_STATUS_ZMOT (0x0020) #define MPU_INT_STATUS_MOT (0x0040) #define MPU_INT_STATUS_FREE_FALL (0x0080) #define MPU_INT_STATUS_DMP_0 (0x0100) #define MPU_INT_STATUS_DMP_1 (0x0200) #define MPU_INT_STATUS_DMP_2 (0x0400) #define MPU_INT_STATUS_DMP_3 (0x0800) #define MPU_INT_STATUS_DMP_4 (0x1000) #define MPU_INT_STATUS_DMP_5 (0x2000) /* Set up APIs */ int mpu_init(void); int mpu_init_slave(void); int mpu_set_bypass(unsigned char bypass_on); /* Configuration APIs */ int mpu_lp_accel_mode(unsigned short rate); int mpu_lp_motion_interrupt(unsigned short thresh, unsigned char time, unsigned short lpa_freq); int mpu_set_int_level(unsigned char active_low); int mpu_set_int_latched(unsigned char enable); int mpu_set_dmp_state(unsigned char enable); int mpu_get_dmp_state(unsigned char *enabled); int mpu_get_lpf(unsigned short *lpf); int mpu_set_lpf(unsigned short lpf); int mpu_get_gyro_fsr(unsigned short *fsr); int mpu_set_gyro_fsr(unsigned short fsr); int mpu_get_accel_fsr(unsigned char *fsr); int mpu_set_accel_fsr(unsigned char fsr); int mpu_get_compass_fsr(unsigned short *fsr); int mpu_get_gyro_sens(float *sens); int mpu_get_accel_sens(unsigned short *sens); int mpu_get_sample_rate(unsigned short *rate); int mpu_set_sample_rate(unsigned short rate); int mpu_get_compass_sample_rate(unsigned short *rate); int mpu_set_compass_sample_rate(unsigned short rate); int mpu_get_fifo_config(unsigned char *sensors); int mpu_configure_fifo(unsigned char sensors); int mpu_get_power_state(unsigned char *power_on); int mpu_set_sensors(unsigned char sensors); int mpu_read_6500_accel_bias(long *accel_bias); int mpu_set_gyro_bias_reg(long * gyro_bias); int mpu_set_accel_bias_6500_reg(const long *accel_bias); int mpu_read_6050_accel_bias(long *accel_bias); int mpu_set_accel_bias_6050_reg(const long *accel_bias); /* Data getter/setter APIs */ int mpu_get_gyro_reg(short *data, unsigned long *timestamp); int mpu_get_accel_reg(short *data, unsigned long *timestamp); int mpu_get_compass_reg(short *data, unsigned long *timestamp); int mpu_get_temperature(long *data, unsigned long *timestamp); int mpu_get_int_status(short *status); int mpu_read_fifo(short *gyro, short *accel, unsigned long *timestamp, unsigned char *sensors, unsigned char *more); int mpu_read_fifo_stream(unsigned short length, unsigned char *data, unsigned char *more); int mpu_reset_fifo(void); int mpu_write_mem(unsigned short mem_addr, unsigned short length, unsigned char *data); int mpu_read_mem(unsigned short mem_addr, unsigned short length, unsigned char *data); int mpu_load_firmware(unsigned short length, const unsigned char *firmware, unsigned short start_addr, unsigned short sample_rate); int mpu_reg_dump(void); int mpu_read_reg(unsigned char reg, unsigned char *data); int mpu_run_self_test(long *gyro, long *accel); int mpu_run_6500_self_test(long *gyro, long *accel, unsigned char debug); void mpu_start_self_test(void); void mpu_setup_gyro(void); /* MPU configuration */ int mpu_config(void); /* MPU get packet data */ void mpu_get_data(void); /* Data post-processing */ void mpu_read_gyro_raw(void); void mpu_read_accel_raw(void); void mpu_calc_euler_angles(void); void mpu_tap_func(unsigned char direction, unsigned char count); void mpu_android_orient_func(unsigned char orientation); /* Handle user input commands */ void mpu_handle_input(char c); void mpu_print_to_console(void); #endif