Line data Source code
1 0 : /*
2 : * Copyright (c) 2023 Nordic Semiconductor ASA
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : #ifndef H_SMP_CLIENT_
8 : #define H_SMP_CLIENT_
9 :
10 : #include <zephyr/kernel.h>
11 : #include <zephyr/net_buf.h>
12 : #include <mgmt/mcumgr/transport/smp_internal.h>
13 : #include <zephyr/mgmt/mcumgr/smp/smp.h>
14 : #include <zephyr/mgmt/mcumgr/transport/smp.h>
15 :
16 : /**
17 : * @brief MCUmgr SMP client API
18 : * @defgroup mcumgr_smp_client SMP client
19 : * @ingroup mcumgr
20 : * @{
21 : */
22 :
23 : /**
24 : * @brief SMP client object
25 : */
26 1 : struct smp_client_object {
27 : /** Must be the first member. */
28 1 : struct k_work work;
29 : /** FIFO for client TX queue */
30 1 : struct k_fifo tx_fifo;
31 : /** SMP transport object */
32 1 : struct smp_transport *smpt;
33 : /** SMP SEQ */
34 1 : uint8_t smp_seq;
35 : };
36 :
37 : #ifdef __cplusplus
38 : extern "C" {
39 : #endif
40 :
41 : /**
42 : * @brief Initialize a SMP client object.
43 : *
44 : * @param smp_client The Client to construct.
45 : * @param smp_type SMP transport type for discovering transport object
46 : *
47 : * @return 0 if successful
48 : * @return mcumgr_err_t code on failure
49 : */
50 1 : int smp_client_object_init(struct smp_client_object *smp_client, int smp_type);
51 :
52 : /**
53 : * @brief Response callback for SMP send.
54 : *
55 : * @param nb net_buf for response
56 : * @param user_data same user data that was provided as part of the request
57 : *
58 : * @return 0 on success.
59 : * @return @ref mcumgr_err_t code on failure.
60 : */
61 1 : typedef int (*smp_client_res_fn)(struct net_buf *nb, void *user_data);
62 :
63 : /**
64 : * @brief SMP client response handler.
65 : *
66 : * @param nb response net_buf
67 : * @param res_hdr Parsed SMP header
68 : *
69 : * @return 0 on success.
70 : * @return @ref mcumgr_err_t code on failure.
71 : */
72 1 : int smp_client_single_response(struct net_buf *nb, const struct smp_hdr *res_hdr);
73 :
74 : /**
75 : * @brief Allocate buffer and initialize with SMP header.
76 : *
77 : * @param smp_client SMP client object
78 : * @param group SMP group id
79 : * @param command_id SMP command id
80 : * @param op SMP operation type
81 : * @param version SMP MCUmgr version
82 : *
83 : * @return A newly-allocated buffer net_buf on success
84 : * @return NULL on failure.
85 : */
86 1 : struct net_buf *smp_client_buf_allocation(struct smp_client_object *smp_client, uint16_t group,
87 : uint8_t command_id, uint8_t op,
88 : enum smp_mcumgr_version_t version);
89 : /**
90 : * @brief Free a SMP client buffer.
91 : *
92 : * @param nb The net_buf to free.
93 : */
94 1 : void smp_client_buf_free(struct net_buf *nb);
95 :
96 : /**
97 : * @brief SMP client data send request.
98 : *
99 : * @param smp_client SMP client object
100 : * @param nb net_buf packet for send
101 : * @param cb Callback for response handler
102 : * @param user_data user defined data pointer which will be returned back to response callback
103 : * @param timeout_in_sec Timeout in seconds for send process. Client will retry transport
104 : * based CONFIG_SMP_CMD_RETRY_TIME
105 : *
106 : * @return 0 on success.
107 : * @return @ref mcumgr_err_t code on failure.
108 : */
109 1 : int smp_client_send_cmd(struct smp_client_object *smp_client, struct net_buf *nb,
110 : smp_client_res_fn cb, void *user_data, int timeout_in_sec);
111 :
112 : /**
113 : * @}
114 : */
115 :
116 : #ifdef __cplusplus
117 : }
118 : #endif
119 :
120 : #endif /* H_SMP_CLIENT_ */
|