Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches

MCUmgr SMP transport API. More...

Data Structures

struct  smp_transport_api_t
 Function pointers of SMP transport functions, if a handler is NULL then it is not supported/implemented. More...
struct  smp_transport
 SMP transport object for sending SMP responses. More...
struct  smp_transport_bridge
 Bridged transport context. More...
struct  smp_client_transport_entry
 SMP Client transport structure. More...

Typedefs

typedef int(* smp_transport_out_fn) (struct net_buf *nb)
 SMP transmit callback for transport.
typedef uint16_t(* smp_transport_get_mtu_fn) (const struct net_buf *nb)
 SMP MTU query callback for transport.
typedef int(* smp_transport_ud_copy_fn) (struct net_buf *dst, const struct net_buf *src)
 SMP copy user_data callback.
typedef void(* smp_transport_ud_free_fn) (void *ud)
 SMP free user_data callback.
typedef bool(* smp_transport_query_valid_check_fn) (struct net_buf *nb, void *arg)
 Function for checking if queued data is still valid.
typedef void(* smp_transport_ud_req_init_fn) (struct net_buf *nb, void *priv)
 SMP init request buffer.
typedef 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.
typedef void(* smp_transport_bridge_disconnect_fn) (struct smp_transport_bridge *bridge, bool direction)
 SMP transport bridge disconnect.
typedef int(* smp_transport_bridge_out_fn) (const struct smp_transport_bridge *bridge, struct net_buf *nb, bool direction)
 SMP transport bridge output data.
typedef bool(* mgmt_client_transport_cb_t) (const struct smp_client_transport_entry *transport, void *user_data)
 Callback for SMP client transports.
typedef bool(* smp_transport_bridge_modes_fn) (zcbor_state_t *output_data, int *rc)
 SMP transport bridge details.
typedef bool(* smp_transport_bridge_config_details_fn) (uint32_t mode, zcbor_state_t *output_data, int *rc)
 SMP transport bridge config details.

Enumerations

enum  smp_transport_type {
  SMP_SERIAL_TRANSPORT = 0 , SMP_RAW_SERIAL_TRANSPORT , SMP_BLUETOOTH_TRANSPORT , SMP_SHELL_TRANSPORT ,
  SMP_UDP_IPV4_TRANSPORT , SMP_UDP_IPV6_TRANSPORT , SMP_LORAWAN_TRANSPORT , SMP_SPI_TRANSPORT ,
  SMP_USER_DEFINED_TRANSPORT = 64
}
 SMP transport type for client registration. More...

Functions

int smp_transport_init (struct smp_transport *smpt)
 Initializes a Zephyr SMP transport object.
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.
void smp_rx_clear (struct smp_transport *zst)
 Used to clear pending queued requests for an SMP transport.
void smp_client_transport_register (struct smp_client_transport_entry *entry)
 Register a Zephyr SMP transport object for client.
struct smp_transportsmp_client_transport_get (int smpt_type)
 Discover a registered SMP transport client object.
bool smp_client_transport_foreach (mgmt_client_transport_cb_t user_cb, void *user_data)
 Iterate over SMP client/transports.

Detailed Description

MCUmgr SMP transport API.

Typedef Documentation

◆ mgmt_client_transport_cb_t

typedef bool(* mgmt_client_transport_cb_t) (const struct smp_client_transport_entry *transport, void *user_data)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

Callback for SMP client transports.

Parameters
transportSMP client transport
user_datauser data supplied to smp_client_transport_foreach() function
Returns
true to continue with the next transport, false to abort.

◆ smp_transport_bridge_config_details_fn

typedef bool(* smp_transport_bridge_config_details_fn) (uint32_t mode, zcbor_state_t *output_data, int *rc)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

SMP transport bridge config details.

Used to see what configuration options a transport has to establish a connection.

Parameters
modemode of the transport
output_dataCBOR data for output
rcmcumgr_err_t code to return, if error
Returns
true on success, false on failure.

◆ smp_transport_bridge_connect_fn

typedef 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)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

SMP transport bridge connect.

Used when establishing a bridge to another transport.

Parameters
bridgecontains the bridging context
directionspecifies direction of transport, either TRANSPORT_MGMT_DIRECTION_INCOMING or TRANSPORT_MGMT_DIRECTION_OUTGOING
modemode of the transport
same_transporttrue if the incoming and outgoing transports both are using this transport
input_dataCBOR data from input
output_dataCBOR data for output (to return an error)
Returns
true on success, false on error.

◆ smp_transport_bridge_disconnect_fn

typedef void(* smp_transport_bridge_disconnect_fn) (struct smp_transport_bridge *bridge, bool direction)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

SMP transport bridge disconnect.

Used when disconnecting an already established bridge with another transport.

Parameters
bridgecontains the bridging context
directionspecifies direction of transport, either TRANSPORT_MGMT_DIRECTION_INCOMING or TRANSPORT_MGMT_DIRECTION_OUTGOING

◆ smp_transport_bridge_modes_fn

typedef bool(* smp_transport_bridge_modes_fn) (zcbor_state_t *output_data, int *rc)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

SMP transport bridge details.

Used to see number of transport modes.

Parameters
output_dataCBOR data for output
rcmcumgr_err_t code to return, if error
Returns
true on success, false on failure.

◆ smp_transport_bridge_out_fn

typedef int(* smp_transport_bridge_out_fn) (const struct smp_transport_bridge *bridge, struct net_buf *nb, bool direction)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

SMP transport bridge output data.

Pass data for output through transport bridge.

