bool MPU9250_DMP::read(float* acc, float* gyr, float* mag, int16_t* temp, ORIENTATION* ori)
{
	if ( fifoAvailable() && dmpUpdateFifo() == INV_SUCCESS )
	{
		if (acc) {
			acc[0] = calcAccel(ax);
			acc[1] = calcAccel(ay);
			acc[2] = calcAccel(az);
		}
		if (gyr) {
			gyr[0] = calcGyro(gx);
			gyr[1] = calcGyro(gy);
			gyr[2] = calcGyro(gz);
		}
		if (mag) {
			mag[0] = calcMag(mx);
			mag[1] = calcMag(my);
			mag[2] = calcMag(mz);
		}
		if ((_features & DMP_FEATURE_6X_LP_QUAT) && ori) {
			computeEulerAngles();
			ori->pitch = pitch;
			ori->yaw = yaw;
			ori->roll = roll;
		}
		if (temp) {
			updateTemperature();
			*temp = temperature;
		}
		return true;
	}
	return false;
}
static void vcomBulkIn(uint8_t EP, uint8_t EPStatus) {
	int i;

	if (fifoAvailable(&txfifo) == 0) {
		usbEnableNAKInterrupts(0);
		return;
	}

	for (i = 0; i < MAX_PACKET_SIZE; i++)
		if (!fifoGet(&txfifo, &_vcom_buffer[i])) break;

	if (i > 0) usbWrite(EP, _vcom_buffer, i);
}