Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
pipe.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 Trackunit Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#include <zephyr/types.h>
8#include <zephyr/kernel.h>
9
10#ifndef ZEPHYR_INCLUDE_MODEM_PIPE_H_
11#define ZEPHYR_INCLUDE_MODEM_PIPE_H_
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
25
33
37 const uint8_t *data;
39 size_t size;
40};
41
45
46struct modem_pipe;
47
51
52typedef void (*modem_pipe_api_callback)(struct modem_pipe *pipe, enum modem_pipe_event event,
53 void *user_data);
54
58
59typedef int (*modem_pipe_api_open)(void *data);
60
61typedef int (*modem_pipe_api_transmit)(void *data, const uint8_t *buf, size_t size);
62
63typedef int (*modem_pipe_api_transmit_chain)(void *data,
64 const struct modem_pipe_data_fragment *frags,
65 size_t num_frags);
66
67typedef int (*modem_pipe_api_receive)(void *data, uint8_t *buf, size_t size);
68
69typedef int (*modem_pipe_api_close)(void *data);
70
71struct modem_pipe_api {
72 modem_pipe_api_open open;
73 /* Only one of 'transmit' and 'transmit_chain' needs to be implemented */
74 modem_pipe_api_transmit transmit;
75 modem_pipe_api_transmit_chain transmit_chain;
76 modem_pipe_api_receive receive;
77 modem_pipe_api_close close;
78};
79
80struct modem_pipe {
81 void *data;
82 const struct modem_pipe_api *api;
84 void *user_data;
85 struct k_spinlock spinlock;
86 struct k_event event;
87};
88
96void modem_pipe_init(struct modem_pipe *pipe, void *data, const struct modem_pipe_api *api);
97
101
115int modem_pipe_open(struct modem_pipe *pipe, k_timeout_t timeout);
116
128int modem_pipe_open_async(struct modem_pipe *pipe);
129
140void modem_pipe_attach(struct modem_pipe *pipe, modem_pipe_api_callback callback, void *user_data);
141
154int modem_pipe_transmit_chain(struct modem_pipe *pipe, const struct modem_pipe_data_fragment *frags,
155 size_t num_frags);
156
169static inline int modem_pipe_transmit(struct modem_pipe *pipe, const uint8_t *buf, size_t size)
170{
171 const struct modem_pipe_data_fragment frag = {
172 .data = buf,
173 .size = size,
174 };
175
176 return modem_pipe_transmit_chain(pipe, &frag, 1);
177}
178
191int modem_pipe_receive(struct modem_pipe *pipe, uint8_t *buf, size_t size);
192
198void modem_pipe_release(struct modem_pipe *pipe);
199
213int modem_pipe_close(struct modem_pipe *pipe, k_timeout_t timeout);
214
226int modem_pipe_close_async(struct modem_pipe *pipe);
227
231
239void modem_pipe_notify_opened(struct modem_pipe *pipe);
240
248void modem_pipe_notify_closed(struct modem_pipe *pipe);
249
257void modem_pipe_notify_receive_ready(struct modem_pipe *pipe);
258
266void modem_pipe_notify_transmit_idle(struct modem_pipe *pipe);
267
271
275
276#ifdef __cplusplus
277}
278#endif
279
280#endif /* ZEPHYR_INCLUDE_MODEM_PIPE_H_ */
int open(const char *name, int flags,...)
int modem_pipe_open_async(struct modem_pipe *pipe)
Open pipe asynchronously.
int modem_pipe_close(struct modem_pipe *pipe, k_timeout_t timeout)
Close pipe.
void modem_pipe_attach(struct modem_pipe *pipe, modem_pipe_api_callback callback, void *user_data)
Attach pipe to callback.
int modem_pipe_open(struct modem_pipe *pipe, k_timeout_t timeout)
Open pipe.
int modem_pipe_close_async(struct modem_pipe *pipe)
Close pipe asynchronously.
int modem_pipe_receive(struct modem_pipe *pipe, uint8_t *buf, size_t size)
Receive data through pipe.
static int modem_pipe_transmit(struct modem_pipe *pipe, const uint8_t *buf, size_t size)
Transmit data through pipe.
Definition pipe.h:169
modem_pipe_event
Modem pipe event.
Definition pipe.h:27
int modem_pipe_transmit_chain(struct modem_pipe *pipe, const struct modem_pipe_data_fragment *frags, size_t num_frags)
Transmit a chain of data buffers through pipe.
void modem_pipe_release(struct modem_pipe *pipe)
Clear callback.
void(* modem_pipe_api_callback)(struct modem_pipe *pipe, enum modem_pipe_event event, void *user_data)
Definition pipe.h:52
@ MODEM_PIPE_EVENT_RECEIVE_READY
Definition pipe.h:29
@ MODEM_PIPE_EVENT_OPENED
Definition pipe.h:28
@ MODEM_PIPE_EVENT_TRANSMIT_IDLE
Definition pipe.h:30
@ MODEM_PIPE_EVENT_CLOSED
Definition pipe.h:31
Public kernel APIs.
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Kernel timeout type.
Definition clock.h:65
Fragment of multi-part data.
Definition pipe.h:35
const uint8_t * data
Data pointer.
Definition pipe.h:37
size_t size
Length of data in data.
Definition pipe.h:39