Merge branch 'master' into port_register_notification_defer
[jack2.git] / dbus / jackdbus.h
blobd920cf066554e174d90d21c6411091486fe44081
1 /* -*- Mode: C ; c-basic-offset: 4 -*- */
2 /*
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
25 #include <stdbool.h>
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;
41 bool
42 jack_controller_settings_init();
44 void
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
58 void *context;
59 DBusConnection *connection;
60 const char *method_name;
61 DBusMessage *message;
62 DBusMessage *reply;
65 struct jack_dbus_interface_method_argument_descriptor
67 const char * name;
68 const char * type;
69 bool direction_out; /* true - out, false - in */
72 struct jack_dbus_interface_method_descriptor
74 const char * name;
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
81 const char * name;
82 const char * type;
85 struct jack_dbus_interface_signal_descriptor
87 const char * name;
88 const struct jack_dbus_interface_signal_argument_descriptor * arguments;
91 struct jack_dbus_interface_descriptor
93 const char * name;
95 bool
96 (* handler)(
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;
107 void * context;
110 typedef union
112 unsigned char byte;
113 dbus_bool_t boolean;
114 dbus_int16_t int16;
115 dbus_uint16_t uint16;
116 dbus_int32_t int32;
117 dbus_uint32_t uint32;
118 dbus_int64_t int64;
119 dbus_uint64_t uint64;
120 double doubl;
121 const char *string;
122 } message_arg_t;
124 #define JACK_DBUS_METHOD_ARGUMENTS_BEGIN(method_name) \
125 static const \
126 struct jack_dbus_interface_method_argument_descriptor method_name ## _arguments[] = \
129 #define JACK_DBUS_METHOD_ARGUMENTS_BEGIN_EX(method_name, descr) \
130 static const \
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 \
167 static const \
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 \
180 .name = NULL, \
181 .arguments = NULL, \
182 .handler = NULL \
186 #define JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(signal_name) \
187 static const \
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 \
202 static const \
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 \
214 .name = NULL, \
215 .arguments = NULL, \
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 \
237 DBusHandlerResult
238 jack_dbus_message_handler(
239 DBusConnection *connection,
240 DBusMessage *message,
241 void *data);
243 void
244 jack_dbus_message_handler_unregister(
245 DBusConnection *connection,
246 void *data);
248 bool
249 jack_dbus_run_method(
250 struct jack_dbus_method_call * call,
251 const struct jack_dbus_interface_method_descriptor * methods);
253 void
254 jack_dbus_error(
255 void *dbus_call_context_ptr,
256 const char *error_name,
257 const char *format,
258 ...);
260 void
261 jack_dbus_only_error(
262 void *dbus_call_context_ptr,
263 const char *error_name,
264 const char *format,
265 ...);
267 bool
268 jack_dbus_get_method_args(
269 struct jack_dbus_method_call *call,
270 int type,
271 ...);
273 bool
274 jack_dbus_get_method_args_string_and_variant(
275 struct jack_dbus_method_call *call,
276 const char **arg1,
277 message_arg_t *arg2,
278 int *type_ptr);
280 bool
281 jack_dbus_get_method_args_two_strings_and_variant(
282 struct jack_dbus_method_call *call,
283 const char **arg1,
284 const char **arg2,
285 message_arg_t *arg3,
286 int *type_ptr);
288 bool
289 jack_dbus_message_append_variant(
290 DBusMessageIter *iter,
291 int type,
292 const char *signature,
293 message_arg_t *arg);
295 void
296 jack_dbus_construct_method_return_empty(
297 struct jack_dbus_method_call * call);
299 void
300 jack_dbus_construct_method_return_single(
301 struct jack_dbus_method_call *call,
302 int type,
303 message_arg_t arg);
305 void
306 jack_dbus_construct_method_return_array_of_strings(
307 struct jack_dbus_method_call *call,
308 unsigned int num_members,
309 const char **array);
311 void
312 jack_dbus_send_signal(
313 const char *sender_object_path,
314 const char *iface,
315 const char *signal_name,
316 int first_arg_type,
317 ...);
319 #define JACK_CONTROLLER_OBJECT_PATH "/org/jackaudio/Controller"
321 extern struct jack_dbus_interface_descriptor * g_jackcontroller_interfaces[];
322 extern DBusConnection * g_connection;
324 #endif /* #ifndef DBUS_H__3DB2458F_44B2_43EA_882A_9F888DF71A88__INCLUDED */