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__
26 #include "JackCompilerDeps.h"
28 /** Parameter types, intentionally similar to jack_driver_param_type_t */
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 */
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
;
81 } /* Adjust editor indent */
84 SERVER_EXPORT jackctl_sigmask_t
*
85 jackctl_setup_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));
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
);
113 jackctl_server_t
* server
,
114 jackctl_driver_t
* driver
);
117 jackctl_server_start(
118 jackctl_server_t
* server
);
122 jackctl_server_t
* server
);
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
);
161 jackctl_parameter_get_id(
162 jackctl_parameter_t
* parameter
);
165 jackctl_parameter_is_set(
166 jackctl_parameter_t
* parameter
);
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
);
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
);
190 jackctl_parameter_has_range_constraint(
191 jackctl_parameter_t
* parameter_ptr
);
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
,
206 SERVER_EXPORT
const char *
207 jackctl_parameter_get_enum_constraint_description(
208 jackctl_parameter_t
* parameter_ptr
,
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
);
218 jackctl_parameter_constraint_is_strict(
219 jackctl_parameter_t
* parameter_ptr
);
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
,
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
);
256 jackctl_server_switch_master(jackctl_server_t
* server
,
257 jackctl_driver_t
* driver
);
260 jackctl_parse_driver_params(jackctl_driver
* driver_ptr
, int argc
, char* argv
[]);
263 { /* Adjust editor indent */