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.

420 lines
11KB

  1. /* -*- Mode: C ; c-basic-offset: 4 -*- */
  2. /*
  3. JACK control API
  4. Copyright (C) 2008 Nedko Arnaudov
  5. Copyright (C) 2008 GRAME
  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; 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. /**
  18. * @file jack/control.h
  19. * @ingroup publicheader
  20. * @brief JACK control API
  21. *
  22. */
  23. #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED
  24. #define JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED
  25. #include <jack/jslist.h>
  26. #ifdef WIN32
  27. typedef unsigned long sigset_t;
  28. #endif
  29. /** Parameter types, intentionally similar to jack_driver_param_type_t */
  30. typedef enum
  31. {
  32. JackParamInt = 1, /**< @brief value type is a signed integer */
  33. JackParamUInt, /**< @brief value type is an unsigned integer */
  34. JackParamChar, /**< @brief value type is a char */
  35. JackParamString, /**< @brief value type is a string with max size of ::JACK_PARAM_STRING_MAX+1 chars */
  36. JackParamBool, /**< @brief value type is a boolean */
  37. } jackctl_param_type_t;
  38. /** @brief Max value that jackctl_param_type_t type can have */
  39. #define JACK_PARAM_MAX (JackParamBool + 1)
  40. /** @brief Max length of string parameter value, excluding terminating nul char */
  41. #define JACK_PARAM_STRING_MAX 63
  42. /** @brief Type for parameter value */
  43. /* intentionally similar to jack_driver_param_value_t */
  44. union jackctl_parameter_value
  45. {
  46. uint32_t ui; /**< @brief member used for ::JackParamUInt */
  47. int32_t i; /**< @brief member used for ::JackParamInt */
  48. char c; /**< @brief member used for ::JackParamChar */
  49. char str[JACK_PARAM_STRING_MAX + 1]; /**< @brief member used for ::JackParamString */
  50. bool b; /**< @brief member used for ::JackParamBool */
  51. };
  52. /** opaque type for server object */
  53. typedef struct jackctl_server jackctl_server_t;
  54. /** opaque type for driver object */
  55. typedef struct jackctl_driver jackctl_driver_t;
  56. /** opaque type for internal client object */
  57. typedef struct jackctl_internal jackctl_internal_t;
  58. /** opaque type for parameter object */
  59. typedef struct jackctl_parameter jackctl_parameter_t;
  60. #ifdef __cplusplus
  61. extern "C" {
  62. #endif
  63. #if 0
  64. } /* Adjust editor indent */
  65. #endif
  66. /**
  67. * Call this function to setup process signal handling. As a general
  68. * rule, it is required for proper operation for the server object.
  69. *
  70. * @param flags signals setup flags, use 0 for none. Currently no
  71. * flags are defined
  72. *
  73. * @return the configurated signal set.
  74. */
  75. sigset_t
  76. jackctl_setup_signals(
  77. unsigned int flags);
  78. /**
  79. * Call this function to wait on a signal set.
  80. *
  81. * @param signals signals set to wait on
  82. */
  83. void
  84. jackctl_wait_signals(
  85. sigset_t signals);
  86. /**
  87. * Call this function to create server object.
  88. *
  89. * @return server object handle, NULL if creation of server object
  90. * failed. Successfully created server object must be destroyed with
  91. * paired call to ::jackctl_server_destroy
  92. */
  93. jackctl_server_t *
  94. jackctl_server_create();
  95. /**
  96. * Call this function to destroy server object.
  97. *
  98. * @param server server object handle to destroy
  99. */
  100. void
  101. jackctl_server_destroy(
  102. jackctl_server_t * server);
  103. /**
  104. * Call this function to get list of available drivers. List node data
  105. * pointers is a driver object handle (::jackctl_driver_t).
  106. *
  107. * @param server server object handle to get drivers for
  108. *
  109. * @return Single linked list of driver object handles. Must not be
  110. * modified. Always same for same server object.
  111. */
  112. const JSList *
  113. jackctl_server_get_drivers_list(
  114. jackctl_server_t * server);
  115. /**
  116. * Call this function to start JACK server
  117. *
  118. * @param server server object handle
  119. * @param driver driver to use
  120. *
  121. * @return success status: true - success, false - fail
  122. */
  123. bool
  124. jackctl_server_start(
  125. jackctl_server_t * server,
  126. jackctl_driver_t * driver);
  127. /**
  128. * Call this function to stop JACK server
  129. *
  130. * @param server server object handle
  131. *
  132. * @return success status: true - success, false - fail
  133. */
  134. bool
  135. jackctl_server_stop(
  136. jackctl_server_t * server);
  137. /**
  138. * Call this function to get list of server parameters. List node data
  139. * pointers is a parameter object handle (::jackctl_parameter_t).
  140. *
  141. * @param server server object handle to get parameters for
  142. *
  143. * @return Single linked list of parameter object handles. Must not be
  144. * modified. Always same for same server object.
  145. */
  146. const JSList *
  147. jackctl_server_get_parameters(
  148. jackctl_server_t * server);
  149. /**
  150. * Call this function to get name of driver.
  151. *
  152. * @param driver driver object handle to get name of
  153. *
  154. * @return driver name. Must not be modified. Always same for same
  155. * driver object.
  156. */
  157. const char *
  158. jackctl_driver_get_name(
  159. jackctl_driver_t * driver);
  160. /**
  161. * Call this function to get list of driver parameters. List node data
  162. * pointers is a parameter object handle (::jackctl_parameter_t).
  163. *
  164. * @param driver driver object handle to get parameters for
  165. *
  166. * @return Single linked list of parameter object handles. Must not be
  167. * modified. Always same for same driver object.
  168. */
  169. const JSList *
  170. jackctl_driver_get_parameters(
  171. jackctl_driver_t * driver);
  172. /**
  173. * Call this function to get parameter name.
  174. *
  175. * @param parameter parameter object handle to get name of
  176. *
  177. * @return parameter name. Must not be modified. Always same for same
  178. * parameter object.
  179. */
  180. const char *
  181. jackctl_parameter_get_name(
  182. jackctl_parameter_t * parameter);
  183. /**
  184. * Call this function to get parameter short description.
  185. *
  186. * @param parameter parameter object handle to get short description of
  187. *
  188. * @return parameter short description. Must not be modified. Always
  189. * same for same parameter object.
  190. */
  191. const char *
  192. jackctl_parameter_get_short_description(
  193. jackctl_parameter_t * parameter);
  194. /**
  195. * Call this function to get parameter long description.
  196. *
  197. * @param parameter parameter object handle to get long description of
  198. *
  199. * @return parameter long description. Must not be modified. Always
  200. * same for same parameter object.
  201. */
  202. const char *
  203. jackctl_parameter_get_long_description(
  204. jackctl_parameter_t * parameter);
  205. /**
  206. * Call this function to get parameter type.
  207. *
  208. * @param parameter parameter object handle to get type of
  209. *
  210. * @return parameter type. Always same for same parameter object.
  211. */
  212. jackctl_param_type_t
  213. jackctl_parameter_get_type(
  214. jackctl_parameter_t * parameter);
  215. /**
  216. * Call this function to get parameter character.
  217. *
  218. * @param parameter parameter object handle to get character of
  219. *
  220. * @return character.
  221. */
  222. char
  223. jackctl_parameter_get_id(
  224. jackctl_parameter_t * parameter);
  225. /**
  226. * Call this function to check whether parameter has been set, or its
  227. * default value is being used.
  228. *
  229. * @param parameter parameter object handle to check
  230. *
  231. * @return true - parameter is set, false - parameter is using default
  232. * value.
  233. */
  234. bool
  235. jackctl_parameter_is_set(
  236. jackctl_parameter_t * parameter);
  237. /**
  238. * Call this function to reset parameter to its default value.
  239. *
  240. * @param parameter parameter object handle to reset value of
  241. *
  242. * @return success status: true - success, false - fail
  243. */
  244. bool
  245. jackctl_parameter_reset(
  246. jackctl_parameter_t * parameter);
  247. /**
  248. * Call this function to get parameter value.
  249. *
  250. * @param parameter parameter object handle to get value of
  251. *
  252. * @return parameter value.
  253. */
  254. union jackctl_parameter_value
  255. jackctl_parameter_get_value(
  256. jackctl_parameter_t * parameter);
  257. /**
  258. * Call this function to set parameter value.
  259. *
  260. * @param parameter parameter object handle to get value of
  261. * @param value_ptr pointer to variable containing parameter value
  262. *
  263. * @return success status: true - success, false - fail
  264. */
  265. bool
  266. jackctl_parameter_set_value(
  267. jackctl_parameter_t * parameter,
  268. const union jackctl_parameter_value * value_ptr);
  269. /**
  270. * Call this function to get parameter default value.
  271. *
  272. * @param parameter parameter object handle to get default value of
  273. *
  274. * @return parameter default value.
  275. */
  276. union jackctl_parameter_value
  277. jackctl_parameter_get_default_value(
  278. jackctl_parameter_t * parameter);
  279. /**
  280. * Call this function to get list of available internal clients. List node data
  281. * pointers is a internal client object handle (::jackctl_internal_t).
  282. *
  283. * @param server server object handle to get internal clients for
  284. *
  285. * @return Single linked list of internal client object handles. Must not be
  286. * modified. Always same for same server object.
  287. */
  288. const JSList *
  289. jackctl_server_get_internals_list(
  290. jackctl_server_t * server);
  291. /**
  292. * Call this function to get name of internal client.
  293. *
  294. * @param internal internal object handle to get name of
  295. *
  296. * @return internal name. Must not be modified. Always same for same
  297. * internal object.
  298. */
  299. const char *
  300. jackctl_internal_get_name(
  301. jackctl_internal_t * internal);
  302. /**
  303. * Call this function to get list of internal parameters. List node data
  304. * pointers is a parameter object handle (::jackctl_parameter_t).
  305. *
  306. * @param internal internal object handle to get parameters for
  307. *
  308. * @return Single linked list of parameter object handles. Must not be
  309. * modified. Always same for same internal object.
  310. */
  311. const JSList *
  312. jackctl_internal_get_parameters(
  313. jackctl_internal_t * internal);
  314. /**
  315. * Call this function to load one internal client.
  316. *
  317. * @param server server object handle
  318. * @param internal internal to use
  319. *
  320. * @return success status: true - success, false - fail
  321. */
  322. bool
  323. jackctl_server_load_internal(
  324. jackctl_server_t * server,
  325. jackctl_internal_t * internal);
  326. /**
  327. * Call this function to unload one internal client.
  328. *
  329. * @param server server object handle
  330. * @param internal internal to unload
  331. *
  332. * @return success status: true - success, false - fail
  333. */
  334. bool
  335. jackctl_server_unload_internal(
  336. jackctl_server_t * server,
  337. jackctl_internal_t * internal);
  338. /**
  339. * Call this function to log an error message.
  340. *
  341. * @param format string
  342. */
  343. void
  344. jack_error(
  345. const char *format,
  346. ...);
  347. /**
  348. * Call this function to log an information message.
  349. *
  350. * @param format string
  351. */
  352. void
  353. jack_info(
  354. const char *format,
  355. ...);
  356. /**
  357. * Call this function to log an information message but only when
  358. * verbose mode is enabled.
  359. *
  360. * @param format string
  361. */
  362. void
  363. jack_log(
  364. const char *format,
  365. ...);
  366. #if 0
  367. { /* Adjust editor indent */
  368. #endif
  369. #ifdef __cplusplus
  370. } /* extern "C" */
  371. #endif
  372. #endif /* #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED */