blob: 80f0161a04e82e361f86335027381e231bb37f36 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
/* Copyright 2020 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 accelerometer calibration */
#ifndef __CROS_EC_ACCEL_CAL_H
#define __CROS_EC_ACCEL_CAL_H
#include "common.h"
#include "kasa.h"
#include "newton_fit.h"
#include "stdbool.h"
#include "stillness_detector.h"
struct accel_cal_algo {
struct kasa_fit kasa_fit;
struct newton_fit newton_fit;
};
struct accel_cal {
struct still_det still_det;
struct accel_cal_algo *algos;
uint8_t num_temp_windows;
fpv3_t bias;
};
/**
* Reset the accelerometer calibration object. This should only be called
* once. The struct will reset automatically in accel_cal_accumulate when
* a new calibration is computed.
*
* @param cal Pointer to the accel_cal struct to reset.
*/
void accel_cal_reset(struct accel_cal *cal);
/**
* Add new reading to the accelerometer calibration.
*
* @param cal Pointer to the accel_cal struct to update.
* @param sample_time The timestamp when the sample was taken.
* @param x X component of the new reading.
* @param y Y component of the new reading.
* @param z Z component of the new reading.
* @param temp The sensor's internal temperature in degrees C.
* @return True if a new bias is available.
*/
bool accel_cal_accumulate(struct accel_cal *cal, uint32_t sample_time, fp_t x,
fp_t y, fp_t z, fp_t temp);
#endif /* __CROS_EC_ACCEL_CAL_H */
|