diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5a605ab61..adccff6d0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -173,7 +173,8 @@ if(XRT_BUILD_DRIVER_RIFT_S) target_include_directories(tests_rift_s_metadata PRIVATE ../src/xrt/drivers/rift_s) target_link_libraries(tests_rift_s_metadata PRIVATE xrt-external-catch2 drv_rift_s aux_math) add_test(NAME tests_rift_s_metadata COMMAND tests_rift_s_metadata) - add_executable(tests_rift_s_radio tests_rift_s_radio.cpp ../src/xrt/drivers/rift_s/rift_s_radio.c) + add_executable(tests_rift_s_radio tests_rift_s_radio.cpp ../src/xrt/drivers/rift_s/rift_s_radio.c + ../src/xrt/drivers/rift_s/rift_s_haptics.c) target_include_directories(tests_rift_s_radio PRIVATE ../src/xrt/drivers) target_link_libraries(tests_rift_s_radio PRIVATE xrt-external-catch2 aux_util) add_test(NAME tests_rift_s_radio COMMAND tests_rift_s_radio) diff --git a/tests/tests_rift_s_radio.cpp b/tests/tests_rift_s_radio.cpp index a36e7d1ba..cc5bea0b9 100644 --- a/tests/tests_rift_s_radio.cpp +++ b/tests/tests_rift_s_radio.cpp @@ -3,6 +3,7 @@ #include "catch_amalgamated.hpp" extern "C" { #include "rift_s/rift_s_radio.h" +#include "rift_s/rift_s_haptics.h" #include "rift_s/rift_s_protocol.h" #include "util/u_time.h" #include "util/u_logging.h" @@ -366,3 +367,27 @@ TEST_CASE("Radio with no device keeps the queue until the deadline") CHECK(st.pending_commands == nullptr); rift_s_radio_state_clear(&st); } + +TEST_CASE("Haptic latched stop survives a transport reset") +{ + // close_transport clears the request side but keeps the latched motor identity. + struct rift_s_haptic_radio h = {}; + h.hand = 0; + h.device_id = 0; + h.amplitude = 0; + h.end_ns = 0; + h.applied_device_id = 0x13001101; + h.applied_amplitude = 200; + + uint64_t id = 0; + uint8_t amp = 0xFF; + CHECK(rift_s_haptic_next(&h, T0, &id, &)); + CHECK(id == 0x13001101); + CHECK(amp == 0); + + // Nothing ever latched: no spurious stop, no pairing-list probe needed. + struct rift_s_haptic_radio idle = {}; + id = 0xDEAD; + amp = 0xFF; + CHECK_FALSE(rift_s_haptic_next(&idle, T0, &id, &)); +}