diff options
Diffstat (limited to 'include/mag_cal.h')
-rw-r--r-- | include/mag_cal.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/include/mag_cal.h b/include/mag_cal.h new file mode 100644 index 0000000000..76410a193e --- /dev/null +++ b/include/mag_cal.h @@ -0,0 +1,46 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Online magnetometer calibration */ + +#ifndef __CROS_EC_MAG_CAL_H +#define __CROS_EC_MAG_CAL_H + +#include "math_util.h" +#include "mat44.h" +#include "vec4.h" + +#define MAG_CAL_MAX_SAMPLES 0xffff +#define MAG_CAL_MIN_BATCH_WINDOW_US SECOND +#define MAG_CAL_MIN_BATCH_SIZE 25 /* samples */ + +struct mag_cal_t { + /* + * Matric for sphere fitting: + * +----+----+----+----+ + * | xx | xy | xz | x | + * +----+----+----+----+ + * | xy | yy | yz | y | + * +----+----+----+----+ + * | xz | yz | zz | z | + * +----+----+----+----+ + * | x | y | z | 1 | + * +----+----+----+----+ + */ + mat44_t acc; + vec4_t acc_w; + float radius; + + vector_3_t bias; + + /* number of samples needed to calibrate */ + uint16_t batch_size; + uint16_t nsamples; +}; + +void init_mag_cal(struct mag_cal_t *moc); + +int mag_cal_update(struct mag_cal_t *moc, const vector_3_t v); +#endif /* __CROS_EC_MAG_CAL_H */ |