Infuse-IoT SDK API 0.0.1
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
client.h
Go to the documentation of this file.
1
9
10#ifndef INFUSE_SDK_INCLUDE_INFUSE_RPC_CLIENT_H_
11#define INFUSE_SDK_INCLUDE_INFUSE_RPC_CLIENT_H_
12
13#include <zephyr/net_buf.h>
14
17#include <infuse/rpc/types.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
28
38typedef void (*rpc_client_rsp_fn)(const struct net_buf *buf, void *user_data);
39
43 struct k_timer timeout;
45 struct k_sem tx_tokens;
47 k_timeout_t rsp_timeout;
51 void *user_data;
53 uint32_t request_id;
55 uint16_t command_id;
59 int16_t tx_result;
62};
63
67 const struct device *interface;
73 struct rpc_client_cmd_ctx cmd_ctx[CONFIG_INFUSE_RPC_CLIENT_MAX_IN_FLIGHT];
75 struct k_sem cmd_ctx_sem;
77 struct k_spinlock lock;
79 uint32_t request_id;
80};
81
89void rpc_client_init(struct rpc_client_ctx *ctx, const struct device *dev,
90 union epacket_interface_address address);
91
101static inline uint32_t rpc_client_last_request_id(const struct rpc_client_ctx *ctx)
102{
103 return ctx->request_id;
104}
105
118int rpc_client_update_response_timeout(struct rpc_client_ctx *ctx, uint32_t request_id,
119 k_timeout_t timeout);
120
143int rpc_client_command_queue(struct rpc_client_ctx *ctx, enum rpc_builtin_id cmd, void *req_params,
144 size_t req_params_len, rpc_client_rsp_fn cb, void *user_data,
145 k_timeout_t ctx_timeout, k_timeout_t response_timeout);
146
162int rpc_client_ack_wait(struct rpc_client_ctx *ctx, uint32_t request_id, k_timeout_t timeout);
163
175typedef int (*rpc_client_data_loader)(void *user_data, uint32_t offset, void *data,
176 size_t data_len);
177
190int rpc_client_data_queue(struct rpc_client_ctx *ctx, uint32_t request_id, uint32_t offset,
191 const void *data, size_t data_len);
192
208
222int rpc_client_data_queue_auto_load(struct rpc_client_ctx *ctx, uint32_t request_id,
223 uint32_t offset, void *buffer, size_t buffer_len,
224 const struct rpc_client_auto_load_params *loader_params);
225
241int rpc_client_command_sync(struct rpc_client_ctx *ctx, enum rpc_builtin_id cmd, void *req_params,
242 size_t req_params_len, k_timeout_t ctx_timeout,
243 k_timeout_t response_timeout, struct net_buf **rsp);
244
251
255
256#ifdef __cplusplus
257}
258#endif
259
260#endif /* INFUSE_SDK_INCLUDE_INFUSE_RPC_CLIENT_H_ */
Autogenerated RPC definitions.
rpc_builtin_id
Infuse-IoT builtin RPC commands.
Definition types.h:518
void rpc_client_init(struct rpc_client_ctx *ctx, const struct device *dev, union epacket_interface_address address)
Initialise RPC client object for use.
int rpc_client_update_response_timeout(struct rpc_client_ctx *ctx, uint32_t request_id, k_timeout_t timeout)
Update the response timeout of an executing command.
int rpc_client_command_queue(struct rpc_client_ctx *ctx, enum rpc_builtin_id cmd, void *req_params, size_t req_params_len, rpc_client_rsp_fn cb, void *user_data, k_timeout_t ctx_timeout, k_timeout_t response_timeout)
Queue a command for execution on a remote device.
int rpc_client_command_sync(struct rpc_client_ctx *ctx, enum rpc_builtin_id cmd, void *req_params, size_t req_params_len, k_timeout_t ctx_timeout, k_timeout_t response_timeout, struct net_buf **rsp)
Queue a command for execution on a remote device and wait for the response.
int rpc_client_data_queue(struct rpc_client_ctx *ctx, uint32_t request_id, uint32_t offset, const void *data, size_t data_len)
Queue data associated with a previously queued command.
static uint32_t rpc_client_last_request_id(const struct rpc_client_ctx *ctx)
Get the request ID used by the last command.
Definition client.h:101
void(* rpc_client_rsp_fn)(const struct net_buf *buf, void *user_data)
Callback run when the response arrives.
Definition client.h:38
int rpc_client_data_queue_auto_load(struct rpc_client_ctx *ctx, uint32_t request_id, uint32_t offset, void *buffer, size_t buffer_len, const struct rpc_client_auto_load_params *loader_params)
Queue data associated with a previously queued command, loaded via callback.
int(* rpc_client_data_loader)(void *user_data, uint32_t offset, void *data, size_t data_len)
Callback to load more data for queueing.
Definition client.h:175
void rpc_client_cleanup(struct rpc_client_ctx *ctx)
Cleanup a RPC client object.
int rpc_client_ack_wait(struct rpc_client_ctx *ctx, uint32_t request_id, k_timeout_t timeout)
Wait for an INFUSE_RPC_DATA_ACK from the remote device.
ePacket Interface API
ePacket packet APIs
ePacket interface callback structure.
Definition interface.h:93
State for auto loader control.
Definition client.h:194
uint32_t total_len
Total length of data to send (bytes)
Definition client.h:198
void * user_data
User data pointer for rpc_client_auto_load_params::loader.
Definition client.h:206
k_timeout_t ack_wait
Duration to wait for each DATA_ACK.
Definition client.h:200
uint8_t ack_period
Number of data packets sent per DATA_ACK (0 to not wait for DATA_ACKs)
Definition client.h:202
rpc_client_data_loader loader
Callback to load more data.
Definition client.h:196
uint8_t pipelining
Maximum number of pending DATA_ACK packets.
Definition client.h:204
Context associated with a single in-flight command.
Definition client.h:41
uint16_t command_id
RPC command ID.
Definition client.h:55
struct k_timer timeout
Command response timeout timer.
Definition client.h:43
uint16_t tx_tokens_on_ack
Number of TX tokens to give on DATA_ACK.
Definition client.h:57
rpc_client_rsp_fn cb
Callback to run on completion.
Definition client.h:49
int16_t tx_result
Result of TX queuing.
Definition client.h:59
struct k_sem tx_tokens
Tokens allowing the next transmission.
Definition client.h:45
uint32_t request_id
RPC request ID (0 when context is unused)
Definition client.h:53
k_timeout_t rsp_timeout
Timeout for the response.
Definition client.h:47
bool tx_pending
Command packet TX callback has not yet run (context cannot be reused)
Definition client.h:61
void * user_data
Arbitrary user data for callback.
Definition client.h:51
RPC client context.
Definition client.h:65
union epacket_interface_address address
Interface address of the remote device.
Definition client.h:69
struct rpc_client_cmd_ctx cmd_ctx[CONFIG_INFUSE_RPC_CLIENT_MAX_IN_FLIGHT]
Contexts for in-flight commands.
Definition client.h:73
struct k_spinlock lock
Lock for claiming and releasing command contexts.
Definition client.h:77
struct k_sem cmd_ctx_sem
Semaphore counting free command contexts.
Definition client.h:75
const struct device * interface
ePacket interface commands are sent on
Definition client.h:67
struct epacket_interface_cb interface_cb
Callback structure registered on rpc_client_ctx::interface.
Definition client.h:71
uint32_t request_id
Request ID of the most recently queued command.
Definition client.h:79
Interface specific addresses.
Definition packet.h:56