Files
cnc_wams/wasm-port/tools/verify_task_usrmot_shim_design.sh
2026-07-08 09:20:47 -04:00

90 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
DOC="$ROOT_DIR/working/10-taskintf-usrmot-shim设计.md"
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
README="$ROOT_DIR/working/README.md"
UPSTREAM_HDR="$LINUXCNC_ROOT/src/emc/motion/usrmotintf.h"
UPSTREAM_SRC="$LINUXCNC_ROOT/src/emc/motion/usrmotintf.cc"
TASKINTF_SRC="$LINUXCNC_ROOT/src/emc/task/taskintf.cc"
LCMOT_HDR="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.h"
LCMOT_SRC="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c"
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hh"
fail() {
printf 'task_usrmot_shim_design_status=fail\n'
printf 'task_usrmot_shim_design_error=%s\n' "$1"
exit 1
}
require_file() {
local label="$1"
local file="$2"
[[ -f "$file" ]] || fail "$label missing: $file"
printf 'task_usrmot_shim_design_%s=ok\n' "$label"
}
require_text() {
local label="$1"
local file="$2"
local text="$3"
grep -Fq "$text" "$file" || fail "$label missing"
printf 'task_usrmot_shim_design_%s=ok\n' "$label"
}
require_file doc "$DOC"
require_file matrix "$MATRIX"
require_file upstream_header "$UPSTREAM_HDR"
require_file upstream_source "$UPSTREAM_SRC"
require_file upstream_taskintf "$TASKINTF_SRC"
require_file lcmot_header "$LCMOT_HDR"
require_file lcmot_source "$LCMOT_SRC"
require_file taskintf_subset_header "$SUBSET_HDR"
for fn in \
usrmotIniLoad \
usrmotInit \
usrmotExit \
usrmotWriteEmcmotCommand \
usrmotReadEmcmotStatus \
usrmotReadEmcmotConfig \
usrmotReadEmcmotInternal \
usrmotReadEmcmotError
do
require_text "upstream_header_$fn" "$UPSTREAM_HDR" "$fn"
require_text "upstream_source_$fn" "$UPSTREAM_SRC" "$fn"
require_text "doc_maps_$fn" "$DOC" "$fn"
done
require_text lcmot_has_command_write "$LCMOT_HDR" "lcmot_write_command_json"
require_text lcmot_has_status_snapshot "$LCMOT_HDR" "lcmot_read_status_snapshot"
require_text lcmot_has_init "$LCMOT_HDR" "lcmot_init_from_ini"
require_text lcmot_has_reset "$LCMOT_HDR" "lcmot_reset"
require_text lcmot_source_accepts_emcmot_set_line "$LCMOT_SRC" "EMCMOT_SET_LINE"
require_text lcmot_source_accepts_emcmot_abort "$LCMOT_SRC" "EMCMOT_ABORT"
require_text lcmot_source_accepts_error_injection "$LCMOT_SRC" "EMCMOT_INJECT_ERROR"
require_text subset_has_linear_move "$SUBSET_HDR" "LC_TASKINTF_SUBSET_COMMAND_TRAJ_LINEAR_MOVE"
require_text subset_has_pause "$SUBSET_HDR" "LC_TASKINTF_SUBSET_COMMAND_TRAJ_PAUSE"
require_text subset_has_jog "$SUBSET_HDR" "LC_TASKINTF_SUBSET_COMMAND_JOG_INCR"
require_text doc_command_write "$DOC" "usrmotWriteEmcmotCommand(c)"
require_text doc_command_maps_lcmot "$DOC" "lcmot_write_command_json(json)"
require_text doc_status_read "$DOC" "usrmotReadEmcmotStatus(s)"
require_text doc_status_maps_lcmot "$DOC" "lcmot_read_status_snapshot(&snapshot)"
require_text doc_config_read "$DOC" "usrmotReadEmcmotConfig(s)"
require_text doc_config_gap "$DOC" "lcmot_read_config_snapshot"
require_text doc_error_read "$DOC" "usrmotReadEmcmotError(e)"
require_text doc_error_gap "$DOC" "lcmot_read_error_message"
require_text doc_no_json_status_parse "$DOC" '不用 `lcmot_read_status_json()` 反解析'
require_text doc_no_hal_config "$DOC" "不把 config read 映射成 HAL snapshot"
require_text doc_no_readiness_promotion "$DOC" "nativeTaskReady=true"
require_text readme_lists_doc "$README" "10-taskintf-usrmot-shim设计.md"
require_text matrix_t032_done "$MATRIX" '| T-032 | `taskintf.cc` usrmot shim 设计 | 完成 |'
require_text matrix_t033_done "$MATRIX" '| T-033 | `taskintf.cc` motion init/update/abort 子集 | 完成 |'
printf 'task_usrmot_shim_design_status=ok\n'