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.

352 lines
8.8KB

  1. /* -*- Mode: C ; c-basic-offset: 4 -*- */
  2. /*
  3. JACK control API
  4. Copyright (C) 2008 Nedko Arnaudov
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; version 2 of the License.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program; if not, write to the Free Software
  14. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  15. */
  16. /**
  17. * @file jack/control.h
  18. * @ingroup publicheader
  19. * @brief JACK control API
  20. *
  21. */
  22. #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED
  23. #define JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED
  24. #include <jack/jslist.h>
  25. #ifdef WIN32
  26. typedef unsigned long sigset_t;
  27. #endif
  28. /** Parameter types, intentionally similar to jack_driver_param_type_t */
  29. typedef enum
  30. {
  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;
  37. /** @brief Max value that jackctl_param_type_t type can have */
  38. #define JACK_PARAM_MAX (JackParamBool + 1)
  39. /** @brief Max length of string parameter value, excluding terminating nul char */
  40. #define JACK_PARAM_STRING_MAX 63
  41. /** @brief Type for parameter value */
  42. /* intentionally similar to jack_driver_param_value_t */
  43. union jackctl_parameter_value
  44. {
  45. uint32_t ui; /**< @brief member used for ::JackParamUInt */
  46. int32_t i; /**< @brief member used for ::JackParamInt */
  47. char c; /**< @brief member used for ::JackParamChar */
  48. char str[JACK_PARAM_STRING_MAX + 1]; /**< @brief member used for ::JackParamString */
  49. bool b; /**< @brief member used for ::JackParamBool */
  50. };
  51. /** opaque type for server object */
  52. typedef struct jackctl_server jackctl_server_t;
  53. /** opaque type for driver object */
  54. typedef struct jackctl_driver jackctl_driver_t;
  55. /** opaque type for parameter object */
  56. typedef struct jackctl_parameter jackctl_parameter_t;
  57. #ifdef __cplusplus
  58. extern "C" {
  59. #endif
  60. #if 0
  61. } /* Adjust editor indent */
  62. #endif
  63. /**
  64. * Call this function to setup process signal handling. As a general
  65. * rule, it is required for proper operation for the server object.
  66. *
  67. * @param flags signals setup flags, use 0 for none. Currently no
  68. * flags are defined
  69. *
  70. * @return the configurated signal set.
  71. */
  72. sigset_t
  73. jackctl_setup_signals(
  74. unsigned int flags);
  75. /**
  76. * Call this function to wait on a signal set.
  77. *
  78. * @param signals signals set to wait on
  79. */
  80. void
  81. jackctl_wait_signals(
  82. sigset_t signals);
  83. /**
  84. * Call this function to create server object.
  85. *
  86. * @return server object handle, NULL if creation of server object
  87. * failed. Successfully created server object must be destroyed with
  88. * paired call to ::jackctl_server_destroy
  89. */
  90. jackctl_server_t *
  91. jackctl_server_create();
  92. /**
  93. * Call this function to destroy server object.
  94. *
  95. * @param server server object handle to destroy
  96. */
  97. void
  98. jackctl_server_destroy(
  99. jackctl_server_t * server);
  100. /**
  101. * Call this function to get list of available drivers. List node data
  102. * pointers is a driver object handle (::jackctl_driver_t).
  103. *
  104. * @param server server object handle to get drivers for
  105. *
  106. * @return Single linked list of driver object handles. Must not be
  107. * modified. Always same for same server object.
  108. */
  109. const JSList *
  110. jackctl_server_get_drivers_list(
  111. jackctl_server_t * server);
  112. /**
  113. * Call this function to start JACK server
  114. *
  115. * @param server server object handle
  116. * @param driver driver to use
  117. *
  118. * @return success status: true - success, false - fail
  119. */
  120. bool
  121. jackctl_server_start(
  122. jackctl_server_t * server,
  123. jackctl_driver_t * driver);
  124. /**
  125. * Call this function to stop JACK server
  126. *
  127. * @param server server object handle
  128. *
  129. * @return success status: true - success, false - fail
  130. */
  131. bool
  132. jackctl_server_stop(
  133. jackctl_server_t * server);
  134. /**
  135. * Call this function to get list of server parameters. List node data
  136. * pointers is a parameter object handle (::jackctl_parameter_t).
  137. *
  138. * @param server server object handle to get parameters for
  139. *
  140. * @return Single linked list of parameter object handles. Must not be
  141. * modified. Always same for same server object.
  142. */
  143. const JSList *
  144. jackctl_server_get_parameters(
  145. jackctl_server_t * server);
  146. /**
  147. * Call this function to get name of driver.
  148. *
  149. * @param driver driver object handle to get name of
  150. *
  151. * @return driver name. Must not be modified. Always same for same
  152. * driver object.
  153. */
  154. const char *
  155. jackctl_driver_get_name(
  156. jackctl_driver_t * driver);
  157. /**
  158. * Call this function to get list of driver parameters. List node data
  159. * pointers is a parameter object handle (::jackctl_parameter_t).
  160. *
  161. * @param driver driver object handle to get parameters for
  162. *
  163. * @return Single linked list of parameter object handles. Must not be
  164. * modified. Always same for same driver object.
  165. */
  166. const JSList *
  167. jackctl_driver_get_parameters(
  168. jackctl_driver_t * driver);
  169. /**
  170. * Call this function to get parameter name.
  171. *
  172. * @param parameter parameter object handle to get name of
  173. *
  174. * @return parameter name. Must not be modified. Always same for same
  175. * parameter object.
  176. */
  177. const char *
  178. jackctl_parameter_get_name(
  179. jackctl_parameter_t * parameter);
  180. /**
  181. * Call this function to get parameter short description.
  182. *
  183. * @param parameter parameter object handle to get short description of
  184. *
  185. * @return parameter short description. Must not be modified. Always
  186. * same for same parameter object.
  187. */
  188. const char *
  189. jackctl_parameter_get_short_description(
  190. jackctl_parameter_t * parameter);
  191. /**
  192. * Call this function to get parameter long description.
  193. *
  194. * @param parameter parameter object handle to get long description of
  195. *
  196. * @return parameter long description. Must not be modified. Always
  197. * same for same parameter object.
  198. */
  199. const char *
  200. jackctl_parameter_get_long_description(
  201. jackctl_parameter_t * parameter);
  202. /**
  203. * Call this function to get parameter type.
  204. *
  205. * @param parameter parameter object handle to get type of
  206. *
  207. * @return parameter type. Always same for same parameter object.
  208. */
  209. jackctl_param_type_t
  210. jackctl_parameter_get_type(
  211. jackctl_parameter_t * parameter);
  212. /**
  213. * Call this function to get parameter character.
  214. *
  215. * @param parameter parameter object handle to get character of
  216. *
  217. * @return character.
  218. */
  219. char
  220. jackctl_parameter_get_id(
  221. jackctl_parameter_t * parameter);
  222. /**
  223. * Call this function to check whether parameter has been set, or its
  224. * default value is being used.
  225. *
  226. * @param parameter parameter object handle to check
  227. *
  228. * @return true - parameter is set, false - parameter is using default
  229. * value.
  230. */
  231. bool
  232. jackctl_parameter_is_set(
  233. jackctl_parameter_t * parameter);
  234. /**
  235. * Call this function to reset parameter to its default value.
  236. *
  237. * @param parameter parameter object handle to reset value of
  238. *
  239. * @return success status: true - success, false - fail
  240. */
  241. bool
  242. jackctl_parameter_reset(
  243. jackctl_parameter_t * parameter);
  244. /**
  245. * Call this function to get parameter value.
  246. *
  247. * @param parameter parameter object handle to get value of
  248. *
  249. * @return parameter value.
  250. */
  251. union jackctl_parameter_value
  252. jackctl_parameter_get_value(
  253. jackctl_parameter_t * parameter);
  254. /**
  255. * Call this function to set parameter value.
  256. *
  257. * @param parameter parameter object handle to get value of
  258. * @param value_ptr pointer to variable containing parameter value
  259. *
  260. * @return success status: true - success, false - fail
  261. */
  262. bool
  263. jackctl_parameter_set_value(
  264. jackctl_parameter_t * parameter,
  265. const union jackctl_parameter_value * value_ptr);
  266. /**
  267. * Call this function to get parameter default value.
  268. *
  269. * @param parameter parameter object handle to get default value of
  270. *
  271. * @return parameter default value.
  272. */
  273. union jackctl_parameter_value
  274. jackctl_parameter_get_default_value(
  275. jackctl_parameter_t * parameter);
  276. /**
  277. * Call this function to log an error message.
  278. *
  279. * @param format string
  280. */
  281. void
  282. jack_error(
  283. const char *format,
  284. ...);
  285. /**
  286. * Call this function to log an information message.
  287. *
  288. * @param format string
  289. */
  290. void
  291. jack_info(
  292. const char *format,
  293. ...);
  294. /**
  295. * Call this function to log an information message but only when
  296. * verbose mode is enabled.
  297. *
  298. * @param format string
  299. */
  300. void
  301. jack_log(
  302. const char *format,
  303. ...);
  304. #if 0
  305. { /* Adjust editor indent */
  306. #endif
  307. #ifdef __cplusplus
  308. } /* extern "C" */
  309. #endif
  310. #endif /* #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED */