9#ifndef __IIOD_RESPONDER_H__
10#define __IIOD_RESPONDER_H__
15#if (defined(_WIN32) || defined(__MBED__))
16#ifndef _SSIZE_T_DEFINED
17typedef ptrdiff_t ssize_t;
18#define _SSIZE_T_DEFINED
24struct iiod_command_data;
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,
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,
76struct iiod_responder_ops {
77 int (*cmd)(
const struct iiod_command *cmd,
78 struct iiod_command_data *data,
void *d);
79 ssize_t (*read)(
void *d,
const struct iiod_buf *buf,
size_t nb);
80 ssize_t (*write)(
void *d,
const struct iiod_buf *buf,
size_t nb);
81 ssize_t (*discard)(
void *d,
size_t bytes);
85struct iiod_responder *
86iiod_responder_create(
const struct iiod_responder_ops *ops,
void *d);
87void iiod_responder_destroy(
struct iiod_responder *responder);
90void iiod_responder_set_timeout(
struct iiod_responder *priv,
91 unsigned int timeout_ms);
92void iiod_io_set_timeout(
struct iiod_io *io,
unsigned int timeout_ms);
95uint64_t iiod_responder_read_counter_us(
void);
98void iiod_responder_stop(
struct iiod_responder *responder);
101void iiod_responder_wait_done(
struct iiod_responder *responder);
105iiod_responder_create_io(
struct iiod_responder *responder, uint16_t
id);
108iiod_responder_get_default_io(
struct iiod_responder *responder);
113iiod_command_create_io(
const struct iiod_command *cmd,
114 struct iiod_command_data *data);
117iiod_command_get_default_io(
struct iiod_command_data *data);
120void iiod_io_cancel(
struct iiod_io *io);
123void iiod_io_ref(
struct iiod_io *io);
126void iiod_io_unref(
struct iiod_io *io);
129int iiod_command_data_read(
struct iiod_command_data *data,
130 const struct iiod_buf *buf);
133int iiod_io_send_command(
struct iiod_io *io,
134 const struct iiod_command *cmd,
135 const struct iiod_buf *buf,
size_t nb);
136int iiod_io_send_response(
struct iiod_io *io, int32_t code,
137 const struct iiod_buf *buf,
size_t nb);
140int iiod_io_exec_command(
struct iiod_io *io,
141 const struct iiod_command *cmd,
142 const struct iiod_buf *cmd_buf,
143 const struct iiod_buf *buf);
148iiod_io_exec_simple_command(
struct iiod_io *io,
149 const struct iiod_command *cmd)
151 return iiod_io_exec_command(io, cmd, NULL, NULL);
155int iiod_io_send_command_async(
struct iiod_io *io,
156 const struct iiod_command *cmd,
157 const struct iiod_buf *buf,
size_t nb);
158int iiod_io_send_response_async(
struct iiod_io *io, int32_t code,
159 const struct iiod_buf *buf,
size_t nb);
162int iiod_io_wait_for_command_done(
struct iiod_io *io);
164_Bool iiod_io_command_is_done(
struct iiod_io *io);
168iiod_io_send_response_code(
struct iiod_io *io, int32_t code)
170 return iiod_io_send_response(io, code, NULL, 0);
174int iiod_io_get_response_async(
struct iiod_io *io,
175 const struct iiod_buf *buf,
size_t nb);
178int32_t iiod_io_wait_for_response(
struct iiod_io *io);
180_Bool iiod_io_has_response(
struct iiod_io *io);
182void iiod_io_cancel_response(
struct iiod_io *io);