jack2 codebase
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

284 lines
10KB

  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
  6. This program is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2 of the License.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program; if not, write to the Free Software
  15. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16. */
  17. #ifndef DBUS_H__3DB2458F_44B2_43EA_882A_9F888DF71A88__INCLUDED
  18. #define DBUS_H__3DB2458F_44B2_43EA_882A_9F888DF71A88__INCLUDED
  19. #include <stdbool.h>
  20. #define JACK_DBUS_DEBUG
  21. //#define DISABLE_SIGNAL_MAGIC
  22. #define DEFAULT_XDG_CONFIG "/.config"
  23. #define DEFAULT_XDG_LOG "/.log"
  24. #define JACKDBUS_DIR "/jack"
  25. #define JACKDBUS_LOG "/jackdbus.log"
  26. #define JACKDBUS_CONF "/conf.xml"
  27. extern char *g_jackdbus_config_dir;
  28. extern size_t g_jackdbus_config_dir_len; /* without terminating '\0' char */
  29. extern int g_exit_command;
  30. bool
  31. jack_controller_settings_init();
  32. void
  33. jack_controller_settings_uninit();
  34. #define JACK_DBUS_ERROR_UNKNOWN_METHOD "org.jackaudio.Error.UnknownMethod"
  35. #define JACK_DBUS_ERROR_SERVER_NOT_RUNNING "org.jackaudio.Error.ServerNotRunning"
  36. #define JACK_DBUS_ERROR_UNKNOWN_DRIVER "org.jackaudio.Error.UnknownDriver"
  37. #define JACK_DBUS_ERROR_NEED_DRIVER "org.jackaudio.Error.NeedDriver"
  38. #define JACK_DBUS_ERROR_UNKNOWN_DRIVER_PARAMETER "org.jackaudio.Error.UnknownDriverParameter"
  39. #define JACK_DBUS_ERROR_UNKNOWN_ENGINE_PARAMETER "org.jackaudio.Error.UnknownEngineParameter"
  40. #define JACK_DBUS_ERROR_INVALID_ARGS "org.jackaudio.Error.InvalidArgs"
  41. #define JACK_DBUS_ERROR_GENERIC "org.jackaudio.Error.Generic"
  42. #define JACK_DBUS_ERROR_FATAL "org.jackaudio.Error.Fatal"
  43. struct jack_dbus_method_call
  44. {
  45. void *context;
  46. DBusConnection *connection;
  47. const char *method_name;
  48. DBusMessage *message;
  49. DBusMessage *reply;
  50. };
  51. struct jack_dbus_interface_method_argument_descriptor
  52. {
  53. const char * name;
  54. const char * type;
  55. bool direction_out; /* true - out, false - in */
  56. };
  57. struct jack_dbus_interface_method_descriptor
  58. {
  59. const char * name;
  60. const struct jack_dbus_interface_method_argument_descriptor * arguments;
  61. void (* handler)(struct jack_dbus_method_call * call);
  62. };
  63. struct jack_dbus_interface_signal_argument_descriptor
  64. {
  65. const char * name;
  66. const char * type;
  67. };
  68. struct jack_dbus_interface_signal_descriptor
  69. {
  70. const char * name;
  71. const struct jack_dbus_interface_signal_argument_descriptor * arguments;
  72. };
  73. struct jack_dbus_interface_descriptor
  74. {
  75. const char * name;
  76. bool
  77. (* handler)(
  78. struct jack_dbus_method_call * call,
  79. const struct jack_dbus_interface_method_descriptor * methods);
  80. const struct jack_dbus_interface_method_descriptor * methods;
  81. const struct jack_dbus_interface_signal_descriptor * signals;
  82. };
  83. struct jack_dbus_object_descriptor
  84. {
  85. struct jack_dbus_interface_descriptor ** interfaces;
  86. void * context;
  87. };
  88. typedef union
  89. {
  90. unsigned char byte;
  91. dbus_bool_t boolean;
  92. dbus_int16_t int16;
  93. dbus_uint16_t uint16;
  94. dbus_int32_t int32;
  95. dbus_uint32_t uint32;
  96. dbus_int64_t int64;
  97. dbus_uint64_t uint64;
  98. double doubl;
  99. const char *string;
  100. } message_arg_t;
  101. #define JACK_DBUS_METHOD_ARGUMENTS_BEGIN(method_name) \
  102. static const \
  103. struct jack_dbus_interface_method_argument_descriptor method_name ## _arguments[] = \
  104. {
  105. #define JACK_DBUS_METHOD_ARGUMENT(argument_name, argument_type, argument_direction_out) \
  106. { \
  107. .name = argument_name, \
  108. .type = argument_type, \
  109. .direction_out = argument_direction_out \
  110. },
  111. #define JACK_DBUS_METHOD_ARGUMENTS_END \
  112. JACK_DBUS_METHOD_ARGUMENT(NULL, NULL, false) \
  113. };
  114. #define JACK_DBUS_METHODS_BEGIN \
  115. static const \
  116. struct jack_dbus_interface_method_descriptor methods_dtor[] = \
  117. {
  118. #define JACK_DBUS_METHOD_DESCRIBE(method_name, handler_name) \
  119. { \
  120. .name = # method_name, \
  121. .arguments = method_name ## _arguments, \
  122. .handler = handler_name \
  123. },
  124. #define JACK_DBUS_METHODS_END \
  125. { \
  126. .name = NULL, \
  127. .arguments = NULL, \
  128. .handler = NULL \
  129. } \
  130. };
  131. #define JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(signal_name) \
  132. static const \
  133. struct jack_dbus_interface_signal_argument_descriptor signal_name ## _arguments[] = \
  134. {
  135. #define JACK_DBUS_SIGNAL_ARGUMENT(argument_name, argument_type) \
  136. { \
  137. .name = argument_name, \
  138. .type = argument_type \
  139. },
  140. #define JACK_DBUS_SIGNAL_ARGUMENTS_END \
  141. JACK_DBUS_SIGNAL_ARGUMENT(NULL, NULL) \
  142. };
  143. #define JACK_DBUS_SIGNALS_BEGIN \
  144. static const \
  145. struct jack_dbus_interface_signal_descriptor signals_dtor[] = \
  146. {
  147. #define JACK_DBUS_SIGNAL_DESCRIBE(signal_name) \
  148. { \
  149. .name = # signal_name, \
  150. .arguments = signal_name ## _arguments \
  151. },
  152. #define JACK_DBUS_SIGNALS_END \
  153. { \
  154. .name = NULL, \
  155. .arguments = NULL, \
  156. } \
  157. };
  158. #define JACK_DBUS_IFACE_BEGIN(iface_var, iface_name) \
  159. struct jack_dbus_interface_descriptor iface_var = \
  160. { \
  161. .name = iface_name, \
  162. .handler = jack_dbus_run_method,
  163. #define JACK_DBUS_IFACE_HANDLER(handler_func) \
  164. .handler = handler_func,
  165. #define JACK_DBUS_IFACE_EXPOSE_METHODS \
  166. .methods = methods_dtor,
  167. #define JACK_DBUS_IFACE_EXPOSE_SIGNALS \
  168. .signals = signals_dtor,
  169. #define JACK_DBUS_IFACE_END \
  170. };
  171. DBusHandlerResult
  172. jack_dbus_message_handler(
  173. DBusConnection *connection,
  174. DBusMessage *message,
  175. void *data);
  176. void
  177. jack_dbus_message_handler_unregister(
  178. DBusConnection *connection,
  179. void *data);
  180. bool
  181. jack_dbus_run_method(
  182. struct jack_dbus_method_call * call,
  183. const struct jack_dbus_interface_method_descriptor * methods);
  184. void
  185. jack_dbus_error(
  186. void *dbus_call_context_ptr,
  187. const char *error_name,
  188. const char *format,
  189. ...);
  190. bool
  191. jack_dbus_get_method_args(
  192. struct jack_dbus_method_call *call,
  193. int type,
  194. ...);
  195. bool
  196. jack_dbus_get_method_args_string_and_variant(
  197. struct jack_dbus_method_call *call,
  198. const char **arg1,
  199. message_arg_t *arg2,
  200. int *type_ptr);
  201. bool
  202. jack_dbus_message_append_variant(
  203. DBusMessageIter *iter,
  204. int type,
  205. const char *signature,
  206. message_arg_t *arg);
  207. void
  208. jack_dbus_construct_method_return_empty(
  209. struct jack_dbus_method_call * call);
  210. void
  211. jack_dbus_construct_method_return_single(
  212. struct jack_dbus_method_call *call,
  213. int type,
  214. message_arg_t arg);
  215. void
  216. jack_dbus_construct_method_return_array_of_strings(
  217. struct jack_dbus_method_call *call,
  218. unsigned int num_members,
  219. const char **array);
  220. void
  221. jack_dbus_send_signal(
  222. const char *sender_object_path,
  223. const char *iface,
  224. const char *signal_name,
  225. int first_arg_type,
  226. ...);
  227. #define JACK_CONTROLLER_OBJECT_PATH "/org/jackaudio/Controller"
  228. extern struct jack_dbus_interface_descriptor * g_jackcontroller_interfaces[];
  229. #endif /* #ifndef DBUS_H__3DB2458F_44B2_43EA_882A_9F888DF71A88__INCLUDED */