diff options
author | Gwendal Grignou <gwendal@chromium.org> | 2015-07-17 17:59:14 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2016-08-25 20:56:43 +0000 |
commit | 4088235bd710e504ab467fa5d526b30649816705 (patch) | |
tree | 6630bbc871ea6d886ee9be3391c99071b2adca1e | |
parent | f36b5eadb307518f2c2bfd61535fe458f08f6c8d (diff) | |
download | chrome-ec-4088235bd710e504ab467fa5d526b30649816705.tar.gz |
UPSTREAM: ryu: Fix orientation of accel and compass
Add matrices to align sensors vectors with the device reference.
Move rotation in read routines, to allow fifo to contains processed
information.
BRANCH=smaug
TEST=Worsk on smaug
BUG=chrome-os-partner:39900
Change-Id: I009e7f24ef6ee0574ed664aeb5fd649fcd7039fd
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/286659
Reviewed-by: Alec Berg <alecaberg@chromium.org>
(cherry picked from commit 57ec5805fe302b8da22e4141a3e5620812fd7663)
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/370508
-rw-r--r-- | common/motion_sense.c | 15 | ||||
-rw-r--r-- | driver/accel_kxcj9.c | 2 | ||||
-rw-r--r-- | driver/accelgyro_lsm6ds0.c | 7 | ||||
-rw-r--r-- | test/motion_lid.c | 7 |
4 files changed, 13 insertions, 18 deletions
diff --git a/common/motion_sense.c b/common/motion_sense.c index 57a4bd26bb..629a523910 100644 --- a/common/motion_sense.c +++ b/common/motion_sense.c @@ -397,18 +397,9 @@ void motion_sense_task(void) if (ret != EC_SUCCESS) continue; rd_cnt++; - /* - * Rotate the accel vector so the reference for - * all sensors are in the same space. - */ mutex_lock(&g_sensor_mutex); - if (*sensor->rot_standard_ref != NULL) - rotate(sensor->raw_xyz, - *sensor->rot_standard_ref, - sensor->xyz); - else - memcpy(sensor->xyz, sensor->raw_xyz, - sizeof(vector_3_t)); + memcpy(sensor->xyz, sensor->raw_xyz, + sizeof(sensor->xyz)); mutex_unlock(&g_sensor_mutex); } } @@ -937,7 +928,7 @@ static int command_accel_read_xyz(int argc, char **argv) while ((n == -1) || (n-- > 0)) { ret = sensor->drv->read(sensor, v); if (ret == 0) - ccprintf("Current raw data %d: %-5d %-5d %-5d\n", + ccprintf("Current data %d: %-5d %-5d %-5d\n", id, v[X], v[Y], v[Z]); else ccprintf("vector not ready\n"); diff --git a/driver/accel_kxcj9.c b/driver/accel_kxcj9.c index 292b43f3fc..cabd7ef589 100644 --- a/driver/accel_kxcj9.c +++ b/driver/accel_kxcj9.c @@ -425,6 +425,8 @@ static int read(const struct motion_sensor_t *s, vector_3_t v) v[i] <<= (16 - resolution); v[i] += (data->offset[i] << 5) / range; } + if (*s->rot_standard_ref != NULL) + rotate(v, *s->rot_standard_ref, v); return EC_SUCCESS; } diff --git a/driver/accelgyro_lsm6ds0.c b/driver/accelgyro_lsm6ds0.c index ebd9bd745e..001f7bb5c7 100644 --- a/driver/accelgyro_lsm6ds0.c +++ b/driver/accelgyro_lsm6ds0.c @@ -356,9 +356,8 @@ static int read(const struct motion_sensor_t *s, vector_3_t v) * to get the latest updated sensor data quickly. */ if (!tmp) { - v[0] = s->raw_xyz[0]; - v[1] = s->raw_xyz[1]; - v[2] = s->raw_xyz[2]; + if (v != s->raw_xyz) + memcpy(v, s->raw_xyz, sizeof(s->raw_xyz)); return EC_SUCCESS; } @@ -381,6 +380,8 @@ static int read(const struct motion_sensor_t *s, vector_3_t v) v[i] = ((int16_t)((raw[i * 2 + 1] << 8) | raw[i * 2])); v[i] += (data->offset[i] << 5) / range; } + if (*s->rot_standard_ref != NULL) + rotate(v, *s->rot_standard_ref, v); return EC_SUCCESS; } diff --git a/test/motion_lid.c b/test/motion_lid.c index d06a76135d..a3ce4925f1 100644 --- a/test/motion_lid.c +++ b/test/motion_lid.c @@ -40,9 +40,10 @@ static int accel_init(const struct motion_sensor_t *s) static int accel_read(const struct motion_sensor_t *s, vector_3_t v) { - v[X] = s->xyz[X]; - v[Y] = s->xyz[Y]; - v[Z] = s->xyz[Z]; + if (*s->rot_standard_ref != NULL) + rotate(s->xyz, *s->rot_standard_ref, v); + else if (s->xyz != v) + memcpy(v, s->xyz, sizeof(v)); return EC_SUCCESS; } |