|
rcbench
Servo and ESC test bench: panel, IOmcu and shared C
|
What the panel's files share: firmware/panel/main/main.c and the files cut from it. One section per file, each holding what that file defines and another file uses. A file's own state stays static in that file. More...
#include <stdatomic.h>#include <stdbool.h>#include <stddef.h>#include <stdint.h>#include <stdio.h>#include "art_store.h"#include "esp_timer.h"#include "freertos/FreeRTOS.h"#include "freertos/queue.h"#include "freertos/semphr.h"#include "arming.h"#include "bench_state.h"#include "log_cols.h"#include "bind_link.h"#include "card_tree.h"#include "busfault_screen.h"#include "coproc_update_screen.h"#include "endpoints_link.h"#include "files_screen.h"#include "hitec_link.h"#include "hitec_prog.h"#include "hitec_rx_link.h"#include "kst_link.h"#include "kst_prog.h"#include "link_bringup.h"#include "link_host.h"#include "link_pages.h"#include "link_port.h"#include "link_update_host.h"#include "log_cadence.h"#include "log_take.h"#include "log_writer.h"#include "log_viewer_screen.h"#include "motor_screen.h"#include "out_bind.h"#include "outputs.h"#include "prog_link.h"#include "safety_gate.h"#include "sense_link.h"#include "sense_map_link.h"#include "servo_link.h"#include "servo_page.h"#include "servo_screen.h"#include "servo_source.h"#include "servo_test_io.h"#include "supply.h"#include "supply_link.h"#include "supply_screen.h"#include "telemetry_sim.h"#include "tone_link.h"#include "touch_loss.h"#include "touch_types.h"#include "ui_alert_slot.h"#include "ui_screen.h"Go to the source code of this file.
Data Structures | |
| struct | servo_win_item_t |
| struct | cu_snap_t |
| struct | panel_snap_t |
| struct | log_row_t |
| One sample on its way to the card, filled by the control task. More... | |
| struct | test_line_t |
| struct | panel_cmd_t |
| struct | touch_item_t |
| struct | supply_item_t |
| struct | knob_turn_t |
Macros | |
| #define | PANEL_CH_THROTTLE 0u |
| #define | ALERT_MAX UI_ALERT_MAX |
| #define | CONTROL_PERIOD_MS 5u |
| #define | LOG_Q_LEN 64 |
| #define | LOG_NOTE_MAX 208 |
| #define | LOG_NOTE_Q_LEN 4 |
| #define | TEST_Q_LEN 24 |
| #define | PROG_PORTS_NONE 0xFFFFFFFFu |
| #define | DRIVE_PWM_BIT (1u << 16) |
| #define | DRIVE_HELD_SHIFT 20u |
| #define | PANEL_SAMPLE_HZ 20.0f |
Functions | |
| static uint32_t | now_ms (void) |
| static void | snap_lock (void) |
| static void | snap_unlock (void) |
| uint32_t | control_alert_numbered (const char *text) |
| gfx_canvas_t * | panel_canvas (void) |
| The canvas the next frame is drawn on (display_canvas()), after what Screen rotation asks of the UI: a whole repaint when the canvas changed between a logical buffer and a frame buffer, and the band's alert when 180° fell back to NORMAL. Every loop that renders takes its canvas here, on the task that flips (panel_frame.c). | |
| void | control_alert_withdraw (uint32_t gen) |
| static void | control_alert (const char *text) |
| static void | throttle_to_zero (void) |
| static supply_wiring_t | wiring_of (unsigned word) |
| static supply_wiring_t | pdmini_wiring (void) |
| void | publish_sense (void) |
| sense_setup_t | sense_wanted (void) |
| tone_setup_t | tone_wanted (void) |
| Returns the phase tap's set-up as SETUP INTERFACES left it, copied under the spinlock. | |
| void | control_pump (void) |
| Drains the touch driver's queue, answers sequence gaps, applies a STOP at its press and passes the events on to the render loop. | |
| void | esc_profiles_load (void) |
| card_dir_t | panel_card_make_dir (void *ctx, const char *level) |
| void | kst_record_write (void) |
| void | kst_record_load (bool late) |
| void | hitec_record_write (void) |
| Write the text the render loop handed over, on the logger task: HITEC.NEW, then its name HITEC.TXT. Nothing when none waits. | |
| void | hitec_record_load (void) |
| Read the record from the card into the Hitec programmer, once, at the start before the tasks run. | |
| void | kst_card_serve (void) |
| void | log_set_folder (log_folder_t kind, const char *dir) |
| void | log_open_marks (log_marks_t *marks, char *run_dir, char *test_dir) |
| bool | log_fault_busy (void) |
| Whether the logger may write a fault log line now: one queued in s_note_q, or under way. The file manager's bench reads it (fm_bench_t.fault_busy). | |
| void | log_fault_lock (void) |
| Take the fault log's lock, which the logger holds across each line's open, write and close. The file manager holds it across an unlink and a rename: FatFs runs without its file lock (CONFIG_FATFS_FS_LOCK 0) and removes a file open for append. Neither holder takes another lock under it. | |
| void | log_fault_unlock (void) |
| Give the fault log's lock back. | |
| void | log_task (void *arg) |
| Everything that touches the card. | |
| void | log_post (log_row_t *row) |
| bool | exchange (link_host_t *host, const link_msg_t *req, link_msg_t *reply) |
| static bool | poll_page (link_host_t *host, uint8_t page, uint8_t count, link_msg_t *reply) |
| static bool | read_regs (link_host_t *host, uint8_t page, uint8_t offset, uint8_t count, link_msg_t *reply) |
| uint32_t | port_now (void *ctx) |
| void | port_between (void *ctx) |
| static bool | write_regs (link_host_t *host, uint8_t page, uint8_t offset, uint8_t count, const uint16_t *regs, link_msg_t *reply) |
| static bool | control_write (bool armed, link_msg_t *reply) |
| bool | control_arm (link_msg_t *reply) |
| bool | poles_service (void) |
| void | endpoints_service (bool far_disarmed) |
| static bool | far_line_trusted (bool *answered) |
| void | far_end_stop_here (void) |
| void | arm_write_failed (uint32_t quiet_before, const char *alert) |
| static bool | control_clear_failsafe (link_msg_t *reply) |
| void | link_lost_report (busfault_report_t *r) |
| void | link_report (void) |
| One block naming the most fundamental fault rather than the loudest. Printed every 5s while the link is down and every 60s while it is up. | |
| static bool | read_bench (link_host_t *host, bench_state_t *out) |
| void | prog_ports_publish (void) |
| void | prog_ports_lost (void) |
| void | prog_ports_init_screens (void) |
| void | prog_ports_to_screens (void) |
| void | kst_port_look (void) |
| void | sense_link_alerts (void) |
| void | sense_link_service (bool idle, bench_state_t *bench) |
| void | publish_limits (void) |
| Takes the LIMIT and WATCHES rows for the control task; app_main, from the SENSORS observer. | |
| void | sense_limit_came_up (uint16_t minor) |
| The link came up; control task. | |
| void | sense_limit_lost (void) |
| The link went; control task. Clears s_sense_limits. | |
| void | sense_limit_service (void) |
| Serves SENSE_LIMIT, at most 2 exchanges, and sends the next band alert; control task, every poll. | |
| void | sense_map_came_up (uint16_t minor) |
| void | sense_map_lost (void) |
| void | sense_map_service (bool idle) |
| void | sense_win_service (void) |
| void | sense_win_attach (bench_state_t *b, bool ring) |
| bool | sense_log_cols (log_cols_t *out) |
| void | tone_link_alerts (void) |
| void | tone_link_service (void) |
| void | kst_commands (void) |
| void | kst_link_service (void) |
| void | prog_link_service (void) |
| void | hitec_rx_service (void) |
| void | kst_publish (kst_prog_feed_t *f) |
| void | hitec_commands (void) |
| The Hitec programmer's commands, at most 4 a pass; control task. | |
| void | hitec_pass (bool link_up) |
| One pass of the HITEC page's module; control task, every pass. | |
| bool | hitec_taken (void) |
| Whether the HITEC page holds a port or a request runs. | |
| void | hitec_publish (hitec_prog_feed_t *f) |
| What the Hitec programmer's model is fed; under the snapshot's lock. | |
| static void | prog_drive_publish (void) |
| void | read_outputs_binding (void) |
| void | post_no_reading (void) |
| bool | poll_far_end (bool *link_up, bench_state_t *bench, uint32_t *last_poll, uint32_t *last_status) |
| void | advance_model_and_log (bool link_up, float emitted, telemetry_sim_t *sim, bench_state_t *bench, bool *new_sample) |
| void | publish_snapshot (const bench_state_t *bench, bool link_up, bool new_sample) |
| void | publish_throttle_ramp (void) |
| static uint16_t | panel_throttle_ramp (void) |
| static void | render_progress (void) |
| The render task made progress: a pass of its loop, or one card read inside a pass. Render task only. | |
| void | log_follow_runs (void) |
| void | supply_log_tail (void) |
| void | supply_switch (bool on) |
| void | supply_follow_set (void) |
| static void | supply_follow_stops (void) |
| static void | supply_service (void) |
| void | apply_supply_cmd (const panel_cmd_t *pc) |
| void | supply_pump (void) |
| void | supply_link_service (void) |
| void | control_setup (telemetry_sim_t *sim, bench_state_t *bench) |
| void | arm_watch_service (bool link_up) |
| 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's backstop STOP unless the pump counted the same press, the let-go every stop owes, the supply, then the arm or the disarm. | |
| bool | disarm_here (bool link_up) |
| void | drain_commands (bool link_up, bench_state_t *bench) |
| void | kst_ui_service (void) |
| void | hitec_ui_service (void) |
| The Hitec programmer's model, once a frame on app_main. | |
| bool | supply_live_or_coming (void) |
| void | publish_supply_levels (void) |
| void | test_lines_service (void) |
| knob_turn_t | knob_take (void) |
| void | knob_apply (const knob_turn_t *turn, bool frame_lost) |
| void | flush_screen_commands (uint32_t stops_now) |
| bool | drain_touch (uint32_t stops_now) |
| Hand the screens what the control task saw of the panel. Render loop only. | |
| void | outputs_apply (const outbind_t *b) |
| void | drawing_for_picker (uint16_t board) |
| void | drawing_follow (void) |
| void | art_keep_service (void) |
| void | art_stop (const char *why) |
| void | art_begin (uint16_t board) |
| void | art_slice (void) |
| bool | cu_may_start (void) |
| void | cu_link_up (const link_msg_t *reply) |
| bool | cu_service (bool *link_up, bench_state_t *bench, uint32_t *last_poll, uint32_t *last_status) |
| void | wifi_service (bool armed, uint32_t stops_now) |
| void | upd_remind_service (bool armed, bool unsafe, const cu_snap_t *cs) |
| 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. | |
| void | cu_render_service (bool unsafe, bool link_up, const cu_snap_t *cs) |
Variables | |
| link_host_t | s_host |
| atomic_uint | s_capabilities |
| link_bringup_t | s_bring |
| atomic_uint | s_link_lost_ms |
| bool | s_link_lost_shown |
| uint32_t | s_recoveries |
| uint32_t | s_recoveries_total |
| float | s_mcu_c |
| Read and published by the control task; app_main takes it from the snapshot with everything else that crosses between the two. | |
| bind_reading_t | s_outputs_read |
| bool | s_outputs_read_fresh |
| bind_read_t | s_bind_read |
| uint16_t | s_far_minor |
| uint16_t | s_board |
| QueueHandle_t | s_kst_q |
| QueueHandle_t | s_hitec_q |
| The model's commands, app_main -> control task. | |
| QueueHandle_t | s_sample_q |
| QueueHandle_t | s_enc_q |
| QueueHandle_t | s_win_q |
| SemaphoreHandle_t | s_snap_lock |
| panel_snap_t | s_snap |
| outputs_t | s_out |
| arming_t | s_arm |
| uint16_t | s_throttle_hundredths |
| atomic_bool | s_disarm_request |
| atomic_uint | s_supply_vin_mv |
| atomic_uint | s_supply_baud |
| uint32_t | s_arm_gen |
| atomic_bool | s_poles_owed |
| atomic_uint | s_poles_value |
| endpoints_debt_t | s_endpoints |
| The throttle's pulse endpoints, Idle pulse and Full pulse, on their way to the IOmcu. | |
| atomic_uint | s_pdmini_wiring |
| bool | s_pump_live |
| atomic_ullong | s_servo_pins |
| atomic_bool | s_servo_pins_known |
| atomic_bool | s_enc_held |
| const files_io_t | k_files_io |
| FILES' way to the card: its requests run on the task cardjob. | |
| const log_viewer_io_t | k_card_io |
| atomic_uint | s_log_open_run |
| atomic_uint | s_test_open_run |
| atomic_uint | s_test_open_txt |
| atomic_uint | s_card_written |
| atomic_int | s_card_written_tab |
| char | s_kst_file [KST_PROG_FILE_MAX] |
| size_t | s_kst_file_len |
| unsigned | s_kst_file_mount |
| atomic_uint | s_kst_file_sent |
| atomic_uint | s_kst_file_done |
| atomic_bool | s_kst_file_ok |
| char | s_hitec_file [HITEC_CARD_TEXT_MAX] |
| The record's text, as hitec_card_text() writes it. | |
| size_t | s_hitec_file_len |
| The bytes of s_hitec_file to write; 0 removes the record. | |
| unsigned | s_hitec_file_mount |
| The mount the text is written to (storage_mount_count()). | |
| atomic_uint | s_hitec_file_sent |
| Texts the render loop handed over; one ahead of s_hitec_file_done while one waits. | |
| atomic_uint | s_hitec_file_done |
| Texts the logger has written or given up on. | |
| atomic_bool | s_hitec_file_ok |
| Whether the card took the last text whole. | |
| kst_prog_card_req_t | s_kst_card_req |
| unsigned | s_kst_card_mount |
| kst_prog_card_done_t | s_kst_card_done |
| atomic_uint | s_kst_card_sent |
| atomic_uint | s_kst_card_answered |
| QueueHandle_t | s_log_q |
| QueueHandle_t | s_note_q |
| SemaphoreHandle_t | s_note_mx |
| The fault log's lock (log_fault_lock()). | |
| QueueHandle_t | s_test_q |
| atomic_uint | s_log_run_now |
| atomic_uint | s_test_opens_sent |
| atomic_uint | s_test_opens_done |
| unsigned | s_test_ends_sent |
| atomic_uint | s_test_ends_done |
| atomic_int | s_test_file |
| atomic_bool | s_test_report |
| log_cadence_t | s_log_cad |
| log_run_kind_t | s_log_kind |
| atomic_bool | s_servo_testing |
| uint32_t | s_unanswered |
| bool | s_link_is_up |
| bool | s_link_quiet |
| const link_port_t | k_port |
| uint16_t | s_arm_value |
| sense_link_t | s_sense_link |
| servo_source_t | s_servo_source |
| tone_link_t | s_tone_link |
| kst_link_t | s_kst_link |
| prog_link_t | s_prog_link |
| atomic_uint | s_prog_want_target |
| atomic_bool | s_prog_want_pwm |
| atomic_uint | s_prog_pin |
| atomic_uint | s_prog_ports |
| atomic_uint | s_drive |
| bool | s_prog_taken |
| Whether a servo programmer, KST or Hitec, has a port or an operation under way: the bench takes no arm and no supply change then. Control task only; kst_port_look(). | |
| kst_prog_gate_t | s_kst_gate |
| atomic_uint | s_sense_unheld |
| atomic_uint | s_tone_unheld |
| hitec_rx_link_t | s_hitec_rx_link |
| atomic_uint | s_hitec_rx_want |
| atomic_uint | s_hitec_rx_mark |
| sense_map_link_t | s_sense_map |
| atomic_uint | s_sense_parts |
| atomic_uint | s_sense_limits |
| sensors_rows_set_limits()'s word; control task writes, app_main reads. | |
| hitec_link_t | s_hitec_link |
| The HITEC page's module (4.23); control task only. | |
| hitec_prog_gate_t | s_hitec_gate |
| The gate the Hitec programmer's commands are claimed at; the one part both tasks touch. | |
| atomic_ullong | s_throttle_pins |
| atomic_bool | s_throttle_pins_known |
| atomic_uint | s_throttle_proto |
| atomic_uint | s_throttle_ramp |
| atomic_int | s_outputs_result |
| QueueHandle_t | s_touch_q |
| QueueHandle_t | s_supply_q |
| atomic_bool | s_stop_request |
| atomic_uint | s_stop_counted |
| atomic_uint | s_lets_go |
| atomic_bool | s_supply_off_request |
| atomic_uint | s_supply_offs |
| atomic_uint | s_supply_set_mv |
| atomic_uint | s_supply_set_ma |
| atomic_uint | s_supply_vmax_mv |
| atomic_uint | s_supply_imax_ma |
| atomic_uint | s_supply_trip_ma |
| atomic_uint | s_supply_trip_mv |
| atomic_uint | s_supply_trip_ms |
| atomic_uint | s_supply_ack |
| atomic_bool | s_supply_live |
| atomic_uint | s_supply_ons_sent |
| atomic_uint | s_supply_ons_taken |
| atomic_uint | s_pdmini_edits |
| atomic_bool | s_supply_real |
| atomic_uint | s_drv_gaps |
| atomic_uint | s_tq_published |
| uint32_t | s_lost_notice_seq |
| atomic_uint | s_loss_gen |
| atomic_uint | s_arm_ack |
| atomic_uint | s_render_progress |
| The render loop's progress, for the control task's watchdog; see frame_watch.h and main.c. | |
| uint32_t | s_arm_take_gen |
| uint32_t | s_arm_take_drv |
| arm_watch_t | s_arm_watch |
| float | s_log_t |
| QueueHandle_t | s_cmd_q |
| supply_sim_t | s_supply_sim |
| supply_link_t | s_supply_link |
| atomic_uint | s_supply_adopt_mv |
| atomic_uint | s_supply_adopt_ma |
| atomic_uint | s_supply_adopt_gen |
| atomic_uint | s_supply_adopt_done |
| atomic_uintptr_t | s_escsim_profile |
| atomic_uint | s_escsim_runs |
| bool | s_supply_page |
| bool | s_supply_auto |
| bool | s_supply_is_real |
| supply_state_t | s_supply |
| uint32_t | s_supply_ms |
| uint32_t | s_supply_stops_served |
| uint32_t | s_supply_step_ms |
| uint32_t | s_supply_gen |
| bench_totals_t | s_totals |
| uint32_t | s_totals_ms |
| log_rail_t | s_rail |
| The supply's last reading for a SERVO run's rows (log_rail_t). Control task only. | |
| bench_totals_t | s_rail_totals |
| The run's totals of s_rail since the arm. Control task only. | |
| 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 render side each frame, read by the control task. | |
| unsigned | s_tq_lost |
| const art_flash_t * | s_artflash |
| bool | s_artbusy |
| atomic_bool | s_keeping |
| SemaphoreHandle_t | s_draw_lock |
| uint8_t * | s_drawpub |
| uint8_t * | s_drawshow |
| atomic_bool | s_fw_quiet_req |
| atomic_bool | s_fw_quiet_ack |
| bool | s_wifi_ok |
| link_uph_mismatch_t | s_mismatch |
What the panel's files share: firmware/panel/main/main.c and the files cut from it. One section per file, each holding what that file defines and another file uses. A file's own state stays static in that file.
Nothing in shared/ includes this header.
SPDX-License-Identifier: MIT
| bool drain_touch | ( | uint32_t | stops_now | ) |
Hand the screens what the control task saw of the panel. Render loop only.
| stops_now | the stop count the commands flushed here carry |
| void hitec_pass | ( | bool | link_up | ) |
One pass of the HITEC page's module; control task, every pass.
| link_up | whether the IOmcu answers |
| void hitec_publish | ( | hitec_prog_feed_t * | f | ) |
What the Hitec programmer's model is fed; under the snapshot's lock.
| f | receives the feed |
| void hitec_record_load | ( | void | ) |
Read the record from the card into the Hitec programmer, once, at the start before the tasks run.
Read the record from the card at the start (panel.h).
Read the record from the card into the Hitec programmer, once, at the start before the tasks run.
| void hitec_record_write | ( | void | ) |
Write the text the render loop handed over, on the logger task: HITEC.NEW, then its name HITEC.TXT. Nothing when none waits.
Write the text the render loop handed over (panel.h).
Write the text the render loop handed over, on the logger task: HITEC.NEW, then its name HITEC.TXT. Nothing when none waits.
| bool hitec_taken | ( | void | ) |
Whether the HITEC page holds a port or a request runs.
| void hitec_ui_service | ( | void | ) |
The Hitec programmer's model, once a frame on app_main.
The Hitec programmer's model, once a frame on app_main: it reads what the control task published (hitec_publish()), and its commands go to the control task's queue.
The Hitec programmer's model, once a frame on app_main.
A command the queue does not take stays with the model; one the model hands over and the queue then refuses is lost, and the model says so when its answer does not come (HITEC_PROG_MSG_TIMEOUT).
| void link_report | ( | void | ) |
One block naming the most fundamental fault rather than the loudest. Printed every 5s while the link is down and every 60s while it is up.
The verdict judges the window since the previous report, not the session: one burst of late answers at an IOmcu drop is the verdict of the report that covers it, and a link that is healthy again reads as healthy at the next one. The first report's window is everything since start-up. A window of under 4 polls says "link healthy" (link_bringup_diagnose()). A link that is down gets one identity probe about every 1000ms (poll_far_end()'s gate; an unanswered probe waits LINK_HOST_TIMEOUT_MS, 1000ms, of it), so a 5s window holds 4 or 5 polls and a silent link reads as silent.
The panel and iomcu lines keep the totals since start-up; the window's counts have a line of their own.
| bool log_fault_busy | ( | void | ) |
Whether the logger may write a fault log line now: one queued in s_note_q, or under way. The file manager's bench reads it (fm_bench_t.fault_busy).
| void log_task | ( | void * | arg | ) |
Everything that touches the card.
On the control task's core and below it in priority: the control task blocks for CONTROL_PERIOD_MS (5ms) every pass and inside every receive window of a link exchange, and this runs in those gaps. It touches no PSRAM, so it does not share bandwidth with the display's scan-out.
| arg | Unused. |
| gfx_canvas_t * panel_canvas | ( | void | ) |
The canvas the next frame is drawn on (display_canvas()), after what Screen rotation asks of the UI: a whole repaint when the canvas changed between a logical buffer and a frame buffer, and the band's alert when 180° fell back to NORMAL. Every loop that renders takes its canvas here, on the task that flips (panel_frame.c).
| void sense_limit_came_up | ( | uint16_t | minor | ) |
The link came up; control task.
| minor | the IOmcu's protocol minor; below 27 nothing is sent to SENSE_LIMIT. |
| 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's backstop STOP unless the pump counted the same press, the let-go every stop owes, the supply, then the arm or the disarm.
| link_up | whether the link to the IOmcu answers |
| tone_setup_t tone_wanted | ( | void | ) |
Returns the phase tap's set-up as SETUP INTERFACES left it, copied under the spinlock.
| 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.
Once a frame, after wifi_service(): the start-up check, what UPDATES and the reminder ask for, the job's aborts, the download's screen, and what UPDATES shows. armed includes an arm waiting; panel.h names each parameter.
| armed | ARMED, or an arm waiting |
| unsafe | ARMED, an arm waiting, or the supply's output on or coming on |
| stops_now | STOP presses since the start; a change is a STOP |
| cs | the IOmcu update's state this frame |
SETUP > UPDATES, the reminder and the download, once a frame.
|
extern |
FILES' way to the card: its requests run on the task cardjob.
FILES' way to the card: its requests run on cardjob.
FILES' way to the card: its requests run on the task cardjob.
|
extern |
app_main -> control task
|
extern |
control task -> app_main
|
extern |
The throttle's pulse endpoints, Idle pulse and Full pulse, on their way to the IOmcu.
Published the way the pole count is, and for the same reason: the settings screen writes the model from app_main and the control task owns the link, so the values travel in atomics beside the debt rather than being read from settings.c on the control task (endpoints_link.h).
The time of the last edit travels too. A key held on + or - steps the value every few hundred milliseconds, and each write of CHAN_CFG is a flash write at the far end; the debt is paid once the value has rested for ENDPOINTS_SETTLE_MS.
Its hold is raised at a link-up edge, control task only: the far end is held disarmed until its throttle endpoints have been brought to the settings. A bench armed with no link – the simulator, or a cable pulled mid-run – would otherwise arm an IOmcu that has just answered on whatever range it kept in flash, and keep that range for the whole run.
|
extern |
The record's text, as hitec_card_text() writes it.
The record's text (panel.h).
The record's text, as hitec_card_text() writes it.
|
extern |
Texts the logger has written or given up on.
Texts written or given up on (panel.h).
Texts the logger has written or given up on.
|
extern |
The bytes of s_hitec_file to write; 0 removes the record.
The bytes of s_hitec_file to write (panel.h).
The bytes of s_hitec_file to write; 0 removes the record.
|
extern |
The mount the text is written to (storage_mount_count()).
The mount the text is written to (panel.h).
The mount the text is written to (storage_mount_count()).
|
extern |
Whether the card took the last text whole.
Whether the card took the last text whole (panel.h).
Whether the card took the last text whole.
|
extern |
Texts the render loop handed over; one ahead of s_hitec_file_done while one waits.
Texts handed over (panel.h).
Texts the render loop handed over; one ahead of s_hitec_file_done while one waits.
|
extern |
The gate the Hitec programmer's commands are claimed at; the one part both tasks touch.
The gate a command in the queue is claimed at (hitec_prog.h).
The gate the Hitec programmer's commands are claimed at; the one part both tasks touch.
|
extern |
The HITEC page's module (4.23); control task only.
The HITEC page's module (4.23). Control task only.
The HITEC page's module (4.23); control task only.
|
extern |
The model's commands, app_main -> control task.
app_main -> control task
|
extern |
app_main -> control task
|
extern |
control task -> logger, one row each
|
extern |
control task -> logger, one line each
|
extern |
Whether a servo programmer, KST or Hitec, has a port or an operation under way: the bench takes no arm and no supply change then. Control task only; kst_port_look().
Whether a servo programmer, KST or Hitec, has a port or an operation under way: the bench takes no arm then (kst_prog.h, hitec_prog.h), and the supply's set points are the port's.
Whether a servo programmer, KST or Hitec, has a port or an operation under way: the bench takes no arm and no supply change then. Control task only; kst_port_look().
Control task only. Read once a pass by kst_port_look(), before the arms of the pass are served: no command of a programmer is taken between the two. A HITEC port another writer holds counts: the bench console's, or one held over a panel restart, until RELEASE PORT closes it.
|
extern |
The render loop's progress, for the control task's watchdog; see frame_watch.h and main.c.
The render loop's progress: moved once a pass of panel_frame_loop() and once per card read the loop makes on LOGS (panel_card.c), read by the control task's watchdog (frame_watch.h, control_pump()).
The render loop's progress, for the control task's watchdog; see frame_watch.h and main.c.
|
extern |
control task -> app_main
|
extern |
sensors_rows_set_limits()'s word; control task writes, app_main reads.
SETUP > SENSORS' LIMIT marks, sensors_rows_set_limits()'s word. Control task writes, app_main reads.
sensors_rows_set_limits()'s word; control task writes, app_main reads.
|
extern |
The SERVO screen's pulse and angle for a SERVO run's rows, packed (log_servo_pack()): stored by the render side each frame, read by the control task.
The pulse and the angle the render side last handed over (log_servo_pack()), none until it does.
The SERVO screen's pulse and angle for a SERVO run's rows, packed (log_servo_pack()): stored by the render side each frame, read by the control task.
|
extern |
s_touch_q number of a counted STOP, 0 none
|
extern |
control task -> app_main
|
extern |
render loop -> logger
|
extern |
control task -> app_main
|
extern |
control task -> app_main