22#include "freertos/FreeRTOS.h"
23#include "freertos/queue.h"
24#include "freertos/semphr.h"
31#include "busfault_screen.h"
68#include "ui_alert_slot.h"
73static inline uint32_t now_ms(
void)
75 return (uint32_t)(esp_timer_get_time() / 1000);
85#define PANEL_CH_THROTTLE 0u
87#define ALERT_MAX UI_ALERT_MAX
90#define CONTROL_PERIOD_MS 5u
95extern atomic_uint s_capabilities;
100extern atomic_uint s_link_lost_ms;
101extern bool s_link_lost_shown;
102extern uint32_t s_recoveries;
103extern uint32_t s_recoveries_total;
111extern bool s_outputs_read_fresh;
114extern uint16_t s_far_minor;
115extern uint16_t s_board;
134extern SemaphoreHandle_t s_snap_lock;
150 uint32_t starts_taken;
172 uint32_t link_errors;
174 uint32_t run_seconds;
185 uint32_t servo_source_changes;
190 uint32_t servo_source_dropped_at;
191 uint32_t servo_win_lost;
202static inline void snap_lock(
void) { xSemaphoreTake(s_snap_lock, portMAX_DELAY); }
203static inline void snap_unlock(
void) { xSemaphoreGive(s_snap_lock); }
207uint32_t control_alert_numbered(
const char *text);
225void control_alert_withdraw(uint32_t gen);
232__attribute__((always_inline))
static inline void
233control_alert(
const char *text)
236 snprintf(s_snap.alert.text,
sizeof(s_snap.alert.text),
"%s", text);
237 s_snap.alert.pending =
true;
239 ++s_snap.alert.posted;
240 if (s_snap.alert.posted == 0u) {
241 s_snap.alert.posted = 1u;
249extern uint16_t s_throttle_hundredths;
250extern atomic_bool s_disarm_request;
260static inline void throttle_to_zero(
void)
262 s_throttle_hundredths = 0u;
263 (void)
outputs_set(&s_out, PANEL_CH_THROTTLE, 0u, now_ms());
268extern atomic_uint s_supply_vin_mv;
269extern atomic_uint s_supply_baud;
272extern uint32_t s_arm_gen;
275extern atomic_bool s_poles_owed;
276extern atomic_uint s_poles_value;
286extern atomic_uint s_pdmini_wiring;
291 .en = (word & (1u << 24)) != 0u,
292 .tx = (int8_t)((int)((word >> 16) & 0xFFu) - 1),
293 .rx = (int8_t)((int)((word >> 8) & 0xFFu) - 1),
294 .baud = (uint8_t)(word & 0xFFu),
301 return wiring_of(atomic_load(&s_pdmini_wiring));
307void publish_sense(
void);
312extern bool s_pump_live;
320extern atomic_ullong s_servo_pins;
321extern atomic_bool s_servo_pins_known;
323extern atomic_bool s_enc_held;
333void esc_profiles_load(
void);
340extern atomic_uint s_log_open_run;
341extern atomic_uint s_test_open_run;
342extern atomic_uint s_test_open_txt;
345extern atomic_uint s_card_written;
346extern atomic_int s_card_written_tab;
350card_dir_t panel_card_make_dir(
void *ctx,
const char *level);
355extern size_t s_kst_file_len;
358extern unsigned s_kst_file_mount;
359extern atomic_uint s_kst_file_sent;
360extern atomic_uint s_kst_file_done;
361extern atomic_bool s_kst_file_ok;
362void kst_record_write(
void);
363void kst_record_load(
bool late);
396extern unsigned s_kst_card_mount;
398extern atomic_uint s_kst_card_sent;
399extern atomic_uint s_kst_card_answered;
400void kst_card_serve(
void);
422void log_set_folder(log_folder_t kind,
const char *dir);
427void log_open_marks(
log_marks_t *marks,
char *run_dir,
char *test_dir);
481#define LOG_NOTE_MAX 208
482#define LOG_NOTE_Q_LEN 4
499extern atomic_uint s_log_run_now;
503extern atomic_uint s_test_opens_sent;
504extern atomic_uint s_test_opens_done;
505extern unsigned s_test_ends_sent;
506extern atomic_uint s_test_ends_done;
507extern atomic_int s_test_file;
508extern atomic_bool s_test_report;
516extern log_run_kind_t s_log_kind;
517extern atomic_bool s_servo_testing;
524extern uint32_t s_unanswered;
525extern bool s_link_is_up;
526extern bool s_link_quiet;
531static inline bool poll_page(
link_host_t *host, uint8_t page, uint8_t count,
538 return exchange(host, &req, reply);
542static inline bool read_regs(
link_host_t *host, uint8_t page, uint8_t offset,
549 return exchange(host, &req, reply);
553uint32_t port_now(
void *ctx);
554void port_between(
void *ctx);
563static inline bool write_regs(
link_host_t *host, uint8_t page, uint8_t offset,
564 uint8_t count,
const uint16_t *regs,
572extern uint16_t s_arm_value;
591 const uint16_t regs[2] = { armed ? s_arm_value : 0u,
592 s_throttle_hundredths };
598bool poles_service(
void);
599void endpoints_service(
bool far_disarmed);
614static inline bool far_line_trusted(
bool *answered)
622void far_end_stop_here(
void);
623void arm_write_failed(uint32_t quiet_before,
const char *alert);
625static inline bool control_clear_failsafe(
link_msg_t *reply)
667extern atomic_uint s_prog_want_target;
668extern atomic_bool s_prog_want_pwm;
669extern atomic_uint s_prog_pin;
675#define PROG_PORTS_NONE 0xFFFFFFFFu
676extern atomic_uint s_prog_ports;
680void prog_ports_publish(
void);
681void prog_ports_lost(
void);
682void prog_ports_init_screens(
void);
683void prog_ports_to_screens(
void);
688#define DRIVE_PWM_BIT (1u << 16)
691#define DRIVE_HELD_SHIFT 20u
692extern atomic_uint s_drive;
699extern atomic_uint s_sense_unheld;
700extern atomic_uint s_tone_unheld;
705extern atomic_uint s_hitec_rx_want;
706extern atomic_uint s_hitec_rx_mark;
708void kst_port_look(
void);
709void sense_link_alerts(
void);
718extern atomic_uint s_sense_parts;
740void sense_map_came_up(uint16_t minor);
741void sense_map_lost(
void);
742void sense_map_service(
bool idle);
746void sense_win_service(
void);
751void tone_link_alerts(
void);
752void tone_link_service(
void);
753void kst_commands(
void);
754void kst_link_service(
void);
755void prog_link_service(
void);
756void hitec_rx_service(
void);
781static inline void prog_drive_publish(
void)
784 atomic_store(&s_drive, ((
unsigned)drive.
target << 8) | drive.
pin
785 | (drive.
pwm ? DRIVE_PWM_BIT : 0u)
787 << DRIVE_HELD_SHIFT));
794extern atomic_ullong s_throttle_pins;
795extern atomic_bool s_throttle_pins_known;
796extern atomic_uint s_throttle_proto;
800void read_outputs_binding(
void);
801void post_no_reading(
void);
806 uint32_t *last_poll, uint32_t *last_status);
807void advance_model_and_log(
bool link_up,
float emitted,
810void publish_snapshot(
const bench_state_t *bench,
bool link_up,
816extern atomic_uint s_throttle_ramp;
817void publish_throttle_ramp(
void);
818static inline uint16_t panel_throttle_ramp(
void)
820 return (uint16_t)atomic_load(&s_throttle_ramp);
828#define PANEL_SAMPLE_HZ 20.0f
830typedef enum { PANEL_CMD_MOTOR = 0, PANEL_CMD_SERVO,
831 PANEL_CMD_STOP, PANEL_CMD_OUTPUTS,
832 PANEL_CMD_SUPPLY } panel_cmd_kind_t;
835 panel_cmd_kind_t kind;
874 uint32_t consumed_seq;
878extern atomic_int s_outputs_result;
899extern atomic_bool s_stop_request;
901extern atomic_uint s_lets_go;
904extern atomic_bool s_supply_off_request;
905extern atomic_uint s_supply_offs;
906extern atomic_uint s_supply_set_mv;
907extern atomic_uint s_supply_set_ma;
908extern atomic_uint s_supply_vmax_mv;
909extern atomic_uint s_supply_imax_ma;
910extern atomic_uint s_supply_trip_ma;
911extern atomic_uint s_supply_trip_mv;
912extern atomic_uint s_supply_trip_ms;
913extern atomic_uint s_supply_ack;
914extern atomic_bool s_supply_live;
915extern atomic_uint s_supply_ons_sent;
916extern atomic_uint s_supply_ons_taken;
917extern atomic_uint s_pdmini_edits;
918extern atomic_bool s_supply_real;
922extern atomic_uint s_drv_gaps;
923extern atomic_uint s_tq_published;
924extern uint32_t s_lost_notice_seq;
925extern atomic_uint s_loss_gen;
926extern atomic_uint s_arm_ack;
939extern uint32_t s_arm_take_gen;
940extern uint32_t s_arm_take_drv;
945void log_follow_runs(
void);
956extern atomic_uint s_supply_adopt_mv;
957extern atomic_uint s_supply_adopt_ma;
958extern atomic_uint s_supply_adopt_gen;
959extern atomic_uint s_supply_adopt_done;
961extern atomic_uintptr_t s_escsim_profile;
962extern atomic_uint s_escsim_runs;
963extern bool s_supply_page;
964extern bool s_supply_auto;
965extern bool s_supply_is_real;
967extern uint32_t s_supply_ms;
968extern uint32_t s_supply_stops_served;
969extern uint32_t s_supply_step_ms;
970extern uint32_t s_supply_gen;
972void supply_log_tail(
void);
973void supply_switch(
bool on);
974void supply_follow_set(
void);
982static inline void supply_follow_stops(
void)
985 if (stops != s_supply_stops_served) {
986 s_supply_stops_served = stops;
987 supply_switch(
false);
996static inline void supply_service(
void)
998 if (atomic_exchange(&s_supply_off_request,
false)) {
999 supply_switch(
false);
1001 supply_follow_set();
1006void supply_pump(
void);
1007void supply_link_service(
void);
1014extern uint32_t s_totals_ms;
1024void arm_watch_service(
bool link_up);
1027bool disarm_here(
bool link_up);
1033void kst_ui_service(
void);
1036extern unsigned s_tq_lost;
1037bool supply_live_or_coming(
void);
1038void publish_supply_levels(
void);
1039void test_lines_service(
void);
1042 ui_screen_id_t route;
1043 uint32_t navigations;
1047void knob_apply(
const knob_turn_t *turn,
bool frame_lost);
1048void flush_screen_commands(uint32_t stops_now);
1056extern bool s_artbusy;
1057extern atomic_bool s_keeping;
1058extern SemaphoreHandle_t s_draw_lock;
1059extern uint8_t *s_drawpub;
1060extern uint8_t *s_drawshow;
1061void drawing_for_picker(uint16_t board);
1062void drawing_follow(
void);
1063void art_keep_service(
void);
1065void art_stop(
const char *why);
1066void art_begin(uint16_t board);
1067void art_slice(
void);
1074extern atomic_bool s_fw_quiet_req;
1075extern atomic_bool s_fw_quiet_ack;
1076extern bool s_wifi_ok;
1084bool cu_may_start(
void);
1090 uint32_t *last_poll, uint32_t *last_status);
1094void wifi_service(
bool armed, uint32_t stops_now);
1095void upd_remind_service(
bool armed,
bool unsafe,
const cu_snap_t *cs);
1104void upd_service(
bool armed,
bool unsafe, uint32_t stops_now,
1106void cu_render_service(
bool unsafe,
bool link_up,
const cu_snap_t *cs);
uint32_t arming_stop_count(const arming_t *a)
How many stops have been applied.
Definition arming.c:95
When the bench is allowed to be armed, and what the panel must tell the IOmcu about it.
Keeping a board's drawing, so it is fetched once and not every time the link comes up.
void bench_state_from_regs(bench_state_t *b, const uint16_t *regs, uint8_t offset, uint8_t count)
Decode a BENCH page into b.
Definition bench_state.c:81
The bench readings, in the units a person reads: V, A, W, rpm (revolutions per minute),...
The panel's half of a binding on the link: writing the two output pages and reading them back.
bind_read_t
What a read of the two pages gave.
Definition bind_link.h:85
The folders of the panel's SD (Secure Digital) card, and the files in them with a fixed name.
card_dir_t
What making a folder came to.
Definition card_tree.h:118
The IOmcu's firmware update, as the panel offers and shows it.
The panel's half of the throttle's pulse endpoints, Idle pulse and Full pulse, on the CHAN_CFG (0x23)...
FILES: the SD (Secure Digital) card in two panes, commander style, and the operations on its files an...
#define HITEC_CARD_TEXT_MAX
The text's size, with its terminator: a D series record takes 234 bytes.
Definition hitec_card.h:56
The panel's half of the HITEC (0x34) link page, protocol 4.23 on: one step of a session with a servo ...
The programmer for servos by Hitec as the SERVO screen runs it: the session with one servo,...
void hitec_record_write(void)
Write the text the render loop handed over (panel.h).
Definition hitec_record.c:79
atomic_uint s_hitec_file_sent
Texts handed over (panel.h).
Definition hitec_record.c:54
void hitec_record_load(void)
Read the record from the card at the start (panel.h).
Definition hitec_record.c:140
char s_hitec_file[HITEC_CARD_TEXT_MAX]
The record's text (panel.h).
Definition hitec_record.c:48
atomic_uint s_hitec_file_done
Texts written or given up on (panel.h).
Definition hitec_record.c:56
unsigned s_hitec_file_mount
The mount the text is written to (panel.h).
Definition hitec_record.c:52
atomic_bool s_hitec_file_ok
Whether the card took the last text whole (panel.h).
Definition hitec_record.c:58
size_t s_hitec_file_len
The bytes of s_hitec_file to write (panel.h).
Definition hitec_record.c:50
The panel's half of the Hitec receive mode: SETUP > INTERFACES > Hitec D receive (SET_HITEC_RX) writt...
uint8_t control_write(void *ctx, uint8_t off, uint8_t n, const uint16_t *in)
Writes the CONTROL page.
Definition iomcu_pages.c:542
The panel's half of the KST (0x32) link page, protocol 4.13 to 4.15: the programming ports for KST an...
The programmer for KST and Chaservo servos as the SERVO screen runs it: what is read from a servo,...
#define KST_PROG_FILE_MAX
The file text's size, with its terminator.
Definition kst_prog.h:98
Both ends' link counters turned into one diagnosis.
The panel's half of the link: poll, match the reply to the question, and escalate when the answers st...
bool link_host_read(link_host_t *h, uint8_t page, uint8_t offset, uint8_t count, uint32_t now_ms, link_msg_t *out)
Build a request.
Definition link_host.c:91
@ LINK_OP_NACK
Definition link_msg.h:32
@ LINK_OP_ACK
Definition link_msg.h:31
@ LINK_OP_DATA
Definition link_msg.h:30
The page map: what the panel can ask the IOmcu for, and set.
@ LINK_ST_FAULTS
Definition link_pages.h:1391
@ LINK_PAGE_STATUS
Definition link_pages.h:33
@ LINK_PAGE_BENCH
Definition link_pages.h:38
@ LINK_PAGE_CONTROL
Definition link_pages.h:34
#define LINK_CLEAR_MAGIC
Leaving failsafe takes this value written to LINK_CT_CLEAR, not any write and not the link coming bac...
Definition link_pages.h:2525
@ LINK_CT_ARM
Definition link_pages.h:2495
@ LINK_CT_CLEAR
Definition link_pages.h:2506
A write of any width, one frame in flight at a time.
bool link_write_acked(link_host_t *h, const link_port_t *port, uint8_t page, uint8_t offset, uint8_t count, const uint16_t *regs, link_msg_t *reply)
Write count registers of page from offset, one frame of up to LINK_CAN_REGS_PER_FRAME registers per e...
Definition link_port.c:31
The panel's half of the IOmcu update: finding out whether the IOmcu runs the image the panel carries,...
The run log's cadence: which pass of the control loop writes a row, and the time that row carries.
The bench log's INA3221 columns with SENSE_MAP in force (protocol 4.25): one group of three per chann...
Taking a run's number in a folder of the card, and which open file keeps a listed name out of reach.
Log viewer: browse the card, review the import, plot the file.
Writes a run as CSV (comma-separated values) in the format shared/logfile reads.
The motor and ESC (electronic speed controller) bench screen.
Binding a protocol to pins: what the operator chooses, and the OUTPUTS page that comes out of it.
The intermediary every output goes through: one set of rules for arming, clamping,...
bool outputs_set(outputs_t *o, uint8_t ch, uint16_t command, uint32_t now_ms)
Command a channel.
Definition outputs.c:219
QueueHandle_t s_enc_q
Definition main.c:290
QueueHandle_t s_kst_q
Definition main.c:272
QueueHandle_t s_sample_q
Definition main.c:284
atomic_uint s_render_progress
The render loop's progress: moved once a pass of panel_frame_loop() and once per card read the loop m...
Definition main.c:466
atomic_uint s_stop_counted
Definition main.c:348
QueueHandle_t s_cmd_q
Definition main.c:268
QueueHandle_t s_win_q
Definition main.c:291
QueueHandle_t s_touch_q
Definition main.c:267
QueueHandle_t s_supply_q
Definition main.c:288
void log_fault_lock(void)
Take the fault log's lock, which the logger holds across each line's open, write and close....
Definition panel_log.c:734
atomic_uint s_servo_log
The SERVO screen's pulse and angle for a SERVO run's rows, packed (log_servo_pack()): stored by the r...
Definition panel_poll.c:791
void hitec_ui_service(void)
The Hitec programmer's model, once a frame on app_main.
Definition panel_render.c:127
gfx_canvas_t * panel_canvas(void)
The canvas the next frame is drawn on (display_canvas()), after what Screen rotation asks of the UI: ...
Definition panel_frame.c:63
void control_pump(void)
Drains the touch driver's queue, answers sequence gaps, applies a STOP at its press and passes the ev...
Definition panel_control.c:240
endpoints_debt_t s_endpoints
The throttle's pulse endpoints, Idle pulse and Full pulse, on their way to the IOmcu.
Definition panel_settings.c:77
void sense_limit_lost(void)
The link went; control task. Clears s_sense_limits.
Definition panel_limit.c:64
hitec_prog_gate_t s_hitec_gate
The gate the Hitec programmer's commands are claimed at; the one part both tasks touch.
Definition panel_hitec.c:45
QueueHandle_t s_hitec_q
The model's commands, app_main -> control task.
Definition panel_hitec.c:48
void sense_limit_service(void)
Serves SENSE_LIMIT, at most 2 exchanges, and sends the next band alert; control task,...
Definition panel_limit.c:102
bool s_prog_taken
Whether a servo programmer, KST or Hitec, has a port or an operation under way: the bench takes no ar...
Definition panel_services.c:96
void sense_limit_came_up(uint16_t minor)
The link came up; control task.
Definition panel_limit.c:59
void upd_service(bool armed, bool unsafe, uint32_t stops_now, const cu_snap_t *cs)
SETUP > UPDATES, the reminder and the download, once a frame.
Definition panel_update.c:833
atomic_uint s_sense_limits
sensors_rows_set_limits()'s word; control task writes, app_main reads.
Definition panel_limit.c:43
QueueHandle_t s_log_q
Definition panel_log.c:74
QueueHandle_t s_note_q
Definition panel_log.c:75
bench_totals_t s_rail_totals
The run's totals of s_rail since the arm. Control task only.
Definition panel_arm.c:135
bool drain_touch(uint32_t stops_now)
Hand the screens what the control task saw of the panel. Render loop only.
Definition panel_render.c:506
void service_arming(bool link_up)
The latched stop and the act the arming policy asks for, once a pass of the control task: the router'...
Definition panel_arm.c:249
void publish_limits(void)
Takes the LIMIT and WATCHES rows for the control task; app_main, from the SENSORS observer.
Definition panel_limit.c:45
static void render_progress(void)
The render task made progress: a pass of its loop, or one card read inside a pass....
Definition panel.h:935
void hitec_commands(void)
The Hitec programmer's commands, at most 4 a pass; control task.
Definition panel_hitec.c:109
void hitec_pass(bool link_up)
One pass of the HITEC page's module; control task, every pass.
Definition panel_hitec.c:169
QueueHandle_t s_test_q
Definition panel_log.c:517
tone_setup_t tone_wanted(void)
Returns the phase tap's set-up as SETUP INTERFACES left it, copied under the spinlock.
Definition panel_settings.c:136
void hitec_publish(hitec_prog_feed_t *f)
What the Hitec programmer's model is fed; under the snapshot's lock.
Definition panel_hitec.c:185
void link_report(void)
One block naming the most fundamental fault rather than the loudest. Printed every 5s while the link ...
Definition panel_link.c:582
void log_task(void *arg)
Everything that touches the card.
Definition panel_log.c:852
const files_io_t k_files_io
FILES' way to the card: its requests run on the task cardjob.
Definition panel_files.c:736
void log_fault_unlock(void)
Give the fault log's lock back.
Definition panel_log.c:741
float s_mcu_c
Read and published by the control task; app_main takes it from the snapshot with everything else that...
Definition panel_control.c:88
log_rail_t s_rail
The supply's last reading for a SERVO run's rows (log_rail_t). Control task only.
Definition panel_arm.c:134
bool hitec_taken(void)
Whether the HITEC page holds a port or a request runs.
Definition panel_hitec.c:176
hitec_link_t s_hitec_link
The HITEC page's module (4.23); control task only.
Definition panel_hitec.c:42
bool log_fault_busy(void)
Whether the logger may write a fault log line now: one queued in s_note_q, or under way....
Definition panel_log.c:728
SemaphoreHandle_t s_note_mx
The fault log's lock (log_fault_lock()).
Definition panel_log.c:76
The panel's side of the programming ports' page (0x33).
uint8_t prog_link_hitec_held(const prog_link_t *p)
Bit n: the HITEC page holds port n, as last read; 0 with no link, no page or nothing read since the l...
Definition prog_link.c:82
prog_link_drive_t prog_link_drive(const prog_link_t *p)
Where the tester's commands go now, for the SERVO screen's TARGET row.
Definition prog_link.c:486
The IOmcu's decision to arm, once a pass and at every CONTROL write.
bool safety_gate_line_trusted(uint16_t faults)
The panel's reading of a STATUS fault bitmap: whether the far end trusts the heartbeat.
Definition safety_gate.c:126
The panel's half of the SENSE (0x2B), SERVO_SENSE (0x2C) and SERVO_WIN (0x31) link pages: what is wri...
The panel's half of the SENSE_MAP page (0x35, protocol 4.25): up to four INA3221 parts as SETUP > SEN...
The panel's half of the SERVO screen on the link: a command onto the IOmcu's CHAN_CFG,...
The SERVO link page at the IOmcu: the frame rate of the tester's target and the sweep that drives it ...
The servo bench: the outputs the binding marks as surfaces, commanded together by dragging one horn.
Which meter measures the servo rail: the INA3221's CH1, the PD mini (the WeAct PD Power Mini supply) ...
servo_source_id_t
The servo rail's meter.
Definition servo_source.h:70
servo_source_why_t
Why the INA3221 is not the meter: the first condition that fails.
Definition servo_source.h:77
What the automatic servo test reads and what it hands out: the supply's readings, the INA3221's windo...
#define SERVO_TEST_LINE_MAX
The longest line a log row or a report line takes, terminator included: the CSV's header with the enc...
Definition servo_test_io.h:134
Whether an arm stands until the render loop has seen it.
Definition touch_loss.h:126
The flash a store lives in.
Definition art_store.h:52
The bench readings in the units a person reads: V, A, W and rpm, with their peaks.
Definition bench_state.h:54
A run's charge and energy, counted by the panel.
Definition bench_state.h:332
One reading of the two output pages, and the binding it gives.
Definition bind_link.h:105
Definition busfault_screen.h:69
Definition coproc_update_screen.h:51
The debt.
Definition endpoints_link.h:162
The card's task as the screen reaches it. Every function may be called on the task that renders; none...
Definition files_screen.h:64
The state of the HITEC link module.
Definition hitec_link.h:236
What the task that owns the link module publishes, every frame.
Definition hitec_prog.h:311
The pass a command needs to be carried out, as kst_prog.h's gate.
Definition hitec_prog.h:275
The panel's state of the Hitec receive mode.
Definition hitec_rx_link.h:71
The state of the KST link module.
Definition kst_link.h:231
The card side's answer to a request.
Definition kst_prog.h:380
A request to the card side.
Definition kst_prog.h:366
What the task that owns the link module publishes, every frame.
Definition kst_prog.h:500
The pass a START needs to be carried out.
Definition kst_prog.h:441
The link counters of both ends, and the round-trip statistics.
Definition link_bringup.h:32
The panel's state for one link: the outstanding request, the counters and the reassembly buffer.
Definition link_host.h:35
One link message: the op, the register window and its values.
Definition link_msg.h:55
uint8_t offset
Definition link_msg.h:58
uint16_t regs[LINK_MAX_REGS]
Definition link_msg.h:60
uint8_t count
Definition link_msg.h:59
uint8_t op
Definition link_msg.h:56
How a request reaches the far end and its answer comes back.
Definition link_port.h:52
An IOmcu of another protocol major answers its identity while the link stays down.
Definition link_update_host.h:212
The cadence state of the run log: its clocks and row counts.
Definition log_cadence.h:62
The log's columns: their number, targets and names.
Definition log_cols.h:45
The files the logger has open, each with the folder it is in: the automatic log's run in run_dir,...
Definition log_take.h:203
The servo rail's supply on a SERVO run's row: the supply's last reading and the run's totals of it,...
Definition log_writer.h:188
One sample on its way to the card, filled by the control task.
Definition panel.h:457
float t_s
Definition panel.h:459
log_run_kind_t kind
Definition panel.h:460
log_servo_t servo
The pulse and angle, on the same rows as rail.
Definition panel.h:470
log_rail_t rail
The supply's reading and the run's totals of it, on a SERVO run's row that carries the sample; all 0 ...
Definition panel.h:468
uint32_t run
Definition panel.h:458
A SERVO run's commanded pulse and measured angle on its row.
Definition log_writer.h:257
Definition log_viewer_screen.h:137
Definition motor_screen.h:44
The selection: which board, the protocol being edited, and each protocol's pins.
Definition out_bind.h:423
The state of a bank of channels and slots.
Definition outputs.h:143
uint32_t supply_offs
Definition panel.h:855
uint32_t loss_gen
Definition panel.h:873
outbind_t bind
Definition panel.h:838
uint32_t lets_go
Definition panel.h:852
supply_cmd_t supply
Definition panel.h:839
uint32_t stops
Definition panel.h:850
uint32_t pdmini_edits
Definition panel.h:859
bool arm_wanted
Definition panel.h:165
uint32_t arm_gen
Definition panel.h:166
uint32_t pressed
Definition panel.h:170
hitec_prog_feed_t hitec
What the Hitec programmer's model is fed; see hitec_publish().
Definition panel.h:196
uint32_t link_refused
Definition panel.h:173
uint32_t supply_gen
Definition panel.h:160
uint8_t armed_roles
Definition panel.h:164
What the tester drives: the target, and with a port its pin and pulse.
Definition prog_link.h:506
uint8_t pin
Definition prog_link.h:510
bool pwm
Definition prog_link.h:512
uint8_t target
Definition prog_link.h:507
The panel's side of the programming ports' page.
Definition prog_link.h:108
The panel's state of the SENSE link page.
Definition sense_link.h:386
One 50ms window of INA3221 CH1, as SERVO_WIN carries it.
Definition sense_link.h:328
The panel's state of the SENSE_MAP link page.
Definition sense_map_link.h:146
The set-up as SETUP INTERFACES has it.
Definition sense_link.h:196
A command of the SERVO screen, as the servo link takes it.
Definition servo_cmd.h:58
The state of which meter measures the servo rail.
Definition servo_source.h:104
Definition supply_screen.h:69
The panel's state of the SUPPLY link page.
Definition supply_link.h:125
The state of the supply model.
Definition supply.h:264
A supply's readings, set points, mode and trip state.
Definition supply.h:69
Where the PD mini is wired, as SETUP INTERFACES has it.
Definition supply_link.h:85
The state of the telemetry model.
Definition telemetry_sim.h:57
The panel's state of the TONE link page.
Definition tone_link.h:245
The screen's copy: a plain value the control task fills and the renderer reads.
Definition tone_link.h:217
The set-up as SETUP INTERFACES has it.
Definition tone_link.h:134
A DOWN, MOVE or UP of one contact.
Definition touch_types.h:69
bool lost
Definition panel.h:884
Definition ui_alert_slot.h:36
A programmable supply: what it can be set to, what it was set to, and what it delivers.
The panel's half of the SUPPLY link page (0x2A, protocol 4.3 to 4.13): what is written to it,...
The SUPPLY screen: a programmable supply set, switched and watched.
A pack, a motor and a propeller, modelled, so every screen runs without a measurement front end.
The panel's half of the TONE (0x2D) link page, protocol 4.8: what is written to it,...
Touch events that never arrived, and an arm that must not outlive one.
Plain data types shared by the touch controller driver, the coordinate mapper and the event tracker....