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.

419 lines
11KB

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