diff options
author | Gwendal Grignou <gwendal@chromium.org> | 2020-02-01 23:37:56 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-02-12 18:22:38 +0000 |
commit | 5c3bc0d02523850b0c8ef82cc16e6f8c27ab3229 (patch) | |
tree | d624bec72f92b48634dfbeb9418e61c7de4483ff | |
parent | b56a56eaba32f4d7d06750ffb3aed3f6e69b0d42 (diff) | |
download | chrome-ec-stabilize-12871.24.B-master.tar.gz |
common: mag_cal: Re-add bias inversionstabilize-quickfix-12871.27.B-masterstabilize-12871.91.B-masterstabilize-12871.65.B-masterstabilize-12871.57.B-masterstabilize-12871.253.B-masterstabilize-12871.24.B-masterstabilize-12871.103.B-masterstabilize-12871.102.B-masterrelease-R81-12871.B-master
Sensors add offset to raw value.
kaza_compute calculate the bias (the hard iron) and it has to be remove
from the raw value.
Invert the vector in magnetometer calibration code.
Fixes: 994af4a65fa7e ("common: mag_cal: update magnetometer to leverage kasa")
BUG=b:144027014,b:149116125
BRANCH=none
TEST=Check that after successful online calibration, value reported to
the host are closer to 0 than before calibration.
Change-Id: I6cfd711c82287b1c877912e85d84d2725b063cb2
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2034675
Reviewed-by: Yuval Peress <peress@chromium.org>
(cherry picked from commit d60a962c3a4907d2f18c236015aef7b989e1d384)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2051100
Tested-by: Yuval Peress <peress@chromium.org>
Auto-Submit: Yuval Peress <peress@chromium.org>
-rw-r--r-- | common/mag_cal.c | 6 | ||||
-rw-r--r-- | test/mag_cal.c | 12 |
2 files changed, 9 insertions, 9 deletions
diff --git a/common/mag_cal.c b/common/mag_cal.c index 1dc40e34db..f7b1945933 100644 --- a/common/mag_cal.c +++ b/common/mag_cal.c @@ -132,9 +132,9 @@ int mag_cal_update(struct mag_cal_t *moc, const intv3_t v) /* 4. Kasa sphere fitting */ kasa_compute(&moc->kasa_fit, bias, &radius); if (radius > MIN_FIT_MAG && radius < MAX_FIT_MAG) { - moc->bias[X] = FP_TO_INT(bias[X]); - moc->bias[Y] = FP_TO_INT(bias[Y]); - moc->bias[Z] = FP_TO_INT(bias[Z]); + moc->bias[X] = -FP_TO_INT(bias[X]); + moc->bias[Y] = -FP_TO_INT(bias[Y]); + moc->bias[Z] = -FP_TO_INT(bias[Z]); moc->radius = radius; diff --git a/test/mag_cal.c b/test/mag_cal.c index e1931c352a..65ffa13d8f 100644 --- a/test/mag_cal.c +++ b/test/mag_cal.c @@ -62,9 +62,9 @@ static int test_mag_cal_computes_bias(void) /* Add the final sample and check calibration. */ TEST_EQ(1, mag_cal_update(&cal, samples[cal.batch_size - 1]), "%d"); TEST_EQ(525, FP_TO_INT(cal.radius), "%d"); - TEST_EQ(-1, cal.bias[0], "%d"); - TEST_EQ(1, cal.bias[1], "%d"); - TEST_EQ(-2, cal.bias[2], "%d"); + TEST_EQ(1, cal.bias[0], "%d"); + TEST_EQ(-1, cal.bias[1], "%d"); + TEST_EQ(2, cal.bias[2], "%d"); /* * State should have reset, run the same code again to verify that @@ -74,9 +74,9 @@ static int test_mag_cal_computes_bias(void) TEST_EQ(0, mag_cal_update(&cal, samples[i]), "%d"); TEST_EQ(1, mag_cal_update(&cal, samples[cal.batch_size - 1]), "%d"); TEST_EQ(525, FP_TO_INT(cal.radius), "%d"); - TEST_EQ(-1, cal.bias[0], "%d"); - TEST_EQ(1, cal.bias[1], "%d"); - TEST_EQ(-2, cal.bias[2], "%d"); + TEST_EQ(1, cal.bias[0], "%d"); + TEST_EQ(-1, cal.bias[1], "%d"); + TEST_EQ(2, cal.bias[2], "%d"); return EC_SUCCESS; } |