summaryrefslogtreecommitdiff
path: root/include/mag_cal.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/mag_cal.h')
-rw-r--r--include/mag_cal.h46
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 */