Merge branch 'master' into develop
[jack2.git] / common / JackControlAPI.h
blob6eac65ebf5f2cbfea470a344e98acd755d16cc52
1 /*
2 JACK control API
4 Copyright (C) 2008 Nedko Arnaudov
5 Copyright (C) 2008 Grame
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.
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.
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.
22 #ifndef __JackControlAPI__
23 #define __JackControlAPI__
25 #include "jslist.h"
26 #include "JackCompilerDeps.h"
28 /** Parameter types, intentionally similar to jack_driver_param_type_t */
29 typedef enum
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;
38 /** Driver types, intentionally similar to jack_driver_type_t */
39 typedef enum
41 JackMaster = 1, /**< @brief master driver */
42 JackSlave, /**< @brief slave driver */
43 } jackctl_driver_type_t;
45 /** @brief Max value that jackctl_param_type_t type can have */
46 #define JACK_PARAM_MAX (JackParamBool + 1)
48 /** @brief Max length of string parameter value, excluding terminating nul char */
49 #define JACK_PARAM_STRING_MAX 127
51 /** @brief Type for parameter value */
52 /* intentionally similar to jack_driver_param_value_t */
53 union jackctl_parameter_value
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 */
62 /** opaque type for server object */
63 typedef struct jackctl_server jackctl_server_t;
65 /** opaque type for driver object */
66 typedef struct jackctl_driver jackctl_driver_t;
68 /** opaque type for internal client object */
69 typedef struct jackctl_internal jackctl_internal_t;
71 /** opaque type for parameter object */
72 typedef struct jackctl_parameter jackctl_parameter_t;
74 /** opaque type for sigmask object */
75 typedef struct jackctl_sigmask jackctl_sigmask_t;
77 #ifdef __cplusplus
78 extern "C" {
79 #endif
80 #if 0
81 } /* Adjust editor indent */
82 #endif
84 SERVER_EXPORT jackctl_sigmask_t *
85 jackctl_setup_signals(
86 unsigned int flags);
88 SERVER_EXPORT void
89 jackctl_wait_signals(
90 jackctl_sigmask_t * signals);
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));
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));
103 SERVER_EXPORT void
104 jackctl_server_destroy(
105 jackctl_server_t * server);
107 SERVER_EXPORT const JSList *
108 jackctl_server_get_drivers_list(
109 jackctl_server_t * server);
111 SERVER_EXPORT bool
112 jackctl_server_open(
113 jackctl_server_t * server,
114 jackctl_driver_t * driver);
116 SERVER_EXPORT bool
117 jackctl_server_start(
118 jackctl_server_t * server);
120 SERVER_EXPORT bool
121 jackctl_server_stop(
122 jackctl_server_t * server);
124 SERVER_EXPORT bool
125 jackctl_server_close(
126 jackctl_server_t * server);
128 SERVER_EXPORT const JSList *
129 jackctl_server_get_parameters(
130 jackctl_server_t * server);
132 SERVER_EXPORT const char *
133 jackctl_driver_get_name(
134 jackctl_driver_t * driver);
136 SERVER_EXPORT jackctl_driver_type_t
137 jackctl_driver_get_type(
138 jackctl_driver_t * driver);
140 SERVER_EXPORT const JSList *
141 jackctl_driver_get_parameters(
142 jackctl_driver_t * driver);
144 SERVER_EXPORT const char *
145 jackctl_parameter_get_name(
146 jackctl_parameter_t * parameter);
148 SERVER_EXPORT const char *
149 jackctl_parameter_get_short_description(
150 jackctl_parameter_t * parameter);
152 SERVER_EXPORT const char *
153 jackctl_parameter_get_long_description(
154 jackctl_parameter_t * parameter);
156 SERVER_EXPORT jackctl_param_type_t
157 jackctl_parameter_get_type(
158 jackctl_parameter_t * parameter);
160 SERVER_EXPORT char
161 jackctl_parameter_get_id(
162 jackctl_parameter_t * parameter);
164 SERVER_EXPORT bool
165 jackctl_parameter_is_set(
166 jackctl_parameter_t * parameter);
168 SERVER_EXPORT bool
169 jackctl_parameter_reset(
170 jackctl_parameter_t * parameter);
172 SERVER_EXPORT union jackctl_parameter_value
173 jackctl_parameter_get_value(
174 jackctl_parameter_t * parameter);
176 SERVER_EXPORT bool
177 jackctl_parameter_set_value(
178 jackctl_parameter_t * parameter,
179 const union jackctl_parameter_value * value_ptr);
181 SERVER_EXPORT union jackctl_parameter_value
182 jackctl_parameter_get_default_value(
183 jackctl_parameter_t * parameter);
185 SERVER_EXPORT union jackctl_parameter_value
186 jackctl_parameter_get_default_value(
187 jackctl_parameter *parameter_ptr);
189 SERVER_EXPORT bool
190 jackctl_parameter_has_range_constraint(
191 jackctl_parameter_t * parameter_ptr);
193 SERVER_EXPORT bool
194 jackctl_parameter_has_enum_constraint(
195 jackctl_parameter_t * parameter_ptr);
197 SERVER_EXPORT uint32_t
198 jackctl_parameter_get_enum_constraints_count(
199 jackctl_parameter_t * parameter_ptr);
201 SERVER_EXPORT union jackctl_parameter_value
202 jackctl_parameter_get_enum_constraint_value(
203 jackctl_parameter_t * parameter_ptr,
204 uint32_t index);
206 SERVER_EXPORT const char *
207 jackctl_parameter_get_enum_constraint_description(
208 jackctl_parameter_t * parameter_ptr,
209 uint32_t index);
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);
217 SERVER_EXPORT bool
218 jackctl_parameter_constraint_is_strict(
219 jackctl_parameter_t * parameter_ptr);
221 SERVER_EXPORT bool
222 jackctl_parameter_constraint_is_fake_value(
223 jackctl_parameter_t * parameter_ptr);
225 SERVER_EXPORT const JSList *
226 jackctl_server_get_internals_list(
227 jackctl_server *server_ptr);
229 SERVER_EXPORT const char *
230 jackctl_internal_get_name(
231 jackctl_internal *internal_ptr);
233 SERVER_EXPORT const JSList *
234 jackctl_internal_get_parameters(
235 jackctl_internal *internal_ptr);
237 SERVER_EXPORT bool jackctl_server_load_internal(
238 jackctl_server * server,
239 jackctl_internal * internal);
241 SERVER_EXPORT bool jackctl_server_unload_internal(
242 jackctl_server * server,
243 jackctl_internal * internal);
245 SERVER_EXPORT bool jackctl_server_load_session_file(
246 jackctl_server * server_ptr,
247 const char * file);
249 SERVER_EXPORT bool jackctl_server_add_slave(jackctl_server_t * server,
250 jackctl_driver_t * driver);
252 SERVER_EXPORT bool jackctl_server_remove_slave(jackctl_server_t * server,
253 jackctl_driver_t * driver);
255 SERVER_EXPORT bool
256 jackctl_server_switch_master(jackctl_server_t * server,
257 jackctl_driver_t * driver);
259 SERVER_EXPORT int
260 jackctl_parse_driver_params(jackctl_driver * driver_ptr, int argc, char* argv[]);
262 #if 0
263 { /* Adjust editor indent */
264 #endif
265 #ifdef __cplusplus
266 } /* extern "C" */
267 #endif
269 #endif