blob: bc4ba765280a6a796467eb5aa3add0cf356e57a8 [file] [log] [blame]
/*
* Copyright (c) 2022 Vestas Wind Systems A/S
* Copyright (c) 2019 Alexander Wachter
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/device.h>
#include <zephyr/drivers/can.h>
#include <zephyr/kernel.h>
/**
* Test bitrates in bits/second.
*/
#define TEST_BITRATE_1 125000
#define TEST_BITRATE_2 250000
#define TEST_BITRATE_3 1000000
/**
* Test sample points in per mille.
*/
#define TEST_SAMPLE_POINT 875
#define TEST_SAMPLE_POINT_2 750
/**
* @brief Test timeouts.
*/
#define TEST_SEND_TIMEOUT K_MSEC(100)
#define TEST_RECEIVE_TIMEOUT K_MSEC(100)
#define TEST_RECOVER_TIMEOUT K_MSEC(100)
/**
* @brief Standard (11-bit) CAN IDs and masks used for testing.
*/
#define TEST_CAN_STD_ID_1 0x555
#define TEST_CAN_STD_ID_2 0x565
#define TEST_CAN_STD_MASK_ID_1 0x55A
#define TEST_CAN_STD_MASK_ID_2 0x56A
#define TEST_CAN_STD_MASK 0x7F0
#define TEST_CAN_SOME_STD_ID 0x123
/**
* @brief Extended (29-bit) CAN IDs and masks used for testing.
*/
#define TEST_CAN_EXT_ID_1 0x15555555
#define TEST_CAN_EXT_ID_2 0x15555565
#define TEST_CAN_EXT_MASK_ID_1 0x1555555A
#define TEST_CAN_EXT_MASK_ID_2 0x1555556A
#define TEST_CAN_EXT_MASK 0x1FFFFFF0
/**
* @brief Common variables.
*/
extern ZTEST_DMEM const struct device *const can_dev;
extern struct k_sem rx_callback_sem;
extern struct k_sem tx_callback_sem;
extern struct k_msgq can_msgq;
/**
* @brief Standard (11-bit) CAN ID frame 1.
*/
extern const struct can_frame test_std_frame_1;
/**
* @brief Standard (11-bit) CAN ID frame 2.
*/
extern const struct can_frame test_std_frame_2;
/**
* @brief Extended (29-bit) CAN ID frame 1.
*/
extern const struct can_frame test_ext_frame_1;
/**
* @brief Extended (29-bit) CAN ID frame 1.
*/
extern const struct can_frame test_ext_frame_2;
/**
* @brief Standard (11-bit) CAN ID RTR frame 1.
*/
extern const struct can_frame test_std_rtr_frame_1;
/**
* @brief Extended (29-bit) CAN ID RTR frame 1.
*/
extern const struct can_frame test_ext_rtr_frame_1;
/**
* @brief Standard (11-bit) CAN ID frame 1 with CAN-FD payload.
*/
extern const struct can_frame test_std_fdf_frame_1;
/**
* @brief Standard (11-bit) CAN ID frame 2 with CAN-FD payload.
*/
extern const struct can_frame test_std_fdf_frame_2;
/**
* @brief Standard (11-bit) CAN ID filter 1. This filter matches
* ``test_std_frame_1``.
*/
extern const struct can_filter test_std_filter_1;
/**
* @brief Standard (11-bit) CAN ID filter 2. This filter matches
* ``test_std_frame_2``.
*/
extern const struct can_filter test_std_filter_2;
/**
* @brief Standard (11-bit) CAN ID masked filter 1. This filter matches
* ``test_std_frame_1``.
*/
extern const struct can_filter test_std_masked_filter_1;
/**
* @brief Standard (11-bit) CAN ID masked filter 2. This filter matches
* ``test_std_frame_2``.
*/
extern const struct can_filter test_std_masked_filter_2;
/**
* @brief Extended (29-bit) CAN ID filter 1. This filter matches
* ``test_ext_frame_1``.
*/
extern const struct can_filter test_ext_filter_1;
/**
* @brief Extended (29-bit) CAN ID filter 2. This filter matches
* ``test_ext_frame_2``.
*/
extern const struct can_filter test_ext_filter_2;
/**
* @brief Extended (29-bit) CAN ID masked filter 1. This filter matches
* ``test_ext_frame_1``.
*/
extern const struct can_filter test_ext_masked_filter_1;
/**
* @brief Extended (29-bit) CAN ID masked filter 2. This filter matches
* ``test_ext_frame_2``.
*/
extern const struct can_filter test_ext_masked_filter_2;
/**
* @brief Standard (11-bit) CAN ID RTR filter 1. This filter matches
* ``test_std_rtr_frame_1``.
*/
extern const struct can_filter test_std_rtr_filter_1;
/**
* @brief Extended (29-bit) CAN ID RTR filter 1. This filter matches
* ``test_ext_rtr_frame_1``.
*/
extern const struct can_filter test_ext_rtr_filter_1;
/**
* @brief Standard (11-bit) CAN ID filter. This filter matches
* ``TEST_CAN_SOME_STD_ID``.
*/
extern const struct can_filter test_std_some_filter;
/**
* @brief Standard (11-bit) CAN-FD ID filter 1. This filter matches
* ``test_std_fdf_frame_1``.
*/
extern const struct can_filter test_std_fdf_filter_1;
/**
* @brief Standard (11-bit) CAN-FD ID filter 2. This filter matches
* ``test_std_fdf_frame_2``.
*/
extern const struct can_filter test_std_fdf_filter_2;
/**
* @brief Assert that two CAN frames are equal given a CAN ID mask.
*
* @param frame1 First CAN frame.
* @param frame2 Second CAN frame.
* @param id_mask CAN ID mask.
*/
void assert_frame_equal(const struct can_frame *frame1,
const struct can_frame *frame2,
uint32_t id_mask);