# test_bsp_button ## Модуль под тестом `bsp/button/src/button.c` (`bsp/button/include/bsp/button.h`) ## Категория B — BSP-модуль, зависит от `fsl_gpio.h`. Unity + fff. ## Моки - `GPIO_ReadPinInput` — единственная SDK-функция, вызываемая `button.c`, fff value-фейк. Управляется напрямую (`return_val`) для одной кнопки или через `SET_RETURN_SEQ` для чередования значений нескольких кнопок в одном `bsp_button_poll()`. - `GPIO_PinInit` не мокируется — `bsp_button_init()` не трогает GPIO напрямую. ## Что проверяется - **Инициализация** — `bsp_button_init()` возвращает `BSP_OK`; повторный вызов сбрасывает накопленное состояние (состояние нажатия и события). - **Сырое чтение** (`bsp_button_read`) — LOW = нажата, HIGH = не нажата, невалидный индекс безопасно возвращает `false`. - **Debounce на нажатие** — событие не срабатывает до порога в 4 стабильных сэмпла, срабатывает на 4-м, состояние остаётся стабильным при удержании, повторных событий на удержании нет. - **Потребление события** — флаг события сбрасывается после первого чтения (`get_event_pressed`/`get_event_released`). - **Debounce на отпускание** — аналогичная логика для перехода в «отпущено». - **Сброс счётчика при глитче** — единичный сэмпл противоположного уровня посреди серии сбрасывает накопленный счётчик debounce. - **Независимость кнопок** — `BSP_BUTTON_1` и `BSP_BUTTON_2` не влияют друг на друга при чередующихся значениях GPIO. - **Граничные индексы** — некорректный `bsp_button_t` не приводит к падению ни в одной публичной функции. ## Гарантии - Debounce требует ровно 4 подряд идущих одинаковых сэмпла для регистрации перехода состояния. - Любой единичный «дребезг» (глитч) сбрасывает накопленный счётчик — не засчитывается частично. - События нажатия/отпускания одноразовые: второй подряд вызов `get_event_*` без нового перехода возвращает `false`. - Кнопки полностью независимы друг от друга. - Невалидный индекс кнопки не вызывает падения — все геттеры возвращают безопасное значение по умолчанию. ## Запуск ```bash ctest --preset host-debug-test -R test_bsp_button -V ```