1 /*
2  * Copyright Runtime.io 2018. All rights reserved.
3  * Copyright Laird Connectivity 2021-2022. All rights reserved.
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 /** @file
9  * @brief Dummy transport for the mcumgr SMP protocol for unit testing.
10  */
11 #ifndef ZEPHYR_INCLUDE_MGMT_MCUMGR_TRANSPORT_DUMMY_H_
12 #define ZEPHYR_INCLUDE_MGMT_MCUMGR_TRANSPORT_DUMMY_H_
13 
14 #include <zephyr/kernel.h>
15 #include <zephyr/net/buf.h>
16 #include <zephyr/mgmt/mcumgr/mgmt/mgmt.h>
17 #include <zephyr/mgmt/mcumgr/transport/serial.h>
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 /**
24  * @brief Clears internal dummy SMP state and resets semaphore
25  */
26 void smp_dummy_clear_state(void);
27 
28 /**
29  * @brief Adds SMPC data to the internal buffer to be processed
30  *
31  * @param data Input data buffer
32  * @param data_size Size of data (in bytes)
33  */
34 void dummy_mcumgr_add_data(uint8_t *data, uint16_t data_size);
35 
36 /**
37  * @brief Processes a single line (fragment) coming from the mcumgr response to
38  *        be used in tests
39  *
40  * @retval net buffer of processed data
41  */
42 struct net_buf *smp_dummy_get_outgoing(void);
43 
44 /**
45  * @brief Waits for a period of time for outgoing SMPC data to be ready and
46  *        returns either when a full message is ready or when the timeout has
47  *        elapsed.
48  *
49  * @param wait_time_s Time to wait for data (in seconds)
50  *
51  * @retval true on message received successfully, false on timeout
52  */
53 bool smp_dummy_wait_for_data(uint32_t wait_time_s);
54 
55 /**
56  * @brief Calls dummy_mcumgr_add_data with the internal SMPC receive buffer.
57  */
58 void smp_dummy_add_data(void);
59 
60 /**
61  * @brief Gets current send buffer position
62  *
63  * @retval Current send buffer position (in bytes)
64  */
65 uint16_t smp_dummy_get_send_pos(void);
66 
67 /**
68  * @brief Gets current receive buffer position
69  *
70  * @retval Current receive buffer position (in bytes)
71  */
72 uint16_t smp_dummy_get_receive_pos(void);
73 
74 /**
75  * @brief Converts input data to go out through the internal SMPC buffer.
76  *
77  * @param data Input data buffer
78  * @param len Size of data (in bytes)
79  *
80  * @retval 0 on success, negative on error.
81  */
82 int smp_dummy_tx_pkt(const uint8_t *data, int len);
83 
84 /**
85  * @brief Enabled the dummy SMP module (will process sent/received data)
86  */
87 void smp_dummy_enable(void);
88 
89 /**
90  * @brief Disables the dummy SMP module (will not process sent/received data)
91  */
92 void smp_dummy_disable(void);
93 
94 /**
95  * @brief Returns status on if the dummy SMP system is active
96  *
97  * @retval true if dummy SMP is enabled, false otherwise
98  */
99 bool smp_dummy_get_status(void);
100 
101 #ifdef __cplusplus
102 }
103 #endif
104 
105 #endif /* ZEPHYR_INCLUDE_MGMT_MCUMGR_TRANSPORT_DUMMY_H_ */
106