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.

514 lines
13KB

  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. #include <jack/systemdeps.h>
  27. /** Parameter types, intentionally similar to jack_driver_param_type_t */
  28. typedef enum
  29. {
  30. JackParamInt = 1, /**< @brief value type is a signed integer */
  31. JackParamUInt, /**< @brief value type is an unsigned integer */
  32. JackParamChar, /**< @brief value type is a char */
  33. JackParamString, /**< @brief value type is a string with max size of ::JACK_PARAM_STRING_MAX+1 chars */
  34. JackParamBool, /**< @brief value type is a boolean */
  35. } jackctl_param_type_t;
  36. /** @brief Max value that jackctl_param_type_t type can have */
  37. #define JACK_PARAM_MAX (JackParamBool + 1)
  38. /** @brief Max length of string parameter value, excluding terminating nul char */
  39. #define JACK_PARAM_STRING_MAX 63
  40. /** @brief Type for parameter value */
  41. /* intentionally similar to jack_driver_param_value_t */
  42. union jackctl_parameter_value
  43. {
  44. uint32_t ui; /**< @brief member used for ::JackParamUInt */
  45. int32_t i; /**< @brief member used for ::JackParamInt */
  46. char c; /**< @brief member used for ::JackParamChar */
  47. char str[JACK_PARAM_STRING_MAX + 1]; /**< @brief member used for ::JackParamString */
  48. bool b; /**< @brief member used for ::JackParamBool */
  49. };
  50. /** opaque type for server object */
  51. typedef struct jackctl_server jackctl_server_t;
  52. /** opaque type for driver object */
  53. typedef struct jackctl_driver jackctl_driver_t;
  54. /** opaque type for internal client object */
  55. typedef struct jackctl_internal jackctl_internal_t;
  56. /** opaque type for parameter object */
  57. typedef struct jackctl_parameter jackctl_parameter_t;
  58. #ifdef __cplusplus
  59. extern "C" {
  60. #endif
  61. #if 0
  62. } /* Adjust editor indent */
  63. #endif
  64. /**
  65. * Call this function to setup process signal handling. As a general
  66. * rule, it is required for proper operation for the server object.
  67. *
  68. * @param flags signals setup flags, use 0 for none. Currently no
  69. * flags are defined
  70. *
  71. * @return the configurated signal set.
  72. */
  73. sigset_t
  74. jackctl_setup_signals(
  75. unsigned int flags);
  76. /**
  77. * Call this function to wait on a signal set.
  78. *
  79. * @param signals signals set to wait on
  80. */
  81. void
  82. jackctl_wait_signals(
  83. sigset_t signals);
  84. /**
  85. * Call this function to create server object.
  86. *
  87. * @return server object handle, NULL if creation of server object
  88. * failed. Successfully created server object must be destroyed with
  89. * paired call to ::jackctl_server_destroy
  90. */
  91. jackctl_server_t *
  92. jackctl_server_create();
  93. /**
  94. * Call this function to destroy server object.
  95. *
  96. * @param server server object handle to destroy
  97. */
  98. void
  99. jackctl_server_destroy(
  100. jackctl_server_t * server);
  101. /**
  102. * Call this function to get list of available drivers. List node data
  103. * pointers is a driver object handle (::jackctl_driver_t).
  104. *
  105. * @param server server object handle to get drivers for
  106. *
  107. * @return Single linked list of driver object handles. Must not be
  108. * modified. Always same for same server object.
  109. */
  110. const JSList *
  111. jackctl_server_get_drivers_list(
  112. jackctl_server_t * server);
  113. /**
  114. * Call this function to start JACK server
  115. *
  116. * @param server server object handle
  117. * @param driver driver to use
  118. *
  119. * @return success status: true - success, false - fail
  120. */
  121. bool
  122. jackctl_server_start(
  123. jackctl_server_t * server,
  124. jackctl_driver_t * driver);
  125. /**
  126. * Call this function to stop JACK server
  127. *
  128. * @param server server object handle
  129. *
  130. * @return success status: true - success, false - fail
  131. */
  132. bool
  133. jackctl_server_stop(
  134. jackctl_server_t * server);
  135. /**
  136. * Call this function to get list of server parameters. List node data
  137. * pointers is a parameter object handle (::jackctl_parameter_t).
  138. *
  139. * @param server server object handle to get parameters for
  140. *
  141. * @return Single linked list of parameter object handles. Must not be
  142. * modified. Always same for same server object.
  143. */
  144. const JSList *
  145. jackctl_server_get_parameters(
  146. jackctl_server_t * server);
  147. /**
  148. * Call this function to get name of driver.
  149. *
  150. * @param driver driver object handle to get name of
  151. *
  152. * @return driver name. Must not be modified. Always same for same
  153. * driver object.
  154. */
  155. const char *
  156. jackctl_driver_get_name(
  157. jackctl_driver_t * driver);
  158. /**
  159. * Call this function to get list of driver parameters. List node data
  160. * pointers is a parameter object handle (::jackctl_parameter_t).
  161. *
  162. * @param driver driver object handle to get parameters for
  163. *
  164. * @return Single linked list of parameter object handles. Must not be
  165. * modified. Always same for same driver object.
  166. */
  167. const JSList *
  168. jackctl_driver_get_parameters(
  169. jackctl_driver_t * driver);
  170. /**
  171. * Call this function to get parameter name.
  172. *
  173. * @param parameter parameter object handle to get name of
  174. *
  175. * @return parameter name. Must not be modified. Always same for same
  176. * parameter object.
  177. */
  178. const char *
  179. jackctl_parameter_get_name(
  180. jackctl_parameter_t * parameter);
  181. /**
  182. * Call this function to get parameter short description.
  183. *
  184. * @param parameter parameter object handle to get short description of
  185. *
  186. * @return parameter short description. Must not be modified. Always
  187. * same for same parameter object.
  188. */
  189. const char *
  190. jackctl_parameter_get_short_description(
  191. jackctl_parameter_t * parameter);
  192. /**
  193. * Call this function to get parameter long description.
  194. *
  195. * @param parameter parameter object handle to get long description of
  196. *
  197. * @return parameter long description. Must not be modified. Always
  198. * same for same parameter object.
  199. */
  200. const char *
  201. jackctl_parameter_get_long_description(
  202. jackctl_parameter_t * parameter);
  203. /**
  204. * Call this function to get parameter type.
  205. *
  206. * @param parameter parameter object handle to get type of
  207. *
  208. * @return parameter type. Always same for same parameter object.
  209. */
  210. jackctl_param_type_t
  211. jackctl_parameter_get_type(
  212. jackctl_parameter_t * parameter);
  213. /**
  214. * Call this function to get parameter character.
  215. *
  216. * @param parameter parameter object handle to get character of
  217. *
  218. * @return character.
  219. */
  220. char
  221. jackctl_parameter_get_id(
  222. jackctl_parameter_t * parameter);
  223. /**
  224. * Call this function to check whether parameter has been set, or its
  225. * default value is being used.
  226. *
  227. * @param parameter parameter object handle to check
  228. *
  229. * @return true - parameter is set, false - parameter is using default
  230. * value.
  231. */
  232. bool
  233. jackctl_parameter_is_set(
  234. jackctl_parameter_t * parameter);
  235. /**
  236. * Call this function to reset parameter to its default value.
  237. *
  238. * @param parameter parameter object handle to reset value of
  239. *
  240. * @return success status: true - success, false - fail
  241. */
  242. bool
  243. jackctl_parameter_reset(
  244. jackctl_parameter_t * parameter);
  245. /**
  246. * Call this function to get parameter value.
  247. *
  248. * @param parameter parameter object handle to get value of
  249. *
  250. * @return parameter value.
  251. */
  252. union jackctl_parameter_value
  253. jackctl_parameter_get_value(
  254. jackctl_parameter_t * parameter);
  255. /**
  256. * Call this function to set parameter value.
  257. *
  258. * @param parameter parameter object handle to get value of
  259. * @param value_ptr pointer to variable containing parameter value
  260. *
  261. * @return success status: true - success, false - fail
  262. */
  263. bool
  264. jackctl_parameter_set_value(
  265. jackctl_parameter_t * parameter,
  266. const union jackctl_parameter_value * value_ptr);
  267. /**
  268. * Call this function to get parameter default value.
  269. *
  270. * @param parameter parameter object handle to get default value of
  271. *
  272. * @return parameter default value.
  273. */
  274. union jackctl_parameter_value
  275. jackctl_parameter_get_default_value(
  276. jackctl_parameter_t * parameter);
  277. /**
  278. * Call this function check whether parameter has range constraint.
  279. *
  280. * @param parameter object handle of parameter to check
  281. *
  282. * @return whether parameter has range constraint.
  283. */
  284. bool
  285. jackctl_parameter_has_range_constraint(
  286. jackctl_parameter_t * parameter_ptr);
  287. /**
  288. * Call this function check whether parameter has enumeration constraint.
  289. *
  290. * @param parameter object handle of parameter to check
  291. *
  292. * @return whether parameter has enumeration constraint.
  293. */
  294. bool
  295. jackctl_parameter_has_enum_constraint(
  296. jackctl_parameter_t * parameter_ptr);
  297. /**
  298. * Call this function get how many enumeration values parameter has.
  299. *
  300. * @param parameter object handle of parameter
  301. *
  302. * @return number of enumeration values
  303. */
  304. uint32_t
  305. jackctl_parameter_get_enum_constraints_count(
  306. jackctl_parameter_t * parameter_ptr);
  307. /**
  308. * Call this function to get parameter enumeration value.
  309. *
  310. * @param parameter object handle of parameter
  311. * @param index index of parameter enumeration value
  312. *
  313. * @return enumeration value.
  314. */
  315. union jackctl_parameter_value
  316. jackctl_parameter_get_enum_constraint_value(
  317. jackctl_parameter_t * parameter_ptr,
  318. uint32_t index);
  319. /**
  320. * Call this function to get parameter enumeration value description.
  321. *
  322. * @param parameter object handle of parameter
  323. * @param index index of parameter enumeration value
  324. *
  325. * @return enumeration value description.
  326. */
  327. const char *
  328. jackctl_parameter_get_enum_constraint_description(
  329. jackctl_parameter_t * parameter_ptr,
  330. uint32_t index);
  331. /**
  332. * Call this function to get parameter range.
  333. *
  334. * @param parameter object handle of parameter
  335. * @param min_ptr pointer to variable receiving parameter minimum value
  336. * @param max_ptr pointer to variable receiving parameter maximum value
  337. */
  338. void
  339. jackctl_parameter_get_range_constraint(
  340. jackctl_parameter_t * parameter_ptr,
  341. union jackctl_parameter_value * min_ptr,
  342. union jackctl_parameter_value * max_ptr);
  343. /**
  344. * Call this function to check whether parameter constraint is strict,
  345. * i.e. whether supplying non-matching value will not work for sure.
  346. *
  347. * @param parameter parameter object handle to check
  348. *
  349. * @return whether parameter constraint is strict.
  350. */
  351. bool
  352. jackctl_parameter_constraint_is_strict(
  353. jackctl_parameter_t * parameter_ptr);
  354. /**
  355. * Call this function to check whether parameter has fake values,
  356. * i.e. values have no user meaningful meaning and only value
  357. * description is meaningful to user.
  358. *
  359. * @param parameter parameter object handle to check
  360. *
  361. * @return whether parameter constraint is strict.
  362. */
  363. bool
  364. jackctl_parameter_constraint_is_fake_value(
  365. jackctl_parameter_t * parameter_ptr);
  366. /**
  367. * Call this function to get list of available internal clients. List node data
  368. * pointers is a internal client object handle (::jackctl_internal_t).
  369. *
  370. * @param server server object handle to get internal clients for
  371. *
  372. * @return Single linked list of internal client object handles. Must not be
  373. * modified. Always same for same server object.
  374. */
  375. const JSList *
  376. jackctl_server_get_internals_list(
  377. jackctl_server_t * server);
  378. /**
  379. * Call this function to get name of internal client.
  380. *
  381. * @param internal internal object handle to get name of
  382. *
  383. * @return internal name. Must not be modified. Always same for same
  384. * internal object.
  385. */
  386. const char *
  387. jackctl_internal_get_name(
  388. jackctl_internal_t * internal);
  389. /**
  390. * Call this function to get list of internal parameters. List node data
  391. * pointers is a parameter object handle (::jackctl_parameter_t).
  392. *
  393. * @param internal internal object handle to get parameters for
  394. *
  395. * @return Single linked list of parameter object handles. Must not be
  396. * modified. Always same for same internal object.
  397. */
  398. const JSList *
  399. jackctl_internal_get_parameters(
  400. jackctl_internal_t * internal);
  401. /**
  402. * Call this function to load one internal client.
  403. *
  404. * @param server server object handle
  405. * @param internal internal to use
  406. *
  407. * @return success status: true - success, false - fail
  408. */
  409. bool
  410. jackctl_server_load_internal(
  411. jackctl_server_t * server,
  412. jackctl_internal_t * internal);
  413. /**
  414. * Call this function to unload one internal client.
  415. *
  416. * @param server server object handle
  417. * @param internal internal to unload
  418. *
  419. * @return success status: true - success, false - fail
  420. */
  421. bool
  422. jackctl_server_unload_internal(
  423. jackctl_server_t * server,
  424. jackctl_internal_t * internal);
  425. /**
  426. * Call this function to log an error message.
  427. *
  428. * @param format string
  429. */
  430. void
  431. jack_error(
  432. const char *format,
  433. ...);
  434. /**
  435. * Call this function to log an information message.
  436. *
  437. * @param format string
  438. */
  439. void
  440. jack_info(
  441. const char *format,
  442. ...);
  443. /**
  444. * Call this function to log an information message but only when
  445. * verbose mode is enabled.
  446. *
  447. * @param format string
  448. */
  449. void
  450. jack_log(
  451. const char *format,
  452. ...);
  453. #if 0
  454. { /* Adjust editor indent */
  455. #endif
  456. #ifdef __cplusplus
  457. } /* extern "C" */
  458. #endif
  459. #endif /* #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED */