XCORE SDK
XCORE Software Development Kit
device_control.h
1 // Copyright 2021-2022 XMOS LIMITED.
2 // This Software is subject to the terms of the XMOS Public Licence: Version 1.
3 
4 #ifndef DEVICE_CONTROL_H_
5 #define DEVICE_CONTROL_H_
6 
7 #include <stdint.h>
8 #include <stddef.h>
9 
10 #include "device_control_shared.h"
11 
12 #include "rtos_osal.h"
13 #include "rtos_intertile.h"
14 
27 typedef struct {
28  uint8_t *resource_table; /* NULL on client tiles */
29  int intertile_port;
30  union {
31  rtos_intertile_t *host_intertile;
32 
33  /*
34  * Everything past this point is only used by the host tile.
35  * The device_control_client_t struct includes only the above
36  * members and may be used to save some memory when initialized
37  * with DEVICE_CONTROL_CLIENT_MODE.
38  */
39  struct {
40  rtos_intertile_t *client_intertile[3];
41 
42  size_t servicer_count;
43  size_t intertile_count;
44  rtos_osal_queue_t gateway_queue;
45 
46  struct {
47  rtos_intertile_t *intertile_ctx;
48  rtos_osal_queue_t *queue;
49  } *servicer_table;
50 
51  size_t requested_payload_len;
52  control_resid_t requested_resid;
53  control_cmd_t requested_cmd;
54  control_status_t last_status;
55  };
56  };
58 
64 typedef struct {
65  uint8_t *resource_table; /* NULL on client tiles */
66  int intertile_port;
67  rtos_intertile_t *host_intertile;
69 
75 typedef struct {
76  rtos_osal_queue_t queue;
78 
98 typedef control_ret_t (*device_control_read_cmd_cb_t)(control_resid_t resid, control_cmd_t cmd, uint8_t *payload, size_t payload_len, void *app_data);
99 
117 typedef control_ret_t (*device_control_write_cmd_cb_t)(control_resid_t resid, control_cmd_t cmd, const uint8_t *payload, size_t payload_len, void *app_data);
118 
119 
135  control_resid_t resid,
136  control_cmd_t cmd,
137  size_t payload_len);
138 
166  uint8_t *payload_buf,
167  size_t *buf_size,
168  control_direction_t direction);
169 
189  device_control_read_cmd_cb_t read_cmd_cb,
190  device_control_write_cmd_cb_t write_cmd_cb,
191  void *app_data,
192  unsigned timeout);
193 
212  unsigned timeout);
213 
232  device_control_t *device_control_ctx[],
233  size_t device_control_ctx_count,
234  const control_resid_t resources[],
235  size_t num_resources);
236 
259  uint8_t intertile_port,
260  unsigned priority);
261 
291  int mode,
292  size_t servicer_count,
293  rtos_intertile_t *intertile_ctx[],
294  size_t intertile_count);
295 
298 #endif /* DEVICE_CONTROL_H_ */
uint8_t control_resid_t
Definition: device_control_shared.h:27
control_direction_t
Definition: device_control_shared.h:49
control_ret_t
Definition: device_control_shared.h:36
control_ret_t device_control_request(device_control_t *ctx, control_resid_t resid, control_cmd_t cmd, size_t payload_len)
control_ret_t device_control_init(device_control_t *ctx, int mode, size_t servicer_count, rtos_intertile_t *intertile_ctx[], size_t intertile_count)
control_ret_t device_control_servicer_cmd_recv(device_control_servicer_t *ctx, device_control_read_cmd_cb_t read_cmd_cb, device_control_write_cmd_cb_t write_cmd_cb, void *app_data, unsigned timeout)
control_ret_t device_control_resources_register(device_control_t *ctx, unsigned timeout)
control_ret_t device_control_start(device_control_t *ctx, uint8_t intertile_port, unsigned priority)
control_ret_t device_control_servicer_register(device_control_servicer_t *ctx, device_control_t *device_control_ctx[], size_t device_control_ctx_count, const control_resid_t resources[], size_t num_resources)
control_ret_t(* device_control_read_cmd_cb_t)(control_resid_t resid, control_cmd_t cmd, uint8_t *payload, size_t payload_len, void *app_data)
Definition: device_control.h:98
control_ret_t device_control_payload_transfer(device_control_t *ctx, uint8_t *payload_buf, size_t *buf_size, control_direction_t direction)
control_ret_t(* device_control_write_cmd_cb_t)(control_resid_t resid, control_cmd_t cmd, const uint8_t *payload, size_t payload_len, void *app_data)
Definition: device_control.h:117
Definition: device_control.h:64
Definition: device_control.h:75
Definition: device_control.h:27
Definition: rtos_intertile.h:36