summaryrefslogtreecommitdiffstats
path: root/libsensors
diff options
context:
space:
mode:
Diffstat (limited to 'libsensors')
-rw-r--r--libsensors/MPLSensor.cpp38
1 files changed, 21 insertions, 17 deletions
diff --git a/libsensors/MPLSensor.cpp b/libsensors/MPLSensor.cpp
index d06a39a..d58c4fd 100644
--- a/libsensors/MPLSensor.cpp
+++ b/libsensors/MPLSensor.cpp
@@ -142,42 +142,42 @@ MPLSensor::MPLSensor() :
pthread_mutex_lock(&mMplMutex);
mpu_int_fd = open("/dev/mpuirq", O_RDWR);
- if (mpu_int_fd == -1) {
- ALOGE("could not open the mpu irq device node");
- } else {
+ if (mpu_int_fd != -1) {
fcntl(mpu_int_fd, F_SETFL, O_NONBLOCK);
mIrqFds.add(MPUIRQ_FD, mpu_int_fd);
mPollFds[MPUIRQ_FD].fd = mpu_int_fd;
mPollFds[MPUIRQ_FD].events = POLLIN;
+ } else {
+ ALOGE("could not open the mpu irq device node");
}
accel_fd = open("/dev/accelirq", O_RDWR);
- if (accel_fd == -1) {
- ALOGE("could not open the accel irq device node");
- } else {
+ if (accel_fd != -1) {
fcntl(accel_fd, F_SETFL, O_NONBLOCK);
mIrqFds.add(ACCELIRQ_FD, accel_fd);
mPollFds[ACCELIRQ_FD].fd = accel_fd;
mPollFds[ACCELIRQ_FD].events = POLLIN;
+ } else {
+ ALOGE("could not open the accel irq device node");
}
timer_fd = open("/dev/timerirq", O_RDWR);
- if (timer_fd == -1) {
- ALOGE("could not open the timer irq device node");
- } else {
+ if (timer_fd != -1) {
fcntl(timer_fd, F_SETFL, O_NONBLOCK);
mIrqFds.add(TIMERIRQ_FD, timer_fd);
mPollFds[TIMERIRQ_FD].fd = timer_fd;
mPollFds[TIMERIRQ_FD].events = POLLIN;
+ if (accel_fd == -1) {
+ // no accel irq, but timer is available
+ mUseTimerIrqAccel = true;
+ ALOGW("using timer irq for accel");
+ }
+ } else {
+ ALOGE("could not open the timer irq device node");
}
data_fd = mpu_int_fd;
- if ((accel_fd == -1) && (timer_fd != -1)) {
- // no accel irq, but timer is available
- mUseTimerIrqAccel = true;
- }
-
memset(mPendingEvents, 0, sizeof(mPendingEvents));
mPendingEvents[RotationVector].version = sizeof(sensors_event_t);
@@ -603,6 +603,7 @@ void MPLSensor::rvHandler(sensors_event_t* s, uint32_t* pending_mask,
if (norm > 1.0f) {
//renormalize
+ // TODO: Do we need to renormalize quat[0] as well?
norm = sqrtf(norm);
float inv_norm = 1.0f / norm;
quat[1] = quat[1] * inv_norm;
@@ -614,11 +615,14 @@ void MPLSensor::rvHandler(sensors_event_t* s, uint32_t* pending_mask,
quat[1] = -quat[1];
quat[2] = -quat[2];
quat[3] = -quat[3];
+ quat[0] = -quat[0];
}
- s->gyro.v[0] = quat[1];
- s->gyro.v[1] = quat[2];
- s->gyro.v[2] = quat[3];
+ s->data[0] = quat[1]; // "x * sin(θ/2)"
+ s->data[1] = quat[2]; // "y * sin(θ/2)"
+ s->data[2] = quat[3]; // "z * sin(θ/2)"
+ s->data[3] = quat[0]; // " cos(θ/2)"
+ s->data[4] = -1; // "estimated heading Accuracy (in radians) (-1 if unavailable)"
}
void MPLSensor::laHandler(sensors_event_t* s, uint32_t* pending_mask,