9 #ifndef __IIOD_RESPONDER_H__
10 #define __IIOD_RESPONDER_H__
15 #if (defined(_WIN32) || defined(__MBED__))
16 #ifndef _SSIZE_T_DEFINED
17 typedef ptrdiff_t ssize_t;
18 #define _SSIZE_T_DEFINED
21 #include <sys/types.h>
24 struct iiod_command_data;
25 struct iiod_responder;
33 IIOD_OP_READ_DBG_ATTR,
34 IIOD_OP_READ_BUF_ATTR,
35 IIOD_OP_READ_CHN_ATTR,
37 IIOD_OP_WRITE_DBG_ATTR,
38 IIOD_OP_WRITE_BUF_ATTR,
39 IIOD_OP_WRITE_CHN_ATTR,
43 IIOD_OP_CREATE_BUFFER,
45 IIOD_OP_ENABLE_BUFFER,
46 IIOD_OP_DISABLE_BUFFER,
50 IIOD_OP_TRANSFER_BLOCK,
51 IIOD_OP_ENQUEUE_BLOCK_CYCLIC,
52 IIOD_OP_RETRY_DEQUEUE_BLOCK,
54 IIOD_OP_CREATE_EVSTREAM,
55 IIOD_OP_FREE_EVSTREAM,
73 struct iiod_responder_ops {
74 int (*cmd)(
const struct iiod_command *cmd,
75 struct iiod_command_data *data,
void *d);
76 ssize_t (*read)(
void *d,
const struct iiod_buf *buf,
size_t nb);
77 ssize_t (*write)(
void *d,
const struct iiod_buf *buf,
size_t nb);
78 ssize_t (*discard)(
void *d,
size_t bytes);
82 struct iiod_responder *
83 iiod_responder_create(
const struct iiod_responder_ops *ops,
void *d);
84 void iiod_responder_destroy(
struct iiod_responder *responder);
87 void iiod_responder_set_timeout(
struct iiod_responder *priv,
88 unsigned int timeout_ms);
89 void iiod_io_set_timeout(
struct iiod_io *io,
unsigned int timeout_ms);
92 uint64_t iiod_responder_read_counter_us(
void);
95 void iiod_responder_stop(
struct iiod_responder *responder);
98 void iiod_responder_wait_done(
struct iiod_responder *responder);
102 iiod_responder_create_io(
struct iiod_responder *responder, uint16_t
id);
105 iiod_responder_get_default_io(
struct iiod_responder *responder);
110 iiod_command_create_io(
const struct iiod_command *cmd,
111 struct iiod_command_data *data);
114 iiod_command_get_default_io(
struct iiod_command_data *data);
117 void iiod_io_cancel(
struct iiod_io *io);
120 void iiod_io_ref(
struct iiod_io *io);
123 void iiod_io_unref(
struct iiod_io *io);
126 int iiod_command_data_read(
struct iiod_command_data *data,
127 const struct iiod_buf *buf);
130 int iiod_io_send_command(
struct iiod_io *io,
131 const struct iiod_command *cmd,
132 const struct iiod_buf *buf,
size_t nb);
133 int iiod_io_send_response(
struct iiod_io *io, int32_t code,
134 const struct iiod_buf *buf,
size_t nb);
137 int iiod_io_exec_command(
struct iiod_io *io,
138 const struct iiod_command *cmd,
139 const struct iiod_buf *cmd_buf,
140 const struct iiod_buf *buf);
145 iiod_io_exec_simple_command(
struct iiod_io *io,
146 const struct iiod_command *cmd)
148 return iiod_io_exec_command(io, cmd, NULL, NULL);
152 int iiod_io_send_command_async(
struct iiod_io *io,
153 const struct iiod_command *cmd,
154 const struct iiod_buf *buf,
size_t nb);
155 int iiod_io_send_response_async(
struct iiod_io *io, int32_t code,
156 const struct iiod_buf *buf,
size_t nb);
159 int iiod_io_wait_for_command_done(
struct iiod_io *io);
161 _Bool iiod_io_command_is_done(
struct iiod_io *io);
165 iiod_io_send_response_code(
struct iiod_io *io, int32_t code)
167 return iiod_io_send_response(io, code, NULL, 0);
171 int iiod_io_get_response_async(
struct iiod_io *io,
172 const struct iiod_buf *buf,
size_t nb);
175 int32_t iiod_io_wait_for_response(
struct iiod_io *io);
177 _Bool iiod_io_has_response(
struct iiod_io *io);
179 void iiod_io_cancel_response(
struct iiod_io *io);