lift_indicator_suite/tests/host/can/README.md

3.9 KiB
Raw Permalink Blame History

test_bsp_can

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

bsp/can/src/can.c + utils/ring_buffer/ring_buffer.c (реальный, не мокается — используется как внутренняя зависимость can.c).

Категория

B — BSP-модуль, зависит от FlexCAN SDK (fsl_flexcan.h, fsl_clock.h). Unity + fff.

Моки

Набор fff-фейков SDK FlexCAN: FLEXCAN_GetDefaultConfig, FLEXCAN_CalculateImprovedTimingValues, FLEXCAN_Init, FLEXCAN_Deinit, FLEXCAN_SetTxMbConfig, FLEXCAN_SetRxMbConfig, FLEXCAN_SetRxIndividualMask, FLEXCAN_WriteTxMb, FLEXCAN_ReadRxMb, FLEXCAN_GetMbStatusFlags, FLEXCAN_ClearMbStatusFlags, а также bsp_tick_get_ms (управляемое время для тестов таймаутов) и CLOCK_EnableClock (ERRATA 50235 workaround в bsp_can_init()). Кастомные custom_fake: read_rx_mb_inject (подставляет заранее подготовленный RX-фрейм), get_mb_flags_once (флаг готовности только на первый вызов), tick_advancing (линейно растущее время для таймаутов), capture_tx_frame (захват TX-фрейма для проверки конвертации ID/данных).

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

  • Init / Deinit — успешная инициализация; отклонение NULL-конфига, нулевого и слишком высокого bitrate, ошибки расчёта тайминга; повторная инициализация вызывает Deinit перед новым Init; deinit без init — no-op.
  • TX (bsp_can_send) — успешная отправка, NULL-фрейм, dlc > 8, отправка без инициализации, занятый MB (BSP_ERR_BUSY), таймаут ожидания готовности (BSP_ERR_TIMEOUT).
  • Фильтрация (bsp_can_set_filter / bsp_can_accept_all) — STD/EXT ID, индекс фильтра вне диапазона, вызов без инициализации, accept_all настраивает минимум 2 RX MB и деактивирует ранее настроенные фильтры.
  • RX (bsp_can_receive) — успешный приём STD/EXT фрейма, таймаут, NULL-указатель, приём без инициализации, неблокирующий опрос при timeout_ms == 0.
  • Callback-заглушкаbsp_can_register_rx_callback возвращает BSP_ERR_NOT_SUPPORTED.
  • Конвертация фреймов — корректность кодирования STD/EXT ID (FLEXCAN_ID_STD/FLEXCAN_ID_EXT) и порядка байт данных при переводе между bsp_can_frame_t и SDK flexcan_frame_t.

Гарантии

  • Все публичные функции проверяют, что модуль инициализирован, и возвращают BSP_ERR_PARAM в противном случае.
  • Параметры валидируются перед обращением к SDK: dlc <= 8, bitrate в допустимом диапазоне, индекс фильтра в пределах BSP_CAN_FILTER_MAX.
  • TX и RX корректно завершаются по таймауту (BSP_ERR_TIMEOUT), если MB не становится готовым.
  • STD/EXT кодирование идентификатора и порядок байт данных не искажаются при конвертации между форматами приложения и SDK.
  • bsp_can_accept_all() деактивирует ранее настроенные пользовательские фильтры перед установкой приёма «всех кадров».

Запуск

ctest --preset host-debug-test -R test_bsp_can -V