tests: canbus: isotp: conformance: Add helper function to prepare FC frames
This reduces duplication in the tests Signed-off-by: Grant Ramsay <gramsay@enphaseenergy.com>
This commit is contained in:
parent
e326b72bc0
commit
b7f88b4301
1 changed files with 26 additions and 72 deletions
|
@ -282,6 +282,21 @@ static int add_rx_msgq(uint32_t id, uint32_t mask)
|
||||||
return filter_id;
|
return filter_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void prepare_fc_frame(struct frame_desired *frame, uint8_t st,
|
||||||
|
const struct isotp_fc_opts *opts, bool tx)
|
||||||
|
{
|
||||||
|
frame->data[0] = FC_PCI_BYTE_1(st);
|
||||||
|
frame->data[1] = FC_PCI_BYTE_2(opts->bs);
|
||||||
|
frame->data[2] = FC_PCI_BYTE_3(opts->stmin);
|
||||||
|
if ((IS_ENABLED(CONFIG_ISOTP_ENABLE_TX_PADDING) && tx) ||
|
||||||
|
(IS_ENABLED(CONFIG_ISOTP_REQUIRE_RX_PADDING) && !tx)) {
|
||||||
|
memset(&frame->data[DATA_SIZE_FC], 0xCC, CAN_DL - DATA_SIZE_FC);
|
||||||
|
frame->length = CAN_DL;
|
||||||
|
} else {
|
||||||
|
frame->length = DATA_SIZE_FC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void prepare_cf_frames(struct frame_desired *frames, size_t frames_cnt,
|
static void prepare_cf_frames(struct frame_desired *frames, size_t frames_cnt,
|
||||||
const uint8_t *data, size_t data_len, bool tx)
|
const uint8_t *data, size_t data_len, bool tx)
|
||||||
{
|
{
|
||||||
|
@ -487,15 +502,7 @@ ZTEST(isotp_conformance, test_send_data)
|
||||||
data_ptr += DATA_SIZE_FF;
|
data_ptr += DATA_SIZE_FF;
|
||||||
remaining_length -= DATA_SIZE_FF;
|
remaining_length -= DATA_SIZE_FF;
|
||||||
|
|
||||||
fc_frame.data[0] = FC_PCI_BYTE_1(FC_PCI_CTS);
|
prepare_fc_frame(&fc_frame, FC_PCI_CTS, &fc_opts_single, false);
|
||||||
fc_frame.data[1] = FC_PCI_BYTE_2(0);
|
|
||||||
fc_frame.data[2] = FC_PCI_BYTE_3(0);
|
|
||||||
#ifdef CONFIG_ISOTP_REQUIRE_RX_PADDING
|
|
||||||
memset(&fc_frame.data[3], 0xCC, CAN_DL - 3);
|
|
||||||
fc_frame.length = CAN_DL;
|
|
||||||
#else
|
|
||||||
fc_frame.length = DATA_SIZE_FC;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
prepare_cf_frames(des_frames, ARRAY_SIZE(des_frames), data_ptr,
|
prepare_cf_frames(des_frames, ARRAY_SIZE(des_frames), data_ptr,
|
||||||
remaining_length, true);
|
remaining_length, true);
|
||||||
|
@ -531,15 +538,7 @@ ZTEST(isotp_conformance, test_send_data_blocks)
|
||||||
data_ptr += DATA_SIZE_FF;
|
data_ptr += DATA_SIZE_FF;
|
||||||
remaining_length -= DATA_SIZE_FF;
|
remaining_length -= DATA_SIZE_FF;
|
||||||
|
|
||||||
fc_frame.data[0] = FC_PCI_BYTE_1(FC_PCI_CTS);
|
prepare_fc_frame(&fc_frame, FC_PCI_CTS, &fc_opts, false);
|
||||||
fc_frame.data[1] = FC_PCI_BYTE_2(fc_opts.bs);
|
|
||||||
fc_frame.data[2] = FC_PCI_BYTE_3(0);
|
|
||||||
#ifdef CONFIG_ISOTP_REQUIRE_RX_PADDING
|
|
||||||
memset(&fc_frame.data[3], 0xCC, CAN_DL - 3);
|
|
||||||
fc_frame.length = CAN_DL;
|
|
||||||
#else
|
|
||||||
fc_frame.length = DATA_SIZE_FC;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
prepare_cf_frames(des_frames, ARRAY_SIZE(des_frames), data_ptr,
|
prepare_cf_frames(des_frames, ARRAY_SIZE(des_frames), data_ptr,
|
||||||
remaining_length, true);
|
remaining_length, true);
|
||||||
|
@ -600,15 +599,7 @@ ZTEST(isotp_conformance, test_receive_data)
|
||||||
data_ptr += DATA_SIZE_FF;
|
data_ptr += DATA_SIZE_FF;
|
||||||
remaining_length -= DATA_SIZE_FF;
|
remaining_length -= DATA_SIZE_FF;
|
||||||
|
|
||||||
fc_frame.data[0] = FC_PCI_BYTE_1(FC_PCI_CTS);
|
prepare_fc_frame(&fc_frame, FC_PCI_CTS, &fc_opts_single, true);
|
||||||
fc_frame.data[1] = FC_PCI_BYTE_2(fc_opts_single.bs);
|
|
||||||
fc_frame.data[2] = FC_PCI_BYTE_3(fc_opts_single.stmin);
|
|
||||||
#ifdef CONFIG_ISOTP_ENABLE_TX_PADDING
|
|
||||||
memset(&fc_frame.data[3], 0xCC, CAN_DL - 3);
|
|
||||||
fc_frame.length = CAN_DL;
|
|
||||||
#else
|
|
||||||
fc_frame.length = DATA_SIZE_FC;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
prepare_cf_frames(des_frames, ARRAY_SIZE(des_frames), data_ptr,
|
prepare_cf_frames(des_frames, ARRAY_SIZE(des_frames), data_ptr,
|
||||||
remaining_length, false);
|
remaining_length, false);
|
||||||
|
@ -649,15 +640,7 @@ ZTEST(isotp_conformance, test_receive_data_blocks)
|
||||||
data_ptr += DATA_SIZE_FF;
|
data_ptr += DATA_SIZE_FF;
|
||||||
remaining_length -= DATA_SIZE_FF;
|
remaining_length -= DATA_SIZE_FF;
|
||||||
|
|
||||||
fc_frame.data[0] = FC_PCI_BYTE_1(FC_PCI_CTS);
|
prepare_fc_frame(&fc_frame, FC_PCI_CTS, &fc_opts, true);
|
||||||
fc_frame.data[1] = FC_PCI_BYTE_2(fc_opts.bs);
|
|
||||||
fc_frame.data[2] = FC_PCI_BYTE_3(fc_opts.stmin);
|
|
||||||
#ifdef CONFIG_ISOTP_ENABLE_TX_PADDING
|
|
||||||
memset(&fc_frame.data[3], 0xCC, CAN_DL - 3);
|
|
||||||
fc_frame.length = CAN_DL;
|
|
||||||
#else
|
|
||||||
fc_frame.length = DATA_SIZE_FC;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
prepare_cf_frames(des_frames, ARRAY_SIZE(des_frames), data_ptr,
|
prepare_cf_frames(des_frames, ARRAY_SIZE(des_frames), data_ptr,
|
||||||
remaining_length, false);
|
remaining_length, false);
|
||||||
|
@ -705,15 +688,7 @@ ZTEST(isotp_conformance, test_send_timeouts)
|
||||||
uint32_t start_time, time_diff;
|
uint32_t start_time, time_diff;
|
||||||
struct frame_desired fc_cts_frame;
|
struct frame_desired fc_cts_frame;
|
||||||
|
|
||||||
fc_cts_frame.data[0] = FC_PCI_BYTE_1(FC_PCI_CTS);
|
prepare_fc_frame(&fc_cts_frame, FC_PCI_CTS, &fc_opts, false);
|
||||||
fc_cts_frame.data[1] = FC_PCI_BYTE_2(fc_opts.bs);
|
|
||||||
fc_cts_frame.data[2] = FC_PCI_BYTE_3(0);
|
|
||||||
#ifdef CONFIG_ISOTP_REQUIRE_RX_PADDING
|
|
||||||
memset(&fc_cts_frame.data[3], 0xCC, CAN_DL - 3);
|
|
||||||
fc_cts_frame.length = CAN_DL;
|
|
||||||
#else
|
|
||||||
fc_cts_frame.length = DATA_SIZE_FC;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Test timeout for first FC*/
|
/* Test timeout for first FC*/
|
||||||
start_time = k_uptime_get_32();
|
start_time = k_uptime_get_32();
|
||||||
|
@ -805,6 +780,9 @@ ZTEST(isotp_conformance, test_stmin)
|
||||||
struct frame_desired fc_frame, ff_frame;
|
struct frame_desired fc_frame, ff_frame;
|
||||||
struct can_frame raw_frame;
|
struct can_frame raw_frame;
|
||||||
uint32_t start_time, time_diff;
|
uint32_t start_time, time_diff;
|
||||||
|
struct isotp_fc_opts fc_opts_stmin = {
|
||||||
|
.bs = 2, .stmin = STMIN_VAL_1
|
||||||
|
};
|
||||||
|
|
||||||
if (CONFIG_SYS_CLOCK_TICKS_PER_SEC < 1000) {
|
if (CONFIG_SYS_CLOCK_TICKS_PER_SEC < 1000) {
|
||||||
/* This test requires millisecond tick resolution */
|
/* This test requires millisecond tick resolution */
|
||||||
|
@ -816,15 +794,7 @@ ZTEST(isotp_conformance, test_stmin)
|
||||||
memcpy(&ff_frame.data[2], random_data, DATA_SIZE_FF);
|
memcpy(&ff_frame.data[2], random_data, DATA_SIZE_FF);
|
||||||
ff_frame.length = DATA_SIZE_FF + 2;
|
ff_frame.length = DATA_SIZE_FF + 2;
|
||||||
|
|
||||||
fc_frame.data[0] = FC_PCI_BYTE_1(FC_PCI_CTS);
|
prepare_fc_frame(&fc_frame, FC_PCI_CTS, &fc_opts_stmin, false);
|
||||||
fc_frame.data[1] = FC_PCI_BYTE_2(2);
|
|
||||||
fc_frame.data[2] = FC_PCI_BYTE_3(STMIN_VAL_1);
|
|
||||||
#ifdef CONFIG_ISOTP_REQUIRE_RX_PADDING
|
|
||||||
memset(&fc_frame.data[3], 0xCC, CAN_DL - 3);
|
|
||||||
fc_frame.length = CAN_DL;
|
|
||||||
#else
|
|
||||||
fc_frame.length = DATA_SIZE_FC;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
filter_id = add_rx_msgq(rx_addr.std_id, CAN_STD_ID_MASK);
|
filter_id = add_rx_msgq(rx_addr.std_id, CAN_STD_ID_MASK);
|
||||||
zassert_true((filter_id >= 0), "Negative filter number [%d]",
|
zassert_true((filter_id >= 0), "Negative filter number [%d]",
|
||||||
|
@ -876,15 +846,7 @@ ZTEST(isotp_conformance, test_receiver_fc_errors)
|
||||||
memcpy(&ff_frame.data[2], random_data, DATA_SIZE_FF);
|
memcpy(&ff_frame.data[2], random_data, DATA_SIZE_FF);
|
||||||
ff_frame.length = DATA_SIZE_FF + 2;
|
ff_frame.length = DATA_SIZE_FF + 2;
|
||||||
|
|
||||||
fc_frame.data[0] = FC_PCI_BYTE_1(FC_PCI_CTS);
|
prepare_fc_frame(&fc_frame, FC_PCI_CTS, &fc_opts, true);
|
||||||
fc_frame.data[1] = FC_PCI_BYTE_2(fc_opts.bs);
|
|
||||||
fc_frame.data[2] = FC_PCI_BYTE_3(fc_opts.stmin);
|
|
||||||
#ifdef CONFIG_ISOTP_ENABLE_TX_PADDING
|
|
||||||
memset(&fc_frame.data[3], 0xCC, CAN_DL - 3);
|
|
||||||
fc_frame.length = CAN_DL;
|
|
||||||
#else
|
|
||||||
fc_frame.length = DATA_SIZE_FC;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
filter_id = add_rx_msgq(tx_addr.std_id, CAN_STD_ID_MASK);
|
filter_id = add_rx_msgq(tx_addr.std_id, CAN_STD_ID_MASK);
|
||||||
zassert_true((filter_id >= 0), "Negative filter number [%d]",
|
zassert_true((filter_id >= 0), "Negative filter number [%d]",
|
||||||
|
@ -945,15 +907,7 @@ ZTEST(isotp_conformance, test_sender_fc_errors)
|
||||||
filter_id = add_rx_msgq(tx_addr.std_id, CAN_STD_ID_MASK);
|
filter_id = add_rx_msgq(tx_addr.std_id, CAN_STD_ID_MASK);
|
||||||
|
|
||||||
/* invalid flow status */
|
/* invalid flow status */
|
||||||
fc_frame.data[0] = FC_PCI_BYTE_1(3);
|
prepare_fc_frame(&fc_frame, 3, &fc_opts, false);
|
||||||
fc_frame.data[1] = FC_PCI_BYTE_2(fc_opts.bs);
|
|
||||||
fc_frame.data[2] = FC_PCI_BYTE_3(fc_opts.stmin);
|
|
||||||
#ifdef CONFIG_ISOTP_REQUIRE_RX_PADDING
|
|
||||||
memset(&fc_frame.data[3], 0xCC, CAN_DL - 3);
|
|
||||||
fc_frame.length = CAN_DL;
|
|
||||||
#else
|
|
||||||
fc_frame.length = DATA_SIZE_FC;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
k_sem_reset(&send_compl_sem);
|
k_sem_reset(&send_compl_sem);
|
||||||
ret = isotp_send(&send_ctx, can_dev, random_data, DATA_SEND_LENGTH,
|
ret = isotp_send(&send_ctx, can_dev, random_data, DATA_SEND_LENGTH,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue