90 lines
3.6 KiB
Bash
Executable File
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'
|