Zephyr API Documentation  3.5.0
A Scalable Open Source RTOS
3.5.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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_MODEM_PIPE_
11#define ZEPHYR_MODEM_PIPE_
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
29};
30
35struct modem_pipe;
36
41typedef void (*modem_pipe_api_callback)(struct modem_pipe *pipe, enum modem_pipe_event event,
42 void *user_data);
43
48typedef int (*modem_pipe_api_open)(void *data);
49
50typedef int (*modem_pipe_api_transmit)(void *data, const uint8_t *buf, size_t size);
51
52typedef int (*modem_pipe_api_receive)(void *data, uint8_t *buf, size_t size);
53
54typedef int (*modem_pipe_api_close)(void *data);
55
56struct modem_pipe_api {
57 modem_pipe_api_open open;
58 modem_pipe_api_transmit transmit;
59 modem_pipe_api_receive receive;
60 modem_pipe_api_close close;
61};
62
63enum modem_pipe_state {
64 MODEM_PIPE_STATE_CLOSED = 0,
65 MODEM_PIPE_STATE_OPEN,
66};
67
68struct modem_pipe {
69 void *data;
70 struct modem_pipe_api *api;
72 void *user_data;
73 enum modem_pipe_state state;
74 struct k_mutex lock;
75 struct k_condvar condvar;
76 bool receive_ready_pending;
77};
78
86void modem_pipe_init(struct modem_pipe *pipe, void *data, struct modem_pipe_api *api);
87
100int modem_pipe_open(struct modem_pipe *pipe);
101
113int modem_pipe_open_async(struct modem_pipe *pipe);
114
125void modem_pipe_attach(struct modem_pipe *pipe, modem_pipe_api_callback callback, void *user_data);
126
138int modem_pipe_transmit(struct modem_pipe *pipe, const uint8_t *buf, size_t size);
139
153int modem_pipe_receive(struct modem_pipe *pipe, uint8_t *buf, size_t size);
154
160void modem_pipe_release(struct modem_pipe *pipe);
161
170int modem_pipe_close(struct modem_pipe *pipe);
171
183int modem_pipe_close_async(struct modem_pipe *pipe);
184
196void modem_pipe_notify_opened(struct modem_pipe *pipe);
197
205void modem_pipe_notify_closed(struct modem_pipe *pipe);
206
214void modem_pipe_notify_receive_ready(struct modem_pipe *pipe);
215
224#ifdef __cplusplus
225}
226#endif
227
228#endif /* ZEPHYR_MODEM_PIPE_ */
static int close(int sock)
POSIX wrapper for zsock_close.
Definition: socket.h:766
int modem_pipe_open_async(struct modem_pipe *pipe)
Open pipe asynchronously.
int modem_pipe_close(struct modem_pipe *pipe)
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_transmit(struct modem_pipe *pipe, const uint8_t *buf, size_t size)
Transmit data through 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)
Reveive data through pipe.
modem_pipe_event
Modem pipe event.
Definition: pipe.h:25
void modem_pipe_release(struct modem_pipe *pipe)
Clear callback.
int modem_pipe_open(struct modem_pipe *pipe)
Open pipe.
void(* modem_pipe_api_callback)(struct modem_pipe *pipe, enum modem_pipe_event event, void *user_data)
Definition: pipe.h:41
@ MODEM_PIPE_EVENT_RECEIVE_READY
Definition: pipe.h:27
@ MODEM_PIPE_EVENT_OPENED
Definition: pipe.h:26
@ MODEM_PIPE_EVENT_CLOSED
Definition: pipe.h:28
Public kernel APIs.
int open(const char *name, int flags,...)
state
Definition: parser_state.h:29
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
Definition: kernel.h:3023
Mutex Structure.
Definition: kernel.h:2911