aboutsummaryrefslogtreecommitdiff
path: root/src/systemcmds/tests/test_sensors.c
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2013-11-30 10:00:33 +0100
committerLorenz Meier <lm@inf.ethz.ch>2013-11-30 10:00:33 +0100
commit3701a02a37ddd9e78fa2ddcb7b9e9ec0d136ae79 (patch)
tree65e8f317e16ee6091031a40a537b1f44bde4e6ba /src/systemcmds/tests/test_sensors.c
parent39634d100104b64f205b69017562b3ac549cf264 (diff)
downloadpx4-firmware-3701a02a37ddd9e78fa2ddcb7b9e9ec0d136ae79.tar.gz
px4-firmware-3701a02a37ddd9e78fa2ddcb7b9e9ec0d136ae79.tar.bz2
px4-firmware-3701a02a37ddd9e78fa2ddcb7b9e9ec0d136ae79.zip
Tests for all PWM pins
Diffstat (limited to 'src/systemcmds/tests/test_sensors.c')
-rw-r--r--src/systemcmds/tests/test_sensors.c92
1 files changed, 79 insertions, 13 deletions
diff --git a/src/systemcmds/tests/test_sensors.c b/src/systemcmds/tests/test_sensors.c
index 14503276c..f6415b72f 100644
--- a/src/systemcmds/tests/test_sensors.c
+++ b/src/systemcmds/tests/test_sensors.c
@@ -1,7 +1,6 @@
/****************************************************************************
*
- * Copyright (C) 2012 PX4 Development Team. All rights reserved.
- * Author: Lorenz Meier <lm@inf.ethz.ch>
+ * Copyright (c) 2012, 2013 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -49,6 +48,8 @@
#include <fcntl.h>
#include <errno.h>
#include <debug.h>
+#include <math.h>
+#include <systemlib/err.h>
#include <arch/board/board.h>
@@ -77,6 +78,7 @@ static int accel(int argc, char *argv[]);
static int gyro(int argc, char *argv[]);
static int mag(int argc, char *argv[]);
static int baro(int argc, char *argv[]);
+static int mpu6k(int argc, char *argv[]);
/****************************************************************************
* Private Data
@@ -91,6 +93,7 @@ struct {
{"gyro", "/dev/gyro", gyro},
{"mag", "/dev/mag", mag},
{"baro", "/dev/baro", baro},
+ {"mpu6k", "/dev/mpu6k", mpu6k},
{NULL, NULL, NULL}
};
@@ -133,23 +136,83 @@ accel(int argc, char *argv[])
printf("\tACCEL accel: x:%8.4f\ty:%8.4f\tz:%8.4f m/s^2\n", (double)buf.x, (double)buf.y, (double)buf.z);
}
- // /* wait at least 10ms, sensor should have data after no more than 2ms */
- // usleep(100000);
+ if (fabsf(buf.x) > 30.0f || fabsf(buf.y) > 30.0f || fabsf(buf.z) > 30.0f) {
+ warnx("MPU6K acceleration values out of range!");
+ return ERROR;
+ }
+
+ /* Let user know everything is ok */
+ printf("\tOK: ACCEL passed all tests successfully\n");
+ close(fd);
+
+ return OK;
+}
+
+static int
+mpu6k(int argc, char *argv[])
+{
+ printf("\tMPU6K: test start\n");
+ fflush(stdout);
+
+ int fd;
+ struct accel_report buf;
+ struct gyro_report gyro_buf;
+ int ret;
+
+ fd = open("/dev/accel_mpu6k", O_RDONLY);
+
+ if (fd < 0) {
+ printf("\tMPU6K: open fail, run <mpu6000 start> first.\n");
+ return ERROR;
+ }
+
+ /* wait at least 100ms, sensor should have data after no more than 20ms */
+ usleep(100000);
+
+ /* read data - expect samples */
+ ret = read(fd, &buf, sizeof(buf));
- // ret = read(fd, buf, sizeof(buf));
+ if (ret != sizeof(buf)) {
+ printf("\tMPU6K: read1 fail (%d)\n", ret);
+ return ERROR;
- // if (ret != sizeof(buf)) {
- // printf("\tMPU-6000: read2 fail (%d)\n", ret);
- // return ERROR;
+ } else {
+ printf("\tMPU6K accel: x:%8.4f\ty:%8.4f\tz:%8.4f m/s^2\n", (double)buf.x, (double)buf.y, (double)buf.z);
+ }
- // } else {
- // printf("\tMPU-6000 values: acc: x:%d\ty:%d\tz:%d\tgyro: r:%d\tp:%d\ty:%d\n", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
- // }
+ if (fabsf(buf.x) > 30.0f || fabsf(buf.y) > 30.0f || fabsf(buf.z) > 30.0f) {
+ warnx("MPU6K acceleration values out of range!");
+ return ERROR;
+ }
+
+ /* Let user know everything is ok */
+ printf("\tOK: MPU6K ACCEL passed all tests successfully\n");
- /* XXX more tests here */
+ close(fd);
+ fd = open("/dev/gyro_mpu6k", O_RDONLY);
+
+ if (fd < 0) {
+ printf("\tMPU6K GYRO: open fail, run <l3gd20 start> or <mpu6000 start> first.\n");
+ return ERROR;
+ }
+
+ /* wait at least 5 ms, sensor should have data after that */
+ usleep(5000);
+
+ /* read data - expect samples */
+ ret = read(fd, &gyro_buf, sizeof(gyro_buf));
+
+ if (ret != sizeof(gyro_buf)) {
+ printf("\tMPU6K GYRO: read fail (%d)\n", ret);
+ return ERROR;
+
+ } else {
+ printf("\tMPU6K GYRO rates: x:%8.4f\ty:%8.4f\tz:%8.4f rad/s\n", (double)gyro_buf.x, (double)gyro_buf.y, (double)gyro_buf.z);
+ }
/* Let user know everything is ok */
- printf("\tOK: ACCEL passed all tests successfully\n");
+ printf("\tOK: MPU6K GYRO passed all tests successfully\n");
+ close(fd);
return OK;
}
@@ -187,6 +250,7 @@ gyro(int argc, char *argv[])
/* Let user know everything is ok */
printf("\tOK: GYRO passed all tests successfully\n");
+ close(fd);
return OK;
}
@@ -224,6 +288,7 @@ mag(int argc, char *argv[])
/* Let user know everything is ok */
printf("\tOK: MAG passed all tests successfully\n");
+ close(fd);
return OK;
}
@@ -261,6 +326,7 @@ baro(int argc, char *argv[])
/* Let user know everything is ok */
printf("\tOK: BARO passed all tests successfully\n");
+ close(fd);
return OK;
}