chore: close wasm status contract work
This commit is contained in:
@@ -5,6 +5,7 @@ ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
WRAP_DIR="$ROOT_DIR/runtime/core/linuxcnc_wrap"
|
||||
SHIM_DIR="$ROOT_DIR/runtime/core/shims"
|
||||
INCLUDE_DIR="$ROOT_DIR/runtime/core/include"
|
||||
VENDOR_SRC_DIR="$ROOT_DIR/vendor/linuxcnc/src"
|
||||
OUT_DIR="$ROOT_DIR/build/wasm/task-hal"
|
||||
OBJ_DIR="$OUT_DIR/obj"
|
||||
|
||||
@@ -22,9 +23,13 @@ COMMON_FLAGS=(
|
||||
-I"$WRAP_DIR"
|
||||
-I"$SHIM_DIR"
|
||||
-I"$INCLUDE_DIR"
|
||||
-I"$VENDOR_SRC_DIR"
|
||||
)
|
||||
|
||||
SOURCES=(
|
||||
"$VENDOR_SRC_DIR/emc/task/emccanon_wasm_subset.cc"
|
||||
"$VENDOR_SRC_DIR/emc/task/emctask_wasm_subset.cc"
|
||||
"$VENDOR_SRC_DIR/emc/task/taskintf_wasm_subset.cc"
|
||||
"$WRAP_DIR/linuxcnc_hal_runtime.cpp"
|
||||
"$WRAP_DIR/linuxcnc_motion_runtime.c"
|
||||
"$WRAP_DIR/linuxcnc_task_hal_wasm.cpp"
|
||||
@@ -52,7 +57,7 @@ link_wasm_module \
|
||||
-s ENVIRONMENT=web,node \
|
||||
-s ALLOW_MEMORY_GROWTH=1 \
|
||||
-s NO_EXIT_RUNTIME=1 \
|
||||
-s EXPORTED_FUNCTIONS='["_malloc","_free","_hal_init","_hal_ready","_hal_exit","_hal_malloc","_hal_pin_bit_new","_hal_pin_float_new","_hal_pin_s32_new","_hal_pin_u32_new","_hal_pin_s64_new","_hal_pin_u64_new","_hal_pin_bit_newf","_hal_pin_float_newf","_hal_pin_s32_newf","_hal_pin_u32_newf","_hal_pin_s64_newf","_hal_pin_u64_newf","_hal_param_bit_new","_hal_param_float_new","_hal_param_s32_new","_hal_param_u32_new","_hal_param_s64_new","_hal_param_u64_new","_hal_param_bit_newf","_hal_param_float_newf","_hal_param_s32_newf","_hal_param_u32_newf","_hal_param_s64_newf","_hal_param_u64_newf","_hal_get_pin_value_by_name","_hal_get_signal_value_by_name","_hal_get_param_value_by_name","_hal_link","_hal_unlink","_hal_set_p","_hal_get_p","_hal_create_thread","_hal_add_funct_to_thread","_hal_del_funct_from_thread","_hal_start_threads","_hal_stop_threads","_lchal_init_runtime","_lchal_load_hal_file","_lchal_set_pin_float","_lchal_set_pin_s32","_lchal_set_pin_bit","_lchal_get_pin_json","_lchal_get_snapshot_json","_lchal_step_threads","_lchal_reset_runtime","_lcmot_init_from_ini","_lcmot_write_command_json","_lcmot_step_servo","_lcmot_read_status_json","_lcmot_read_hal_snapshot_json","_lcmot_reset","_lctask_init_session","_lctask_stage_file","_lctask_open_program","_lctask_load_program_motion_plan_json","_lctask_send_command_json","_lctask_run_cycles","_lctask_read_status_json","_lctask_read_events_json","_lctask_reset_session"]' \
|
||||
-s EXPORTED_FUNCTIONS='["_malloc","_free","_hal_init","_hal_ready","_hal_exit","_hal_malloc","_hal_pin_bit_new","_hal_pin_float_new","_hal_pin_s32_new","_hal_pin_u32_new","_hal_pin_s64_new","_hal_pin_u64_new","_hal_pin_bit_newf","_hal_pin_float_newf","_hal_pin_s32_newf","_hal_pin_u32_newf","_hal_pin_s64_newf","_hal_pin_u64_newf","_hal_param_bit_new","_hal_param_float_new","_hal_param_s32_new","_hal_param_u32_new","_hal_param_s64_new","_hal_param_u64_new","_hal_param_bit_newf","_hal_param_float_newf","_hal_param_s32_newf","_hal_param_u32_newf","_hal_param_s64_newf","_hal_param_u64_newf","_hal_get_pin_value_by_name","_hal_get_signal_value_by_name","_hal_get_param_value_by_name","_hal_link","_hal_unlink","_hal_set_p","_hal_get_p","_hal_create_thread","_hal_add_funct_to_thread","_hal_del_funct_from_thread","_hal_start_threads","_hal_stop_threads","_lchal_init_runtime","_lchal_load_hal_file","_lchal_set_pin_float","_lchal_set_pin_s32","_lchal_set_pin_bit","_lchal_get_pin_json","_lchal_get_snapshot_json","_lchal_step_threads","_lchal_reset_runtime","_lcmot_init_from_ini","_lcmot_write_command_json","_lcmot_write_linear_move","_lcmot_write_jog_incr","_lcmot_write_joint_home","_lcmot_write_joint_unhome","_lcmot_write_aout","_lcmot_step_servo","_lcmot_read_status_snapshot","_lcmot_read_config_snapshot","_lcmot_read_error_message","_lcmot_read_status_json","_lcmot_read_hal_snapshot_json","_lcmot_reset","_lctask_init_session","_lctask_stage_file","_lctask_open_program","_lctask_load_program_motion_plan_json","_lctask_send_command_json","_lctask_run_cycles","_lctask_read_status_json","_lctask_read_events_json","_lctask_reset_session"]' \
|
||||
-s EXPORTED_RUNTIME_METHODS='["UTF8ToString","stringToUTF8","lengthBytesUTF8","getValue","setValue"]'
|
||||
|
||||
echo "linuxcnc_task_hal_wasm_build=ok"
|
||||
|
||||
55
wasm-port/tools/verify_task_emc_nml_reuse_plan.sh
Executable file
55
wasm-port/tools/verify_task_emc_nml_reuse_plan.sh
Executable file
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
DOC="$ROOT_DIR/working/09-emc_nml复用评估.md"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/nml_intf/emc_nml.hh"
|
||||
VENDOR="$ROOT_DIR/vendor/linuxcnc/src/emc/nml_intf/emc_nml.hh"
|
||||
|
||||
fail() {
|
||||
printf 'task_emc_nml_reuse_plan_status=fail\n'
|
||||
printf 'task_emc_nml_reuse_plan_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_emc_nml_reuse_plan_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_emc_nml_reuse_plan_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream "$UPSTREAM"
|
||||
require_file doc "$DOC"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
if [[ -f "$VENDOR" ]]; then
|
||||
fail "vendor_emc_nml_hh_present_without_reuse_promotion"
|
||||
fi
|
||||
printf 'task_emc_nml_reuse_plan_vendor_emc_nml_hh=absent\n'
|
||||
|
||||
require_text upstream_has_emc_stat "$UPSTREAM" "class EMC_STAT:public EMC_STAT_MSG"
|
||||
require_text upstream_has_task_stat "$UPSTREAM" "class EMC_TASK_STAT:public EMC_TASK_STAT_MSG"
|
||||
require_text upstream_has_motion_stat "$UPSTREAM" "class EMC_MOTION_STAT:public EMC_MOTION_STAT_MSG"
|
||||
require_text upstream_has_io_stat "$UPSTREAM" "class EMC_IO_STAT:public EMC_IO_STAT_MSG"
|
||||
|
||||
require_text doc_choice "$DOC" '暂不直接 include 完整上游 `emc_nml.hh`'
|
||||
require_text doc_strategy "$DOC" "采用分阶段 typedef / 窄 status 容器"
|
||||
require_text doc_standalone "$DOC" 'T-007 建立 `StandaloneEmcStatus`'
|
||||
require_text doc_dependency_nml "$DOC" "libnml/rcs/rcs.hh"
|
||||
require_text doc_dependency_rs274 "$DOC" "rs274ngc/rs274ngc.hh"
|
||||
require_text doc_boundary "$DOC" "NML transport"
|
||||
require_text doc_next_t032 "$DOC" "T-032"
|
||||
require_text matrix_t029_done "$MATRIX" '| T-029 | 评估 vendored `emc_nml.hh` 直接复用可行性 | 完成 |'
|
||||
|
||||
printf 'task_emc_nml_reuse_plan_status=ok\n'
|
||||
79
wasm-port/tools/verify_task_emccanon_dwell_path_control.sh
Executable file
79
wasm-port/tools/verify_task_emccanon_dwell_path_control.sh
Executable file
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/task/emccanon.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hh"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_emccanon_dwell_path_control_status=fail\n'
|
||||
printf 'task_emccanon_dwell_path_control_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_emccanon_dwell_path_control_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_emccanon_dwell_path_control_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream "$UPSTREAM"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
for fn in \
|
||||
DWELL \
|
||||
SET_MOTION_CONTROL_MODE
|
||||
do
|
||||
require_text "upstream_$fn" "$UPSTREAM" "$fn"
|
||||
done
|
||||
|
||||
require_text upstream_delay "$UPSTREAM" "EMC_TRAJ_DELAY"
|
||||
require_text upstream_term_cond "$UPSTREAM" "EMC_TRAJ_SET_TERM_COND"
|
||||
require_text upstream_interp_list "$UPSTREAM" "interp_list.append"
|
||||
require_text subset_delay_type "$SUBSET_HDR" "LcEmcCanonSubsetDelay"
|
||||
require_text subset_term_type "$SUBSET_HDR" "LcEmcCanonSubsetTermCond"
|
||||
require_text subset_dwell_decl "$SUBSET_HDR" "lc_emccanon_subset_dwell"
|
||||
require_text subset_path_decl "$SUBSET_HDR" "lc_emccanon_subset_set_motion_control_mode"
|
||||
require_text subset_anchor_decl "$SUBSET_HDR" "lc_emccanon_subset_dwell_path_control_anchor_list"
|
||||
require_text subset_dwell_impl "$SUBSET_SRC" "lc_emccanon_subset_dwell"
|
||||
require_text subset_path_impl "$SUBSET_SRC" "lc_emccanon_subset_set_motion_control_mode"
|
||||
require_text subset_anchor "$SUBSET_SRC" "DWELL,EMC_TRAJ_DELAY,SET_MOTION_CONTROL_MODE,EMC_TRAJ_SET_TERM_COND,interp_list"
|
||||
|
||||
require_text wrapper_dwell_count "$TASK_WRAPPER" "dwellCount"
|
||||
require_text wrapper_delay_append "$TASK_WRAPPER" "delayAppendCount"
|
||||
require_text wrapper_path_count "$TASK_WRAPPER" "pathControlCount"
|
||||
require_text wrapper_term_append "$TASK_WRAPPER" "termCondAppendCount"
|
||||
require_text wrapper_g4 "$TASK_WRAPPER" "G4"
|
||||
require_text wrapper_g64 "$TASK_WRAPPER" "G64"
|
||||
require_text wrapper_g61 "$TASK_WRAPPER" "G61"
|
||||
require_text wrapper_anchor "$TASK_WRAPPER" "lc_emccanon_subset_dwell_path_control_anchor_list"
|
||||
|
||||
require_text wasm_test_status "$WASM_TEST" "emccanon_dwell_path_control_status=ok"
|
||||
require_text wasm_test_dwell "$WASM_TEST" "dwellCount"
|
||||
require_text wasm_test_delay "$WASM_TEST" "delayAppendCount"
|
||||
require_text wasm_test_path "$WASM_TEST" "pathControlCount"
|
||||
require_text wasm_test_term "$WASM_TEST" "termCondAppendCount"
|
||||
require_text wasm_test_anchor "$WASM_TEST" "dwellPathControlAnchors"
|
||||
|
||||
require_text matrix_t043_done "$MATRIX" '| T-043 | `emccanon.cc` dwell/path-control 子集 | 完成 |'
|
||||
require_text matrix_t044_done "$MATRIX" '| T-044 | `emccanon.cc` spindle/tool command 子集 | 完成 |'
|
||||
|
||||
printf 'task_emccanon_dwell_path_control_status=ok\n'
|
||||
83
wasm-port/tools/verify_task_emccanon_init_finish_unit.sh
Executable file
83
wasm-port/tools/verify_task_emccanon_init_finish_unit.sh
Executable file
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/task/emccanon.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hh"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_emccanon_init_finish_unit_status=fail\n'
|
||||
printf 'task_emccanon_init_finish_unit_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_emccanon_init_finish_unit_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_emccanon_init_finish_unit_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream "$UPSTREAM"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
for fn in \
|
||||
INIT_CANON \
|
||||
ON_RESET \
|
||||
FINISH \
|
||||
USE_LENGTH_UNITS \
|
||||
GET_EXTERNAL_LENGTH_UNITS \
|
||||
GET_EXTERNAL_ANGLE_UNITS \
|
||||
GET_EXTERNAL_POSITION \
|
||||
GET_EXTERNAL_POSITION_X \
|
||||
GET_EXTERNAL_POSITION_Y \
|
||||
GET_EXTERNAL_POSITION_Z
|
||||
do
|
||||
require_text "upstream_$fn" "$UPSTREAM" "$fn"
|
||||
done
|
||||
|
||||
require_text subset_state "$SUBSET_HDR" "LcEmcCanonSubsetState"
|
||||
require_text subset_init "$SUBSET_HDR" "lc_emccanon_subset_init"
|
||||
require_text subset_reset "$SUBSET_HDR" "lc_emccanon_subset_on_reset"
|
||||
require_text subset_finish "$SUBSET_HDR" "lc_emccanon_subset_finish"
|
||||
require_text subset_units "$SUBSET_HDR" "lc_emccanon_subset_use_length_units"
|
||||
require_text subset_position "$SUBSET_HDR" "lc_emccanon_subset_get_external_position"
|
||||
require_text subset_anchors "$SUBSET_SRC" "INIT_CANON,ON_RESET,FINISH,USE_LENGTH_UNITS,GET_EXTERNAL_LENGTH_UNITS,GET_EXTERNAL_ANGLE_UNITS,GET_EXTERNAL_POSITION"
|
||||
|
||||
require_text wrapper_state "$TASK_WRAPPER" "LcEmcCanonSubsetState emccanon_state"
|
||||
require_text wrapper_init "$TASK_WRAPPER" "lc_emccanon_subset_init"
|
||||
require_text wrapper_reset "$TASK_WRAPPER" "lc_emccanon_subset_on_reset"
|
||||
require_text wrapper_finish "$TASK_WRAPPER" "lc_emccanon_subset_finish"
|
||||
require_text wrapper_position "$TASK_WRAPPER" "lc_emccanon_subset_get_external_position"
|
||||
require_text wrapper_endpoint "$TASK_WRAPPER" "emccanon_update_endpoint"
|
||||
require_text wrapper_status_init "$TASK_WRAPPER" "initCount"
|
||||
require_text wrapper_status_units "$TASK_WRAPPER" "externalLengthUnits"
|
||||
require_text wrapper_status_endpoint "$TASK_WRAPPER" "\\\"endpoint\\\""
|
||||
|
||||
require_text wasm_test_status "$WASM_TEST" "emccanon_init_finish_unit_status=ok"
|
||||
require_text wasm_test_init "$WASM_TEST" "initCount"
|
||||
require_text wasm_test_finish "$WASM_TEST" "finishCount"
|
||||
require_text wasm_test_units "$WASM_TEST" "externalLengthUnits"
|
||||
require_text wasm_test_endpoint "$WASM_TEST" "endpoint"
|
||||
|
||||
require_text matrix_t041_done "$MATRIX" '| T-041 | `emccanon.cc` canon init/finish/unit 子集 | 完成 |'
|
||||
require_text matrix_t042_done "$MATRIX" '| T-042 | `emccanon.cc` straight traverse/feed 子集 | 完成 |'
|
||||
|
||||
printf 'task_emccanon_init_finish_unit_status=ok\n'
|
||||
97
wasm-port/tools/verify_task_emccanon_motion_output.sh
Executable file
97
wasm-port/tools/verify_task_emccanon_motion_output.sh
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/task/emccanon.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hh"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_emccanon_motion_output_status=fail\n'
|
||||
printf 'task_emccanon_motion_output_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_emccanon_motion_output_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_emccanon_motion_output_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
reject_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
if grep -Fq "$text" "$file"; then
|
||||
fail "$label present"
|
||||
fi
|
||||
printf 'task_emccanon_motion_output_%s=absent\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream "$UPSTREAM"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
for fn in \
|
||||
SET_MOTION_OUTPUT_BIT \
|
||||
CLEAR_MOTION_OUTPUT_BIT \
|
||||
SET_AUX_OUTPUT_BIT \
|
||||
CLEAR_AUX_OUTPUT_BIT \
|
||||
SET_MOTION_OUTPUT_VALUE \
|
||||
SET_AUX_OUTPUT_VALUE \
|
||||
WAIT
|
||||
do
|
||||
require_text "upstream_$fn" "$UPSTREAM" "$fn"
|
||||
done
|
||||
|
||||
require_text upstream_dout "$UPSTREAM" "EMC_MOTION_SET_DOUT"
|
||||
require_text upstream_aout "$UPSTREAM" "EMC_MOTION_SET_AOUT"
|
||||
require_text upstream_wait "$UPSTREAM" "EMC_AUX_INPUT_WAIT"
|
||||
require_text upstream_interp_list "$UPSTREAM" "interp_list.append"
|
||||
|
||||
require_text subset_output_type "$SUBSET_HDR" "LcEmcCanonSubsetOutputCommand"
|
||||
require_text subset_motion_bit_decl "$SUBSET_HDR" "lc_emccanon_subset_set_motion_output_bit"
|
||||
require_text subset_aux_value_decl "$SUBSET_HDR" "lc_emccanon_subset_set_aux_output_value"
|
||||
require_text subset_wait_decl "$SUBSET_HDR" "lc_emccanon_subset_wait_input"
|
||||
require_text subset_anchor_decl "$SUBSET_HDR" "lc_emccanon_subset_motion_output_anchor_list"
|
||||
require_text subset_anchor "$SUBSET_SRC" "EMC_MOTION_SET_DOUT,EMC_MOTION_SET_AOUT,EMC_AUX_INPUT_WAIT,interp_list"
|
||||
|
||||
require_text wrapper_output_count "$TASK_WRAPPER" "motionOutputCount"
|
||||
require_text wrapper_output_append "$TASK_WRAPPER" "motionOutputAppendCount"
|
||||
require_text wrapper_aout_bridge "$TASK_WRAPPER" "motionOutputTaskintfAoutCount"
|
||||
require_text wrapper_wait_count "$TASK_WRAPPER" "waitInputCount"
|
||||
require_text wrapper_issue_helper "$TASK_WRAPPER" "issue_motion_output_from_line"
|
||||
require_text wrapper_m428_exact "$TASK_WRAPPER" "line_has_m_code(line, 428)"
|
||||
require_text wrapper_m62_exact "$TASK_WRAPPER" "line_has_m_code(line, 62)"
|
||||
require_text wrapper_m68_exact "$TASK_WRAPPER" "line_has_m_code(line, 68)"
|
||||
require_text wrapper_anchor "$TASK_WRAPPER" "lc_emccanon_subset_motion_output_anchor_list"
|
||||
reject_text wrapper_old_m428_special "$TASK_WRAPPER" 'mdi.find("M428")'
|
||||
|
||||
require_text wasm_test_status "$WASM_TEST" "emccanon_motion_output_status=ok"
|
||||
require_text wasm_test_m428 "$WASM_TEST" "M428"
|
||||
require_text wasm_test_m62 "$WASM_TEST" "M62 P1"
|
||||
require_text wasm_test_m66 "$WASM_TEST" "M66 P4 L3 Q0.5"
|
||||
require_text wasm_test_m68 "$WASM_TEST" "M68 E3 Q2.5"
|
||||
require_text wasm_test_output_count "$WASM_TEST" "motionOutputCount"
|
||||
require_text wasm_test_anchor "$WASM_TEST" "motionOutputAnchors"
|
||||
|
||||
require_text matrix_t045_done "$MATRIX" '| T-045 | `emccanon.cc` motion output/switchkins 子集 | 完成 |'
|
||||
require_text matrix_t046_done "$MATRIX" '| T-046 | 移除主路径 JSON motion plan 依赖 | 完成 |'
|
||||
|
||||
printf 'task_emccanon_motion_output_status=ok\n'
|
||||
102
wasm-port/tools/verify_task_emccanon_spindle_tool.sh
Executable file
102
wasm-port/tools/verify_task_emccanon_spindle_tool.sh
Executable file
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/task/emccanon.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hh"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_emccanon_spindle_tool_status=fail\n'
|
||||
printf 'task_emccanon_spindle_tool_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_emccanon_spindle_tool_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_emccanon_spindle_tool_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream "$UPSTREAM"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
for fn in \
|
||||
SET_SPINDLE_SPEED \
|
||||
START_SPINDLE_CLOCKWISE \
|
||||
START_SPINDLE_COUNTERCLOCKWISE \
|
||||
STOP_SPINDLE_TURNING \
|
||||
SELECT_TOOL \
|
||||
CHANGE_TOOL \
|
||||
CHANGE_TOOL_NUMBER \
|
||||
RELOAD_TOOLDATA
|
||||
do
|
||||
require_text "upstream_$fn" "$UPSTREAM" "$fn"
|
||||
done
|
||||
|
||||
for msg in \
|
||||
EMC_SPINDLE_SPEED \
|
||||
EMC_SPINDLE_ON \
|
||||
EMC_SPINDLE_OFF \
|
||||
EMC_TOOL_PREPARE \
|
||||
EMC_TOOL_LOAD \
|
||||
EMC_TOOL_SET_NUMBER \
|
||||
EMC_TOOL_LOAD_TOOL_TABLE
|
||||
do
|
||||
require_text "upstream_$msg" "$UPSTREAM" "$msg"
|
||||
done
|
||||
|
||||
require_text upstream_interp_list "$UPSTREAM" "interp_list.append"
|
||||
require_text subset_spindle_type "$SUBSET_HDR" "LcEmcCanonSubsetSpindleCommand"
|
||||
require_text subset_tool_type "$SUBSET_HDR" "LcEmcCanonSubsetToolCommand"
|
||||
require_text subset_spindle_speed_decl "$SUBSET_HDR" "lc_emccanon_subset_set_spindle_speed"
|
||||
require_text subset_start_cw_decl "$SUBSET_HDR" "lc_emccanon_subset_start_spindle_clockwise"
|
||||
require_text subset_start_ccw_decl "$SUBSET_HDR" "lc_emccanon_subset_start_spindle_counterclockwise"
|
||||
require_text subset_stop_decl "$SUBSET_HDR" "lc_emccanon_subset_stop_spindle_turning"
|
||||
require_text subset_select_tool_decl "$SUBSET_HDR" "lc_emccanon_subset_select_tool"
|
||||
require_text subset_change_tool_decl "$SUBSET_HDR" "lc_emccanon_subset_change_tool"
|
||||
require_text subset_change_number_decl "$SUBSET_HDR" "lc_emccanon_subset_change_tool_number"
|
||||
require_text subset_reload_decl "$SUBSET_HDR" "lc_emccanon_subset_reload_tooldata"
|
||||
require_text subset_anchor_decl "$SUBSET_HDR" "lc_emccanon_subset_spindle_tool_anchor_list"
|
||||
require_text subset_anchor "$SUBSET_SRC" "EMC_SPINDLE_SPEED,EMC_SPINDLE_ON,EMC_SPINDLE_OFF"
|
||||
require_text subset_tool_anchor "$SUBSET_SRC" "EMC_TOOL_PREPARE,EMC_TOOL_LOAD,EMC_TOOL_SET_NUMBER,EMC_TOOL_LOAD_TOOL_TABLE,interp_list"
|
||||
|
||||
require_text wrapper_spindle_count "$TASK_WRAPPER" "spindleCommandCount"
|
||||
require_text wrapper_spindle_append "$TASK_WRAPPER" "spindleAppendCount"
|
||||
require_text wrapper_tool_count "$TASK_WRAPPER" "toolCommandCount"
|
||||
require_text wrapper_tool_append "$TASK_WRAPPER" "toolAppendCount"
|
||||
require_text wrapper_exact_m_code "$TASK_WRAPPER" "line_has_m_code"
|
||||
require_text wrapper_m3 "$TASK_WRAPPER" "line_has_m_code(line, 3)"
|
||||
require_text wrapper_m61 "$TASK_WRAPPER" "line_has_m_code(line, 61)"
|
||||
require_text wrapper_anchor "$TASK_WRAPPER" "lc_emccanon_subset_spindle_tool_anchor_list"
|
||||
|
||||
require_text wasm_test_status "$WASM_TEST" "emccanon_spindle_tool_status=ok"
|
||||
require_text wasm_test_s_m3 "$WASM_TEST" "S1200 M3"
|
||||
require_text wasm_test_m5 "$WASM_TEST" "M5"
|
||||
require_text wasm_test_t_m6 "$WASM_TEST" "T7 M6"
|
||||
require_text wasm_test_m61 "$WASM_TEST" "M61 Q8"
|
||||
require_text wasm_test_spindle_count "$WASM_TEST" "spindleCommandCount"
|
||||
require_text wasm_test_tool_count "$WASM_TEST" "toolCommandCount"
|
||||
require_text wasm_test_anchor "$WASM_TEST" "spindleToolAnchors"
|
||||
|
||||
require_text matrix_t044_done "$MATRIX" '| T-044 | `emccanon.cc` spindle/tool command 子集 | 完成 |'
|
||||
require_text matrix_t045_done "$MATRIX" '| T-045 | `emccanon.cc` motion output/switchkins 子集 | 完成 |'
|
||||
|
||||
printf 'task_emccanon_spindle_tool_status=ok\n'
|
||||
77
wasm-port/tools/verify_task_emccanon_straight_motion.sh
Executable file
77
wasm-port/tools/verify_task_emccanon_straight_motion.sh
Executable file
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/task/emccanon.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hh"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_emccanon_straight_motion_status=fail\n'
|
||||
printf 'task_emccanon_straight_motion_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_emccanon_straight_motion_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_emccanon_straight_motion_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream "$UPSTREAM"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
for fn in \
|
||||
generate_fast_move \
|
||||
generate_move \
|
||||
STRAIGHT_TRAVERSE \
|
||||
STRAIGHT_FEED
|
||||
do
|
||||
require_text "upstream_$fn" "$UPSTREAM" "$fn"
|
||||
done
|
||||
|
||||
require_text upstream_linear_move "$UPSTREAM" "EMC_TRAJ_LINEAR_MOVE"
|
||||
require_text upstream_interp_list "$UPSTREAM" "interp_list.append"
|
||||
require_text subset_traverse_decl "$SUBSET_HDR" "lc_emccanon_subset_straight_traverse"
|
||||
require_text subset_feed_decl "$SUBSET_HDR" "lc_emccanon_subset_straight_feed"
|
||||
require_text subset_linear_move_type "$SUBSET_HDR" "LcEmcCanonSubsetLinearMove"
|
||||
require_text subset_motion_anchor "$SUBSET_HDR" "lc_emccanon_subset_straight_motion_anchor_list"
|
||||
require_text subset_traverse_impl "$SUBSET_SRC" "LC_EMCCANON_SUBSET_MOTION_TRAVERSE"
|
||||
require_text subset_feed_impl "$SUBSET_SRC" "LC_EMCCANON_SUBSET_MOTION_FEED"
|
||||
require_text subset_linear_anchor "$SUBSET_SRC" "EMC_TRAJ_LINEAR_MOVE,interp_list"
|
||||
|
||||
require_text wrapper_traverse_count "$TASK_WRAPPER" "straightTraverseCount"
|
||||
require_text wrapper_feed_count "$TASK_WRAPPER" "straightFeedCount"
|
||||
require_text wrapper_append_count "$TASK_WRAPPER" "linearMoveAppendCount"
|
||||
require_text wrapper_last_command "$TASK_WRAPPER" "lastInterpListCommand"
|
||||
require_text wrapper_linear_move "$TASK_WRAPPER" "EMC_TRAJ_LINEAR_MOVE"
|
||||
require_text wrapper_motion_anchor "$TASK_WRAPPER" "lc_emccanon_subset_straight_motion_anchor_list"
|
||||
require_text wrapper_taskintf_linear "$TASK_WRAPPER" "lc_taskintf_subset_linear_move_ex"
|
||||
|
||||
require_text wasm_test_status "$WASM_TEST" "emccanon_straight_motion_status=ok"
|
||||
require_text wasm_test_traverse "$WASM_TEST" "straightTraverseCount"
|
||||
require_text wasm_test_feed "$WASM_TEST" "straightFeedCount"
|
||||
require_text wasm_test_append "$WASM_TEST" "linearMoveAppendCount"
|
||||
require_text wasm_test_interp_command "$WASM_TEST" "lastInterpListCommand"
|
||||
|
||||
require_text matrix_t042_done "$MATRIX" '| T-042 | `emccanon.cc` straight traverse/feed 子集 | 完成 |'
|
||||
require_text matrix_t043_done "$MATRIX" '| T-043 | `emccanon.cc` dwell/path-control 子集 | 完成 |'
|
||||
|
||||
printf 'task_emccanon_straight_motion_status=ok\n'
|
||||
57
wasm-port/tools/verify_task_emccanon_subset.sh
Executable file
57
wasm-port/tools/verify_task_emccanon_subset.sh
Executable file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/task/emccanon.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hh"
|
||||
BUILD_SCRIPT="$ROOT_DIR/tools/build_task_hal_wasm.sh"
|
||||
|
||||
print_kv() {
|
||||
printf '%s=%s\n' "$1" "$2"
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local key="$1"
|
||||
local path="$2"
|
||||
if [[ ! -f "$path" ]]; then
|
||||
print_kv "$key" missing
|
||||
print_kv "${key}_path" "$path"
|
||||
exit 1
|
||||
fi
|
||||
print_kv "$key" ok
|
||||
print_kv "${key}_path" "$path"
|
||||
}
|
||||
|
||||
require_pattern() {
|
||||
local key="$1"
|
||||
local pattern="$2"
|
||||
local path="$3"
|
||||
if ! rg -q "$pattern" "$path"; then
|
||||
print_kv "$key" missing
|
||||
print_kv "${key}_pattern" "$pattern"
|
||||
print_kv "${key}_path" "$path"
|
||||
exit 1
|
||||
fi
|
||||
print_kv "$key" ok
|
||||
}
|
||||
|
||||
require_file task_emccanon_subset_upstream "$UPSTREAM"
|
||||
require_file task_emccanon_subset_source "$SUBSET_SRC"
|
||||
require_file task_emccanon_subset_header "$SUBSET_HDR"
|
||||
|
||||
for fn in \
|
||||
generate_fast_move \
|
||||
generate_move \
|
||||
STRAIGHT_TRAVERSE \
|
||||
STRAIGHT_FEED
|
||||
do
|
||||
require_pattern "task_emccanon_subset_upstream_$fn" "$fn" "$UPSTREAM"
|
||||
require_pattern "task_emccanon_subset_origin_$fn" "$fn" "$SUBSET_SRC"
|
||||
done
|
||||
|
||||
require_pattern task_emccanon_subset_origin_path "src/emc/task/emccanon.cc" "$SUBSET_SRC"
|
||||
require_pattern task_emccanon_subset_build_included "emccanon_wasm_subset.cc" "$BUILD_SCRIPT"
|
||||
|
||||
print_kv task_emccanon_subset_source_reuse ok
|
||||
83
wasm-port/tools/verify_task_emctask_plan_open_wait.sh
Executable file
83
wasm-port/tools/verify_task_emctask_plan_open_wait.sh
Executable file
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/task/emctask.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.hh"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_emctask_plan_open_wait_status=fail\n'
|
||||
printf 'task_emctask_plan_open_wait_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_emctask_plan_open_wait_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_emctask_plan_open_wait_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream "$UPSTREAM"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
for fn in \
|
||||
emcTaskPlanSetWait \
|
||||
emcTaskPlanIsWait \
|
||||
emcTaskPlanClearWait \
|
||||
emcTaskPlanSynch \
|
||||
emcTaskPlanOpen \
|
||||
emcTaskPlanClose \
|
||||
emcTaskPlanReset
|
||||
do
|
||||
require_text "upstream_$fn" "$UPSTREAM" "int $fn("
|
||||
done
|
||||
|
||||
require_text subset_plan_state "$SUBSET_HDR" "LcEmcTaskSubsetPlanState"
|
||||
require_text subset_plan_result "$SUBSET_HDR" "LcEmcTaskSubsetPlanResult"
|
||||
require_text subset_plan_set_wait "$SUBSET_HDR" "lc_emctask_subset_plan_set_wait"
|
||||
require_text subset_plan_is_wait "$SUBSET_HDR" "lc_emctask_subset_plan_is_wait"
|
||||
require_text subset_plan_clear_wait "$SUBSET_HDR" "lc_emctask_subset_plan_clear_wait"
|
||||
require_text subset_plan_synch "$SUBSET_HDR" "lc_emctask_subset_plan_synch"
|
||||
require_text subset_plan_open "$SUBSET_HDR" "lc_emctask_subset_plan_open"
|
||||
require_text subset_plan_close "$SUBSET_HDR" "lc_emctask_subset_plan_close"
|
||||
require_text subset_plan_reset "$SUBSET_HDR" "lc_emctask_subset_plan_reset"
|
||||
require_text subset_plan_anchors "$SUBSET_SRC" "emcTaskPlanSetWait,emcTaskPlanIsWait,emcTaskPlanClearWait,emcTaskPlanSynch,emcTaskPlanOpen,emcTaskPlanClose,emcTaskPlanReset"
|
||||
|
||||
require_text wrapper_plan_state "$TASK_WRAPPER" "emctask_plan_state_from_runtime"
|
||||
require_text wrapper_plan_open "$TASK_WRAPPER" "lc_emctask_subset_plan_open"
|
||||
require_text wrapper_plan_wait "$TASK_WRAPPER" "lc_emctask_subset_plan_set_wait"
|
||||
require_text wrapper_plan_clear "$TASK_WRAPPER" "lc_emctask_subset_plan_clear_wait"
|
||||
require_text wrapper_plan_synch "$TASK_WRAPPER" "lc_emctask_subset_plan_synch"
|
||||
require_text wrapper_plan_close "$TASK_WRAPPER" "lc_emctask_subset_plan_close"
|
||||
require_text wrapper_plan_reset "$TASK_WRAPPER" "lc_emctask_subset_plan_reset"
|
||||
require_text wrapper_staged_fs "$TASK_WRAPPER" "state.staged_files.find(path)"
|
||||
require_text wrapper_status_count "$TASK_WRAPPER" "planIssueCount"
|
||||
require_text wrapper_status_anchor "$TASK_WRAPPER" "planAnchors"
|
||||
|
||||
require_text wasm_test_plan_open "$WASM_TEST" "taskPlanOpen"
|
||||
require_text wasm_test_plan_wait "$WASM_TEST" "planWaitSetCount"
|
||||
require_text wasm_test_plan_synch "$WASM_TEST" "planSynchCount"
|
||||
require_text wasm_test_plan_anchor "$WASM_TEST" "planAnchors"
|
||||
|
||||
require_text matrix_t039_done "$MATRIX" '| T-039 | `emctask.cc` plan wait/synch/open/close 子集 | 完成 |'
|
||||
require_text matrix_t040_done "$MATRIX" '| T-040 | `emctask.cc` plan read/execute 子集 | 完成 |'
|
||||
|
||||
printf 'task_emctask_plan_open_wait_status=ok\n'
|
||||
80
wasm-port/tools/verify_task_emctask_plan_read_execute.sh
Executable file
80
wasm-port/tools/verify_task_emctask_plan_read_execute.sh
Executable file
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/task/emctask.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.hh"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
STATE_MATRIX="$ROOT_DIR/tests/wasm/node/verify_task_state_matrix.mjs"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_emctask_plan_read_execute_status=fail\n'
|
||||
printf 'task_emctask_plan_read_execute_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_emctask_plan_read_execute_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_emctask_plan_read_execute_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream "$UPSTREAM"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file state_matrix "$STATE_MATRIX"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
for fn in \
|
||||
emcTaskPlanRead \
|
||||
emcTaskPlanExecute \
|
||||
emcTaskPlanLine \
|
||||
emcTaskPlanLevel \
|
||||
emcTaskPlanCommand
|
||||
do
|
||||
require_text "upstream_$fn" "$UPSTREAM" "int $fn("
|
||||
done
|
||||
|
||||
require_text upstream_interp_list "$ROOT_DIR/../linuxcnc/src/emc/task/emctaskmain.cc" "interp_list.len()"
|
||||
require_text subset_plan_io_result "$SUBSET_HDR" "LcEmcTaskSubsetPlanIoResult"
|
||||
require_text subset_plan_read "$SUBSET_HDR" "lc_emctask_subset_plan_read"
|
||||
require_text subset_plan_execute "$SUBSET_HDR" "lc_emctask_subset_plan_execute"
|
||||
require_text subset_plan_line "$SUBSET_HDR" "lc_emctask_subset_plan_line"
|
||||
require_text subset_plan_level "$SUBSET_HDR" "lc_emctask_subset_plan_level"
|
||||
require_text subset_plan_command "$SUBSET_HDR" "lc_emctask_subset_plan_command"
|
||||
require_text subset_plan_read_execute_anchors "$SUBSET_SRC" "emcTaskPlanRead,emcTaskPlanExecute,emcTaskPlanLine,emcTaskPlanLevel,emcTaskPlanCommand,interp_list"
|
||||
|
||||
require_text wrapper_read_execute_helper "$TASK_WRAPPER" "emctask_plan_read_execute_program_line"
|
||||
require_text wrapper_execute_helper "$TASK_WRAPPER" "emctask_plan_execute_command"
|
||||
require_text wrapper_no_json_run "$TASK_WRAPPER" "state.next_program_line < state.executable_line_count"
|
||||
require_text wrapper_no_json_issue "$TASK_WRAPPER" "issue_linear_move_from_line"
|
||||
require_text wrapper_status_read "$TASK_WRAPPER" "planReadCount"
|
||||
require_text wrapper_status_execute "$TASK_WRAPPER" "planExecuteCount"
|
||||
require_text wrapper_status_interp_list "$TASK_WRAPPER" "interpListAppendCount"
|
||||
require_text wrapper_status_anchors "$TASK_WRAPPER" "planReadExecuteAnchors"
|
||||
|
||||
require_text wasm_test_no_json "$WASM_TEST" "no-json-plan.ngc"
|
||||
require_text wasm_test_status "$WASM_TEST" "emctask_plan_read_execute_status=ok"
|
||||
require_text wasm_test_assert_read "$WASM_TEST" "planReadCount"
|
||||
require_text wasm_test_assert_execute "$WASM_TEST" "planExecuteCount"
|
||||
require_text state_matrix_no_json "$STATE_MATRIX" "run_gate_staged_program_executes_without_json_plan=ok"
|
||||
|
||||
require_text matrix_t040_done "$MATRIX" '| T-040 | `emctask.cc` plan read/execute 子集 | 完成 |'
|
||||
require_text matrix_t041_done "$MATRIX" '| T-041 | `emccanon.cc` canon init/finish/unit 子集 | 完成 |'
|
||||
|
||||
printf 'task_emctask_plan_read_execute_status=ok\n'
|
||||
64
wasm-port/tools/verify_task_emctask_state_mode.sh
Executable file
64
wasm-port/tools/verify_task_emctask_state_mode.sh
Executable file
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/task/emctask.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.hh"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
STATE_MATRIX="$ROOT_DIR/tests/wasm/node/verify_task_state_matrix.mjs"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_emctask_state_mode_status=fail\n'
|
||||
printf 'task_emctask_state_mode_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_emctask_state_mode_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_emctask_state_mode_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream "$UPSTREAM"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file state_matrix "$STATE_MATRIX"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
for fn in emcTaskAbort emcTaskSetMode emcTaskSetState; do
|
||||
require_text "upstream_$fn" "$UPSTREAM" "int $fn("
|
||||
done
|
||||
|
||||
require_text subset_result_type "$SUBSET_HDR" "LcEmcTaskSubsetCommandResult"
|
||||
require_text subset_abort_fn "$SUBSET_HDR" "lc_emctask_subset_abort"
|
||||
require_text subset_mode_fn "$SUBSET_HDR" "lc_emctask_subset_set_mode"
|
||||
require_text subset_state_fn "$SUBSET_HDR" "lc_emctask_subset_set_state"
|
||||
require_text subset_anchor "$SUBSET_SRC" "emcTaskAbort,emcTaskSetMode,emcTaskSetState,emcTaskPlanSynch,emcTaskPlanClose,emcTaskPlanReset"
|
||||
|
||||
require_text wrapper_uses_abort "$TASK_WRAPPER" "lc_emctask_subset_abort"
|
||||
require_text wrapper_uses_mode "$TASK_WRAPPER" "lc_emctask_subset_set_mode"
|
||||
require_text wrapper_uses_state "$TASK_WRAPPER" "lc_emctask_subset_set_state"
|
||||
require_text wrapper_result_apply "$TASK_WRAPPER" "apply_emctask_command_result"
|
||||
require_text wrapper_status_count "$TASK_WRAPPER" "stateModeIssueCount"
|
||||
require_text wasm_test_asserts "$WASM_TEST" "stateModeAnchors"
|
||||
require_text state_matrix_gate "$STATE_MATRIX" "task_state_matrix=ok"
|
||||
|
||||
require_text matrix_t037_done "$MATRIX" '| T-037 | `emctask.cc` abort/state/mode 子集 | 完成 |'
|
||||
require_text matrix_t038_done "$MATRIX" '| T-038 | `emctask.cc` determine/update 子集 | 完成 |'
|
||||
|
||||
printf 'task_emctask_state_mode_status=ok\n'
|
||||
60
wasm-port/tools/verify_task_emctask_subset.sh
Executable file
60
wasm-port/tools/verify_task_emctask_subset.sh
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/task/emctask.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.hh"
|
||||
BUILD_SCRIPT="$ROOT_DIR/tools/build_task_hal_wasm.sh"
|
||||
|
||||
print_kv() {
|
||||
printf '%s=%s\n' "$1" "$2"
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local key="$1"
|
||||
local path="$2"
|
||||
if [[ ! -f "$path" ]]; then
|
||||
print_kv "$key" missing
|
||||
print_kv "${key}_path" "$path"
|
||||
exit 1
|
||||
fi
|
||||
print_kv "$key" ok
|
||||
print_kv "${key}_path" "$path"
|
||||
}
|
||||
|
||||
require_pattern() {
|
||||
local key="$1"
|
||||
local pattern="$2"
|
||||
local path="$3"
|
||||
if ! rg -q "$pattern" "$path"; then
|
||||
print_kv "$key" missing
|
||||
print_kv "${key}_pattern" "$pattern"
|
||||
print_kv "${key}_path" "$path"
|
||||
exit 1
|
||||
fi
|
||||
print_kv "$key" ok
|
||||
}
|
||||
|
||||
require_file task_emctask_subset_upstream "$UPSTREAM"
|
||||
require_file task_emctask_subset_source "$SUBSET_SRC"
|
||||
require_file task_emctask_subset_header "$SUBSET_HDR"
|
||||
|
||||
require_pattern task_emctask_subset_upstream_determine_mode "EMC_TASK_MODE determineMode\\(" "$UPSTREAM"
|
||||
require_pattern task_emctask_subset_upstream_determine_state "static EMC_TASK_STATE determineState\\(" "$UPSTREAM"
|
||||
require_pattern task_emctask_subset_upstream_update "int emcTaskUpdate\\(" "$UPSTREAM"
|
||||
require_pattern task_emctask_subset_upstream_abort "int emcTaskAbort\\(" "$UPSTREAM"
|
||||
require_pattern task_emctask_subset_upstream_set_mode "int emcTaskSetMode\\(" "$UPSTREAM"
|
||||
require_pattern task_emctask_subset_upstream_set_state "int emcTaskSetState\\(" "$UPSTREAM"
|
||||
require_pattern task_emctask_subset_origin_path "src/emc/task/emctask.cc" "$SUBSET_SRC"
|
||||
require_pattern task_emctask_subset_origin_determine_mode "determineMode\\(\\)" "$SUBSET_SRC"
|
||||
require_pattern task_emctask_subset_origin_determine_state "determineState\\(\\)" "$SUBSET_SRC"
|
||||
require_pattern task_emctask_subset_origin_update "emcTaskUpdate\\(\\)" "$SUBSET_SRC"
|
||||
require_pattern task_emctask_subset_origin_abort "emcTaskAbort\\(\\)" "$SUBSET_SRC"
|
||||
require_pattern task_emctask_subset_origin_set_mode "emcTaskSetMode\\(\\)" "$SUBSET_SRC"
|
||||
require_pattern task_emctask_subset_origin_set_state "emcTaskSetState\\(\\)" "$SUBSET_SRC"
|
||||
require_pattern task_emctask_subset_state_mode_anchor "emcTaskAbort,emcTaskSetMode,emcTaskSetState" "$SUBSET_SRC"
|
||||
require_pattern task_emctask_subset_build_included "emctask_wasm_subset.cc" "$BUILD_SCRIPT"
|
||||
|
||||
print_kv task_emctask_subset_source_reuse ok
|
||||
56
wasm-port/tools/verify_task_emctask_update_snapshot.sh
Executable file
56
wasm-port/tools/verify_task_emctask_update_snapshot.sh
Executable file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/task/emctask.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.hh"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_emctask_update_snapshot_status=fail\n'
|
||||
printf 'task_emctask_update_snapshot_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_emctask_update_snapshot_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_emctask_update_snapshot_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream "$UPSTREAM"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
require_text upstream_determine_mode "$UPSTREAM" "EMC_TASK_MODE determineMode("
|
||||
require_text upstream_determine_state "$UPSTREAM" "static EMC_TASK_STATE determineState("
|
||||
require_text upstream_update "$UPSTREAM" "int emcTaskUpdate("
|
||||
require_text subset_update "$SUBSET_HDR" "lc_emctask_subset_update"
|
||||
require_text subset_update_impl "$SUBSET_SRC" "lc_emctask_subset_update"
|
||||
require_text wrapper_motion_snapshot_input "$TASK_WRAPPER" "state.motion_snapshot.coord_mode"
|
||||
require_text wrapper_motion_enabled_input "$TASK_WRAPPER" "state.motion_snapshot.motion_enabled"
|
||||
require_text wrapper_io_estop_input "$TASK_WRAPPER" "emctask_subset_io_estop"
|
||||
require_text wrapper_update_source "$TASK_WRAPPER" "motionSnapshot,ioSnapshot"
|
||||
require_text wrapper_snapshot_count "$TASK_WRAPPER" "snapshotUpdateCount"
|
||||
require_text wasm_test_asserts_source "$WASM_TEST" "updateInputSource"
|
||||
require_text wasm_test_asserts_count "$WASM_TEST" "snapshotUpdateCount"
|
||||
require_text matrix_t038_done "$MATRIX" '| T-038 | `emctask.cc` determine/update 子集 | 完成 |'
|
||||
require_text matrix_t039_done "$MATRIX" '| T-039 | `emctask.cc` plan wait/synch/open/close 子集 | 完成 |'
|
||||
|
||||
printf 'task_emctask_update_snapshot_status=ok\n'
|
||||
30
wasm-port/tools/verify_task_full_closure.sh
Executable file
30
wasm-port/tools/verify_task_full_closure.sh
Executable file
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
|
||||
if ! command -v emcc >/dev/null 2>&1 && [[ -f "$HOME/emsdk/emsdk_env.sh" ]]; then
|
||||
# shellcheck source=/dev/null
|
||||
source "$HOME/emsdk/emsdk_env.sh" >/dev/null
|
||||
fi
|
||||
|
||||
if ! command -v emcc >/dev/null 2>&1; then
|
||||
printf 'task_full_closure_status=skipped_missing_emcc\n'
|
||||
printf 'nativeTaskReady=false\n'
|
||||
printf 'nativeHalSyncReady=false\n'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
"$ROOT_DIR/tools/build_task_hal_wasm.sh"
|
||||
SKIP_TASK_HAL_BUILD=1 "$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.sh"
|
||||
SKIP_TASK_HAL_BUILD=1 "$ROOT_DIR/tests/wasm/node/verify_task_hal_sdk.sh"
|
||||
node "$ROOT_DIR/tests/wasm/node/verify_task_state_matrix.mjs"
|
||||
"$ROOT_DIR/tests/wasm/node/verify_motion_hal_sync.sh"
|
||||
"$ROOT_DIR/tools/verify_task_standalone_emc_status.sh"
|
||||
"$ROOT_DIR/tools/verify_task_no_json_motion_plan_main_path.sh"
|
||||
"$ROOT_DIR/tools/verify_task_status_json_contract.sh"
|
||||
"$ROOT_DIR/tools/verify_task_working_closure.sh"
|
||||
"$ROOT_DIR/tools/verify_task_source_reuse_drift_docs.sh"
|
||||
"$ROOT_DIR/tools/verify_task_hal_readiness_contract.sh"
|
||||
|
||||
printf 'task_full_closure_status=ok\n'
|
||||
65
wasm-port/tools/verify_task_hal_readiness_contract.sh
Executable file
65
wasm-port/tools/verify_task_hal_readiness_contract.sh
Executable file
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
DOC="$ROOT_DIR/docs/source-reuse-map.md"
|
||||
RUNTIME="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
|
||||
fail() {
|
||||
printf 'task_hal_readiness_contract_status=fail\n'
|
||||
printf 'task_hal_readiness_contract_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
expect_output_value() {
|
||||
local output="$1"
|
||||
local key="$2"
|
||||
local expected="$3"
|
||||
local actual
|
||||
actual="$(printf '%s\n' "$output" | awk -F= -v key="$key" '$1 == key {print $2; found=1} END {if (!found) exit 1}')"
|
||||
[[ "$actual" == "$expected" ]] || fail "$key expected $expected got $actual"
|
||||
printf 'task_hal_readiness_%s=%s\n' "$key" "$actual"
|
||||
}
|
||||
|
||||
expect_file_contains() {
|
||||
local file="$1"
|
||||
local text="$2"
|
||||
local label="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_hal_readiness_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
reject_file_contains() {
|
||||
local file="$1"
|
||||
local text="$2"
|
||||
local label="$3"
|
||||
if grep -Fq "$text" "$file"; then
|
||||
fail "$label present"
|
||||
fi
|
||||
printf 'task_hal_readiness_%s=absent\n' "$label"
|
||||
}
|
||||
|
||||
manifest_output="$("$ROOT_DIR/tools/verify_task_hal_source_manifest.sh")"
|
||||
|
||||
expect_output_value "$manifest_output" task_hal_runtime_promoted 0
|
||||
expect_output_value "$manifest_output" nativeTaskReady false
|
||||
expect_output_value "$manifest_output" nativeHalSyncReady false
|
||||
|
||||
expect_file_contains "$DOC" 'task_hal_runtime_promoted=0' doc_runtime_promoted_false
|
||||
expect_file_contains "$DOC" 'nativeTaskReady=false' doc_native_task_false
|
||||
expect_file_contains "$DOC" 'nativeHalSyncReady=false' doc_native_hal_false
|
||||
expect_file_contains "$DOC" 'fullLinuxCncProgramExecutionReady=false' doc_full_program_false
|
||||
expect_file_contains "$DOC" 'Runtime-edge adapter, not full native task/HAL promotion' doc_unpromoted_classification
|
||||
|
||||
reject_file_contains "$DOC" 'nativeTaskReady=true' doc_native_task_true
|
||||
reject_file_contains "$DOC" 'nativeHalSyncReady=true' doc_native_hal_true
|
||||
reject_file_contains "$DOC" 'full boundary gates now validate' doc_full_boundary_promoted_claim
|
||||
reject_file_contains "$DOC" 'Native task/motion/HAL sync is complete for deterministic Web simulation' doc_complete_claim
|
||||
|
||||
expect_file_contains "$RUNTIME" '"nativeTaskReady\":false' runtime_native_task_false
|
||||
expect_file_contains "$RUNTIME" '"nativeHalSyncReady\":false' runtime_native_hal_false
|
||||
expect_file_contains "$RUNTIME" '"fullLinuxCncProgramExecutionReady\":false' runtime_full_program_false
|
||||
expect_file_contains "$WASM_TEST" 'assert.equal(snapshot.fullLinuxCncProgramExecutionReady, false);' wasm_test_full_program_false
|
||||
|
||||
printf 'task_hal_readiness_contract_status=ok\n'
|
||||
75
wasm-port/tools/verify_task_no_json_motion_plan_main_path.sh
Executable file
75
wasm-port/tools/verify_task_no_json_motion_plan_main_path.sh
Executable file
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
SDK_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_sdk.mjs"
|
||||
STATE_MATRIX="$ROOT_DIR/tests/wasm/node/verify_task_state_matrix.mjs"
|
||||
SDK="$ROOT_DIR/runtime/sdk/src/linuxcnc-task-hal.js"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_no_json_motion_plan_main_path_status=fail\n'
|
||||
printf 'task_no_json_motion_plan_main_path_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_no_json_motion_plan_main_path_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_no_json_motion_plan_main_path_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
reject_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
if grep -Fq "$text" "$file"; then
|
||||
fail "$label present"
|
||||
fi
|
||||
printf 'task_no_json_motion_plan_main_path_%s=absent\n' "$label"
|
||||
}
|
||||
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file sdk_test "$SDK_TEST"
|
||||
require_file state_matrix "$STATE_MATRIX"
|
||||
require_file sdk "$SDK"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
require_text wrapper_plan_read "$TASK_WRAPPER" "emctask_plan_read_execute_program_line"
|
||||
require_text wrapper_staged_work "$TASK_WRAPPER" "state.next_program_line < state.executable_line_count"
|
||||
require_text wrapper_timed_compat "$TASK_WRAPPER" "lctask_load_program_motion_plan_json"
|
||||
require_text wrapper_timed_loader "$TASK_WRAPPER" "load_motion_plan"
|
||||
|
||||
reject_text wasm_test_main_load_plan "$WASM_TEST" "lctask_load_program_motion_plan_json"
|
||||
require_text wasm_test_main_false "$WASM_TEST" "motionPlanLoaded, false"
|
||||
require_text wasm_test_plan_zero "$WASM_TEST" "planId, 0"
|
||||
require_text wasm_test_status "$WASM_TEST" "task_hal_no_json_main_path_status=ok"
|
||||
require_text wasm_test_plan_read "$WASM_TEST" "planReadCount"
|
||||
require_text wasm_test_plan_execute "$WASM_TEST" "planExecuteCount"
|
||||
|
||||
require_text sdk_main_false "$SDK_TEST" "motionPlanLoaded, false"
|
||||
require_text sdk_plan_zero "$SDK_TEST" "planId, 0"
|
||||
require_text sdk_compat_call "$SDK_TEST" "loadProgramMotionPlan"
|
||||
require_text sdk_compat_status "$SDK_TEST" "task_hal_timed_motion_plan_compat=ok"
|
||||
require_text sdk_keeps_api "$SDK" "loadProgramMotionPlan(plan)"
|
||||
|
||||
require_text state_default_no_json "$STATE_MATRIX" "function stageAndOpenProgram({ loadPlan = false } = {})"
|
||||
require_text state_no_json_status "$STATE_MATRIX" "run_gate_staged_program_executes_without_json_plan=ok"
|
||||
require_text state_compat_status "$STATE_MATRIX" "run_gate_json_motion_plan_compat=ok"
|
||||
|
||||
require_text matrix_t046_done "$MATRIX" '| T-046 | 移除主路径 JSON motion plan 依赖 | 完成 |'
|
||||
require_text matrix_t007_done "$MATRIX" '| T-007 | 建立 `EMC_STAT` 等价状态容器 | 完成 |'
|
||||
|
||||
printf 'task_no_json_motion_plan_main_path_status=ok\n'
|
||||
166
wasm-port/tools/verify_task_source_reuse_drift_docs.sh
Executable file
166
wasm-port/tools/verify_task_source_reuse_drift_docs.sh
Executable file
@@ -0,0 +1,166 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
SOURCE_REUSE="$ROOT_DIR/docs/source-reuse-map.md"
|
||||
DRIFT="$ROOT_DIR/docs/drift-report.md"
|
||||
COMPAT="$ROOT_DIR/docs/compatibility-validation.md"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_source_reuse_drift_docs_status=fail\n'
|
||||
printf 'task_source_reuse_drift_docs_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_source_reuse_drift_docs_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_source_reuse_drift_docs_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
reject_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
if grep -Fq "$text" "$file"; then
|
||||
fail "$label present"
|
||||
fi
|
||||
printf 'task_source_reuse_drift_docs_%s=absent\n' "$label"
|
||||
}
|
||||
|
||||
require_file source_reuse "$SOURCE_REUSE"
|
||||
require_file drift "$DRIFT"
|
||||
require_file compatibility "$COMPAT"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
require_text source_task_row "$SOURCE_REUSE" "Task/motion/HAL simulation runtime"
|
||||
require_text source_readiness_promoted "$SOURCE_REUSE" "task_hal_runtime_promoted=0"
|
||||
require_text source_native_task_false "$SOURCE_REUSE" "nativeTaskReady=false"
|
||||
require_text source_native_hal_false "$SOURCE_REUSE" "nativeHalSyncReady=false"
|
||||
require_text source_full_program_false "$SOURCE_REUSE" "fullLinuxCncProgramExecutionReady=false"
|
||||
require_text source_rcs_aggregation "$SOURCE_REUSE" "top/task/motion/io DONE/EXEC/ERROR aggregation"
|
||||
require_text source_standalone_emc_status "$SOURCE_REUSE" 'T-007 adds `StandaloneEmcStatus`'
|
||||
require_text source_status_json_contract "$SOURCE_REUSE" "T-051 through T-055 close the status JSON contract batches"
|
||||
require_text source_taskintf_motion_bridge "$SOURCE_REUSE" 'T-033 adds a narrow `taskintf.cc` motion bridge'
|
||||
require_text source_taskintf_traj_control "$SOURCE_REUSE" 'T-034 extends the `taskintf.cc` traj control subset'
|
||||
require_text source_taskintf_linear_move "$SOURCE_REUSE" 'T-035 maps `emcTrajLinearMove()` to structured `lcmot_write_linear_move()`'
|
||||
require_text source_taskintf_jog_home_switchkins "$SOURCE_REUSE" 'T-036 maps `emcJogIncr()`'
|
||||
require_text source_emctask_state_mode "$SOURCE_REUSE" 'T-037 maps `emcTaskAbort()`'
|
||||
require_text source_emctask_update_snapshot "$SOURCE_REUSE" 'T-038 feeds `determineMode()`'
|
||||
require_text source_emctask_plan_open_wait "$SOURCE_REUSE" 'T-039 maps `emcTaskPlanSetWait()`'
|
||||
require_text source_emctask_plan_read_execute "$SOURCE_REUSE" 'T-040 maps `emcTaskPlanRead()`'
|
||||
require_text source_emccanon_init_finish_unit "$SOURCE_REUSE" 'T-041 maps `INIT_CANON()`'
|
||||
require_text source_emccanon_straight_motion "$SOURCE_REUSE" 'T-042 maps `generate_fast_move()`'
|
||||
require_text source_emccanon_dwell_path_control "$SOURCE_REUSE" 'T-043 maps `DWELL()`'
|
||||
require_text source_emccanon_spindle_tool "$SOURCE_REUSE" 'T-044 maps `SET_SPINDLE_SPEED()`'
|
||||
require_text source_emccanon_motion_output "$SOURCE_REUSE" 'T-045 maps `SET_MOTION_OUTPUT_BIT()`'
|
||||
require_text source_no_json_main_path "$SOURCE_REUSE" 'T-046 removes host-provided JSON motion plans'
|
||||
require_text source_taskintf_motion_bridge_gate "$SOURCE_REUSE" "tools/verify_task_taskintf_motion_bridge.sh"
|
||||
require_text source_taskintf_traj_control_gate "$SOURCE_REUSE" "tools/verify_task_taskintf_traj_control.sh"
|
||||
require_text source_taskintf_linear_move_gate "$SOURCE_REUSE" "tools/verify_task_taskintf_linear_move.sh"
|
||||
require_text source_taskintf_jog_home_switchkins_gate "$SOURCE_REUSE" "tools/verify_task_taskintf_jog_home_switchkins.sh"
|
||||
require_text source_emctask_state_mode_gate "$SOURCE_REUSE" "tools/verify_task_emctask_state_mode.sh"
|
||||
require_text source_emctask_update_snapshot_gate "$SOURCE_REUSE" "tools/verify_task_emctask_update_snapshot.sh"
|
||||
require_text source_emctask_plan_open_wait_gate "$SOURCE_REUSE" "tools/verify_task_emctask_plan_open_wait.sh"
|
||||
require_text source_emctask_plan_read_execute_gate "$SOURCE_REUSE" "tools/verify_task_emctask_plan_read_execute.sh"
|
||||
require_text source_emccanon_init_finish_unit_gate "$SOURCE_REUSE" "tools/verify_task_emccanon_init_finish_unit.sh"
|
||||
require_text source_emccanon_straight_motion_gate "$SOURCE_REUSE" "tools/verify_task_emccanon_straight_motion.sh"
|
||||
require_text source_emccanon_dwell_path_control_gate "$SOURCE_REUSE" "tools/verify_task_emccanon_dwell_path_control.sh"
|
||||
require_text source_emccanon_spindle_tool_gate "$SOURCE_REUSE" "tools/verify_task_emccanon_spindle_tool.sh"
|
||||
require_text source_emccanon_motion_output_gate "$SOURCE_REUSE" "tools/verify_task_emccanon_motion_output.sh"
|
||||
require_text source_no_json_main_path_gate "$SOURCE_REUSE" "tools/verify_task_no_json_motion_plan_main_path.sh"
|
||||
require_text source_standalone_emc_status_gate "$SOURCE_REUSE" "tools/verify_task_standalone_emc_status.sh"
|
||||
require_text source_status_json_contract_gate "$SOURCE_REUSE" "tools/verify_task_status_json_contract.sh"
|
||||
require_text source_working_closure_gate "$SOURCE_REUSE" "tools/verify_task_working_closure.sh"
|
||||
require_text source_full_closure_gate "$SOURCE_REUSE" "tools/verify_task_full_closure.sh"
|
||||
require_text source_emc_nml_decision "$SOURCE_REUSE" 'full `emc_nml.hh` out of the vendor tree'
|
||||
require_text source_readiness_gate "$SOURCE_REUSE" "tools/verify_task_hal_readiness_contract.sh"
|
||||
require_text source_emc_nml_gate "$SOURCE_REUSE" "tools/verify_task_emc_nml_reuse_plan.sh"
|
||||
require_text source_docs_gate "$SOURCE_REUSE" "tools/verify_task_source_reuse_drift_docs.sh"
|
||||
reject_text source_native_task_true "$SOURCE_REUSE" "nativeTaskReady=true"
|
||||
reject_text source_native_hal_true "$SOURCE_REUSE" "nativeHalSyncReady=true"
|
||||
|
||||
require_text drift_task_boundary "$DRIFT" "Task/motion/HAL WASM runtime"
|
||||
require_text drift_standalone_emc_status "$DRIFT" "T-007 StandaloneEmcStatus"
|
||||
require_text drift_status_json_contract "$DRIFT" "T-051-T-055 status JSON contract"
|
||||
require_text drift_emc_nml_boundary "$DRIFT" '`emc_nml.hh` status container'
|
||||
require_text drift_rcs_aggregation "$DRIFT" "top/task/motion/io DONE/EXEC/ERROR aggregation"
|
||||
require_text drift_taskintf_motion_bridge "$DRIFT" 'T-033 `taskintf.cc` motion bridge'
|
||||
require_text drift_taskintf_traj_control "$DRIFT" "T-034 traj control mapping"
|
||||
require_text drift_taskintf_linear_move "$DRIFT" "T-035 linear move mapping"
|
||||
require_text drift_taskintf_jog_home_switchkins "$DRIFT" "T-036 jog/home/switchkins mapping"
|
||||
require_text drift_emctask_state_mode "$DRIFT" "T-037 abort/state/mode mapping"
|
||||
require_text drift_emctask_update_snapshot "$DRIFT" "T-038 determine/update snapshot mapping"
|
||||
require_text drift_emctask_plan_open_wait "$DRIFT" "T-039 plan wait/open/synch/reset mapping"
|
||||
require_text drift_emctask_plan_read_execute "$DRIFT" "T-040 plan read/execute/line/level/command mapping"
|
||||
require_text drift_emccanon_init_finish_unit "$DRIFT" "T-041 canon init/finish/unit/endpoint mapping"
|
||||
require_text drift_emccanon_straight_motion "$DRIFT" "T-042 straight traverse/feed mapping"
|
||||
require_text drift_emccanon_dwell_path_control "$DRIFT" "T-043 dwell/path-control mapping"
|
||||
require_text drift_emccanon_spindle_tool "$DRIFT" "T-044 spindle/tool command mapping"
|
||||
require_text drift_emccanon_motion_output "$DRIFT" "T-045 motion output/switchkins mapping"
|
||||
require_text drift_no_json_main_path "$DRIFT" "T-046 makes staged program RUN the default validation path"
|
||||
require_text drift_readiness_false "$DRIFT" "nativeTaskReady=false"
|
||||
require_text drift_runtime_promoted_false "$DRIFT" "task_hal_runtime_promoted=0"
|
||||
require_text drift_no_promotion "$DRIFT" "not promote native task/HAL readiness"
|
||||
|
||||
require_text compat_task_hal_wasm "$COMPAT" "tests/wasm/node/verify_task_hal_wasm.sh"
|
||||
require_text compat_task_hal_sdk "$COMPAT" "tests/wasm/node/verify_task_hal_sdk.sh"
|
||||
require_text compat_readiness_gate "$COMPAT" "tools/verify_task_hal_readiness_contract.sh"
|
||||
require_text compat_emc_nml_gate "$COMPAT" "tools/verify_task_emc_nml_reuse_plan.sh"
|
||||
require_text compat_docs_gate "$COMPAT" "tools/verify_task_source_reuse_drift_docs.sh"
|
||||
require_text compat_working_closure_gate "$COMPAT" "tools/verify_task_working_closure.sh"
|
||||
require_text compat_full_closure_gate "$COMPAT" "tools/verify_task_full_closure.sh"
|
||||
require_text compat_taskintf_motion_bridge_gate "$COMPAT" "tools/verify_task_taskintf_motion_bridge.sh"
|
||||
require_text compat_taskintf_traj_control_gate "$COMPAT" "tools/verify_task_taskintf_traj_control.sh"
|
||||
require_text compat_taskintf_linear_move_gate "$COMPAT" "tools/verify_task_taskintf_linear_move.sh"
|
||||
require_text compat_taskintf_jog_home_switchkins_gate "$COMPAT" "tools/verify_task_taskintf_jog_home_switchkins.sh"
|
||||
require_text compat_emctask_state_mode_gate "$COMPAT" "tools/verify_task_emctask_state_mode.sh"
|
||||
require_text compat_emctask_update_snapshot_gate "$COMPAT" "tools/verify_task_emctask_update_snapshot.sh"
|
||||
require_text compat_emctask_plan_open_wait_gate "$COMPAT" "tools/verify_task_emctask_plan_open_wait.sh"
|
||||
require_text compat_emctask_plan_read_execute_gate "$COMPAT" "tools/verify_task_emctask_plan_read_execute.sh"
|
||||
require_text compat_emccanon_init_finish_unit_gate "$COMPAT" "tools/verify_task_emccanon_init_finish_unit.sh"
|
||||
require_text compat_emccanon_straight_motion_gate "$COMPAT" "tools/verify_task_emccanon_straight_motion.sh"
|
||||
require_text compat_emccanon_dwell_path_control_gate "$COMPAT" "tools/verify_task_emccanon_dwell_path_control.sh"
|
||||
require_text compat_emccanon_spindle_tool_gate "$COMPAT" "tools/verify_task_emccanon_spindle_tool.sh"
|
||||
require_text compat_emccanon_motion_output_gate "$COMPAT" "tools/verify_task_emccanon_motion_output.sh"
|
||||
require_text compat_no_json_main_path_gate "$COMPAT" "tools/verify_task_no_json_motion_plan_main_path.sh"
|
||||
require_text compat_standalone_emc_status_gate "$COMPAT" "tools/verify_task_standalone_emc_status.sh"
|
||||
require_text compat_status_json_contract_gate "$COMPAT" "tools/verify_task_status_json_contract.sh"
|
||||
require_text compat_taskintf_motion_bridge_status "$COMPAT" "taskintfMotionBridge"
|
||||
require_text compat_taskintf_traj_control_status "$COMPAT" "taskintf_traj_control_status=ok"
|
||||
require_text compat_taskintf_linear_move_status "$COMPAT" "taskintf_linear_move_status=ok"
|
||||
require_text compat_taskintf_jog_home_switchkins_status "$COMPAT" "taskintf_jog_home_switchkins_status=ok"
|
||||
require_text compat_emccanon_init_finish_unit_status "$COMPAT" "emccanon_init_finish_unit_status=ok"
|
||||
require_text compat_emccanon_straight_motion_status "$COMPAT" "emccanon_straight_motion_status=ok"
|
||||
require_text compat_emccanon_dwell_path_control_status "$COMPAT" "emccanon_dwell_path_control_status=ok"
|
||||
require_text compat_emccanon_spindle_tool_status "$COMPAT" "emccanon_spindle_tool_status=ok"
|
||||
require_text compat_emccanon_motion_output_status "$COMPAT" "emccanon_motion_output_status=ok"
|
||||
require_text compat_no_json_main_path_status "$COMPAT" "task_hal_no_json_main_path_status=ok"
|
||||
require_text compat_standalone_emc_status "$COMPAT" "standalone_emc_status_container=ok"
|
||||
require_text compat_status_json_contract "$COMPAT" "task_status_json_contract=ok"
|
||||
require_text compat_working_closure "$COMPAT" "working closure gate"
|
||||
require_text compat_full_closure "$COMPAT" "task_full_closure_status=ok"
|
||||
require_text compat_rcs_status "$COMPAT" 'RCS DONE/EXEC/ERROR aggregation through `rcsStatus`'
|
||||
require_text compat_readiness_false "$COMPAT" "nativeTaskReady=false"
|
||||
|
||||
require_text matrix_t030_done "$MATRIX" "| T-030 | 更新 source reuse map 与 drift 文档 | 完成 |"
|
||||
require_text matrix_t007_done "$MATRIX" "| T-007 | 建立 \`EMC_STAT\` 等价状态容器 | 完成 |"
|
||||
require_text matrix_t048_done "$MATRIX" "| T-048 | 将 working closure gate 纳入全局文档一致性验证 | 完成 |"
|
||||
require_text matrix_t049_done "$MATRIX" "| T-049 | 建立 task-HAL 全量闭合验证入口 | 完成 |"
|
||||
require_text matrix_t051_done "$MATRIX" "| T-051 | SJ-1 规范 \`emcStatus.motion.traj\` | 完成 |"
|
||||
require_text matrix_t052_done "$MATRIX" "| T-052 | SJ-2 规范 task line 和 interpreter 字段 | 完成 |"
|
||||
require_text matrix_t053_done "$MATRIX" "| T-053 | SJ-3 规范 \`emcStatus.motion.axis[]\` 和 \`joint[]\` | 完成 |"
|
||||
require_text matrix_t054_done "$MATRIX" "| T-054 | SJ-4 规范 IO/aux/tool/coolant 边界 | 完成 |"
|
||||
require_text matrix_t055_done "$MATRIX" "| T-055 | SJ-5 引入 status JSON contract gate | 完成 |"
|
||||
|
||||
printf 'task_source_reuse_drift_docs_status=ok\n'
|
||||
72
wasm-port/tools/verify_task_standalone_emc_status.sh
Executable file
72
wasm-port/tools/verify_task_standalone_emc_status.sh
Executable file
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
SDK_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_sdk.mjs"
|
||||
STATE_MATRIX="$ROOT_DIR/tests/wasm/node/verify_task_state_matrix.mjs"
|
||||
SOURCE_REUSE="$ROOT_DIR/docs/source-reuse-map.md"
|
||||
DRIFT="$ROOT_DIR/docs/drift-report.md"
|
||||
COMPAT="$ROOT_DIR/docs/compatibility-validation.md"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_standalone_emc_status_status=fail\n'
|
||||
printf 'task_standalone_emc_status_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_standalone_emc_status_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_standalone_emc_status_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file sdk_test "$SDK_TEST"
|
||||
require_file state_matrix "$STATE_MATRIX"
|
||||
require_file source_reuse "$SOURCE_REUSE"
|
||||
require_file drift "$DRIFT"
|
||||
require_file compatibility "$COMPAT"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
require_text wrapper_status_struct "$TASK_WRAPPER" "struct StandaloneEmcStatus"
|
||||
require_text wrapper_task_struct "$TASK_WRAPPER" "struct StandaloneEmcTaskStatus"
|
||||
require_text wrapper_motion_struct "$TASK_WRAPPER" "struct StandaloneEmcMotionStatus"
|
||||
require_text wrapper_io_struct "$TASK_WRAPPER" "struct StandaloneEmcIoStatus"
|
||||
require_text wrapper_sync "$TASK_WRAPPER" "sync_standalone_emc_status"
|
||||
require_text wrapper_status_source "$TASK_WRAPPER" 'statusSource'
|
||||
require_text wrapper_emc_status_json "$TASK_WRAPPER" 'emcStatus'
|
||||
require_text wrapper_task_from_container "$TASK_WRAPPER" "const StandaloneEmcTaskStatus &task_status = emc_status.task"
|
||||
require_text wrapper_motion_from_container "$TASK_WRAPPER" "const StandaloneEmcMotionStatus &motion = emc_status.motion"
|
||||
|
||||
require_text wasm_status "$WASM_TEST" "standalone_emc_status_container=ok"
|
||||
require_text wasm_source "$WASM_TEST" 'snapshot.statusSource, "StandaloneEmcStatus"'
|
||||
require_text wasm_top_match "$WASM_TEST" "snapshot.emcStatus.top.status, snapshot.taskTopLevelStatus"
|
||||
require_text wasm_motion_match "$WASM_TEST" "snapshot.emcStatus.motion.programLine, snapshot.motionStatus.motion.programLine"
|
||||
|
||||
require_text sdk_status "$SDK_TEST" "task_hal_sdk_standalone_emc_status=ok"
|
||||
require_text sdk_source "$SDK_TEST" 'status.statusSource, "StandaloneEmcStatus"'
|
||||
require_text state_matrix_status "$STATE_MATRIX" "standalone_emc_status_matrix=ok"
|
||||
require_text state_matrix_helper "$STATE_MATRIX" "function assertStandaloneEmcStatus(status)"
|
||||
|
||||
require_text docs_source "$SOURCE_REUSE" 'T-007 adds `StandaloneEmcStatus`'
|
||||
require_text docs_drift "$DRIFT" "T-007 StandaloneEmcStatus"
|
||||
require_text docs_compat_gate "$COMPAT" "tools/verify_task_standalone_emc_status.sh"
|
||||
require_text docs_compat_status "$COMPAT" "standalone_emc_status_container=ok"
|
||||
|
||||
require_text matrix_t007_done "$MATRIX" '| T-007 | 建立 `EMC_STAT` 等价状态容器 | 完成 |'
|
||||
require_text matrix_next_none "$MATRIX" '下一条优先任务:无'
|
||||
|
||||
printf 'task_standalone_emc_status_status=ok\n'
|
||||
71
wasm-port/tools/verify_task_status_json_contract.sh
Executable file
71
wasm-port/tools/verify_task_status_json_contract.sh
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
SDK="$ROOT_DIR/runtime/sdk/src/linuxcnc-task-hal.js"
|
||||
|
||||
fail() {
|
||||
printf 'task_status_json_contract_status=fail\n'
|
||||
printf 'task_status_json_contract_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_status_json_contract_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
reject_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
if grep -Fq "$text" "$file"; then
|
||||
fail "$label present"
|
||||
fi
|
||||
printf 'task_status_json_contract_%s=absent\n' "$label"
|
||||
}
|
||||
|
||||
if ! command -v emcc >/dev/null 2>&1 && [[ -f "$HOME/emsdk/emsdk_env.sh" ]]; then
|
||||
# shellcheck source=/dev/null
|
||||
source "$HOME/emsdk/emsdk_env.sh" >/dev/null
|
||||
fi
|
||||
|
||||
if ! command -v emcc >/dev/null 2>&1; then
|
||||
printf 'task_status_json_contract_status=skipped_missing_emcc\n'
|
||||
printf 'nativeTaskReady=false\n'
|
||||
printf 'nativeHalSyncReady=false\n'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ "${SKIP_TASK_HAL_BUILD:-0}" != "1" ]]; then
|
||||
"$ROOT_DIR/tools/build_task_hal_wasm.sh"
|
||||
fi
|
||||
|
||||
node "$ROOT_DIR/tests/wasm/node/verify_task_status_json_contract.mjs"
|
||||
|
||||
require_text schema_version "$TASK_WRAPPER" 'schemaVersion'
|
||||
require_text standalone_status_source "$TASK_WRAPPER" 'statusSource'
|
||||
require_text traj_object "$TASK_WRAPPER" 'traj'
|
||||
require_text task_line_fields "$TASK_WRAPPER" 'currentLine'
|
||||
require_text axis_array "$TASK_WRAPPER" 'axis_status_array_json'
|
||||
require_text joint_array "$TASK_WRAPPER" 'joint_status_array_json'
|
||||
require_text io_aux "$TASK_WRAPPER" 'aux'
|
||||
require_text io_tool "$TASK_WRAPPER" 'tool'
|
||||
require_text io_coolant "$TASK_WRAPPER" 'coolant'
|
||||
|
||||
read_status_body="$(
|
||||
awk '/int lctask_read_status_json/{capture=1} capture{print} capture && /^}/{exit}' "$TASK_WRAPPER"
|
||||
)"
|
||||
if grep -Fq 'lcmot_read_status_json' <<<"$read_status_body"; then
|
||||
fail "lctask_read_status_json calls lcmot_read_status_json"
|
||||
fi
|
||||
printf 'task_status_json_contract_status_read_no_motion_json=ok\n'
|
||||
|
||||
reject_text sdk_no_motion_semantics "$SDK" "queueFull"
|
||||
reject_text sdk_no_task_semantics "$SDK" "interpState"
|
||||
|
||||
printf 'task_status_json_contract_status=ok\n'
|
||||
87
wasm-port/tools/verify_task_taskintf_jog_home_switchkins.sh
Executable file
87
wasm-port/tools/verify_task_taskintf_jog_home_switchkins.sh
Executable file
@@ -0,0 +1,87 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM_TASKINTF="$LINUXCNC_ROOT/src/emc/task/taskintf.cc"
|
||||
UPSTREAM_MOTION="$LINUXCNC_ROOT/src/emc/motion/motion.h"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hh"
|
||||
LCMOT_HDR="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.h"
|
||||
LCMOT_SRC="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
BUILD_SCRIPT="$ROOT_DIR/tools/build_task_hal_wasm.sh"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_taskintf_jog_home_switchkins_status=fail\n'
|
||||
printf 'task_taskintf_jog_home_switchkins_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_taskintf_jog_home_switchkins_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_taskintf_jog_home_switchkins_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream_taskintf "$UPSTREAM_TASKINTF"
|
||||
require_file upstream_motion "$UPSTREAM_MOTION"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file lcmot_header "$LCMOT_HDR"
|
||||
require_file lcmot_source "$LCMOT_SRC"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file build_script "$BUILD_SCRIPT"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
for fn in emcJogIncr emcJointHome emcJointUnhome emcMotionSetAout; do
|
||||
require_text "upstream_taskintf_$fn" "$UPSTREAM_TASKINTF" "int $fn("
|
||||
done
|
||||
|
||||
for cmd in EMCMOT_JOG_INCR EMCMOT_JOINT_HOME EMCMOT_JOINT_UNHOME EMCMOT_SET_AOUT; do
|
||||
require_text "upstream_motion_$cmd" "$UPSTREAM_MOTION" "$cmd"
|
||||
done
|
||||
|
||||
require_text subset_has_unhome_enum "$SUBSET_HDR" "LC_TASKINTF_SUBSET_COMMAND_JOINT_UNHOME"
|
||||
require_text subset_has_jog_ex "$SUBSET_HDR" "lc_taskintf_subset_jog_incr_ex"
|
||||
require_text subset_has_unhome_fn "$SUBSET_HDR" "lc_taskintf_subset_joint_unhome"
|
||||
require_text subset_anchor_list "$SUBSET_SRC" "emcJogIncr,emcJointHome,emcJointUnhome,emcMotionSetAout,EMCMOT_JOG_INCR,EMCMOT_JOINT_HOME,EMCMOT_JOINT_UNHOME,EMCMOT_SET_AOUT,usrmotWriteEmcmotCommand"
|
||||
|
||||
require_text lcmot_jog_abi "$LCMOT_HDR" "lcmot_write_jog_incr"
|
||||
require_text lcmot_home_abi "$LCMOT_HDR" "lcmot_write_joint_home"
|
||||
require_text lcmot_unhome_abi "$LCMOT_HDR" "lcmot_write_joint_unhome"
|
||||
require_text lcmot_aout_abi "$LCMOT_HDR" "lcmot_write_aout"
|
||||
require_text lcmot_jog_impl "$LCMOT_SRC" "int lcmot_write_jog_incr("
|
||||
require_text lcmot_home_impl "$LCMOT_SRC" "int lcmot_write_joint_home("
|
||||
require_text lcmot_unhome_impl "$LCMOT_SRC" "int lcmot_write_joint_unhome("
|
||||
require_text lcmot_aout_impl "$LCMOT_SRC" "int lcmot_write_aout("
|
||||
|
||||
require_text wrapper_uses_jog "$TASK_WRAPPER" "lcmot_write_jog_incr"
|
||||
require_text wrapper_uses_home "$TASK_WRAPPER" "lcmot_write_joint_home"
|
||||
require_text wrapper_uses_unhome "$TASK_WRAPPER" "lcmot_write_joint_unhome"
|
||||
require_text wrapper_uses_aout "$TASK_WRAPPER" "lcmot_write_aout"
|
||||
require_text wrapper_status_count "$TASK_WRAPPER" "jogHomeSwitchkinsStructuredIssueCount"
|
||||
require_text build_exports_jog "$BUILD_SCRIPT" "_lcmot_write_jog_incr"
|
||||
require_text build_exports_home "$BUILD_SCRIPT" "_lcmot_write_joint_home"
|
||||
require_text build_exports_unhome "$BUILD_SCRIPT" "_lcmot_write_joint_unhome"
|
||||
require_text build_exports_aout "$BUILD_SCRIPT" "_lcmot_write_aout"
|
||||
require_text wasm_test_prints "$WASM_TEST" "taskintf_jog_home_switchkins_status=ok"
|
||||
require_text wasm_test_asserts "$WASM_TEST" "jogHomeSwitchkinsAnchors"
|
||||
require_text wasm_test_m430 "$WASM_TEST" "M430"
|
||||
|
||||
require_text matrix_t036_done "$MATRIX" '| T-036 | `taskintf.cc` jog/home/switchkins 子集 | 完成 |'
|
||||
require_text matrix_t037_done "$MATRIX" '| T-037 | `emctask.cc` abort/state/mode 子集 | 完成 |'
|
||||
|
||||
printf 'task_taskintf_jog_home_switchkins_status=ok\n'
|
||||
76
wasm-port/tools/verify_task_taskintf_linear_move.sh
Executable file
76
wasm-port/tools/verify_task_taskintf_linear_move.sh
Executable file
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM_TASKINTF="$LINUXCNC_ROOT/src/emc/task/taskintf.cc"
|
||||
UPSTREAM_MOTION="$LINUXCNC_ROOT/src/emc/motion/motion.h"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hh"
|
||||
LCMOT_HDR="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.h"
|
||||
LCMOT_SRC="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
BUILD_SCRIPT="$ROOT_DIR/tools/build_task_hal_wasm.sh"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_taskintf_linear_move_status=fail\n'
|
||||
printf 'task_taskintf_linear_move_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_taskintf_linear_move_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_taskintf_linear_move_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream_taskintf "$UPSTREAM_TASKINTF"
|
||||
require_file upstream_motion "$UPSTREAM_MOTION"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file lcmot_header "$LCMOT_HDR"
|
||||
require_file lcmot_source "$LCMOT_SRC"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file build_script "$BUILD_SCRIPT"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
require_text upstream_emcTrajLinearMove "$UPSTREAM_TASKINTF" "int emcTrajLinearMove("
|
||||
require_text upstream_sets_line "$UPSTREAM_TASKINTF" "EMCMOT_SET_LINE"
|
||||
require_text upstream_writes_command "$UPSTREAM_TASKINTF" "usrmotWriteEmcmotCommand(&emcmotCommand)"
|
||||
require_text upstream_motion_set_line "$UPSTREAM_MOTION" "EMCMOT_SET_LINE"
|
||||
|
||||
require_text subset_linear_move_ex_decl "$SUBSET_HDR" "lc_taskintf_subset_linear_move_ex"
|
||||
require_text subset_linear_move_ex_impl "$SUBSET_SRC" "lc_taskintf_subset_linear_move_ex"
|
||||
require_text subset_motion_id_field "$SUBSET_SRC" "out->motion_id = motion_id"
|
||||
require_text subset_ini_maxvel_field "$SUBSET_SRC" "out->ini_maxvel = ini_maxvel"
|
||||
require_text subset_linear_anchor "$SUBSET_SRC" "emcTrajLinearMove,EMCMOT_SET_LINE,usrmotWriteEmcmotCommand"
|
||||
|
||||
require_text lcmot_linear_abi "$LCMOT_HDR" "lcmot_write_linear_move"
|
||||
require_text lcmot_linear_impl "$LCMOT_SRC" "int lcmot_write_linear_move("
|
||||
require_text lcmot_linear_command "$LCMOT_SRC" "command.type = LCMOT_CMD_LINEAR_MOVE"
|
||||
require_text lcmot_linear_motion_id "$LCMOT_SRC" "next_command_motion_id"
|
||||
|
||||
require_text wrapper_structured_issue "$TASK_WRAPPER" "lcmot_write_linear_move"
|
||||
require_text wrapper_pending_struct "$TASK_WRAPPER" "PendingMotionCommand"
|
||||
require_text wrapper_linear_count "$TASK_WRAPPER" "linearMoveStructuredIssueCount"
|
||||
require_text build_exports_linear "$BUILD_SCRIPT" "_lcmot_write_linear_move"
|
||||
require_text wasm_test_prints_linear "$WASM_TEST" "taskintf_linear_move_status=ok"
|
||||
require_text wasm_test_asserts_linear "$WASM_TEST" "linearMoveAnchors"
|
||||
require_text wasm_test_direct_linear "$WASM_TEST" "_lcmot_write_linear_move"
|
||||
|
||||
require_text matrix_t035_done "$MATRIX" '| T-035 | `taskintf.cc` linear move issue 子集 | 完成 |'
|
||||
require_text matrix_t036_done "$MATRIX" '| T-036 | `taskintf.cc` jog/home/switchkins 子集 | 完成 |'
|
||||
|
||||
printf 'task_taskintf_linear_move_status=ok\n'
|
||||
86
wasm-port/tools/verify_task_taskintf_motion_bridge.sh
Executable file
86
wasm-port/tools/verify_task_taskintf_motion_bridge.sh
Executable file
@@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM_TASKINTF="$LINUXCNC_ROOT/src/emc/task/taskintf.cc"
|
||||
UPSTREAM_USRMOT="$LINUXCNC_ROOT/src/emc/motion/usrmotintf.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hh"
|
||||
LCMOT_HDR="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.h"
|
||||
LCMOT_SRC="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
BUILD_SCRIPT="$ROOT_DIR/tools/build_task_hal_wasm.sh"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_taskintf_motion_bridge_status=fail\n'
|
||||
printf 'task_taskintf_motion_bridge_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_taskintf_motion_bridge_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_taskintf_motion_bridge_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream_taskintf "$UPSTREAM_TASKINTF"
|
||||
require_file upstream_usrmot "$UPSTREAM_USRMOT"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file lcmot_header "$LCMOT_HDR"
|
||||
require_file lcmot_source "$LCMOT_SRC"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file build_script "$BUILD_SCRIPT"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
for fn in emcMotionInit emcMotionUpdate emcMotionAbort; do
|
||||
require_text "upstream_taskintf_$fn" "$UPSTREAM_TASKINTF" "int $fn("
|
||||
done
|
||||
|
||||
for fn in usrmotReadEmcmotStatus usrmotReadEmcmotConfig usrmotReadEmcmotError; do
|
||||
require_text "upstream_usrmot_$fn" "$UPSTREAM_USRMOT" "$fn"
|
||||
done
|
||||
|
||||
require_text subset_has_motion_init "$SUBSET_HDR" "lc_taskintf_subset_motion_init"
|
||||
require_text subset_has_motion_update "$SUBSET_HDR" "lc_taskintf_subset_motion_update"
|
||||
require_text subset_has_motion_abort "$SUBSET_HDR" "lc_taskintf_subset_motion_abort"
|
||||
require_text subset_init_maps_lcmot "$SUBSET_SRC" "lcmot_init_from_ini"
|
||||
require_text subset_update_reads_status "$SUBSET_SRC" "lcmot_read_status_snapshot"
|
||||
require_text subset_update_reads_config "$SUBSET_SRC" "lcmot_read_config_snapshot"
|
||||
require_text subset_update_reads_error "$SUBSET_SRC" "lcmot_read_error_message"
|
||||
require_text subset_abort_maps_traj_abort "$SUBSET_SRC" "lc_taskintf_subset_traj_abort(out)"
|
||||
require_text subset_motion_bridge_anchors "$SUBSET_SRC" "emcMotionInit,emcMotionUpdate,emcMotionAbort,usrmotReadEmcmotStatus,usrmotReadEmcmotConfig,usrmotReadEmcmotError"
|
||||
|
||||
require_text lcmot_has_config_type "$LCMOT_HDR" "LcmotConfigSnapshot"
|
||||
require_text lcmot_has_config_read "$LCMOT_HDR" "lcmot_read_config_snapshot"
|
||||
require_text lcmot_has_error_read "$LCMOT_HDR" "lcmot_read_error_message"
|
||||
require_text lcmot_source_config_impl "$LCMOT_SRC" "int lcmot_read_config_snapshot"
|
||||
require_text lcmot_source_error_impl "$LCMOT_SRC" "int lcmot_read_error_message"
|
||||
require_text lcmot_source_error_queue "$LCMOT_SRC" "queue_error_message"
|
||||
|
||||
require_text wrapper_init_uses_bridge "$TASK_WRAPPER" "lc_taskintf_subset_motion_init"
|
||||
require_text wrapper_update_uses_bridge "$TASK_WRAPPER" "lc_taskintf_subset_motion_update"
|
||||
require_text wrapper_abort_uses_bridge "$TASK_WRAPPER" "lc_taskintf_subset_motion_abort"
|
||||
require_text wrapper_status_exports_bridge "$TASK_WRAPPER" "taskintfMotionBridge"
|
||||
|
||||
require_text build_exports_config "$BUILD_SCRIPT" "_lcmot_read_config_snapshot"
|
||||
require_text build_exports_error "$BUILD_SCRIPT" "_lcmot_read_error_message"
|
||||
require_text wasm_test_asserts_bridge "$WASM_TEST" "taskintfMotionBridge"
|
||||
require_text wasm_test_prints_bridge "$WASM_TEST" "taskintf_motion_bridge_status=ok"
|
||||
require_text matrix_t033_done "$MATRIX" '| T-033 | `taskintf.cc` motion init/update/abort 子集 | 完成 |'
|
||||
require_text matrix_t034_done "$MATRIX" '| T-034 | `taskintf.cc` traj control 子集 | 完成 |'
|
||||
|
||||
printf 'task_taskintf_motion_bridge_status=ok\n'
|
||||
73
wasm-port/tools/verify_task_taskintf_subset.sh
Executable file
73
wasm-port/tools/verify_task_taskintf_subset.sh
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM="$LINUXCNC_ROOT/src/emc/task/taskintf.cc"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hh"
|
||||
BUILD_SCRIPT="$ROOT_DIR/tools/build_task_hal_wasm.sh"
|
||||
|
||||
print_kv() {
|
||||
printf '%s=%s\n' "$1" "$2"
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local key="$1"
|
||||
local path="$2"
|
||||
if [[ ! -f "$path" ]]; then
|
||||
print_kv "$key" missing
|
||||
print_kv "${key}_path" "$path"
|
||||
exit 1
|
||||
fi
|
||||
print_kv "$key" ok
|
||||
print_kv "${key}_path" "$path"
|
||||
}
|
||||
|
||||
require_pattern() {
|
||||
local key="$1"
|
||||
local pattern="$2"
|
||||
local path="$3"
|
||||
if ! rg -q "$pattern" "$path"; then
|
||||
print_kv "$key" missing
|
||||
print_kv "${key}_pattern" "$pattern"
|
||||
print_kv "${key}_path" "$path"
|
||||
exit 1
|
||||
fi
|
||||
print_kv "$key" ok
|
||||
}
|
||||
|
||||
require_file task_taskintf_subset_upstream "$UPSTREAM"
|
||||
require_file task_taskintf_subset_source "$SUBSET_SRC"
|
||||
require_file task_taskintf_subset_header "$SUBSET_HDR"
|
||||
|
||||
for fn in \
|
||||
emcMotionInit \
|
||||
emcMotionUpdate \
|
||||
emcMotionAbort \
|
||||
emcTrajSetMotionId \
|
||||
emcTrajEnable \
|
||||
emcTrajDisable \
|
||||
emcTrajAbort \
|
||||
emcTrajPause \
|
||||
emcTrajStep \
|
||||
emcTrajResume \
|
||||
emcTrajLinearMove \
|
||||
emcJogIncr \
|
||||
emcJointHome \
|
||||
emcJointUnhome \
|
||||
emcMotionSetAout
|
||||
do
|
||||
require_pattern "task_taskintf_subset_upstream_$fn" "int $fn\\(" "$UPSTREAM"
|
||||
require_pattern "task_taskintf_subset_origin_$fn" "$fn" "$SUBSET_SRC"
|
||||
done
|
||||
|
||||
require_pattern task_taskintf_subset_origin_path "src/emc/task/taskintf.cc" "$SUBSET_SRC"
|
||||
require_pattern task_taskintf_subset_build_included "taskintf_wasm_subset.cc" "$BUILD_SCRIPT"
|
||||
require_pattern task_taskintf_subset_motion_bridge_anchors "emcMotionInit,emcMotionUpdate,emcMotionAbort" "$SUBSET_SRC"
|
||||
require_pattern task_taskintf_subset_traj_control_anchors "emcTrajSetMotionId,emcTrajEnable,emcTrajDisable,emcTrajAbort,emcTrajPause,emcTrajStep,emcTrajResume" "$SUBSET_SRC"
|
||||
require_pattern task_taskintf_subset_linear_move_ex "lc_taskintf_subset_linear_move_ex" "$SUBSET_HDR"
|
||||
require_pattern task_taskintf_subset_linear_move_anchors "emcTrajLinearMove,EMCMOT_SET_LINE,usrmotWriteEmcmotCommand" "$SUBSET_SRC"
|
||||
require_pattern task_taskintf_subset_jog_home_switchkins_anchors "emcJogIncr,emcJointHome,emcJointUnhome,emcMotionSetAout" "$SUBSET_SRC"
|
||||
|
||||
print_kv task_taskintf_subset_source_reuse ok
|
||||
82
wasm-port/tools/verify_task_taskintf_traj_control.sh
Executable file
82
wasm-port/tools/verify_task_taskintf_traj_control.sh
Executable file
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
|
||||
UPSTREAM_TASKINTF="$LINUXCNC_ROOT/src/emc/task/taskintf.cc"
|
||||
UPSTREAM_MOTION="$LINUXCNC_ROOT/src/emc/motion/motion.h"
|
||||
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.cc"
|
||||
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hh"
|
||||
LCMOT_HDR="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.h"
|
||||
LCMOT_SRC="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c"
|
||||
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
|
||||
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_taskintf_traj_control_status=fail\n'
|
||||
printf 'task_taskintf_traj_control_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_taskintf_traj_control_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_taskintf_traj_control_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_file upstream_taskintf "$UPSTREAM_TASKINTF"
|
||||
require_file upstream_motion "$UPSTREAM_MOTION"
|
||||
require_file subset_source "$SUBSET_SRC"
|
||||
require_file subset_header "$SUBSET_HDR"
|
||||
require_file lcmot_header "$LCMOT_HDR"
|
||||
require_file lcmot_source "$LCMOT_SRC"
|
||||
require_file task_wrapper "$TASK_WRAPPER"
|
||||
require_file wasm_test "$WASM_TEST"
|
||||
require_file matrix "$MATRIX"
|
||||
|
||||
for fn in emcTrajSetMotionId emcTrajEnable emcTrajDisable emcTrajAbort emcTrajPause emcTrajStep emcTrajResume; do
|
||||
require_text "upstream_taskintf_$fn" "$UPSTREAM_TASKINTF" "int $fn("
|
||||
done
|
||||
|
||||
for cmd in EMCMOT_ENABLE EMCMOT_DISABLE EMCMOT_ABORT EMCMOT_PAUSE EMCMOT_STEP EMCMOT_RESUME; do
|
||||
require_text "upstream_motion_$cmd" "$UPSTREAM_MOTION" "$cmd"
|
||||
done
|
||||
|
||||
require_text subset_has_enable_enum "$SUBSET_HDR" "LC_TASKINTF_SUBSET_COMMAND_TRAJ_ENABLE"
|
||||
require_text subset_has_disable_enum "$SUBSET_HDR" "LC_TASKINTF_SUBSET_COMMAND_TRAJ_DISABLE"
|
||||
require_text subset_has_motion_id_enum "$SUBSET_HDR" "LC_TASKINTF_SUBSET_COMMAND_TRAJ_SET_MOTION_ID"
|
||||
require_text subset_has_enable_fn "$SUBSET_HDR" "lc_taskintf_subset_traj_enable"
|
||||
require_text subset_has_disable_fn "$SUBSET_HDR" "lc_taskintf_subset_traj_disable"
|
||||
require_text subset_has_motion_id_fn "$SUBSET_HDR" "lc_taskintf_subset_traj_set_motion_id"
|
||||
require_text subset_anchor_list "$SUBSET_SRC" "emcTrajSetMotionId,emcTrajEnable,emcTrajDisable,emcTrajAbort,emcTrajPause,emcTrajStep,emcTrajResume"
|
||||
|
||||
require_text lcmot_snapshot_enabled "$LCMOT_HDR" "motion_enabled"
|
||||
require_text lcmot_snapshot_next_id "$LCMOT_HDR" "next_motion_id"
|
||||
require_text lcmot_enable_command "$LCMOT_SRC" "LCMOT_CMD_ENABLE"
|
||||
require_text lcmot_disable_command "$LCMOT_SRC" "LCMOT_CMD_DISABLE"
|
||||
require_text lcmot_motion_id_command "$LCMOT_SRC" "LCMOT_CMD_SET_MOTION_ID"
|
||||
require_text lcmot_accepts_enable "$LCMOT_SRC" "EMC_TRAJ_ENABLE"
|
||||
require_text lcmot_accepts_disable "$LCMOT_SRC" "EMC_TRAJ_DISABLE"
|
||||
require_text lcmot_accepts_motion_id "$LCMOT_SRC" "EMC_TRAJ_SET_MOTION_ID"
|
||||
|
||||
require_text wrapper_uses_enable "$TASK_WRAPPER" "lc_taskintf_subset_traj_enable"
|
||||
require_text wrapper_uses_disable "$TASK_WRAPPER" "lc_taskintf_subset_traj_disable"
|
||||
require_text wrapper_uses_motion_id "$TASK_WRAPPER" "lc_taskintf_subset_traj_set_motion_id"
|
||||
require_text wrapper_exports_traj_count "$TASK_WRAPPER" "trajControlIssueCount"
|
||||
require_text wasm_test_prints_traj "$WASM_TEST" "taskintf_traj_control_status=ok"
|
||||
require_text wasm_test_asserts_traj "$WASM_TEST" "trajControlAnchors"
|
||||
|
||||
require_text matrix_t034_done "$MATRIX" '| T-034 | `taskintf.cc` traj control 子集 | 完成 |'
|
||||
require_text matrix_t035_done "$MATRIX" '| T-035 | `taskintf.cc` linear move issue 子集 | 完成 |'
|
||||
|
||||
printf 'task_taskintf_traj_control_status=ok\n'
|
||||
89
wasm-port/tools/verify_task_usrmot_shim_design.sh
Executable file
89
wasm-port/tools/verify_task_usrmot_shim_design.sh
Executable file
@@ -0,0 +1,89 @@
|
||||
#!/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'
|
||||
101
wasm-port/tools/verify_task_working_closure.sh
Executable file
101
wasm-port/tools/verify_task_working_closure.sh
Executable file
@@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
|
||||
README="$ROOT_DIR/working/README.md"
|
||||
FUNCTIONS="$ROOT_DIR/working/01-项目功能内容.md"
|
||||
NML_EVAL="$ROOT_DIR/working/09-emc_nml复用评估.md"
|
||||
LEDGER="$ROOT_DIR/working/03-推进台账.md"
|
||||
EVIDENCE="$ROOT_DIR/working/05-验收证据.md"
|
||||
DECISIONS="$ROOT_DIR/working/06-决策记录.md"
|
||||
|
||||
fail() {
|
||||
printf 'task_working_closure_status=fail\n'
|
||||
printf 'task_working_closure_error=%s\n' "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_file() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
[[ -f "$file" ]] || fail "$label missing: $file"
|
||||
printf 'task_working_closure_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
require_text() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local text="$3"
|
||||
grep -Fq "$text" "$file" || fail "$label missing"
|
||||
printf 'task_working_closure_%s=ok\n' "$label"
|
||||
}
|
||||
|
||||
reject_regex() {
|
||||
local label="$1"
|
||||
local file="$2"
|
||||
local regex="$3"
|
||||
if grep -Eq "$regex" "$file"; then
|
||||
fail "$label present"
|
||||
fi
|
||||
printf 'task_working_closure_%s=absent\n' "$label"
|
||||
}
|
||||
|
||||
require_file matrix "$MATRIX"
|
||||
require_file readme "$README"
|
||||
require_file functions "$FUNCTIONS"
|
||||
require_file nml_eval "$NML_EVAL"
|
||||
require_file ledger "$LEDGER"
|
||||
require_file evidence "$EVIDENCE"
|
||||
require_file decisions "$DECISIONS"
|
||||
|
||||
require_text matrix_t007_done "$MATRIX" '| T-007 | 建立 `EMC_STAT` 等价状态容器 | 完成 |'
|
||||
require_text matrix_t047_done "$MATRIX" '| T-047 | 收口 working 索引与闭合 gate | 完成 |'
|
||||
require_text matrix_t048_done "$MATRIX" '| T-048 | 将 working closure gate 纳入全局文档一致性验证 | 完成 |'
|
||||
require_text matrix_t049_done "$MATRIX" '| T-049 | 建立 task-HAL 全量闭合验证入口 | 完成 |'
|
||||
require_text matrix_t050_done "$MATRIX" '| T-050 | 建立 status JSON LinuxCNC 对标方案 | 完成 |'
|
||||
require_text matrix_t051_done "$MATRIX" '| T-051 | SJ-1 规范 `emcStatus.motion.traj` | 完成 |'
|
||||
require_text matrix_t052_done "$MATRIX" '| T-052 | SJ-2 规范 task line 和 interpreter 字段 | 完成 |'
|
||||
require_text matrix_t053_done "$MATRIX" '| T-053 | SJ-3 规范 `emcStatus.motion.axis[]` 和 `joint[]` | 完成 |'
|
||||
require_text matrix_t054_done "$MATRIX" '| T-054 | SJ-4 规范 IO/aux/tool/coolant 边界 | 完成 |'
|
||||
require_text matrix_t055_done "$MATRIX" '| T-055 | SJ-5 引入 status JSON contract gate | 完成 |'
|
||||
require_text matrix_next_none "$MATRIX" '下一条优先任务:无'
|
||||
reject_regex matrix_unclosed_tasks "$MATRIX" '^\| T-[0-9]+ \|.*\| (待办|进行中|阻塞) \|'
|
||||
|
||||
require_text readme_closed "$README" '当前所有任务均为完成'
|
||||
require_text readme_status_source "$README" 'StandaloneEmcStatus'
|
||||
require_text readme_no_json "$README" 'host JSON motion plan 仅保留为 timed-plan 兼容/调试入口'
|
||||
|
||||
require_text functions_closed "$FUNCTIONS" '## 当前闭合状态'
|
||||
require_text functions_standalone_status "$FUNCTIONS" 'StandaloneEmcStatus'
|
||||
require_text functions_readiness "$FUNCTIONS" 'fullLinuxCncProgramExecutionReady=false'
|
||||
|
||||
require_text nml_t007_done "$NML_EVAL" 'T-007 已建立集中 `StandaloneEmcStatus`'
|
||||
require_text ledger_t007 "$LEDGER" 'T-007 已完成'
|
||||
require_text ledger_t047 "$LEDGER" 'T-047 已完成'
|
||||
require_text ledger_t048 "$LEDGER" 'T-048 已完成'
|
||||
require_text ledger_t049 "$LEDGER" 'T-049 已完成'
|
||||
require_text ledger_t050 "$LEDGER" 'T-050 已完成'
|
||||
require_text ledger_t051 "$LEDGER" 'T-051'
|
||||
require_text ledger_t052 "$LEDGER" 'T-052'
|
||||
require_text ledger_t053 "$LEDGER" 'T-053'
|
||||
require_text ledger_t054 "$LEDGER" 'T-054'
|
||||
require_text ledger_t055 "$LEDGER" 'T-055'
|
||||
require_text evidence_t007 "$EVIDENCE" 'T-007 验收通过'
|
||||
require_text evidence_t047 "$EVIDENCE" 'T-047 验收通过'
|
||||
require_text evidence_t048 "$EVIDENCE" 'T-048 验收通过'
|
||||
require_text evidence_t049 "$EVIDENCE" 'T-049 验收通过'
|
||||
require_text evidence_t050 "$EVIDENCE" 'T-050 验收通过'
|
||||
require_text evidence_t051 "$EVIDENCE" 'T-051'
|
||||
require_text evidence_t052 "$EVIDENCE" 'T-052'
|
||||
require_text evidence_t053 "$EVIDENCE" 'T-053'
|
||||
require_text evidence_t054 "$EVIDENCE" 'T-054'
|
||||
require_text evidence_t055 "$EVIDENCE" 'T-055'
|
||||
require_text decision_t007 "$DECISIONS" 'D-039'
|
||||
require_text decision_t047 "$DECISIONS" 'D-040'
|
||||
require_text decision_t048 "$DECISIONS" 'D-041'
|
||||
require_text decision_t049 "$DECISIONS" 'D-042'
|
||||
require_text decision_t050 "$DECISIONS" 'D-044'
|
||||
require_text decision_t051_t055 "$DECISIONS" 'D-045'
|
||||
|
||||
printf 'task_working_closure_status=ok\n'
|
||||
Reference in New Issue
Block a user