lift_indicator_suite/tests/target/hil_button
2026-07-09 10:07:04 +03:00
..
CMakeLists.txt # Created HIL & Host tests for bsp_button module 2026-03-31 18:25:45 +03:00
main.c # Created HIL & Host tests for bsp_button module 2026-03-31 18:25:45 +03:00
README.md # bootloader: target test docs 2026-07-09 10:07:04 +03:00

test_hil_button

Модуль под тестом

bsp/button — HIL-прошивка test_hil_button (main.c), поднимающая CLI (READ, STATE, POLL, EVENT_P, EVENT_R) поверх двух физических кнопок на плате таргета (TactBut1, TactBut2). Фоновый debounce-poll крутится в главном цикле каждые 5 мс. Прошивка не содержит проверок — она исполняет команды; assert'ы находятся в pytest на хосте.

Категория

HIL, интерактивный — стенд M5StampPLC для стимула не используется, кнопки нажимает оператор вручную по подсказкам в консоли (@pytest.mark.interactive, запуск с -s). M5StampPLC по-прежнему нужен для управления питанием таргета (RLY1).

Моки

Программных моков и стенда-стимулятора нет — тестируется физическое нажатие реальных кнопок человеком-оператором. Роль «стимула» играет оператор: хелпер _operator_prompt() печатает инструкцию и блокируется на input() до нажатия Enter, после чего выдерживается пауза DEBOUNCE_SETTLE_S (100 мс) на срабатывание дебаунса. Все проверки — в tools/hil/04_test_button.py.

Что проверяется

  • Канал host↔target работает (PING).
  • Сырое чтение (READ) в состоянии покоя и при нажатии/отпускании для обеих кнопок.
  • Debounce-события нажатия (EVENT_P) и отпускания (EVENT_R) и их одноразовое потребление (повторный запрос без нового действия даёт 0).
  • Стабильное состояние (STATE) во время удержания кнопки и после отпускания.
  • Независимость кнопок — нажата только одна, вторая остаётся отпущенной.

Гарантии

  • Физическое нажатие/отпускание кнопки надёжно регистрируется как в сыром чтении (READ), так и в дебаунсированном состоянии (STATE) и в одноразовых событиях (EVENT_P/EVENT_R).
  • Кнопки физически независимы — нажатие одной не влияет на показания другой.
  • Задержки в тесте (100 мс после действия оператора, фоновый poll каждые 5 мс) достаточны для гарантированного срабатывания дебаунса (порог 4 стабильных сэмпла).

Запуск

just build::build-hil          # в devcontainer: собрать HIL-прошивки
just host::hil-button           # на хосте: прошить и прогнать тест (интерактивно)
# или все интерактивные тесты сразу:
just host::hil-run-interactive

Тест интерактивный — требует присутствия оператора у стенда для нажатия кнопок по подсказкам в терминале.