Loading...
Searching...
No Matches
pipe.h
Go to the documentation of this file.
1
11#pragma once
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
17#include <furi.h>
18#include <stddef.h>
19
27typedef enum {
28 PipeRoleAlice,
29 PipeRoleBob,
30} PipeRole;
31
45typedef enum {
46 PipeStateOpen,
47 PipeStateBroken,
48} PipeState;
49
50typedef struct PipeSide PipeSide;
51
52typedef struct {
53 PipeSide* alices_side;
54 PipeSide* bobs_side;
56
57typedef struct {
58 size_t capacity;
59 size_t trigger_level;
61
78PipeSideBundle pipe_alloc(size_t capacity, size_t trigger_level);
79
97
109
123
133void pipe_free(PipeSide* pipe);
134
149
160size_t pipe_receive(PipeSide* pipe, void* data, size_t length, FuriWait timeout);
161
172size_t pipe_send(PipeSide* pipe, const void* data, size_t length, FuriWait timeout);
173
180size_t pipe_bytes_available(PipeSide* pipe);
181
189size_t pipe_spaces_available(PipeSide* pipe);
190
198void pipe_attach_to_event_loop(PipeSide* pipe, FuriEventLoop* event_loop);
199
207
214typedef void (*PipeSideDataArrivedCallback)(PipeSide* pipe, void* context);
215
222typedef void (*PipeSideSpaceFreedCallback)(PipeSide* pipe, void* context);
223
231typedef void (*PipeSideBrokenCallback)(PipeSide* pipe, void* context);
232
239void pipe_set_callback_context(PipeSide* pipe, void* context);
240
254 PipeSide* pipe,
256 FuriEventLoopEvent event);
257
271 PipeSide* pipe,
273 FuriEventLoopEvent event);
274
289 PipeSide* pipe,
290 PipeSideBrokenCallback callback,
291 FuriEventLoopEvent event);
292
293#ifdef __cplusplus
294}
295#endif
FuriEventLoopEvent
Enumeration of event types, flags and masks.
Definition event_loop.h:35
void pipe_set_data_arrived_callback(PipeSide *pipe, PipeSideDataArrivedCallback callback, FuriEventLoopEvent event)
Sets the callback for when data arrives.
Definition pipe.c:186
size_t pipe_receive(PipeSide *pipe, void *data, size_t length, FuriWait timeout)
Receives data from the pipe.
Definition pipe.c:121
PipeSideBundle pipe_alloc_ex(PipeSideReceiveSettings alice, PipeSideReceiveSettings bob)
Allocates two connected sides of one pipe.
Definition pipe.c:36
PipeRole
The role of a pipe side.
Definition pipe.h:27
PipeSideBundle pipe_alloc(size_t capacity, size_t trigger_level)
Allocates two connected sides of one pipe.
Definition pipe.c:28
void pipe_attach_to_event_loop(PipeSide *pipe, FuriEventLoop *event_loop)
Attaches a PipeSide to a FuriEventLoop, allowing to attach callbacks to the PipeSide.
Definition pipe.c:162
PipeRole pipe_role(PipeSide *pipe)
Gets the role of a pipe side.
Definition pipe.c:66
PipeState
The state of a pipe.
Definition pipe.h:45
void(* PipeSideBrokenCallback)(PipeSide *pipe, void *context)
Callback for when the opposite PipeSide is freed, making the pipe broken.
Definition pipe.h:231
void pipe_set_space_freed_callback(PipeSide *pipe, PipeSideSpaceFreedCallback callback, FuriEventLoopEvent event)
Sets the callback for when data is read out of the opposite PipeSide.
Definition pipe.c:205
void pipe_install_as_stdio(PipeSide *pipe)
Connects the pipe to the stdin and stdout of the current thread.
Definition pipe.c:115
void(* PipeSideSpaceFreedCallback)(PipeSide *pipe, void *context)
Callback for when data is read out of the opposite PipeSide.
Definition pipe.h:222
size_t pipe_spaces_available(PipeSide *pipe)
Determines how many space there is in the pipe for data to be written into.
Definition pipe.c:136
void pipe_detach_from_event_loop(PipeSide *pipe)
Detaches a PipeSide from the FuriEventLoop that it was previously attached to.
Definition pipe.c:170
PipeState pipe_state(PipeSide *pipe)
Gets the state of a pipe.
Definition pipe.c:71
size_t pipe_bytes_available(PipeSide *pipe)
Determines how many bytes there are in the pipe available to be read.
Definition pipe.c:131
void pipe_set_callback_context(PipeSide *pipe, void *context)
Sets the custom context for all callbacks.
Definition pipe.c:181
void pipe_set_broken_callback(PipeSide *pipe, PipeSideBrokenCallback callback, FuriEventLoopEvent event)
Sets the callback for when the opposite PipeSide is freed, making the pipe broken.
Definition pipe.c:224
size_t pipe_send(PipeSide *pipe, const void *data, size_t length, FuriWait timeout)
Sends data into the pipe.
Definition pipe.c:126
void pipe_free(PipeSide *pipe)
Frees a side of a pipe.
Definition pipe.c:77
void(* PipeSideDataArrivedCallback)(PipeSide *pipe, void *context)
Callback for when data arrives to a PipeSide.
Definition pipe.h:214
Definition event_loop_i.h:78
Definition pipe.h:52
There are two PipeSides per pipe.
Definition pipe.c:15
Definition pipe.h:57