ACwing FC firmware
STM32WB55: attitude IEKF, altitude Kalman filter, flight core, protocol v2
Loading...
Searching...
No Matches
calib_mgr.h
Go to the documentation of this file.
1
18#ifndef CALIB_MGR_H
19#define CALIB_MGR_H
20
21#include <stdint.h>
22#include <stddef.h>
23
24/* ---- calibration sets (RAM and flash) ---- */
25typedef struct { float off[3], scale[3]; } cal_accel_t;
26typedef struct { float roll_deg, pitch_deg; } cal_level_t;
27typedef struct { float bias[3]; } cal_gyro_t;
28typedef struct { float hi[3], scale[3]; } cal_compass_t;
29typedef struct { uint8_t rev_mask, pad[3]; } cal_motors_t;
30typedef struct { float scale_v, scale_i; } cal_battery_t;
41
42void cal_set_defaults(cal_set_t *s, const float mag_hi_default[3]);
44void cal_copy_type(cal_set_t *dst, const cal_set_t *src, uint8_t type);
45
46/* ---- samples from the ImuTask (raw: calibration removed) ---- */
47typedef struct {
48 float acc[3];
49 float gyro[3];
50 float mag[3];
51 float q[4];
52 uint8_t mag_new;
53 uint8_t running;
55
57typedef void (*cal_apply_fn)(uint8_t type, const cal_set_t *set);
58
62typedef void (*cal_batt_fn)(float *vbat, float *last_used_mah, float *last_scale_i);
63
70
74void cal_init(const cal_config_t *cfg, cal_set_t *active);
75void cal_set_sensors(uint16_t sensors);
77uint8_t cal_start(uint8_t type, uint8_t option, uint8_t armed, uint32_t now_ms, uint8_t *reason);
78uint8_t cal_capture(uint32_t now_ms, uint8_t *reason);
79uint8_t cal_abort(uint8_t *reason);
80uint8_t cal_set_ref(uint8_t type, uint8_t index, float value, uint8_t *reason);
83uint8_t cal_save_check(uint8_t *reason);
84const cal_set_t *cal_result(void);
85uint8_t cal_type(void);
86void cal_saved(void);
88void cal_feed(const cal_sample_t *s, uint32_t now_ms);
89void cal_tick(uint32_t now_ms);
90
91uint8_t cal_active(void);
92uint8_t cal_running(void);
93uint8_t cal_wants_samples(void);
95uint8_t cal_take_changed(void);
97uint8_t cal_take_failed(void);
99size_t cal_frame(uint8_t *out, size_t cap);
100
101#endif /* CALIB_MGR_H */
static batt_state_t s
Definition battery.c:21
float bias[3]
Definition calib_mgr.c:47
float cap[6][3]
Definition calib_mgr.c:36
float vbat
Definition calib_mgr.c:50
uint8_t cal_take_changed(void)
1 if the state/step changed since the last call (send a CALIB frame now)
Definition calib_mgr.c:141
void cal_tick(uint32_t now_ms)
Definition calib_mgr.c:520
uint8_t cal_abort(uint8_t *reason)
Definition calib_mgr.c:221
uint8_t cal_type(void)
Definition calib_mgr.c:133
void cal_init(const cal_config_t *cfg, cal_set_t *active)
active: the set in effect (RAM), owned by the caller.
Definition calib_mgr.c:89
uint8_t cal_set_ref(uint8_t type, uint8_t index, float value, uint8_t *reason)
Definition calib_mgr.c:547
void(* cal_batt_fn)(float *vbat, float *last_used_mah, float *last_scale_i)
battery readings for the BATTERY calibration (AppTask context): vbat with the scale in effect,...
Definition calib_mgr.h:62
uint8_t cal_running(void)
active and not DONE: blocks arming / other starts
Definition calib_mgr.c:132
uint8_t cal_save_check(uint8_t *reason)
CAL_SAVE validation: returns the ACK; on OK the caller writes the result (cal_result()) to flash and ...
Definition calib_mgr.c:230
uint8_t cal_capture(uint32_t now_ms, uint8_t *reason)
Definition calib_mgr.c:528
void(* cal_apply_fn)(uint8_t type, const cal_set_t *set)
apply hook: puts 'type' of 'set' in effect (RAM), in the estimator context
Definition calib_mgr.h:57
void cal_feed(const cal_sample_t *s, uint32_t now_ms)
Definition calib_mgr.c:507
void cal_saved(void)
state SAVED (one frame), then IDLE
Definition calib_mgr.c:242
size_t cal_frame(uint8_t *out, size_t cap)
CALIB frame for the current calibration; 0 if none.
Definition calib_mgr.c:592
void cal_copy_type(cal_set_t *dst, const cal_set_t *src, uint8_t type)
copies the part of 'src' that belongs to 'type' into 'dst'
Definition calib_mgr.c:72
uint8_t cal_take_failed(void)
1 + type once when a calibration failed (EVENT 51), 0 otherwise
Definition calib_mgr.c:143
uint8_t cal_active(void)
a calibration exists (any state but IDLE)
Definition calib_mgr.c:131
const cal_set_t * cal_result(void)
Definition calib_mgr.c:134
uint8_t cal_start(uint8_t type, uint8_t option, uint8_t armed, uint32_t now_ms, uint8_t *reason)
Definition calib_mgr.c:150
uint8_t cal_wants_samples(void)
Definition calib_mgr.c:136
void cal_set_defaults(cal_set_t *s, const float mag_hi_default[3])
Definition calib_mgr.c:60
void cal_set_sensors(uint16_t sensors)
expansion board detected later
Definition calib_mgr.c:87
uint32_t off
Definition log_task.c:50
uint8_t set
Definition log_task.c:39
float scale_i
Definition calib_mgr.h:30
uint8_t motors_built
Definition calib_mgr.h:66
uint16_t sensors
CAPS bits.
Definition calib_mgr.h:65
cal_apply_fn apply
Definition calib_mgr.h:67
cal_batt_fn batt
NULL: BATTERY -> SENSOR_MISSING.
Definition calib_mgr.h:68
float pitch_deg
Definition calib_mgr.h:26
uint8_t running
estimator running
Definition calib_mgr.h:53
uint8_t mag_new
Definition calib_mgr.h:52
cal_level_t level
Definition calib_mgr.h:34
cal_motors_t motors
Definition calib_mgr.h:37
cal_battery_t battery
Definition calib_mgr.h:38
cal_compass_t compass
Definition calib_mgr.h:36
cal_accel_t accel
Definition calib_mgr.h:33
cal_gyro_t gyro
Definition calib_mgr.h:35
uint32_t done_mask
bit (type-1): this calibration was done and saved
Definition calib_mgr.h:39