Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
smp.h
Go to the documentation of this file.
1/*
2 * Copyright Runtime.io 2018. All rights reserved.
3 * Copyright (c) 2022-2023 Nordic Semiconductor ASA
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef ZEPHYR_INCLUDE_MGMT_MCUMGR_TRANSPORT_SMP_H_
9#define ZEPHYR_INCLUDE_MGMT_MCUMGR_TRANSPORT_SMP_H_
10
11#include <zephyr/kernel.h>
12#include <zcbor_common.h>
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
24
25struct smp_transport;
26struct zephyr_smp_transport;
27struct net_buf;
30
40typedef int (*smp_transport_out_fn)(struct net_buf *nb);
41
55typedef uint16_t (*smp_transport_get_mtu_fn)(const struct net_buf *nb);
56
70typedef int (*smp_transport_ud_copy_fn)(struct net_buf *dst,
71 const struct net_buf *src);
72
82typedef void (*smp_transport_ud_free_fn)(void *ud);
83
95typedef bool (*smp_transport_query_valid_check_fn)(struct net_buf *nb, void *arg);
96
105typedef void (*smp_transport_ud_req_init_fn)(struct net_buf *nb, void *priv);
106
125 bool direction, uint32_t mode, bool same_transport,
126 zcbor_state_t *input_data,
127 zcbor_state_t *output_data);
128
140 bool direction);
141
155typedef int (*smp_transport_bridge_out_fn)(const struct smp_transport_bridge *bridge,
156 struct net_buf *nb, bool direction);
157
167 void *user_data);
168
179typedef bool (*smp_transport_bridge_modes_fn)(zcbor_state_t *output_data, int *rc);
180
192typedef bool (*smp_transport_bridge_config_details_fn)(uint32_t mode, zcbor_state_t *output_data,
193 int *rc);
194
237
242 /* Must be the first member. */
243 struct k_work work;
244
245 /* FIFO containing incoming requests to be processed. */
246 struct k_fifo fifo;
247
248 /* Function pointers */
250
251#ifdef CONFIG_MCUMGR_TRANSPORT_REASSEMBLY
252 /* Packet reassembly internal data, API access only */
253 struct {
254 struct net_buf *current; /* net_buf used for reassembly */
255 uint16_t expected; /* expected bytes to come */
256 } __reassembly;
257#endif
258};
259
279
306
316
317#if defined(CONFIG_MCUMGR_GRP_TRANSPORT_INFO_FUNCTIONS) || defined(__DOXYGEN__)
319 char *name;
320#endif
321};
322
332
342void smp_rx_remove_invalid(struct smp_transport *zst, void *arg);
343
349void smp_rx_clear(struct smp_transport *zst);
350
357
366
376
380
381#ifdef __cplusplus
382}
383#endif
384
385#endif /* ZEPHYR_INCLUDE_MGMT_MCUMGR_TRANSPORT_SMP_H_ */
bool(* smp_transport_bridge_connect_fn)(struct smp_transport_bridge *bridge, bool direction, uint32_t mode, bool same_transport, zcbor_state_t *input_data, zcbor_state_t *output_data)
SMP transport bridge connect.
Definition smp.h:124
void(* smp_transport_ud_req_init_fn)(struct net_buf *nb, void *priv)
SMP init request buffer.
Definition smp.h:105
bool(* smp_transport_bridge_config_details_fn)(uint32_t mode, zcbor_state_t *output_data, int *rc)
SMP transport bridge config details.
Definition smp.h:192
void(* smp_transport_ud_free_fn)(void *ud)
SMP free user_data callback.
Definition smp.h:82
uint16_t(* smp_transport_get_mtu_fn)(const struct net_buf *nb)
SMP MTU query callback for transport.
Definition smp.h:55
bool(* smp_transport_bridge_modes_fn)(zcbor_state_t *output_data, int *rc)
SMP transport bridge details.
Definition smp.h:179
bool(* mgmt_client_transport_cb_t)(const struct smp_client_transport_entry *transport, void *user_data)
Callback for SMP client transports.
Definition smp.h:166
int(* smp_transport_out_fn)(struct net_buf *nb)
SMP transmit callback for transport.
Definition smp.h:40
void(* smp_transport_bridge_disconnect_fn)(struct smp_transport_bridge *bridge, bool direction)
SMP transport bridge disconnect.
Definition smp.h:139
smp_transport_type
SMP transport type for client registration.
Definition smp.h:283
void smp_rx_clear(struct smp_transport *zst)
Used to clear pending queued requests for an SMP transport.
struct smp_transport * smp_client_transport_get(int smpt_type)
Discover a registered SMP transport client object.
bool(* smp_transport_query_valid_check_fn)(struct net_buf *nb, void *arg)
Function for checking if queued data is still valid.
Definition smp.h:95
int(* smp_transport_ud_copy_fn)(struct net_buf *dst, const struct net_buf *src)
SMP copy user_data callback.
Definition smp.h:70
void smp_rx_remove_invalid(struct smp_transport *zst, void *arg)
Used to remove queued requests for an SMP transport that are no longer valid.
int(* smp_transport_bridge_out_fn)(const struct smp_transport_bridge *bridge, struct net_buf *nb, bool direction)
SMP transport bridge output data.
Definition smp.h:155
bool smp_client_transport_foreach(mgmt_client_transport_cb_t user_cb, void *user_data)
Iterate over SMP client/transports.
int smp_transport_init(struct smp_transport *smpt)
Initializes a Zephyr SMP transport object.
void smp_client_transport_register(struct smp_client_transport_entry *entry)
Register a Zephyr SMP transport object for client.
@ SMP_RAW_SERIAL_TRANSPORT
SMP raw serial (not SMP over console).
Definition smp.h:287
@ SMP_UDP_IPV6_TRANSPORT
SMP UDP IPv6.
Definition smp.h:295
@ SMP_SPI_TRANSPORT
SMP SPI.
Definition smp.h:299
@ SMP_SHELL_TRANSPORT
SMP shell.
Definition smp.h:291
@ SMP_BLUETOOTH_TRANSPORT
SMP bluetooth.
Definition smp.h:289
@ SMP_USER_DEFINED_TRANSPORT
IDs up to 63 reserved for future in-tree transports.
Definition smp.h:304
@ SMP_SERIAL_TRANSPORT
SMP serial.
Definition smp.h:285
@ SMP_UDP_IPV4_TRANSPORT
SMP UDP IPv4.
Definition smp.h:293
@ SMP_LORAWAN_TRANSPORT
SMP LoRaWAN.
Definition smp.h:297
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:44
Public kernel APIs.
#define bool
Definition stdbool.h:13
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Kernel FIFO structure.
Definition kernel.h:2974
A structure used to submit work.
Definition kernel.h:4667
Network buffer representation.
Definition net_buf.h:1048
SMP Client transport structure.
Definition smp.h:310
int smpt_type
Transport type.
Definition smp.h:315
char * name
Transport name, used for transport mgmt (or NULL to omit).
Definition smp.h:319
sys_snode_t node
Definition smp.h:311
struct smp_transport * smpt
Transport structure pointer.
Definition smp.h:313
Function pointers of SMP transport functions, if a handler is NULL then it is not supported/implement...
Definition smp.h:199
smp_transport_ud_req_init_fn ud_init
Transport's request buffer init function.
Definition smp.h:216
smp_transport_bridge_config_details_fn bridge_config_details
Transport get config details function.
Definition smp.h:233
smp_transport_bridge_connect_fn bridge_connect
Transport connect bridge to another transport function.
Definition smp.h:220
smp_transport_bridge_modes_fn bridge_modes
Transport get modes function.
Definition smp.h:230
smp_transport_get_mtu_fn get_mtu
Transport's get-MTU function.
Definition smp.h:204
smp_transport_query_valid_check_fn query_valid_check
Transport's check function for if a query is valid.
Definition smp.h:213
smp_transport_bridge_out_fn bridge_output
Transport send data over bridged connection function.
Definition smp.h:226
smp_transport_out_fn output
Transport's send function.
Definition smp.h:201
smp_transport_bridge_disconnect_fn bridge_disconnect
Transport disconnect bridge function.
Definition smp.h:223
smp_transport_ud_free_fn ud_free
Transport buffer user_data free function.
Definition smp.h:210
smp_transport_ud_copy_fn ud_copy
Transport buffer user_data copy function.
Definition smp.h:207
Bridged transport context.
Definition smp.h:263
uint8_t status
Status of the bridge: 0 for no bridge (free), 1 for bridged (in use).
Definition smp.h:265
struct smp_transport * outgoing_transport
The outgoing transport, (MCUmgr operating in client mode on device) which accepts read and write resp...
Definition smp.h:277
struct smp_transport * incoming_transport
The incoming transport, (MCUmgr operating in server mode on device) which accepts read and write requ...
Definition smp.h:271
SMP transport object for sending SMP responses.
Definition smp.h:241
struct k_work work
Definition smp.h:243
struct k_fifo fifo
Definition smp.h:246
struct smp_transport_api_t functions
Definition smp.h:249