PipeWire
0.3.34
system.h
Go to the documentation of this file.
1
/* Simple Plugin API
2
*
3
* Copyright © 2019 Wim Taymans
4
*
5
* Permission is hereby granted, free of charge, to any person obtaining a
6
* copy of this software and associated documentation files (the "Software"),
7
* to deal in the Software without restriction, including without limitation
8
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
9
* and/or sell copies of the Software, and to permit persons to whom the
10
* Software is furnished to do so, subject to the following conditions:
11
*
12
* The above copyright notice and this permission notice (including the next
13
* paragraph) shall be included in all copies or substantial portions of the
14
* Software.
15
*
16
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22
* DEALINGS IN THE SOFTWARE.
23
*/
24
25
#ifndef SPA_SYSTEM_H
26
#define SPA_SYSTEM_H
27
28
#ifdef __cplusplus
29
extern
"C"
{
30
#endif
31
32
struct
itimerspec;
33
34
#include <time.h>
35
#include <sys/types.h>
36
37
#include <
spa/utils/defs.h
>
38
#include <
spa/utils/hook.h
>
39
48
#define SPA_TYPE_INTERFACE_System SPA_TYPE_INFO_INTERFACE_BASE "System"
49
#define SPA_TYPE_INTERFACE_DataSystem SPA_TYPE_INFO_INTERFACE_BASE "DataSystem"
50
51
#define SPA_VERSION_SYSTEM 0
52
struct
spa_system
{
struct
spa_interface
iface; };
53
54
/* IO events */
55
#define SPA_IO_IN (1 << 0)
56
#define SPA_IO_OUT (1 << 2)
57
#define SPA_IO_ERR (1 << 3)
58
#define SPA_IO_HUP (1 << 4)
59
60
/* flags */
61
#define SPA_FD_CLOEXEC (1<<0)
62
#define SPA_FD_NONBLOCK (1<<1)
63
#define SPA_FD_EVENT_SEMAPHORE (1<<2)
64
#define SPA_FD_TIMER_ABSTIME (1<<3)
65
#define SPA_FD_TIMER_CANCEL_ON_SET (1<<4)
66
67
struct
spa_poll_event
{
68
uint32_t
events
;
69
void
*
data
;
70
};
71
72
struct
spa_system_methods
{
73
#define SPA_VERSION_SYSTEM_METHODS 0
74
uint32_t
version
;
75
76
/* read/write/ioctl */
77
ssize_t (*read) (
void
*object,
int
fd,
void
*buf,
size_t
count);
78
ssize_t (*write) (
void
*object,
int
fd,
const
void
*buf,
size_t
count);
79
int (*ioctl) (
void
*object,
int
fd,
unsigned
long
request, ...);
80
int (*close) (
void
*object,
int
fd);
81
82
/* clock */
83
int (*clock_gettime) (
void
*object,
84
int
clockid,
struct
timespec *value);
85
int (*clock_getres) (
void
*object,
86
int
clockid,
struct
timespec *res);
87
88
/* poll */
89
int (*pollfd_create) (
void
*object,
int
flags);
90
int (*pollfd_add) (
void
*object,
int
pfd,
int
fd, uint32_t events,
void
*
data
);
91
int (*pollfd_mod) (
void
*object,
int
pfd,
int
fd, uint32_t events,
void
*
data
);
92
int (*pollfd_del) (
void
*object,
int
pfd,
int
fd);
93
int (*pollfd_wait) (
void
*object,
int
pfd,
94
struct
spa_poll_event
*ev,
int
n_ev,
int
timeout);
95
96
/* timers */
97
int (*timerfd_create) (
void
*object,
int
clockid,
int
flags);
98
int (*timerfd_settime) (
void
*object,
99
int
fd,
int
flags,
100
const
struct
itimerspec *new_value,
101
struct
itimerspec *old_value);
102
int (*timerfd_gettime) (
void
*object,
103
int
fd,
struct
itimerspec *curr_value);
104
int (*timerfd_read) (
void
*object,
int
fd, uint64_t *expirations);
105
106
/* events */
107
int (*eventfd_create) (
void
*object,
int
flags);
108
int (*eventfd_write) (
void
*object,
int
fd, uint64_t count);
109
int (*eventfd_read) (
void
*object,
int
fd, uint64_t *count);
110
111
/* signals */
112
int (*signalfd_create) (
void
*object,
int
signal,
int
flags);
113
int (*signalfd_read) (
void
*object,
int
fd,
int
*signal);
114
};
115
116
#define spa_system_method_r(o,method,version,...) \
117
({ \
118
int _res = -ENOTSUP; \
119
struct spa_system *_o = o; \
120
spa_interface_call_res(&_o->iface, \
121
struct spa_system_methods, _res, \
122
method, version, ##__VA_ARGS__); \
123
_res; \
124
})
125
126
127
#define spa_system_read(s,...) spa_system_method_r(s,read,0,__VA_ARGS__)
128
#define spa_system_write(s,...) spa_system_method_r(s,write,0,__VA_ARGS__)
129
#define spa_system_ioctl(s,...) spa_system_method_r(s,ioctl,0,__VA_ARGS__)
130
#define spa_system_close(s,...) spa_system_method_r(s,close,0,__VA_ARGS__)
131
132
#define spa_system_clock_gettime(s,...) spa_system_method_r(s,clock_gettime,0,__VA_ARGS__)
133
#define spa_system_clock_getres(s,...) spa_system_method_r(s,clock_getres,0,__VA_ARGS__)
134
135
#define spa_system_pollfd_create(s,...) spa_system_method_r(s,pollfd_create,0,__VA_ARGS__)
136
#define spa_system_pollfd_add(s,...) spa_system_method_r(s,pollfd_add,0,__VA_ARGS__)
137
#define spa_system_pollfd_mod(s,...) spa_system_method_r(s,pollfd_mod,0,__VA_ARGS__)
138
#define spa_system_pollfd_del(s,...) spa_system_method_r(s,pollfd_del,0,__VA_ARGS__)
139
#define spa_system_pollfd_wait(s,...) spa_system_method_r(s,pollfd_wait,0,__VA_ARGS__)
140
141
#define spa_system_timerfd_create(s,...) spa_system_method_r(s,timerfd_create,0,__VA_ARGS__)
142
#define spa_system_timerfd_settime(s,...) spa_system_method_r(s,timerfd_settime,0,__VA_ARGS__)
143
#define spa_system_timerfd_gettime(s,...) spa_system_method_r(s,timerfd_gettime,0,__VA_ARGS__)
144
#define spa_system_timerfd_read(s,...) spa_system_method_r(s,timerfd_read,0,__VA_ARGS__)
145
146
#define spa_system_eventfd_create(s,...) spa_system_method_r(s,eventfd_create,0,__VA_ARGS__)
147
#define spa_system_eventfd_write(s,...) spa_system_method_r(s,eventfd_write,0,__VA_ARGS__)
148
#define spa_system_eventfd_read(s,...) spa_system_method_r(s,eventfd_read,0,__VA_ARGS__)
149
150
#define spa_system_signalfd_create(s,...) spa_system_method_r(s,signalfd_create,0,__VA_ARGS__)
151
#define spa_system_signalfd_read(s,...) spa_system_method_r(s,signalfd_read,0,__VA_ARGS__)
152
157
#ifdef __cplusplus
158
}
/* extern "C" */
159
#endif
160
161
#endif
/* SPA_SYSTEM_H */
defs.h
spa_poll_event
Definition:
system.h:67
hook.h
spa_poll_event::events
uint32_t events
Definition:
system.h:68
spa_system_methods::version
uint32_t version
Definition:
system.h:74
spa_system_methods
Definition:
system.h:72
spa_interface
Definition:
hook.h:146
spa_poll_event::data
void * data
Definition:
system.h:69
data
user data to add to an object
Definition:
filter.c:75
spa_system
Definition:
system.h:52
doc
spa
support
system.h
Generated by
1.8.13