aboutsummaryrefslogtreecommitdiff
path: root/src/modules/sensors
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2015-02-28 04:01:10 +0100
committerLorenz Meier <lm@inf.ethz.ch>2015-02-28 04:01:10 +0100
commite4830eb53fc712669e1f6d9ac312e311ec88fd40 (patch)
tree5521e10d7d9037d6bde4d7fa9f996a663816cd06 /src/modules/sensors
parent81648f84cd97ec865ba7f20cebeb6285f7ef6d18 (diff)
downloadpx4-firmware-e4830eb53fc712669e1f6d9ac312e311ec88fd40.tar.gz
px4-firmware-e4830eb53fc712669e1f6d9ac312e311ec88fd40.tar.bz2
px4-firmware-e4830eb53fc712669e1f6d9ac312e311ec88fd40.zip
mag detection (sensors / commander): Default all sensors to internal, set the ones which have been found explicitely to zero if they were -1.
Diffstat (limited to 'src/modules/sensors')
-rw-r--r--src/modules/sensors/sensor_params.c6
-rw-r--r--src/modules/sensors/sensors.cpp11
2 files changed, 12 insertions, 5 deletions
diff --git a/src/modules/sensors/sensor_params.c b/src/modules/sensors/sensor_params.c
index 3e21ec2a9..5ec678033 100644
--- a/src/modules/sensors/sensor_params.c
+++ b/src/modules/sensors/sensor_params.c
@@ -130,7 +130,7 @@ PARAM_DEFINE_INT32(CAL_MAG0_ID, 0);
* @max 30
* @group Sensor Calibration
*/
-PARAM_DEFINE_INT32(CAL_MAG0_ROT, 0);
+PARAM_DEFINE_INT32(CAL_MAG0_ROT, -1);
/**
* Magnetometer X-axis offset
@@ -308,7 +308,7 @@ PARAM_DEFINE_INT32(CAL_MAG1_ID, 0);
* @max 30
* @group Sensor Calibration
*/
-PARAM_DEFINE_INT32(CAL_MAG1_ROT, 0);
+PARAM_DEFINE_INT32(CAL_MAG1_ROT, -1);
/**
* Magnetometer X-axis offset
@@ -486,7 +486,7 @@ PARAM_DEFINE_INT32(CAL_MAG2_ID, 0);
* @max 30
* @group Sensor Calibration
*/
-PARAM_DEFINE_INT32(CAL_MAG2_ROT, 0);
+PARAM_DEFINE_INT32(CAL_MAG2_ROT, -1);
/**
* Magnetometer X-axis offset
diff --git a/src/modules/sensors/sensors.cpp b/src/modules/sensors/sensors.cpp
index 9a90c84e0..1d392b0da 100644
--- a/src/modules/sensors/sensors.cpp
+++ b/src/modules/sensors/sensors.cpp
@@ -1511,14 +1511,21 @@ Sensors::parameter_update_poll(bool forced)
if (ioctl(fd, MAGIOCGEXTERNAL, 0) <= 0) {
/* mag is internal */
_mag_rotation[s] = _board_rotation;
- /* reset param to -1 to indicate external mag */
+ /* reset param to -1 to indicate internal mag */
int32_t minus_one = MAG_ROT_VAL_INTERNAL;
param_set_no_notification(param_find(str), &minus_one);
} else {
- int32_t mag_rot = 0;
+ int32_t mag_rot;
param_get(param_find(str), &mag_rot);
+ /* check if this mag is still set as internal */
+ if (mag_rot < 0) {
+ /* it was marked as internal, change to external with no rotation */
+ mag_rot = 0;
+ param_set_no_notification(param_find(str), &mag_rot);
+ }
+
/* handling of old setups, will be removed later (noted Feb 2015) */
int32_t deprecated_mag_rot = 0;
param_get(param_find("SENS_EXT_MAG_ROT"), &deprecated_mag_rot);