unsigned short MPU9250_DMP::fifoAvailable(void)
{
	unsigned char fifoH, fifoL;

	if (mpu_read_reg(MPU9250_FIFO_COUNTH, &fifoH) != INV_SUCCESS)
		return 0;
	if (mpu_read_reg(MPU9250_FIFO_COUNTL, &fifoL) != INV_SUCCESS)
		return 0;

	return (fifoH << 8 ) | fifoL;
}
uint8_t mpu_device_init(void)
{
  ENABLE_IST;
  // Reset the internal registers
  mpu_write_reg(MPU6500_PWR_MGMT_1, 0x80);
  MPU_INIT_DELAY(100);
  // Reset gyro/accel/temp digital signal path
  mpu_write_reg(MPU6500_SIGNAL_PATH_RESET, 0x07);
  MPU_INIT_DELAY(100);

  if (MPU6500_ID != mpu_read_reg(MPU6500_WHO_AM_I))
    return 1;

  uint8_t MPU6500_Init_Data[7][2] = {
    { MPU6500_PWR_MGMT_1,     0x03 }, // Auto selects Clock Source
    { MPU6500_PWR_MGMT_2,     0x00 }, // all enable
    { MPU6500_CONFIG,         0x00 }, // gyro bandwidth 0x00:250Hz 0x04:20Hz
    { MPU6500_GYRO_CONFIG,    0x10 }, // gyro range 0x10:+-1000dps 0x18:+-2000dps
    { MPU6500_ACCEL_CONFIG,   0x10 }, // acc range 0x10:+-8G
    { MPU6500_ACCEL_CONFIG_2, 0x00 }, // acc bandwidth 0x00:250Hz 0x04:20Hz
    { MPU6500_USER_CTRL,      0x20 }, // Enable the I2C Master I/F module
                                      // pins ES_DA and ES_SCL are isolated from 
                                      // pins SDA/SDI and SCL/SCLK.
  };
  uint8_t i = 0;
  for (i = 0; i < 7; i++)
  {
      mpu_write_reg(MPU6500_Init_Data[i][0], MPU6500_Init_Data[i][1]);
      MPU_INIT_DELAY(1);
  }
  
  ist8310_init();
  mpu_offset_cal();
  return 0;
}
bool MPU9250_DMP::dataReady()
{
	unsigned char intStatusReg;

	if (mpu_read_reg(MPU9250_INT_STATUS, &intStatusReg) == INV_SUCCESS)
	{
		return (intStatusReg & (1<<INT_STATUS_RAW_DATA_RDY_INT));
	}
	return false;
}
static uint8_t ist_reg_read_by_mpu(uint8_t addr)
{
  uint8_t retval;
  mpu_write_reg(MPU6500_I2C_SLV4_REG, addr);
  MPU_INIT_DELAY(10);
  mpu_write_reg(MPU6500_I2C_SLV4_CTRL, 0x80);
  MPU_INIT_DELAY(10);
  retval = mpu_read_reg(MPU6500_I2C_SLV4_DI);
  //turn off slave4 after read
  mpu_write_reg(MPU6500_I2C_SLV4_CTRL, 0x00);
  MPU_INIT_DELAY(10);
  return retval;
}