diff --git a/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_tp_api_probe.cpp b/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_tp_api_probe.cpp index 5ed9062..120476a 100644 --- a/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_tp_api_probe.cpp +++ b/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_tp_api_probe.cpp @@ -1,3 +1,4 @@ +#include #include #include "emc/motion/motion.h" @@ -122,6 +123,79 @@ void run_linear_probe() << final_pos.tran.z << "\n"; } +void run_arc_probe() +{ + init_motion_state(); + + TP_STRUCT tp{}; + EmcPose start{}; + EmcPose end{}; + PmCartesian center{}; + PmCartesian normal{}; + struct state_tag_t tag {}; + + start.tran.x = 1.0; + end.tran.y = 1.0; + normal.z = 1.0; + + const int create_rc = tpCreate(&tp, TP_DEFAULT_QUEUE_SIZE, 2); + const int set_cycle_rc = tpSetCycleTime(&tp, 0.001); + const int set_pos_rc = tpSetPos(&tp, &start); + const int set_vmax_rc = tpSetVmax(&tp, 1.0, 1.0); + const int set_vlimit_rc = tpSetVlimit(&tp, 1.0); + const int set_amax_rc = tpSetAmax(&tp, 10.0); + const int set_term_rc = tpSetTermCond(&tp, TC_TERM_COND_STOP, 0.0); + const int add_circle_rc = tpAddCircle( + &tp, + end, + center, + normal, + 0, + EMC_MOTION_TYPE_ARC, + 1.0, + 1.0, + 10.0, + 100.0, + status.enables_new, + 0, + tag); + + int cycle_rc = 0; + int cycles = 0; + for (; cycles < 10000 && !tpIsDone(&tp); ++cycles) { + cycle_rc = tpRunCycle(&tp, 1000000); + if (cycle_rc < 0) { + break; + } + } + + EmcPose final_pos{}; + const int get_pos_rc = tpGetPos(&tp, &final_pos); + const int near_end = + std::fabs(final_pos.tran.x - end.tran.x) < 1e-9 && + std::fabs(final_pos.tran.y - end.tran.y) < 1e-9 && + std::fabs(final_pos.tran.z - end.tran.z) < 1e-9; + + std::cout << "tp_arc_create=" << create_rc << "\n"; + std::cout << "tp_arc_set_cycle_time=" << set_cycle_rc << "\n"; + std::cout << "tp_arc_set_pos=" << set_pos_rc << "\n"; + std::cout << "tp_arc_set_vmax=" << set_vmax_rc << "\n"; + std::cout << "tp_arc_set_vlimit=" << set_vlimit_rc << "\n"; + std::cout << "tp_arc_set_amax=" << set_amax_rc << "\n"; + std::cout << "tp_arc_set_term_cond=" << set_term_rc << "\n"; + std::cout << "tp_add_circle=" << add_circle_rc << "\n"; + std::cout << "tp_arc_cycle_rc=" << cycle_rc << "\n"; + std::cout << "tp_arc_cycles=" << cycles << "\n"; + std::cout << "tp_arc_get_pos=" << get_pos_rc << "\n"; + std::cout << "tp_done_after_arc=" << tpIsDone(&tp) << "\n"; + std::cout << "tp_arc_queue_depth=" << tpQueueDepth(&tp) << "\n"; + std::cout << "tp_arc_final_pos_near_end=" << near_end << "\n"; + std::cout << "tp_arc_final_pos=" + << final_pos.tran.x << "," + << final_pos.tran.y << "," + << final_pos.tran.z << "\n"; +} + } // namespace int main() @@ -142,5 +216,6 @@ int main() std::cout << "tc_circular=" << TC_CIRCULAR << "\n"; std::cout << "pose_xyz=" << pose.tran.x << "," << pose.tran.y << "," << pose.tran.z << "\n"; run_linear_probe(); + run_arc_probe(); return 0; } diff --git a/wasm-port/tests/native/verify_native_probes.sh b/wasm-port/tests/native/verify_native_probes.sh index b300a3c..a24b6fa 100755 --- a/wasm-port/tests/native/verify_native_probes.sh +++ b/wasm-port/tests/native/verify_native_probes.sh @@ -95,6 +95,9 @@ grep -Fq "tp_set_cycle_time=0" "$TP_API_STDOUT" grep -Fq "tp_add_line=0" "$TP_API_STDOUT" grep -Fq "tp_done_after_line=1" "$TP_API_STDOUT" grep -Fq "tp_final_pos=1,0,0" "$TP_API_STDOUT" +grep -Fq "tp_add_circle=0" "$TP_API_STDOUT" +grep -Fq "tp_done_after_arc=1" "$TP_API_STDOUT" +grep -Fq "tp_arc_final_pos_near_end=1" "$TP_API_STDOUT" check_fixture_output() { local fixture="$1"