1 /*
2 * Copyright 2025 NXP
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include <zephyr/ztest.h>
8 #include <zephyr/device.h>
9 #include <zephyr/drivers/sent/sent.h>
10
11 #define SENT_NODE DT_ALIAS(sent0)
12 #define SENT_CHANNEL 1
13 #define SENT_MAX_RX_BUFFER 1
14
15 const struct device *sent_dev = DEVICE_DT_GET(SENT_NODE);
16
17 struct sent_frame serial_frame[SENT_MAX_RX_BUFFER];
18
19 struct sent_frame fast_frame[SENT_MAX_RX_BUFFER];
20
sent_setup(void)21 static void *sent_setup(void)
22 {
23 int err;
24
25 zassert_true(device_is_ready(sent_dev), "SENT device is not ready");
26
27 err = sent_start_listening(sent_dev, SENT_CHANNEL);
28 zassert_ok(err, "Failed to start rx (err %d)", err);
29
30 return NULL;
31 }
32
rx_serial_frame_cb(const struct device * dev,uint8_t channel_id,uint32_t num_frame,void * user_data)33 void rx_serial_frame_cb(const struct device *dev, uint8_t channel_id, uint32_t num_frame,
34 void *user_data)
35 {
36 ARG_UNUSED(dev);
37 ARG_UNUSED(channel_id);
38 ARG_UNUSED(num_frame);
39 ARG_UNUSED(user_data);
40 }
41
rx_fast_frame_cb(const struct device * dev,uint8_t channel_id,uint32_t num_frame,void * user_data)42 void rx_fast_frame_cb(const struct device *dev, uint8_t channel_id, uint32_t num_frame,
43 void *user_data)
44 {
45 ARG_UNUSED(dev);
46 ARG_UNUSED(channel_id);
47 ARG_UNUSED(num_frame);
48 ARG_UNUSED(user_data);
49 }
50
51 /**
52 * @brief Test starting rx is not allowed while started.
53 */
ZTEST_USER(sent_api,test_start_listening_while_started)54 ZTEST_USER(sent_api, test_start_listening_while_started)
55 {
56 int err;
57
58 err = sent_start_listening(sent_dev, SENT_CHANNEL);
59 zassert_not_ok(err, "Started rx while started");
60 zassert_equal(err, -EALREADY, "Wrong error return code (err %d)", err);
61 }
62
63 /**
64 * @brief Test stopping rx is not allowed while stopped.
65 */
ZTEST_USER(sent_api,test_stop_listening_while_stopped)66 ZTEST_USER(sent_api, test_stop_listening_while_stopped)
67 {
68 int err;
69
70 err = sent_stop_listening(sent_dev, SENT_CHANNEL);
71 zassert_ok(err, "Failed to stop rx (err %d)", err);
72
73 err = sent_stop_listening(sent_dev, SENT_CHANNEL);
74 zassert_not_ok(err, "Stopped rx while stopped");
75 zassert_equal(err, -EALREADY, "Wrong error return code (err %d)", err);
76
77 err = sent_start_listening(sent_dev, SENT_CHANNEL);
78 zassert_ok(err, "Failed to start rx (err %d)", err);
79 }
80
81 struct sent_rx_callback_config serial_cb_cfg = {
82 .callback = rx_serial_frame_cb,
83 .frame = &serial_frame[0],
84 .max_num_frame = SENT_MAX_RX_BUFFER,
85 .user_data = NULL,
86 };
87
88 struct sent_rx_callback_config fast_cb_cfg = {
89 .callback = rx_fast_frame_cb,
90 .frame = &fast_frame[0],
91 .max_num_frame = SENT_MAX_RX_BUFFER,
92 .user_data = NULL,
93 };
94
95 struct sent_rx_callback_configs callback_configs = {
96 .serial = &serial_cb_cfg,
97 .fast = &fast_cb_cfg,
98 };
99
100 /**
101 * @brief Test setting the rx callback.
102 */
ZTEST(sent_api,test_set_rx_callback)103 ZTEST(sent_api, test_set_rx_callback)
104 {
105 int err;
106
107 err = sent_register_callback(sent_dev, SENT_CHANNEL, callback_configs);
108 zassert_ok(err, "Failed to set rx callback (err %d)", err);
109
110 callback_configs.serial = NULL;
111 callback_configs.fast = NULL;
112
113 err = sent_register_callback(sent_dev, SENT_CHANNEL, callback_configs);
114 zassert_ok(err, "Failed to set rx callback (err %d)", err);
115
116 callback_configs.serial = &serial_cb_cfg;
117 callback_configs.fast = &fast_cb_cfg;
118
119 err = sent_register_callback(sent_dev, SENT_CHANNEL, callback_configs);
120 zassert_ok(err, "Failed to set rx callback (err %d)", err);
121 }
122
123 ZTEST_SUITE(sent_api, NULL, sent_setup, NULL, NULL, NULL);
124