rcbench
Servo and ESC test bench: panel, IOmcu and shared C
Loading...
Searching...
No Matches
settings.h
Go to the documentation of this file.
1
17
18#pragma once
19
20#include <stdbool.h>
21#include <stddef.h>
22#include <stdint.h>
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
43
50#define SET_CAT_SETUP_COUNT SET_CAT_ESC
51
52typedef enum {
53 SET_TYPE_INT = 0,
54 SET_TYPE_FLOAT,
55 SET_TYPE_BOOL,
56 SET_TYPE_ENUM,
57} setting_type_t;
58
62#define SET_INA_PARTS 4
63#define SET_INA_CHANNELS 12
64#define SET_INA_CH_ROWS 3
65
67typedef enum {
68 /* --- pack, motor, telemetry, output ------------------------------- */
69 SET_PACK_CELLS = 0,
70 SET_PACK_MAH,
71 SET_PACK_MOHM,
72 SET_MOTOR_POLES,
73 SET_MOTOR_KV,
74 SET_OUT_MIN_US,
75 SET_OUT_MAX_US,
76 SET_OUT_RAMP,
77 /* --- application --------------------------------------------------- */
78 SET_THEME,
79 SET_BRIGHTNESS,
80 SET_CONTRAST,
81 SET_SCREEN_ROT,
82 SET_LANGUAGE,
83 SET_UNITS,
84 SET_TIME_ZONE,
85 SET_DIM_AFTER,
86 SET_PLOT_PAN,
87 SET_KNOB_EN,
88 SET_KNOB_SCALE,
89 /* --- interfaces ---------------------------------------------------- */
90 SET_INA228_EN,
91 SET_INA228_ADDR,
92 SET_INA228_UOHM,
93 SET_INA228_MAX_A,
94 /* The one INA3221 of 0.21: in no category and on no screen, loaded
95 * and saved as stored, and read once to seed SENSORS
96 * (settings_sensors.h). */
97 SET_INA3221_EN,
98 SET_INA3221_ADDR,
99 SET_INA3221_MOHM,
100 SET_INA3221_CH,
101 SET_SENSE_SDA,
102 SET_SENSE_SCL,
103 SET_ENC_EN,
104 SET_ENC_CENTRE,
105 SET_TONE_EN,
106 SET_TONE_PIN,
107 SET_TONE_F_MIN,
108 SET_TONE_F_MAX,
109 SET_TONE_SPLIT,
110 SET_TONE_GAP,
111 SET_TONE_PERIODS,
112 SET_VIBE_EN,
113 SET_OPTICAL_EN,
114 SET_OPTICAL_PIN,
115 SET_PDMINI_EN,
116 SET_PDMINI_TX,
117 SET_PDMINI_RX,
118 SET_PDMINI_BAUD,
119 /* --- the programming port ------------------------------------------ */
120 SET_HITEC_RX,
121 /* --- the INA3221 parts, on SETUP > SENSORS (settings_sensors.h) ----- */
122 /* Part a's FITTED, then channel by channel (part a's CHn) WATCHES,
123 * SHUNT and LIMIT, SET_INA_W_<a><n> for part a's CHn:
124 * settings_sensors.h names them by channel number. */
125 SET_INA_FIT_0, SET_INA_FIT_1, SET_INA_FIT_2, SET_INA_FIT_3,
126 SET_INA_W_01, SET_INA_SH_01, SET_INA_LIM_01,
127 SET_INA_W_02, SET_INA_SH_02, SET_INA_LIM_02,
128 SET_INA_W_03, SET_INA_SH_03, SET_INA_LIM_03,
129 SET_INA_W_11, SET_INA_SH_11, SET_INA_LIM_11,
130 SET_INA_W_12, SET_INA_SH_12, SET_INA_LIM_12,
131 SET_INA_W_13, SET_INA_SH_13, SET_INA_LIM_13,
132 SET_INA_W_21, SET_INA_SH_21, SET_INA_LIM_21,
133 SET_INA_W_22, SET_INA_SH_22, SET_INA_LIM_22,
134 SET_INA_W_23, SET_INA_SH_23, SET_INA_LIM_23,
135 SET_INA_W_31, SET_INA_SH_31, SET_INA_LIM_31,
136 SET_INA_W_32, SET_INA_SH_32, SET_INA_LIM_32,
137 SET_INA_W_33, SET_INA_SH_33, SET_INA_LIM_33,
138 SET_INA_FIT_LAST = SET_INA_FIT_3,
139 SET_INA_CH_0 = SET_INA_W_01,
140 SET_INA_CH_LAST = SET_INA_LIM_33,
141 /* --- the programmable supply --------------------------------------- */
142 SET_SUPPLY_V_MAX,
143 SET_SUPPLY_I_MAX,
144 SET_SUPPLY_V_START,
145 SET_SUPPLY_I_START,
146 SET_SUPPLY_TRIP_I,
147 SET_SUPPLY_TRIP_V,
148 SET_SUPPLY_TRIP_MS,
149 SET_SUPPLY_CONFIRM_SLIDE,
150 SET_SUPPLY_CONFIRM_KEYS,
151 /* --- the servo test ------------------------------------------------- */
152 SET_SERVO_CURVE,
153 SET_SERVO_TEST_HZ,
154 SET_SERVO_TEST_RANGE,
155 SET_SERVO_LEN_BY,
156 SET_SERVO_LEN_S,
157 SET_SERVO_LEN_MOVES,
158 SET_SERVO_DWELL_MS,
159 SET_SERVO_SETTLE_MS,
160 SET_SERVO_STEP_48,
161 SET_SERVO_STEP_60,
162 SET_SERVO_STEP_74,
163 SET_SERVO_STEP_84,
164 SET_SERVO_BROWNOUT,
165 SET_SERVO_IDLE_MAX,
166 SET_SERVO_HOLD_MAX,
167 SET_SERVO_TRAVEL_MAX_MS,
168 SET_SERVO_STALL_A,
169 SET_SERVO_REPORT,
170 SET_SERVO_PROG_V,
171 SET_SERVO_PROG_I,
172 SET_SERVO_PROG_WAIT,
173 SET_SERVO_TARGET,
174 SET_SERVO_PORT_PWM,
175 SET_HITEC_SERIES,
176 /* --- stick programming ---------------------------------------------- */
177 SET_STICK_V,
178 SET_STICK_I,
179 SET_STICK_BEEP_MIN,
180 SET_STICK_GAP_MIN,
181 SET_STICK_LONG,
182 SET_STICK_LONG_MAX,
183 SET_STICK_GROUP_GAP,
184 SET_STICK_ENTRY,
185 SET_STICK_STORE,
186 SET_STICK_OFF,
187 SET_STICK_SILENCE,
188 SET_STICK_TIMEOUT,
189 SET_STICK_THRESHOLD,
190 SET_STICK_HYST,
191 /* --- updates --------------------------------------------------------- */
192 SET_UPD_REMIND,
193 SET_UPD_CHANNEL,
194 /* --- the SD card ----------------------------------------------------- */
195 SET_LOG_AUTO,
196 SET_LOG_USER,
197
198 SETTING_COUNT
200
206typedef struct {
207 const char *key;
208 const char *unit;
210 setting_type_t type;
211 float min;
212 float max;
213 float step;
214 float def;
215 const char *const *options;
216 uint8_t option_count;
221
224
225/*
226 * A few short strings beside the numbers, kept by the same store and saved
227 * by the same request. A string holds up to SETTINGS_TEXT_MAX - 1
228 * characters.
229 */
236
237#define SETTINGS_TEXT_MAX 24
238
242
243typedef struct {
244 bool (*load)(float *values, int count);
245 /*
246 * True only if every value reached the medium. A store that cannot
247 * say so cannot be believed: the model keeps the edit and the screen
248 * goes on offering the write, rather than reporting a save that did
249 * not happen and refusing the retry that would notice.
250 */
251 bool (*save)(const float *values, int count);
252 /* The strings, under the same rules; NULL in a store that keeps none,
253 * which then keeps them for the session only. */
254 bool (*load_text)(char (*texts)[SETTINGS_TEXT_MAX], int count);
255 bool (*save_text)(const char (*texts)[SETTINGS_TEXT_MAX], int count);
257
259void settings_init(void);
260
261void settings_set_store(const settings_store_t *store);
262void settings_set_observer(settings_observer_fn fn);
263void settings_set_text_observer(settings_text_observer_fn fn);
264
267typedef bool (*settings_hold_fn)(setting_id_t id);
284
289typedef bool (*settings_armed_fn)(void);
290
297
307
308const setting_def_t *settings_def(setting_id_t id);
309
327const char *settings_label(setting_id_t id);
334const char *settings_help(setting_id_t id);
344
345float settings_get(setting_id_t id);
346int settings_get_int(setting_id_t id);
347bool settings_get_bool(setting_id_t id);
348
351void settings_set(setting_id_t id, float value);
360void settings_adjust(setting_id_t id, int steps);
361
367
378bool settings_sense_sda_valid(int gpio);
379
391bool settings_tap_pin_valid(int gpio);
392
399bool settings_pdmini_same_pin(void);
400
404void settings_reset_all(void);
405
407int settings_in_category(setting_cat_t cat, setting_id_t *out, int max);
408
417
426const char *settings_value_text(setting_id_t id, char *buf, size_t n);
435const char *settings_value_text_of(setting_id_t id, float value, char *buf,
436 size_t n);
437
443 int max);
444
446const char *settings_text(setting_text_id_t id);
450void settings_set_text(setting_text_id_t id, const char *text);
451
452#ifdef ESP_PLATFORM
455#endif
456
462bool settings_dirty(void);
463
464/* ------------------------------------------------------ the stored copy */
465
466/*
467 * The values and strings the medium holds, as far as the panel knows: the
468 * ones settings_init() loaded (the defaults where the store had none), or
469 * the ones the last successful settings_save() wrote. A refused save leaves
470 * the copy as it was.
471 */
472
482int settings_changes(void);
483
494int settings_discard(void);
495
497/*
498 * Write the values through the store. True if the store took them. False
499 * if there is no store, or the store refused: the values stay dirty, the
500 * request is answered so the button offers the write again, and
501 * settings_save_failed() stands until the next successful save or the next
502 * edit.
503 */
504bool settings_save(void);
505
507bool settings_save_failed(void);
508
509/* ------------------------------------------------------- asking to save */
510
520void settings_request_save(void);
521
523bool settings_save_asked(void);
524
531bool settings_save_tick(bool safe);
532
534void settings_cancel_save(void);
535
536#ifdef __cplusplus
537}
538#endif
const char * settings_value_text(setting_id_t id, char *buf, size_t n)
Render the value as it should appear on screen, unit excluded: a float with settings_decimals() digit...
Definition settings.c:999
void(*) settings_observer_fn(setting_id_t id)
Definition settings.h:223
int settings_changes(void)
Definition settings.c:1185
setting_cat_t
Definition settings.h:28
@ SET_CAT_IFACE
Definition settings.h:31
@ SET_CAT_STICK
Definition settings.h:38
@ SET_CAT_SUPPLY
Definition settings.h:36
@ SET_CAT_SENSORS
Definition settings.h:33
@ SET_CAT_CARD
Definition settings.h:32
@ SET_CAT_SERVO
Definition settings.h:37
@ SET_CAT_ESC
Definition settings.h:35
@ SET_CAT_UPDATE
Definition settings.h:39
@ SET_CAT_APP
Definition settings.h:29
const char * settings_help(setting_id_t id)
A setting's help line in English, from ui_text.def.
Definition settings_text.c:65
setting_cat_t settings_text_category(setting_text_id_t id)
Definition settings.c:1101
const char * settings_text_key(setting_text_id_t id)
Definition settings.c:1083
int settings_in_category(setting_cat_t cat, setting_id_t *out, int max)
Definition settings.c:963
void settings_adjust(setting_id_t id, int steps)
Definition settings.c:903
bool settings_save_tick(bool safe)
Definition settings.c:1146
void settings_request_save(void)
Definition settings.c:1128
const char * settings_value_text_of(setting_id_t id, float value, char *buf, size_t n)
Render value as settings_value_text() renders the value of id.
Definition settings.c:1004
void settings_init(void)
Definition settings.c:809
int settings_decimals(setting_id_t id)
The digits after the point a number of id is shown and typed with: as many as its step has.
Definition settings.c:982
bool settings_derived(setting_id_t id)
Definition settings.c:558
const char * settings_category_name(setting_cat_t cat)
A category's name in English, from ui_text.def.
Definition settings.c:591
void settings_reset(setting_cat_t cat)
Definition settings.c:738
bool settings_cycles(setting_id_t id)
Definition settings.c:892
bool settings_text_differs(setting_text_id_t id)
Definition settings.c:1179
bool settings_differs(setting_id_t id)
Definition settings.c:1174
bool settings_save_failed(void)
Definition settings.c:1123
void settings_cancel_save(void)
Definition settings.c:1144
int settings_texts_in_category(setting_cat_t cat, setting_text_id_t *out, int max)
Definition settings.c:1107
bool settings_save(void)
Definition settings.c:1044
int settings_discard(void)
Definition settings.c:1197
const char * settings_stored_text(setting_text_id_t id)
Definition settings.c:1166
void settings_set_armed(settings_armed_fn fn)
Install who says whether the bench is ARMED, or NULL for a bench that is never ARMED....
Definition settings.c:569
void settings_set(setting_id_t id, float value)
Definition settings.c:871
setting_id_t
Every setting's id, in schema order.
Definition settings.h:67
@ SET_INA_CH_0
Definition settings.h:139
bool settings_dirty(void)
Definition settings.c:1039
const settings_store_t * settings_nvs_store(void)
Definition settings_nvs.c:150
float settings_stored(setting_id_t id)
Definition settings.c:1161
bool settings_tap_pin_valid(int gpio)
Whether Tap pin takes gpio: an IOmcu GPIO the RP2350-CAN brings out and does not reserve,...
Definition settings.c:622
bool settings_pdmini_same_pin(void)
Definition settings.c:634
bool settings_sense_sda_valid(int gpio)
Definition settings.c:607
bool settings_held(setting_id_t id)
Whether id is held now: settings_set(), settings_adjust(), settings_reset() and settings_reset_all() ...
Definition settings.c:580
bool settings_safe_only(setting_id_t id)
Whether id changes on a SAFE bench only: held while the source settings_set_armed() installed says AR...
Definition settings.c:575
int settings_option_list(setting_id_t id)
Which option list a setting shows, so a language's options are found by it.
Definition settings_text.c:71
bool(*) settings_hold_fn(setting_id_t id)
Definition settings.h:267
setting_text_id_t
Definition settings.h:230
@ SET_TEXT_LOG_USER_DIR
Definition settings.h:233
@ SET_TEXT_LOG_AUTO_DIR
Definition settings.h:232
@ SET_TEXT_DUT_NAME
Definition settings.h:231
void settings_set_text(setting_text_id_t id, const char *text)
Definition settings.c:1091
void(*) settings_text_observer_fn(setting_text_id_t id)
Definition settings.h:241
void settings_set_hold(settings_hold_fn fn)
Definition settings.c:563
const char * settings_label(setting_id_t id)
A setting's label in English, from ui_text.def.
Definition settings_text.c:59
const char * settings_text(setting_text_id_t id)
Definition settings.c:1075
bool(*) settings_armed_fn(void)
Who says whether the bench is ARMED now.
Definition settings.h:289
bool settings_save_asked(void)
Definition settings.c:1142
A setting's row of the schema: its key, unit, category, type, range, step, default and options....
Definition settings.h:206
float max
Definition settings.h:212
float min
Definition settings.h:211
float def
Definition settings.h:214
const char * key
Definition settings.h:207
uint8_t option_count
Definition settings.h:216
float step
Definition settings.h:213
float off_below
Definition settings.h:219
const char *const * options
Definition settings.h:215
setting_cat_t cat
Definition settings.h:209
const char * unit
Definition settings.h:208
setting_type_t type
Definition settings.h:210
Definition settings.h:243