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.

293 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_UNKNOWN_INTERNAL "org.jackaudio.Error.UnknownInternal"
  41. #define JACK_DBUS_ERROR_INVALID_ARGS "org.jackaudio.Error.InvalidArgs"
  42. #define JACK_DBUS_ERROR_GENERIC "org.jackaudio.Error.Generic"
  43. #define JACK_DBUS_ERROR_FATAL "org.jackaudio.Error.Fatal"
  44. struct jack_dbus_method_call
  45. {
  46. void *context;
  47. DBusConnection *connection;
  48. const char *method_name;
  49. DBusMessage *message;
  50. DBusMessage *reply;
  51. };
  52. struct jack_dbus_interface_method_argument_descriptor
  53. {
  54. const char * name;
  55. const char * type;
  56. bool direction_out; /* true - out, false - in */
  57. };
  58. struct jack_dbus_interface_method_descriptor
  59. {
  60. const char * name;
  61. const struct jack_dbus_interface_method_argument_descriptor * arguments;
  62. void (* handler)(struct jack_dbus_method_call * call);
  63. };
  64. struct jack_dbus_interface_signal_argument_descriptor
  65. {
  66. const char * name;
  67. const char * type;
  68. };
  69. struct jack_dbus_interface_signal_descriptor
  70. {
  71. const char * name;
  72. const struct jack_dbus_interface_signal_argument_descriptor * arguments;
  73. };
  74. struct jack_dbus_interface_descriptor
  75. {
  76. const char * name;
  77. bool
  78. (* handler)(
  79. struct jack_dbus_method_call * call,
  80. const struct jack_dbus_interface_method_descriptor * methods);
  81. const struct jack_dbus_interface_method_descriptor * methods;
  82. const struct jack_dbus_interface_signal_descriptor * signals;
  83. };
  84. struct jack_dbus_object_descriptor
  85. {
  86. struct jack_dbus_interface_descriptor ** interfaces;
  87. void * context;
  88. };
  89. typedef union
  90. {
  91. unsigned char byte;
  92. dbus_bool_t boolean;
  93. dbus_int16_t int16;
  94. dbus_uint16_t uint16;
  95. dbus_int32_t int32;
  96. dbus_uint32_t uint32;
  97. dbus_int64_t int64;
  98. dbus_uint64_t uint64;
  99. double doubl;
  100. const char *string;
  101. } message_arg_t;
  102. #define JACK_DBUS_METHOD_ARGUMENTS_BEGIN(method_name) \
  103. static const \
  104. struct jack_dbus_interface_method_argument_descriptor method_name ## _arguments[] = \
  105. {
  106. #define JACK_DBUS_METHOD_ARGUMENT(argument_name, argument_type, argument_direction_out) \
  107. { \
  108. .name = argument_name, \
  109. .type = argument_type, \
  110. .direction_out = argument_direction_out \
  111. },
  112. #define JACK_DBUS_METHOD_ARGUMENTS_END \
  113. JACK_DBUS_METHOD_ARGUMENT(NULL, NULL, false) \
  114. };
  115. #define JACK_DBUS_METHODS_BEGIN \
  116. static const \
  117. struct jack_dbus_interface_method_descriptor methods_dtor[] = \
  118. {
  119. #define JACK_DBUS_METHOD_DESCRIBE(method_name, handler_name) \
  120. { \
  121. .name = # method_name, \
  122. .arguments = method_name ## _arguments, \
  123. .handler = handler_name \
  124. },
  125. #define JACK_DBUS_METHODS_END \
  126. { \
  127. .name = NULL, \
  128. .arguments = NULL, \
  129. .handler = NULL \
  130. } \
  131. };
  132. #define JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(signal_name) \
  133. static const \
  134. struct jack_dbus_interface_signal_argument_descriptor signal_name ## _arguments[] = \
  135. {
  136. #define JACK_DBUS_SIGNAL_ARGUMENT(argument_name, argument_type) \
  137. { \
  138. .name = argument_name, \
  139. .type = argument_type \
  140. },
  141. #define JACK_DBUS_SIGNAL_ARGUMENTS_END \
  142. JACK_DBUS_SIGNAL_ARGUMENT(NULL, NULL) \
  143. };
  144. #define JACK_DBUS_SIGNALS_BEGIN \
  145. static const \
  146. struct jack_dbus_interface_signal_descriptor signals_dtor[] = \
  147. {
  148. #define JACK_DBUS_SIGNAL_DESCRIBE(signal_name) \
  149. { \
  150. .name = # signal_name, \
  151. .arguments = signal_name ## _arguments \
  152. },
  153. #define JACK_DBUS_SIGNALS_END \
  154. { \
  155. .name = NULL, \
  156. .arguments = NULL, \
  157. } \
  158. };
  159. #define JACK_DBUS_IFACE_BEGIN(iface_var, iface_name) \
  160. struct jack_dbus_interface_descriptor iface_var = \
  161. { \
  162. .name = iface_name, \
  163. .handler = jack_dbus_run_method,
  164. #define JACK_DBUS_IFACE_HANDLER(handler_func) \
  165. .handler = handler_func,
  166. #define JACK_DBUS_IFACE_EXPOSE_METHODS \
  167. .methods = methods_dtor,
  168. #define JACK_DBUS_IFACE_EXPOSE_SIGNALS \
  169. .signals = signals_dtor,
  170. #define JACK_DBUS_IFACE_END \
  171. };
  172. DBusHandlerResult
  173. jack_dbus_message_handler(
  174. DBusConnection *connection,
  175. DBusMessage *message,
  176. void *data);
  177. void
  178. jack_dbus_message_handler_unregister(
  179. DBusConnection *connection,
  180. void *data);
  181. bool
  182. jack_dbus_run_method(
  183. struct jack_dbus_method_call * call,
  184. const struct jack_dbus_interface_method_descriptor * methods);
  185. void
  186. jack_dbus_error(
  187. void *dbus_call_context_ptr,
  188. const char *error_name,
  189. const char *format,
  190. ...);
  191. bool
  192. jack_dbus_get_method_args(
  193. struct jack_dbus_method_call *call,
  194. int type,
  195. ...);
  196. bool
  197. jack_dbus_get_method_args_string_and_variant(
  198. struct jack_dbus_method_call *call,
  199. const char **arg1,
  200. message_arg_t *arg2,
  201. int *type_ptr);
  202. bool
  203. jack_dbus_get_method_args_two_strings_and_variant(
  204. struct jack_dbus_method_call *call,
  205. const char **arg1,
  206. const char **arg2,
  207. message_arg_t *arg3,
  208. int *type_ptr);
  209. bool
  210. jack_dbus_message_append_variant(
  211. DBusMessageIter *iter,
  212. int type,
  213. const char *signature,
  214. message_arg_t *arg);
  215. void
  216. jack_dbus_construct_method_return_empty(
  217. struct jack_dbus_method_call * call);
  218. void
  219. jack_dbus_construct_method_return_single(
  220. struct jack_dbus_method_call *call,
  221. int type,
  222. message_arg_t arg);
  223. void
  224. jack_dbus_construct_method_return_array_of_strings(
  225. struct jack_dbus_method_call *call,
  226. unsigned int num_members,
  227. const char **array);
  228. void
  229. jack_dbus_send_signal(
  230. const char *sender_object_path,
  231. const char *iface,
  232. const char *signal_name,
  233. int first_arg_type,
  234. ...);
  235. #define JACK_CONTROLLER_OBJECT_PATH "/org/jackaudio/Controller"
  236. extern struct jack_dbus_interface_descriptor * g_jackcontroller_interfaces[];
  237. #endif /* #ifndef DBUS_H__3DB2458F_44B2_43EA_882A_9F888DF71A88__INCLUDED */