API documentation
Core API documentation
This API uses pointers to raw packet data. CBOR API documentation provides serialization layer over it using zcbor.
- group nrf_rpc
Module to call procedures on a remote processor.
Defines
-
NRF_RPC_PROTOCOL_VERSION
nRF RPC protocol version.
-
NRF_RPC_ID_UNKNOWN
Special value to indicate that ID is unknown or irrelevant.
-
NRF_RPC_FLAGS_WAIT_ON_INIT
Flag indicating that the group does not block on initialization.
-
NRF_RPC_FLAGS_INITIATOR
Flag indicating that the peer must initiate group binding.
-
NRF_RPC_FLAG_COND(_cond, _flag)
Helper macro for conditional flag initialization.
-
NRF_RPC_GROUP_DEFINE_INTERNAL__(_name, _strid, _transport, _ack_handler, _ack_data, _err_handler, _bound_handler, _wait_on_init, _initiator)
Internal macro for parametrizing nrf_rpc groups.
- Parameters:
_name – Symbol name of the group.
_strid – String containing a unique identifier of the group. Naming conventions are the same as with C symbol name. Groups on local and remote must have the same unique identifier.
_transport – Group transport. It is used by group to communicate with a remote processor.
_ack_handler – Handler of type nrf_rpc_ack_handler_t, called when ACK was received after event completion. Can be NULL if the group does not want to receive ACK notifications.
_ack_data – Opaque pointer for the
_ack_handler
._err_handler – Handler of type nrf_rpc_err_handler_t, called when an error occurred in context of this group. Can be NULL if the group does not want to receive error notifications.
_bound_handler – Handler of type nrf_rpc_group_bound_handler_t, called when the group was successfuly bound. The callback is called each time the remote peer binds to the group. This can be used to detect a remote peer reset and can be used by the application to reset the local state.
_wait_on_init – The group does not block until it is bound.
_initiator – The group is the initiator.
-
NRF_RPC_GROUP_DEFINE(_name, _strid, _transport, _ack_handler, _ack_data, _err_handler)
Define a group of commands and events.
- Parameters:
_name – Symbol name of the group.
_strid – String containing unique identifier of the group. Naming conventions the same as C symbol name. Groups on local and remote must have the same unique identifier.
_transport – Group transport. It is used by group to communicate with a remote processor.
_ack_handler – Handler of type nrf_rpc_ack_handler_t called when ACK was received after event completion. Can be NULL if group does not want to receive ACK notifications.
_ack_data – Opaque pointer for the
_ack_handler
._err_handler – Handler of type nrf_rpc_err_handler_t called when error occurred in context of this group. Can be NULL if group does not want to receive error notifications.
-
NRF_RPC_GROUP_DEFINE_NOWAIT(_name, _strid, _transport, _ack_handler, _ack_data, _err_handler, _bound_handler, _initiator)
Define a non-blocking group of commands and events.
The NOWAIT group does not block the nrf_rpc_init until binding completion. When the NOWAIT group is bound, the nrf_rpc_group_bound_handler_t will be called. The NOWAIT group can have two roles: initiator and follower. The initiator initiates the endpoint binding. The follower waits for the initiator to bind the group. Both peers can be initiators, but there must always be at least one on either side of the IPC channel.
- Parameters:
_name – Symbol name of the group.
_strid – String containing a unique identifier of the group. Naming conventions are the same as with C symbol name. Groups on local and remote must have the same unique identifier.
_transport – Group transport. It is used by group to communicate with a remote processor.
_ack_handler – Handler of type nrf_rpc_ack_handler_t, called when ACK was received after event completion. Can be NULL if the group does not want to receive ACK notifications.
_ack_data – Opaque pointer for the
_ack_handler
._err_handler – Handler of type nrf_rpc_err_handler_t, called when an error occurred in context of this group. Can be NULL if the group does not want to receive error notifications.
_bound_handler – Handler of type nrf_rpc_group_bound_handler_t, called when the group was successfuly bound. The callback is called each time the remote peer binds to the group. This can be used to detect a remote peer reset and can be used by the application to reset the local state.
_initiator – The group is the initiator.
-
NRF_RPC_GROUP_DECLARE(_name)
Extern declaration of a group.
Can be used in a header file.
- Parameters:
_name – Symbol name of the group.
-
NRF_RPC_CMD_DECODER(_group, _name, _cmd, _handler, _data)
Register a command decoder.
- Parameters:
_group – Group that the decoder will belong to, created with a NRF_RPC_GROUP_DEFINE().
_name – Name of the decoder.
_cmd – Command id. Can be from 0 to 254.
_handler – Handler function of type nrf_rpc_handler_t.
_data – Opaque pointer for the
_handler
.
-
NRF_RPC_EVT_DECODER(_group, _name, _evt, _handler, _data)
Register an event decoder.
- Parameters:
_group – Group that the decoder will belong to, created with a NRF_RPC_GROUP_DEFINE().
_name – Name of the decoder.
_evt – Event id. Can be from 0 to 254.
_handler – Handler function of type nrf_rpc_handler_t.
_data – Opaque pointer for the
_handler
.
-
NRF_RPC_GROUP_STATUS(_group)
Check group status.
Macro checks whether the group and the transport assigned to it have been initialized.
- Parameters:
_group – Name of the group.
Typedefs
-
typedef void (*nrf_rpc_handler_t)(const struct nrf_rpc_group *group, const uint8_t *packet, size_t len, void *handler_data)
Callback that handles decoding of commands, events and responses.
- Param group:
Group that decoder belongs to.
- Param packet:
Packet data.
- Param len:
Length of the packet.
- Param handler_data:
Opaque pointer provided by the user.
-
typedef void (*nrf_rpc_ack_handler_t)(uint8_t id, void *handler_data)
Callback called when ACK was received.
See also
- Param id:
Id of the event that was completed.
- Param handler_data:
Opaque pointer provided by the user.
-
typedef void (*nrf_rpc_err_handler_t)(const struct nrf_rpc_err_report *report)
Callback to report error that cannot be returned by the API call.
This callback will be called when received packet cannot be correctly interpreted. Second case is when one of
_no_err
sending functions failed.Callback can be assigned to specific group. If group in which error occurred is known associated error handler is called. Later global error handler provided in nrf_rpc_init is called.
See also
See also
- Param report:
Error report.
-
typedef void (*nrf_rpc_group_bound_handler_t)(const struct nrf_rpc_group *group)
Callback called when the command group is bound.
See also
- Param group:
Pointer to the bound group.
Enums
-
enum nrf_rpc_packet_type
Type of packet.
Used by nrf_rpc_err_report to indicate which packet caused the problem.
Values:
-
enumerator NRF_RPC_PACKET_TYPE_EVT
Event.
-
enumerator NRF_RPC_PACKET_TYPE_RSP
Response.
-
enumerator NRF_RPC_PACKET_TYPE_ACK
Event acknowledge.
-
enumerator NRF_RPC_PACKET_TYPE_ERR
Error report from remote.
-
enumerator NRF_RPC_PACKET_TYPE_INIT
Initialization packet.
-
enumerator NRF_RPC_PACKET_TYPE_CMD
Command.
-
enumerator NRF_RPC_PACKET_TYPE_EVT
-
enum nrf_rpc_err_src
Error source.
Used by nrf_rpc_err_report to indicate when the problem occurred.
Values:
-
enumerator NRF_RPC_ERR_SRC_RECV
Error during receiving.
-
enumerator NRF_RPC_ERR_SRC_SEND
Error during sending.
-
enumerator NRF_RPC_ERR_SRC_REMOTE
Error reported be the remote.
-
enumerator NRF_RPC_ERR_SRC_RECV
Functions
-
int nrf_rpc_init(nrf_rpc_err_handler_t err_handler)
Initialize the nRF RPC.
- Parameters:
err_handler – Error handler that will be called to report error in nRF RPC.
- Returns:
0 on success or negative error code.
-
static inline int nrf_rpc_cmd(const struct nrf_rpc_group *group, uint8_t cmd, uint8_t *packet, size_t len, nrf_rpc_handler_t handler, void *handler_data)
Send a command and provide callback to handle response.
- Parameters:
group – Group that command belongs to.
cmd – Command id.
packet – Packet allocated by nrf_rpc_alloc_tx_buf and filled with an encoded data.
len – Length of the packet. Can be smaller than allocated.
handler – Callback that handles the response. In case of error (e.g. malformed response packet was received) it is undefined if the handler will be called.
handler_data – Opaque pointer that will be passed to
handler
.
- Returns:
0 on success or negative error code if a transport layer reported a sending error.
-
static inline int nrf_rpc_cmd_rsp(const struct nrf_rpc_group *group, uint8_t cmd, uint8_t *packet, size_t len, const uint8_t **rsp_packet, size_t *rsp_len)
Send a command and get response as an output parameter.
This variant of command send function outputs response as an output parameter. Caller is responsible to call nrf_rpc_decoding_done with a response packet just after response packet was decoded and can be deallocated.
- Parameters:
group – [in] Group that command belongs to.
cmd – [in] Command id.
packet – [in] Packet allocated by nrf_rpc_alloc_tx_buf and filled with an encoded data.
len – [in] Length of the packet. Can be smaller than allocated.
rsp_packet – [out] Packet containing the response or NULL on error.
rsp_len – [out] Length of
rsp_packet
.
- Returns:
0 on success or negative error code if a transport layer reported a sending error.
-
static inline void nrf_rpc_cmd_no_err(const struct nrf_rpc_group *group, uint8_t cmd, uint8_t *packet, size_t len, nrf_rpc_handler_t handler, void *handler_data)
Send a command, provide callback to handle response and pass any error to an error handler.
This variant of command send function returns
void
, so sending error returned from the transport layer is passed to the error handler. Source of error is NRF_RPC_ERR_SRC_SEND.- Parameters:
group – Group that command belongs to.
cmd – Command id.
packet – Packet allocated by nrf_rpc_alloc_tx_buf and filled with an encoded data.
len – Length of the packet. Can be smaller than allocated.
handler – Callback that handles the response. In case of error (e.g. malformed response packet was received) it is undefined if the handler will be called.
handler_data – Opaque pointer that will be passed to
handler
.
-
static inline void nrf_rpc_cmd_rsp_no_err(const struct nrf_rpc_group *group, uint8_t cmd, uint8_t *packet, size_t len, const uint8_t **rsp_packet, size_t *rsp_len)
Send a command, get response as an output parameter and pass any error to an error handler.
See both nrf_rpc_cmd_rsp and nrf_rpc_cmd_no_err for more details on this variant of command send function.
- Parameters:
group – [in] Group that command belongs to.
cmd – [in] Command id.
packet – [in] Packet allocated by nrf_rpc_alloc_tx_buf and filled with an encoded data.
len – [in] Length of the packet. Can be smaller than allocated.
rsp_packet – [out] Packet containing the response or NULL on error.
rsp_len – [out] Length of
rsp_packet
.
-
int nrf_rpc_evt(const struct nrf_rpc_group *group, uint8_t evt, uint8_t *packet, size_t len)
Send an event.
- Parameters:
group – Group that event belongs to.
evt – Event id.
packet – Packet allocated by nrf_rpc_alloc_tx_buf and filled with an encoded data.
len – Length of the packet. Can be smaller than allocated.
- Returns:
0 on success or negative error code if a transport layer reported a sending error.
-
void nrf_rpc_evt_no_err(const struct nrf_rpc_group *group, uint8_t evt, uint8_t *packet, size_t len)
Send an event and pass any error to an error handler.
This variant of event send function returns
void
, so sending error returned from the transport layer is passed to the error handler. Source of error is NRF_RPC_ERR_SRC_SEND.- Parameters:
group – Group that event belongs to.
evt – Event id.
packet – Packet allocated by nrf_rpc_alloc_tx_buf and filled with encoded data.
len – Length of the packet. Can be smaller than allocated.
-
int nrf_rpc_rsp(const struct nrf_rpc_group *group, uint8_t *packet, size_t len)
Send a response.
- Parameters:
group – Group that response belongs to.
packet – Packet allocated by nrf_rpc_alloc_tx_buf and filled with encoded data.
len – Length of the packet. Can be smaller than allocated.
- Returns:
0 on success or negative error code if a transport layer reported a sending error.
-
void nrf_rpc_rsp_no_err(const struct nrf_rpc_group *group, uint8_t *packet, size_t len)
Send a response and pass any error to an error handler.
This variant of response send function returns
void
, so sending error returned from the transport layer is passed to the error handler. Source of error is NRF_RPC_ERR_SRC_SEND.- Parameters:
group – Group that response belongs to.
packet – Packet allocated by nrf_rpc_alloc_tx_buf and filled with encoded data.
len – Length of the packet. Can be smaller than allocated.
-
void nrf_rpc_decoding_done(const struct nrf_rpc_group *group, const uint8_t *packet)
Indicate that decoding of the input packet is done.
This function must be called as soon as the input packet was parsed and can be deallocated. It must be called in command decoder, event decoder and after nrf_rpc_cmd_rsp or nrf_rpc_cmd_rsp_no_err. Packet is automatically deallocated after completion of the response handler function, so this
nrf_rpc_decoding_done
is not needed in response handler.- Parameters:
group – Group that decoder belongs to.
packet – Packet where parsing has completed.
-
void nrf_rpc_err(int code, enum nrf_rpc_err_src src, const struct nrf_rpc_group *group, uint8_t id, uint8_t packet_type)
Report an error to nRF RPC error handler.
This function allows the serialization layer (such as zcbor) to report errors to the same error handler as nRF RPC.
- Parameters:
code – Negative error code.
src – Source of error.
group – Group where error happens or NULL if unknown.
id – Command or event id which caused the error or NRF_RPC_ID_UNKNOWN if unknown.
packet_type – Type of packet related to this error.
-
void nrf_rpc_alloc_tx_buf(const struct nrf_rpc_group *group, uint8_t **buf, size_t len)
Allocates buffer for a packet.
Memory is automatically deallocated after packet sending. If not, nrf_rpc_free_tx_buf can be used.
- Parameters:
group – [in] nRF RPC group
buf – [inout] Pointer to allocated packet buffer.
len – [in] Requested length of the buffer.
-
void nrf_rpc_free_tx_buf(const struct nrf_rpc_group *group, uint8_t *buf)
Deallocates Tx buffer.
It should be used only if packet was allocated but it is not sent by any transport.
- Parameters:
group – [in] nRF RPC group.
buf – [in] Previously allocated buffer for Tx packet.
-
struct nrf_rpc_group_data
- #include <nrf_rpc.h>
Group data structure. It contains no constant group data.
-
struct nrf_rpc_group
- #include <nrf_rpc.h>
Defines a group of commands and events.
Created by NRF_RPC_GROUP_DEFINE.
Fields of this structure are used internally by nRF RPC and not intended to be used by the user.
-
struct nrf_rpc_err_report
- #include <nrf_rpc.h>
Error report.
Public Members
-
int code
Error code.
-
const struct nrf_rpc_group *group
Group where the error occurred or NULL if it is unknown.
-
enum nrf_rpc_err_src src
Source of the error.
-
uint8_t id
Command or event id or NRF_RPC_ID_UNKNOWN.
-
enum nrf_rpc_packet_type packet_type
Type of packet. Value may be outside defined enum values if packet is malformed.
-
int code
-
NRF_RPC_PROTOCOL_VERSION
CBOR API documentation
This API is built on top of the core nRF RPC API and it is not independent. See Core API documentation for more information on how to use nRF RPC together with zcbor.
- group nrf_rpc_cbor
A module that simplifies the usage of zcbor for serializing nRF RPC.
Defines
-
NRF_RPC_CBOR_CMD_DECODER(_group, _name, _cmd, _handler, _data)
Register a command decoder.
- Parameters:
_group – Group that the decoder will belong to, created with a NRF_RPC_GROUP_DEFINE().
_name – Name of the decoder.
_cmd – Command id. Can be from 0 to 254.
_handler – Handler function of type nrf_rpc_cbor_handler_t.
_data – Opaque pointer for the
_handler
.
-
NRF_RPC_CBOR_EVT_DECODER(_group, _name, _evt, _handler, _data)
Register an event decoder.
- Parameters:
_group – Group that the decoder will belong to, created with a NRF_RPC_GROUP_DEFINE().
_name – Name of the decoder.
_evt – Event id. Can be from 0 to 254.
_handler – Handler function of type nrf_rpc_cbor_handler_t.
_data – Opaque pointer for the
_handler
.
-
NRF_RPC_CBOR_ALLOC(_group, _ctx, _len)
Allocates memory for a packet.
Macro may allocate some variables on stack, so it should be used at top level of a function.
Memory is automatically deallocated when it is passed to any of the send functions. If not NRF_RPC_CBOR_DISCARD() can be used.
- Parameters:
_group – [in] nRF RPC group.
_ctx – [out] Variable of type nrf_rpc_cbor_ctx or nrf_rpc_cbor_rsp_ctx that will hold newly allocated resources to encode and send a packet.
_len – [in] Requested length of the packet.
-
NRF_RPC_CBOR_DISCARD(_group, _ctx)
Deallocate memory for a packet.
This macro should be used if memory was allocated, but it will not be sent with any of the send functions.
- Parameters:
_group – nRF RPC group, used for allocation.
_ctx – Packet that was previously allocated.
Typedefs
-
typedef void (*nrf_rpc_cbor_handler_t)(const struct nrf_rpc_group *group, struct nrf_rpc_cbor_ctx *ctx, void *handler_data)
Callback that handles decoding of commands, events and responses.
- Param group:
nRF RPC group.
- Param ctx:
CBOR decoding context
- Param handler_data:
Custom handler data.
Functions
-
bool nrf_rpc_cbor_is_alloc(struct nrf_rpc_cbor_ctx *ctx)
Check that the memory for a packet has been allocated.
- Parameters:
ctx – Context allocated by NRF_RPC_CBOR_ALLOC.
- Returns:
true if memory is valid otherwise false.
-
int nrf_rpc_cbor_cmd(const struct nrf_rpc_group *group, uint8_t cmd, struct nrf_rpc_cbor_ctx *ctx, nrf_rpc_cbor_handler_t handler, void *handler_data)
Send a command and provide callback to handle response.
- Parameters:
group – Group that command belongs to.
cmd – Command id.
ctx – Context allocated by NRF_RPC_CBOR_ALLOC.
handler – Callback that handles the response. In case of error (e.g. malformed response packet was received) it is undefined if the handler will be called.
handler_data – Opaque pointer that will be passed to
handler
.
- Returns:
0 on success or negative error code if a transport layer reported a sending error.
-
int nrf_rpc_cbor_cmd_rsp(const struct nrf_rpc_group *group, uint8_t cmd, struct nrf_rpc_cbor_ctx *ctx)
Send a command and get response as an output parameter.
This variant of command send function outputs response as an output parameter. Caller is responsible to call nrf_rpc_cbor_decoding_done just after response packet was decoded and can be deallocated.
ctx->value
can be used to decode the response.- Parameters:
group – Group that command belongs to.
cmd – Command id.
ctx – Context allocated by NRF_RPC_CBOR_ALLOC.
- Returns:
0 on success or negative error code if a transport layer reported a sending error.
-
void nrf_rpc_cbor_cmd_no_err(const struct nrf_rpc_group *group, uint8_t cmd, struct nrf_rpc_cbor_ctx *ctx, nrf_rpc_cbor_handler_t handler, void *handler_data)
Send a command, provide callback to handle response and pass any error to an error handler.
This variant of command send function returns
void
, so sending error returned from the transport layer is passed to the error handler. Source of error is NRF_RPC_ERR_SRC_SEND.- Parameters:
group – Group that command belongs to.
cmd – Command id.
ctx – Context allocated by NRF_RPC_CBOR_ALLOC.
handler – Callback that handles the response. In case of error (e.g. malformed response packet was received) it is undefined if the handler will be called.
handler_data – Opaque pointer that will be passed to
handler
.
-
void nrf_rpc_cbor_cmd_rsp_no_err(const struct nrf_rpc_group *group, uint8_t cmd, struct nrf_rpc_cbor_ctx *ctx)
Send a command, get response as an output parameter and pass any error to an error handler.
See both nrf_rpc_cbor_cmd_rsp and nrf_rpc_cbor_cmd_no_err for more details on this variant of command send function.
- Parameters:
group – Group that command belongs to.
cmd – Command id.
ctx – Context allocated by NRF_RPC_CBOR_ALLOC.
-
int nrf_rpc_cbor_evt(const struct nrf_rpc_group *group, uint8_t evt, struct nrf_rpc_cbor_ctx *ctx)
Send an event.
- Parameters:
group – Group that event belongs to.
evt – Event id.
ctx – Context allocated by NRF_RPC_CBOR_ALLOC.
- Returns:
0 on success or negative error code if a transport layer reported a sending error.
-
void nrf_rpc_cbor_evt_no_err(const struct nrf_rpc_group *group, uint8_t evt, struct nrf_rpc_cbor_ctx *ctx)
Send an event and pass any error to an error handler.
This variant of event send function returns
void
, so sending error returned from the transport layer is passed to the error handler. Source of error is NRF_RPC_ERR_SRC_SEND.- Parameters:
group – Group that event belongs to.
evt – Event id.
ctx – Context allocated by NRF_RPC_CBOR_ALLOC.
-
int nrf_rpc_cbor_rsp(const struct nrf_rpc_group *group, struct nrf_rpc_cbor_ctx *ctx)
Send a response.
- Parameters:
group – Group that response belongs to.
ctx – Context allocated by NRF_RPC_CBOR_ALLOC.
- Returns:
0 on success or negative error code if a transport layer reported a sending error.
-
void nrf_rpc_cbor_rsp_no_err(const struct nrf_rpc_group *group, struct nrf_rpc_cbor_ctx *ctx)
Send a response and pass any error to an error handler.
This variant of response send function returns
void
, so sending error returned from the transport layer is passed to the error handler. Source of error is NRF_RPC_ERR_SRC_SEND.- Parameters:
group – Group that response belongs to.
ctx – Context allocated by NRF_RPC_CBOR_ALLOC.
-
void nrf_rpc_cbor_decoding_done(const struct nrf_rpc_group *group, struct nrf_rpc_cbor_ctx *ctx)
Indicate that decoding of the input packet is done.
This function must be called as soon as the input packet was parsed and can be deallocated. It must be called in command decoder, event decoder and after nrf_rpc_cbor_cmd_rsp or nrf_rpc_cbor_cmd_rsp_no_err. Packet is automatically deallocated after completion of the response handler function, so this
nrf_rpc_cbor_decoding_done
is not needed in response handler.- Parameters:
group – Group that response belongs to.
ctx – Context allocated by NRF_RPC_CBOR_ALLOC.
-
struct nrf_rpc_cbor_ctx
- #include <nrf_rpc_cbor.h>
Context for encoding and sending commands, events and responses.
Initialize it with NRF_RPC_CBOR_ALLOC macro. Only
encoder
field is significant for the API, other fields are internal.
-
NRF_RPC_CBOR_CMD_DECODER(_group, _name, _cmd, _handler, _data)