From c35ea586b9e792c45b287924fd256928308d9a36 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 1 Jan 2014 21:12:20 -0800 Subject: [PATCH] altos: Flip acceleration data consistently for orientation changes Must flip the acceleration calibration data using the same function as flipping the actual acceleration data or the calibration will no longer be valid after changing orientation. For the MMA655x, this means using 4095 in both places, rather than using 0x7fff for the calibration data changes and 4095 for the data value changes. For the MPU6000, this means using 0 in both places. Signed-off-by: Keith Packard --- src/core/ao_config.c | 10 +++++++--- src/core/ao_data.h | 8 ++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/core/ao_config.c b/src/core/ao_config.c index 590d8a49..4482f673 100644 --- a/src/core/ao_config.c +++ b/src/core/ao_config.c @@ -514,6 +514,10 @@ ao_config_pad_orientation_show(void) __reentrant printf("Pad orientation: %d\n", ao_config.pad_orientation); } +#ifndef AO_ACCEL_INVERT +#define AO_ACCEL_INVERT 0x7fff +#endif + void ao_config_pad_orientation_set(void) __reentrant { @@ -523,10 +527,10 @@ ao_config_pad_orientation_set(void) __reentrant _ao_config_edit_start(); ao_cmd_lex_i &= 1; if (ao_config.pad_orientation != ao_cmd_lex_i) { - uint16_t t; + int16_t t; t = ao_config.accel_plus_g; - ao_config.accel_plus_g = 0x7fff - ao_config.accel_minus_g; - ao_config.accel_minus_g = 0x7fff - t; + ao_config.accel_plus_g = AO_ACCEL_INVERT - ao_config.accel_minus_g; + ao_config.accel_minus_g = AO_ACCEL_INVERT - t; } ao_config.pad_orientation = ao_cmd_lex_i; _ao_config_edit_finish(); diff --git a/src/core/ao_data.h b/src/core/ao_data.h index e1d8a139..c4b062fd 100644 --- a/src/core/ao_data.h +++ b/src/core/ao_data.h @@ -273,14 +273,16 @@ typedef int16_t accel_t; /* MMA655X is hooked up so that positive values represent negative acceleration */ +#define AO_ACCEL_INVERT 4095 + #define ao_data_accel(packet) ((packet)->mma655x) #if AO_MMA655X_INVERT -#define ao_data_accel_cook(packet) (4095 - (packet)->mma655x) +#define ao_data_accel_cook(packet) (AO_ACCEL_INVERT - (packet)->mma655x) #else #define ao_data_accel_cook(packet) ((packet)->mma655x) #endif #define ao_data_set_accel(packet, accel) ((packet)->mma655x = (accel)) -#define ao_data_accel_invert(accel) (4095 - (accel)) +#define ao_data_accel_invert(accel) (AO_ACCEL_INVERT - (accel)) #endif @@ -288,6 +290,8 @@ typedef int16_t accel_t; #define HAS_ACCEL 1 +#define AO_ACCEL_INVERT 0 + typedef int16_t accel_t; /* MPU6000 is hooked up so that positive y is positive acceleration */ -- 2.30.2