1 /* -*- Mode: C ; c-basic-offset: 4 -*- */
3 Copyright (C) 2007,2008 Nedko Arnaudov
4 Copyright (C) 2007-2008 Juuso Alasuutari
5 Copyright (C) 2008 Marc-Olivier Barre
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; either 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 DBUS_H__3DB2458F_44B2_43EA_882A_9F888DF71A88__INCLUDED
23 #define DBUS_H__3DB2458F_44B2_43EA_882A_9F888DF71A88__INCLUDED
27 #define JACK_DBUS_DEBUG
29 //#define DISABLE_SIGNAL_MAGIC
31 #define DEFAULT_XDG_CONFIG "/.config"
32 #define DEFAULT_XDG_LOG "/.log"
33 #define JACKDBUS_DIR "/jack"
34 #define JACKDBUS_LOG "/jackdbus.log"
35 #define JACKDBUS_CONF "/conf.xml"
37 extern char *g_jackdbus_config_dir
;
38 extern size_t g_jackdbus_config_dir_len
; /* without terminating '\0' char */
39 extern int g_exit_command
;
42 jack_controller_settings_init();
45 jack_controller_settings_uninit();
47 #define JACK_DBUS_ERROR_UNKNOWN_METHOD "org.jackaudio.Error.UnknownMethod"
48 #define JACK_DBUS_ERROR_SERVER_NOT_RUNNING "org.jackaudio.Error.ServerNotRunning"
49 #define JACK_DBUS_ERROR_UNKNOWN_DRIVER "org.jackaudio.Error.UnknownDriver"
50 #define JACK_DBUS_ERROR_UNKNOWN_INTERNAL "org.jackaudio.Error.UnknownInternal"
51 #define JACK_DBUS_ERROR_UNKNOWN_PARAMETER "org.jackaudio.Error.UnknownParameter"
52 #define JACK_DBUS_ERROR_INVALID_ARGS "org.jackaudio.Error.InvalidArgs"
53 #define JACK_DBUS_ERROR_GENERIC "org.jackaudio.Error.Generic"
54 #define JACK_DBUS_ERROR_FATAL "org.jackaudio.Error.Fatal"
56 struct jack_dbus_method_call
59 DBusConnection
*connection
;
60 const char *method_name
;
65 struct jack_dbus_interface_method_argument_descriptor
69 bool direction_out
; /* true - out, false - in */
72 struct jack_dbus_interface_method_descriptor
75 const struct jack_dbus_interface_method_argument_descriptor
* arguments
;
76 void (* handler
)(struct jack_dbus_method_call
* call
);
79 struct jack_dbus_interface_signal_argument_descriptor
85 struct jack_dbus_interface_signal_descriptor
88 const struct jack_dbus_interface_signal_argument_descriptor
* arguments
;
91 struct jack_dbus_interface_descriptor
97 struct jack_dbus_method_call
* call
,
98 const struct jack_dbus_interface_method_descriptor
* methods
);
100 const struct jack_dbus_interface_method_descriptor
* methods
;
101 const struct jack_dbus_interface_signal_descriptor
* signals
;
104 struct jack_dbus_object_descriptor
106 struct jack_dbus_interface_descriptor
** interfaces
;
115 dbus_uint16_t uint16
;
117 dbus_uint32_t uint32
;
119 dbus_uint64_t uint64
;
124 #define JACK_DBUS_METHOD_ARGUMENTS_BEGIN(method_name) \
126 struct jack_dbus_interface_method_argument_descriptor method_name ## _arguments[] = \
129 #define JACK_DBUS_METHOD_ARGUMENTS_BEGIN_EX(method_name, descr) \
131 struct jack_dbus_interface_method_argument_descriptor method_name ## _arguments[] = \
134 #define JACK_DBUS_METHOD_ARGUMENT(argument_name, argument_type, argument_direction_out) \
136 .name = argument_name, \
137 .type = argument_type, \
138 .direction_out = argument_direction_out \
141 #define JACK_DBUS_METHOD_ARGUMENT_IN(argument_name, argument_type, descr) \
143 .name = argument_name, \
144 .type = argument_type, \
145 .direction_out = false \
148 #define JACK_DBUS_METHOD_ARGUMENT_OUT(argument_name, argument_type, descr) \
150 .name = argument_name, \
151 .type = argument_type, \
152 .direction_out = true \
155 #define JACK_DBUS_METHOD_ARGUMENT(argument_name, argument_type, argument_direction_out) \
157 .name = argument_name, \
158 .type = argument_type, \
159 .direction_out = argument_direction_out \
162 #define JACK_DBUS_METHOD_ARGUMENTS_END \
163 JACK_DBUS_METHOD_ARGUMENT(NULL, NULL, false) \
166 #define JACK_DBUS_METHODS_BEGIN \
168 struct jack_dbus_interface_method_descriptor methods_dtor[] = \
171 #define JACK_DBUS_METHOD_DESCRIBE(method_name, handler_name) \
173 .name = # method_name, \
174 .arguments = method_name ## _arguments, \
175 .handler = handler_name \
178 #define JACK_DBUS_METHODS_END \
186 #define JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(signal_name) \
188 struct jack_dbus_interface_signal_argument_descriptor signal_name ## _arguments[] = \
191 #define JACK_DBUS_SIGNAL_ARGUMENT(argument_name, argument_type) \
193 .name = argument_name, \
194 .type = argument_type \
197 #define JACK_DBUS_SIGNAL_ARGUMENTS_END \
198 JACK_DBUS_SIGNAL_ARGUMENT(NULL, NULL) \
201 #define JACK_DBUS_SIGNALS_BEGIN \
203 struct jack_dbus_interface_signal_descriptor signals_dtor[] = \
206 #define JACK_DBUS_SIGNAL_DESCRIBE(signal_name) \
208 .name = # signal_name, \
209 .arguments = signal_name ## _arguments \
212 #define JACK_DBUS_SIGNALS_END \
219 #define JACK_DBUS_IFACE_BEGIN(iface_var, iface_name) \
220 struct jack_dbus_interface_descriptor iface_var = \
222 .name = iface_name, \
223 .handler = jack_dbus_run_method,
225 #define JACK_DBUS_IFACE_HANDLER(handler_func) \
226 .handler = handler_func,
228 #define JACK_DBUS_IFACE_EXPOSE_METHODS \
229 .methods = methods_dtor,
231 #define JACK_DBUS_IFACE_EXPOSE_SIGNALS \
232 .signals = signals_dtor,
234 #define JACK_DBUS_IFACE_END \
238 jack_dbus_message_handler(
239 DBusConnection
*connection
,
240 DBusMessage
*message
,
244 jack_dbus_message_handler_unregister(
245 DBusConnection
*connection
,
249 jack_dbus_run_method(
250 struct jack_dbus_method_call
* call
,
251 const struct jack_dbus_interface_method_descriptor
* methods
);
255 void *dbus_call_context_ptr
,
256 const char *error_name
,
261 jack_dbus_get_method_args(
262 struct jack_dbus_method_call
*call
,
267 jack_dbus_get_method_args_string_and_variant(
268 struct jack_dbus_method_call
*call
,
274 jack_dbus_get_method_args_two_strings_and_variant(
275 struct jack_dbus_method_call
*call
,
282 jack_dbus_message_append_variant(
283 DBusMessageIter
*iter
,
285 const char *signature
,
289 jack_dbus_construct_method_return_empty(
290 struct jack_dbus_method_call
* call
);
293 jack_dbus_construct_method_return_single(
294 struct jack_dbus_method_call
*call
,
299 jack_dbus_construct_method_return_array_of_strings(
300 struct jack_dbus_method_call
*call
,
301 unsigned int num_members
,
305 jack_dbus_send_signal(
306 const char *sender_object_path
,
308 const char *signal_name
,
312 #define JACK_CONTROLLER_OBJECT_PATH "/org/jackaudio/Controller"
314 extern struct jack_dbus_interface_descriptor
* g_jackcontroller_interfaces
[];
315 extern DBusConnection
* g_connection
;
317 #endif /* #ifndef DBUS_H__3DB2458F_44B2_43EA_882A_9F888DF71A88__INCLUDED */