Parameters
bridgecontains the bridging context
nbdata that should be output
directionspecifies direction of transport, either TRANSPORT_MGMT_DIRECTION_INCOMING or TRANSPORT_MGMT_DIRECTION_OUTGOING
Returns
0 on success, mcumgr_err_t code on failure.

◆ smp_transport_get_mtu_fn

typedef uint16_t(* smp_transport_get_mtu_fn) (const struct net_buf *nb)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

SMP MTU query callback for transport.

The supplied net_buf should contain a request received from the peer whose MTU is being queried. This function takes a net_buf parameter because some transports store connection-specific information in the net_buf user header (e.g., the Bluetooth transport stores the peer address).

Parameters
nbContains a request from the relevant peer.
Returns
The transport's MTU; 0 if transmission is currently not possible.

◆ smp_transport_out_fn

typedef int(* smp_transport_out_fn) (struct net_buf *nb)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

SMP transmit callback for transport.

The supplied net_buf is always consumed, regardless of return code.

Parameters
nbThe net_buf to transmit.
Returns
0 on success, mcumgr_err_t code on failure.

◆ smp_transport_query_valid_check_fn

typedef bool(* smp_transport_query_valid_check_fn) (struct net_buf *nb, void *arg)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

Function for checking if queued data is still valid.

This function is used to check if queued SMP data is still valid e.g. on a remote device disconnecting, this is triggered when smp_rx_remove_invalid() is called.

Parameters
nbnet buf containing queued request.
argArgument provided when calling smp_rx_remove_invalid() function.
Returns
false if data is no longer valid/should be freed, true otherwise.

◆ smp_transport_ud_copy_fn

typedef int(* smp_transport_ud_copy_fn) (struct net_buf *dst, const struct net_buf *src)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

SMP copy user_data callback.

The supplied src net_buf should contain a user_data that cannot be copied using regular memcpy function (e.g., the Bluetooth transport net_buf user_data stores the connection reference that has to be incremented when is going to be used by another buffer).

Parameters
dstSource buffer user_data pointer.
srcDestination buffer user_data pointer.
Returns
0 on success, mcumgr_err_t code on failure.

◆ smp_transport_ud_free_fn

typedef void(* smp_transport_ud_free_fn) (void *ud)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

SMP free user_data callback.

This function frees net_buf user data, because some transports store connection-specific information in the net_buf user data (e.g., the Bluetooth transport stores the connection reference that has to be decreased).

Parameters
udContains a user_data pointer to be freed.

◆ smp_transport_ud_req_init_fn

typedef void(* smp_transport_ud_req_init_fn) (struct net_buf *nb, void *priv)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

SMP init request buffer.

The supplied net_buf should be for a SMP request

Parameters
nbnet buf for SMP request
privSMP transport private data

Enumeration Type Documentation

◆ smp_transport_type

#include <zephyr/mgmt/mcumgr/transport/smp.h>

SMP transport type for client registration.

Enumerator
SMP_SERIAL_TRANSPORT 

SMP serial.

SMP_RAW_SERIAL_TRANSPORT 

SMP raw serial (not SMP over console).

SMP_BLUETOOTH_TRANSPORT 

SMP bluetooth.

SMP_SHELL_TRANSPORT 

SMP shell.

SMP_UDP_IPV4_TRANSPORT 

SMP UDP IPv4.

SMP_UDP_IPV6_TRANSPORT 

SMP UDP IPv6.

SMP_LORAWAN_TRANSPORT 

SMP LoRaWAN.

SMP_SPI_TRANSPORT 

SMP SPI.

SMP_USER_DEFINED_TRANSPORT 

IDs up to 63 reserved for future in-tree transports.

SMP user defined type

Function Documentation

◆ smp_client_transport_foreach()

bool smp_client_transport_foreach ( mgmt_client_transport_cb_t user_cb,
void * user_data )

#include <zephyr/mgmt/mcumgr/transport/smp.h>

Iterate over SMP client/transports.

Parameters
user_cbCallback function
user_dataUser data supplied to callback function
Returns
true if all transports were iterated, false otherwise.

◆ smp_client_transport_get()

struct smp_transport * smp_client_transport_get ( int smpt_type)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

Discover a registered SMP transport client object.

Parameters
smpt_typeType of transport
Returns
Pointer to registered object. Unknown type return NULL.

◆ smp_client_transport_register()

void smp_client_transport_register ( struct smp_client_transport_entry * entry)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

Register a Zephyr SMP transport object for client.

Parameters
entryThe transport to construct.

◆ smp_rx_clear()

void smp_rx_clear ( struct smp_transport * zst)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

Used to clear pending queued requests for an SMP transport.

Parameters
zstThe transport to use.

◆ smp_rx_remove_invalid()

void smp_rx_remove_invalid ( struct smp_transport * zst,
void * arg )

#include <zephyr/mgmt/mcumgr/transport/smp.h>

Used to remove queued requests for an SMP transport that are no longer valid.

A smp_transport_query_valid_check_fn() function must be registered for this to function. If the smp_transport_query_valid_check_fn() function returns false during a callback, the queried command will classed as invalid and dropped.

Parameters
zstThe transport to use.
argArgument provided to callback smp_transport_query_valid_check_fn() function.

◆ smp_transport_init()

int smp_transport_init ( struct smp_transport * smpt)

#include <zephyr/mgmt/mcumgr/transport/smp.h>

Initializes a Zephyr SMP transport object.

Parameters
smptThe transport to construct.
Returns
0 If successful
Negative errno code if failure.