コード例 #1
0
ファイル: mpu9150-drv.c プロジェクト: Donny3000/beaglebone
/**
* Read from the device
*
* This function is called when the device is read in real-time context.
*
*/
static ssize_t mpu9150_rtdm_read_rt(struct rtdm_dev_context *context,
rtdm_user_info_t * user_info, void *buf,
size_t nbyte)
{
	int ret;

	if( mpu9150_device )
	{
		/* take the semaphore */
		rtdm_sem_down( &sem );

		mpu9150_read_accel();
		mpu9150_read_gyro();
		mpu9150_read_mag();
		mpu9150_read_temp();

		ret = rtdm_safe_copy_to_user(user_info, buf, buffer.data.alldata, DATA_BUFFER_SIZE);

		/* if an error has occurred, send it to user */
		if( ret )
			return ret;

		/* release the semaphore */
		rtdm_sem_up( &sem );
	}
	else
		return 0;

	return DATA_BUFFER_SIZE;
}
コード例 #2
0
int mpu9150_read(mpudata_t *mpu)
{
    if (mpu9150_read_dmp(mpu) != 0)
        return -1;

    if (mpu9150_read_mag(mpu) != 0)
        return -1;

    calibrate_data(mpu);

    return data_fusion(mpu);
}
コード例 #3
0
ファイル: mpu9150.c プロジェクト: jpoirier/linux-mpu9150
int mpu9150_read(mpudata_t *mpu)
{
	if (mpu9150_read_dmp(mpu) != 0)
		return -1;
#ifdef AK89xx_SECONDARY
	if (mpu9150_read_mag(mpu) != 0)
		return -1;
#endif
	calibrate_data(mpu);

	return data_fusion(mpu);
}
コード例 #4
0
int mpu9150_read(mpudata_t *mpu)
{
//printk("mpu9150_read...");
int _start = jiffies;
	if (mpu9150_read_dmp(mpu) != 0)
		return -1;

	if (mpu9150_read_mag(mpu) != 0)
		return -1;

	//calibrate_data(mpu);

	//printk("Time for read mpu: %d\n", jiffies_to_msecs(jiffies-_start));
	return 0; //data_fusion(mpu);
}
コード例 #5
0
ファイル: test.c プロジェクト: WhiskyDelta/sensord
int main (int argc, char **argv) {
	t_mpu9150 accel;
	mpu9150_open(&accel);
	mpu9150_init(&accel);
	mpu9150_open_mag(&accel);
	mpu9150_init_mag(&accel);
	mpu9150_start_mag(&accel);

	usleep(10000);
	while(1) {
		mpu9150_read_data(&accel);
		mpu9150_read_mag(&accel);
		printf("\r\t%f\t%f\t%f\t|\t%f\t%f\t%f\t|\t%f\t%f\t%f\t",accel.acc[0],accel.acc[1],accel.acc[2],accel.gyr[0],accel.gyr[1],accel.gyr[2],accel.mag[0],accel.mag[1],accel.mag[2]);
		usleep(10000);
	}
	return 0;
}
コード例 #6
0
ファイル: imucal.c プロジェクト: FlavioFalcao/linux-mpu9150
void read_loop(unsigned int sample_rate)
{
	int i, change;
	unsigned long loop_delay;
	mpudata_t mpu;

	if (sample_rate == 0)
		return;

	memset(&mpu, 0, sizeof(mpudata_t));

	for (i = 0; i < 3; i++) {
		minVal[i] = 0x7fff;
		maxVal[i] = 0x8000;
	}

	loop_delay = (1000 / sample_rate) - 2;

	printf("\nEntering read loop (ctrl-c to exit)\n\n");

	linux_delay_ms(loop_delay);

	while (!done) {
		change = 0;

		if (mag_mode) {
			if (mpu9150_read_mag(&mpu) == 0) {
				for (i = 0; i < 3; i++) {
					if (mpu.rawMag[i] < minVal[i]) {
						minVal[i] = mpu.rawMag[i];
						change = 1;
					}
				
					if (mpu.rawMag[i] > maxVal[i]) {
						maxVal[i] = mpu.rawMag[i];
						change = 1;
					}
				}
			}
		}
		else {
			if (mpu9150_read_dmp(&mpu) == 0) {
				for (i = 0; i < 3; i++) {
					if (mpu.rawAccel[i] < minVal[i]) {
						minVal[i] = mpu.rawAccel[i];
						change = 1;
					}
				
					if (mpu.rawAccel[i] > maxVal[i]) {
						maxVal[i] = mpu.rawAccel[i];
						change = 1;
					}
				}
			}
		}
		
		if (change) {
			if (mag_mode)
				print_mag(&mpu);
			else
				print_accel(&mpu);
		}

		linux_delay_ms(loop_delay);
	}

	printf("\n\n");
}