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