1 /*
2   JACK control API
3 
4   Copyright (C) 2008 Nedko Arnaudov
5   Copyright (C) 2008 Grame
6 
7   This program is free software; you can redistribute it and/or modify
8   it under the terms of the GNU General Public License as published by
9   the Free Software Foundation; version 2 of the License.
10 
11   This program is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15 
16   You should have received a copy of the GNU General Public License
17   along with this program; if not, write to the Free Software
18   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 
20 */
21 
22 #ifndef __JackControlAPI__
23 #define __JackControlAPI__
24 
25 #include "jslist.h"
26 #include "JackCompilerDeps.h"
27 
28 /** Parameter types, intentionally similar to jack_driver_param_type_t */
29 typedef enum
30 {
31     JackParamInt = 1,			/**< @brief value type is a signed integer */
32     JackParamUInt,				/**< @brief value type is an unsigned integer */
33     JackParamChar,				/**< @brief value type is a char */
34     JackParamString,			/**< @brief value type is a string with max size of ::JACK_PARAM_STRING_MAX+1 chars */
35     JackParamBool,				/**< @brief value type is a boolean */
36 } jackctl_param_type_t;
37 
38 /** Driver types, intentionally similar to jack_driver_type_t */
39 typedef enum
40 {
41     JackMaster = 1,         /**< @brief master driver */
42     JackSlave,              /**< @brief slave driver */
43 } jackctl_driver_type_t;
44 
45 /** @brief Max value that jackctl_param_type_t type can have */
46 #define JACK_PARAM_MAX (JackParamBool + 1)
47 
48 /** @brief Max length of string parameter value, excluding terminating nul char */
49 #define JACK_PARAM_STRING_MAX  127
50 
51 /** @brief Type for parameter value */
52 /* intentionally similar to jack_driver_param_value_t */
53 union jackctl_parameter_value
54 {
55     uint32_t ui;				/**< @brief member used for ::JackParamUInt */
56     int32_t i;					/**< @brief member used for ::JackParamInt */
57     char c;						/**< @brief member used for ::JackParamChar */
58     char str[JACK_PARAM_STRING_MAX + 1]; /**< @brief member used for ::JackParamString */
59     bool b;				/**< @brief member used for ::JackParamBool */
60 };
61 
62 /** opaque type for server object */
63 typedef struct jackctl_server jackctl_server_t;
64 
65 /** opaque type for driver object */
66 typedef struct jackctl_driver jackctl_driver_t;
67 
68 /** opaque type for internal client object */
69 typedef struct jackctl_internal jackctl_internal_t;
70 
71 /** opaque type for parameter object */
72 typedef struct jackctl_parameter jackctl_parameter_t;
73 
74 /** opaque type for sigmask object */
75 typedef struct jackctl_sigmask jackctl_sigmask_t;
76 
77 #ifdef __cplusplus
78 extern "C" {
79 #endif
80 #if 0
81 } /* Adjust editor indent */
82 #endif
83 
84 SERVER_EXPORT jackctl_sigmask_t *
85 jackctl_setup_signals(
86     unsigned int flags);
87 
88 SERVER_EXPORT void
89 jackctl_wait_signals(
90     jackctl_sigmask_t * signals);
91 
92 SERVER_EXPORT jackctl_server_t *
93 jackctl_server_create(
94     bool (* on_device_acquire)(const char * device_name),
95     void (* on_device_release)(const char * device_name));
96 
97 SERVER_EXPORT jackctl_server_t *
98 jackctl_server_create2(
99     bool (* on_device_acquire)(const char * device_name),
100     void (* on_device_release)(const char * device_name),
101     void (* on_device_reservation_loop)(void));
102 
103 SERVER_EXPORT void
104 jackctl_server_destroy(
105 	jackctl_server_t * server);
106 
107 SERVER_EXPORT const JSList *
108 jackctl_server_get_drivers_list(
109 	jackctl_server_t * server);
110 
111 SERVER_EXPORT bool
112 jackctl_server_open(
113     jackctl_server_t * server,
114     jackctl_driver_t * driver);
115 
116 SERVER_EXPORT bool
117 jackctl_server_start(
118     jackctl_server_t * server);
119 
120 SERVER_EXPORT bool
121 jackctl_server_stop(
122     jackctl_server_t * server);
123 
124 SERVER_EXPORT bool
125 jackctl_server_close(
126     jackctl_server_t * server);
127 
128 SERVER_EXPORT const JSList *
129 jackctl_server_get_parameters(
130 	jackctl_server_t * server);
131 
132 SERVER_EXPORT const char *
133 jackctl_driver_get_name(
134 	jackctl_driver_t * driver);
135 
136 SERVER_EXPORT jackctl_driver_type_t
137 jackctl_driver_get_type(
138 	jackctl_driver_t * driver);
139 
140 SERVER_EXPORT const JSList *
141 jackctl_driver_get_parameters(
142 	jackctl_driver_t * driver);
143 
144 SERVER_EXPORT const char *
145 jackctl_parameter_get_name(
146 	jackctl_parameter_t * parameter);
147 
148 SERVER_EXPORT const char *
149 jackctl_parameter_get_short_description(
150 	jackctl_parameter_t * parameter);
151 
152 SERVER_EXPORT const char *
153 jackctl_parameter_get_long_description(
154 	jackctl_parameter_t * parameter);
155 
156 SERVER_EXPORT jackctl_param_type_t
157 jackctl_parameter_get_type(
158 	jackctl_parameter_t * parameter);
159 
160 SERVER_EXPORT char
161 jackctl_parameter_get_id(
162 	jackctl_parameter_t * parameter);
163 
164 SERVER_EXPORT bool
165 jackctl_parameter_is_set(
166 	jackctl_parameter_t * parameter);
167 
168 SERVER_EXPORT bool
169 jackctl_parameter_reset(
170 	jackctl_parameter_t * parameter);
171 
172 SERVER_EXPORT union jackctl_parameter_value
173 jackctl_parameter_get_value(
174 	jackctl_parameter_t * parameter);
175 
176 SERVER_EXPORT bool
177 jackctl_parameter_set_value(
178 	jackctl_parameter_t * parameter,
179 	const union jackctl_parameter_value * value_ptr);
180 
181 SERVER_EXPORT union jackctl_parameter_value
182 jackctl_parameter_get_default_value(
183 	jackctl_parameter_t * parameter);
184 
185 SERVER_EXPORT union jackctl_parameter_value
186 jackctl_parameter_get_default_value(
187     jackctl_parameter *parameter_ptr);
188 
189 SERVER_EXPORT bool
190 jackctl_parameter_has_range_constraint(
191 	jackctl_parameter_t * parameter_ptr);
192 
193 SERVER_EXPORT bool
194 jackctl_parameter_has_enum_constraint(
195 	jackctl_parameter_t * parameter_ptr);
196 
197 SERVER_EXPORT uint32_t
198 jackctl_parameter_get_enum_constraints_count(
199 	jackctl_parameter_t * parameter_ptr);
200 
201 SERVER_EXPORT union jackctl_parameter_value
202 jackctl_parameter_get_enum_constraint_value(
203 	jackctl_parameter_t * parameter_ptr,
204 	uint32_t index);
205 
206 SERVER_EXPORT const char *
207 jackctl_parameter_get_enum_constraint_description(
208 	jackctl_parameter_t * parameter_ptr,
209 	uint32_t index);
210 
211 SERVER_EXPORT void
212 jackctl_parameter_get_range_constraint(
213 	jackctl_parameter_t * parameter_ptr,
214 	union jackctl_parameter_value * min_ptr,
215 	union jackctl_parameter_value * max_ptr);
216 
217 SERVER_EXPORT bool
218 jackctl_parameter_constraint_is_strict(
219 	jackctl_parameter_t * parameter_ptr);
220 
221 SERVER_EXPORT bool
222 jackctl_parameter_constraint_is_fake_value(
223 	jackctl_parameter_t * parameter_ptr);
224 
225 SERVER_EXPORT const JSList *
226 jackctl_server_get_internals_list(
227     jackctl_server *server_ptr);
228 
229 SERVER_EXPORT const char *
230 jackctl_internal_get_name(
231     jackctl_internal *internal_ptr);
232 
233 SERVER_EXPORT const JSList *
234 jackctl_internal_get_parameters(
235     jackctl_internal *internal_ptr);
236 
237 SERVER_EXPORT bool jackctl_server_load_internal(
238     jackctl_server * server,
239     jackctl_internal * internal);
240 
241 SERVER_EXPORT bool jackctl_server_unload_internal(
242     jackctl_server * server,
243     jackctl_internal * internal);
244 
245 SERVER_EXPORT bool jackctl_server_load_session_file(
246     jackctl_server * server_ptr,
247     const char * file);
248 
249 SERVER_EXPORT bool jackctl_server_add_slave(jackctl_server_t * server,
250                             jackctl_driver_t * driver);
251 
252 SERVER_EXPORT bool jackctl_server_remove_slave(jackctl_server_t * server,
253                             jackctl_driver_t * driver);
254 
255 SERVER_EXPORT bool
256 jackctl_server_switch_master(jackctl_server_t * server,
257                             jackctl_driver_t * driver);
258 
259 SERVER_EXPORT int
260 jackctl_parse_driver_params(jackctl_driver * driver_ptr, int argc, char* argv[]);
261 
262 #if 0
263 { /* Adjust editor indent */
264 #endif
265 #ifdef __cplusplus
266 } /* extern "C" */
267 #endif
268 
269 #endif
270 
271