inv_error_t umplDmpSetup(void) { inv_error_t result; /* Setup Bias Trackers: * inv_set_bias_update * Known to work with the following arguments: * INV_BIAS_FROM_NO_MOTION * INV_BIAS_FROM_TEMPERATURE * INV_LEARN_BIAS_FROM_TEMPERATURE * */ #if defined UMPL_NINE_AXIS inv_set_mpu_sensors(INV_NINE_AXIS); #else inv_set_mpu_sensors(INV_SIX_AXIS_GYRO_ACCEL); #endif #ifdef UMPL_ENABLE_TEMPCOMP result = inv_set_bias_update( INV_BIAS_FROM_NO_MOTION | INV_BIAS_FROM_TEMPERATURE | INV_LEARN_BIAS_FROM_TEMPERATURE ); #else result = inv_set_bias_update( INV_BIAS_FROM_NO_MOTION ); #endif if (result != INV_SUCCESS) #ifdef UMPL_NINE_AXIS result = inv_external_slave_akm8975_open(); if (result != INV_SUCCESS) #endif inv_set_fifo_interrupt(1); // Setup FIFO: result = inv_send_quaternion(INV_32_BIT); if (result != INV_SUCCESS) result = inv_send_gyro(INV_ALL,INV_32_BIT); if (result != INV_SUCCESS) result = inv_send_accel(INV_ALL,INV_32_BIT); if (result != INV_SUCCESS) result = inv_set_fifo_rate(10); if (result != INV_SUCCESS) #ifdef UMPL_ENABLE_TEMPCOMP result = inv_enable_temp_comp(); if (result != INV_SUCCESS) #endif result = inv_set_motion_callback(umplMotionCallback); if (result != INV_SUCCESS) return INV_SUCCESS; }
/** * container function for all the calls we make once to set up the MPL. */ void MPLSensor::initMPL() { FUNC_LOG; inv_error_t result; unsigned short bias_update_mask = 0xFFFF; struct mldl_cfg *mldl_cfg; if (inv_dmp_open() != INV_SUCCESS) { ALOGE("Fatal Error : could not open DMP correctly.\n"); } result = inv_set_mpu_sensors(ALL_MPL_SENSORS_NP); //default to all sensors, also makes 9axis enable work ALOGE_IF(result != INV_SUCCESS, "Fatal Error : could not set enabled sensors."); if (inv_load_calibration() != INV_SUCCESS) { ALOGE("could not open MPL calibration file"); } //check for the 9axis fusion library: if available load it and start 9x void* h_dmp_lib=dlopen("libinvensense_mpl.so", RTLD_NOW); if(h_dmp_lib) { const char* error; error = dlerror(); inv_error_t (*fp_inv_enable_9x_fusion)() = (inv_error_t(*)()) dlsym(h_dmp_lib, "inv_enable_9x_fusion"); if((error = dlerror()) != NULL) { ALOGE("%s %s", error, "inv_enable_9x_fusion"); } else if ((*fp_inv_enable_9x_fusion)() != INV_SUCCESS) { ALOGE( "Warning : 9 axis sensor fusion not available " "- No compass detected.\n"); } else { /* 9axis is loaded and enabled */ /* this variable is used for coming up with sensor list */ mNineAxisEnabled = true; } } else { const char* error = dlerror(); ALOGE("libinvensense_mpl.so not found, 9x sensor fusion disabled (%s)",error); } mldl_cfg = inv_get_dl_config(); if (inv_set_bias_update(bias_update_mask) != INV_SUCCESS) { ALOGE("Error : Bias update function could not be set.\n"); } if (inv_set_motion_interrupt(1) != INV_SUCCESS) { ALOGE("Error : could not set motion interrupt"); } if (inv_set_fifo_interrupt(1) != INV_SUCCESS) { ALOGE("Error : could not set fifo interrupt"); } result = inv_set_fifo_rate(6); if (result != INV_SUCCESS) { ALOGE("Fatal error: inv_set_fifo_rate returned %d\n", result); } setupCallbacks(); }