JACK API headers
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.

control.h 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565
  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 __jack_control_h__
  24. #define __jack_control_h__
  25. #include <jack/jslist.h>
  26. #if !defined (__sun__)
  27. #include <stdbool.h>
  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 null char */
  41. #define JACK_PARAM_STRING_MAX 127
  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. * @defgroup ControlAPI the API for starting and controlling a JACK server
  68. * @{
  69. */
  70. /**
  71. * Call this function to setup process signal handling. As a general
  72. * rule, it is required for proper operation for the server object.
  73. *
  74. * @param flags signals setup flags, use 0 for none. Currently no
  75. * flags are defined
  76. *
  77. * @return the configurated signal set.
  78. */
  79. sigset_t
  80. jackctl_setup_signals(
  81. unsigned int flags);
  82. /**
  83. * Call this function to wait on a signal set.
  84. *
  85. * @param signals signals set to wait on
  86. */
  87. void
  88. jackctl_wait_signals(
  89. sigset_t signals);
  90. /**
  91. * Call this function to create server object.
  92. *
  93. * @param on_device_acquire - Optional callback to be called before device is acquired. If false is returned, device usage will fail
  94. * @param on_device_release - Optional callback to be called after device is released.
  95. *
  96. * @return server object handle, NULL if creation of server object
  97. * failed. Successfully created server object must be destroyed with
  98. * paired call to ::jackctl_server_destroy
  99. */
  100. jackctl_server_t *
  101. jackctl_server_create(
  102. bool (* on_device_acquire)(const char * device_name),
  103. void (* on_device_release)(const char * device_name));
  104. /**
  105. * Call this function to destroy server object.
  106. *
  107. * @param server server object handle to destroy
  108. */
  109. void
  110. jackctl_server_destroy(
  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 available drivers. List node data
  136. * pointers is a driver object handle (::jackctl_driver_t).
  137. *
  138. * @param server server object handle to get drivers for
  139. *
  140. * @return Single linked list of driver object handles. Must not be
  141. * modified. Always same for same server object.
  142. */
  143. const JSList *
  144. jackctl_server_get_drivers_list(
  145. jackctl_server_t * server);
  146. /**
  147. * Call this function to get list of server parameters. List node data
  148. * pointers is a parameter object handle (::jackctl_parameter_t).
  149. *
  150. * @param server server object handle to get parameters for
  151. *
  152. * @return Single linked list of parameter object handles. Must not be
  153. * modified. Always same for same server object.
  154. */
  155. const JSList *
  156. jackctl_server_get_parameters(
  157. jackctl_server_t * server);
  158. /**
  159. * Call this function to get list of available internal clients. List node data
  160. * pointers is a internal client object handle (::jackctl_internal_t).
  161. *
  162. * @param server server object handle to get internal clients for
  163. *
  164. * @return Single linked list of internal client object handles. Must not be
  165. * modified. Always same for same server object.
  166. */
  167. const JSList *
  168. jackctl_server_get_internals_list(
  169. jackctl_server_t * server);
  170. /**
  171. * Call this function to load one internal client.
  172. *
  173. * @param server server object handle
  174. * @param internal internal to use
  175. *
  176. * @return success status: true - success, false - fail
  177. */
  178. bool
  179. jackctl_server_load_internal(
  180. jackctl_server_t * server,
  181. jackctl_internal_t * internal);
  182. /**
  183. * Call this function to unload one internal client.
  184. *
  185. * @param server server object handle
  186. * @param internal internal to unload
  187. *
  188. * @return success status: true - success, false - fail
  189. */
  190. bool
  191. jackctl_server_unload_internal(
  192. jackctl_server_t * server,
  193. jackctl_internal_t * internal);
  194. /**
  195. * Call this function to add a slave in the driver slave list.
  196. *
  197. * @param server server object handle
  198. * @param driver driver to add in the driver slave list.
  199. *
  200. * @return success status: true - success, false - fail
  201. */
  202. bool
  203. jackctl_server_add_slave(jackctl_server_t * server,
  204. jackctl_driver_t * driver);
  205. /**
  206. * Call this function to remove a slave from the driver slave list.
  207. *
  208. * @param server server object handle
  209. * @param driver driver to remove from the driver slave list.
  210. *
  211. * @return success status: true - success, false - fail
  212. */
  213. bool
  214. jackctl_server_remove_slave(jackctl_server_t * server,
  215. jackctl_driver_t * driver);
  216. /**
  217. * Call this function to switch master driver.
  218. *
  219. * @param server server object handle
  220. * @param driver driver to switch to
  221. *
  222. * @return success status: true - success, false - fail
  223. */
  224. bool
  225. jackctl_server_switch_master(jackctl_server_t * server,
  226. jackctl_driver_t * driver);
  227. /**
  228. * Call this function to get name of driver.
  229. *
  230. * @param driver driver object handle to get name of
  231. *
  232. * @return driver name. Must not be modified. Always same for same
  233. * driver object.
  234. */
  235. const char *
  236. jackctl_driver_get_name(
  237. jackctl_driver_t * driver);
  238. /**
  239. * Call this function to get list of driver parameters. List node data
  240. * pointers is a parameter object handle (::jackctl_parameter_t).
  241. *
  242. * @param driver driver object handle to get parameters for
  243. *
  244. * @return Single linked list of parameter object handles. Must not be
  245. * modified. Always same for same driver object.
  246. */
  247. const JSList *
  248. jackctl_driver_get_parameters(
  249. jackctl_driver_t * driver);
  250. /**
  251. * Call this function to get name of internal client.
  252. *
  253. * @param internal internal object handle to get name of
  254. *
  255. * @return internal name. Must not be modified. Always same for same
  256. * internal object.
  257. */
  258. const char *
  259. jackctl_internal_get_name(
  260. jackctl_internal_t * internal);
  261. /**
  262. * Call this function to get list of internal parameters. List node data
  263. * pointers is a parameter object handle (::jackctl_parameter_t).
  264. *
  265. * @param internal internal object handle to get parameters for
  266. *
  267. * @return Single linked list of parameter object handles. Must not be
  268. * modified. Always same for same internal object.
  269. */
  270. const JSList *
  271. jackctl_internal_get_parameters(
  272. jackctl_internal_t * internal);
  273. /**
  274. * Call this function to get parameter name.
  275. *
  276. * @param parameter parameter object handle to get name of
  277. *
  278. * @return parameter name. Must not be modified. Always same for same
  279. * parameter object.
  280. */
  281. const char *
  282. jackctl_parameter_get_name(
  283. jackctl_parameter_t * parameter);
  284. /**
  285. * Call this function to get parameter short description.
  286. *
  287. * @param parameter parameter object handle to get short description of
  288. *
  289. * @return parameter short description. Must not be modified. Always
  290. * same for same parameter object.
  291. */
  292. const char *
  293. jackctl_parameter_get_short_description(
  294. jackctl_parameter_t * parameter);
  295. /**
  296. * Call this function to get parameter long description.
  297. *
  298. * @param parameter parameter object handle to get long description of
  299. *
  300. * @return parameter long description. Must not be modified. Always
  301. * same for same parameter object.
  302. */
  303. const char *
  304. jackctl_parameter_get_long_description(
  305. jackctl_parameter_t * parameter);
  306. /**
  307. * Call this function to get parameter type.
  308. *
  309. * @param parameter parameter object handle to get type of
  310. *
  311. * @return parameter type. Always same for same parameter object.
  312. */
  313. jackctl_param_type_t
  314. jackctl_parameter_get_type(
  315. jackctl_parameter_t * parameter);
  316. /**
  317. * Call this function to get parameter character.
  318. *
  319. * @param parameter parameter object handle to get character of
  320. *
  321. * @return character.
  322. */
  323. char
  324. jackctl_parameter_get_id(
  325. jackctl_parameter_t * parameter);
  326. /**
  327. * Call this function to check whether parameter has been set, or its
  328. * default value is being used.
  329. *
  330. * @param parameter parameter object handle to check
  331. *
  332. * @return true - parameter is set, false - parameter is using default
  333. * value.
  334. */
  335. bool
  336. jackctl_parameter_is_set(
  337. jackctl_parameter_t * parameter);
  338. /**
  339. * Call this function to reset parameter to its default value.
  340. *
  341. * @param parameter parameter object handle to reset value of
  342. *
  343. * @return success status: true - success, false - fail
  344. */
  345. bool
  346. jackctl_parameter_reset(
  347. jackctl_parameter_t * parameter);
  348. /**
  349. * Call this function to get parameter value.
  350. *
  351. * @param parameter parameter object handle to get value of
  352. *
  353. * @return parameter value.
  354. */
  355. union jackctl_parameter_value
  356. jackctl_parameter_get_value(
  357. jackctl_parameter_t * parameter);
  358. /**
  359. * Call this function to set parameter value.
  360. *
  361. * @param parameter parameter object handle to get value of
  362. * @param value_ptr pointer to variable containing parameter value
  363. *
  364. * @return success status: true - success, false - fail
  365. */
  366. bool
  367. jackctl_parameter_set_value(
  368. jackctl_parameter_t * parameter,
  369. const union jackctl_parameter_value * value_ptr);
  370. /**
  371. * Call this function to get parameter default value.
  372. *
  373. * @param parameter parameter object handle to get default value of
  374. *
  375. * @return parameter default value.
  376. */
  377. union jackctl_parameter_value
  378. jackctl_parameter_get_default_value(
  379. jackctl_parameter_t * parameter);
  380. /**
  381. * Call this function check whether parameter has range constraint.
  382. *
  383. * @param parameter object handle of parameter to check
  384. *
  385. * @return whether parameter has range constraint.
  386. */
  387. bool
  388. jackctl_parameter_has_range_constraint(
  389. jackctl_parameter_t * parameter);
  390. /**
  391. * Call this function check whether parameter has enumeration constraint.
  392. *
  393. * @param parameter object handle of parameter to check
  394. *
  395. * @return whether parameter has enumeration constraint.
  396. */
  397. bool
  398. jackctl_parameter_has_enum_constraint(
  399. jackctl_parameter_t * parameter);
  400. /**
  401. * Call this function get how many enumeration values parameter has.
  402. *
  403. * @param parameter object handle of parameter
  404. *
  405. * @return number of enumeration values
  406. */
  407. uint32_t
  408. jackctl_parameter_get_enum_constraints_count(
  409. jackctl_parameter_t * parameter);
  410. /**
  411. * Call this function to get parameter enumeration value.
  412. *
  413. * @param parameter object handle of parameter
  414. * @param index index of parameter enumeration value
  415. *
  416. * @return enumeration value.
  417. */
  418. union jackctl_parameter_value
  419. jackctl_parameter_get_enum_constraint_value(
  420. jackctl_parameter_t * parameter,
  421. uint32_t index);
  422. /**
  423. * Call this function to get parameter enumeration value description.
  424. *
  425. * @param parameter object handle of parameter
  426. * @param index index of parameter enumeration value
  427. *
  428. * @return enumeration value description.
  429. */
  430. const char *
  431. jackctl_parameter_get_enum_constraint_description(
  432. jackctl_parameter_t * parameter,
  433. uint32_t index);
  434. /**
  435. * Call this function to get parameter range.
  436. *
  437. * @param parameter object handle of parameter
  438. * @param min_ptr pointer to variable receiving parameter minimum value
  439. * @param max_ptr pointer to variable receiving parameter maximum value
  440. */
  441. void
  442. jackctl_parameter_get_range_constraint(
  443. jackctl_parameter_t * parameter,
  444. union jackctl_parameter_value * min_ptr,
  445. union jackctl_parameter_value * max_ptr);
  446. /**
  447. * Call this function to check whether parameter constraint is strict,
  448. * i.e. whether supplying non-matching value will not work for sure.
  449. *
  450. * @param parameter parameter object handle to check
  451. *
  452. * @return whether parameter constraint is strict.
  453. */
  454. bool
  455. jackctl_parameter_constraint_is_strict(
  456. jackctl_parameter_t * parameter);
  457. /**
  458. * Call this function to check whether parameter has fake values,
  459. * i.e. values have no user meaningful meaning and only value
  460. * description is meaningful to user.
  461. *
  462. * @param parameter parameter object handle to check
  463. *
  464. * @return whether parameter constraint is strict.
  465. */
  466. bool
  467. jackctl_parameter_constraint_is_fake_value(
  468. jackctl_parameter_t * parameter);
  469. /**
  470. * Call this function to log an error message.
  471. *
  472. * @param format string
  473. */
  474. void
  475. jack_error(
  476. const char *format,
  477. ...);
  478. /**
  479. * Call this function to log an information message.
  480. *
  481. * @param format string
  482. */
  483. void
  484. jack_info(
  485. const char *format,
  486. ...);
  487. /**
  488. * Call this function to log an information message but only when
  489. * verbose mode is enabled.
  490. *
  491. * @param format string
  492. */
  493. void
  494. jack_log(
  495. const char *format,
  496. ...);
  497. /* @} */
  498. #if 0
  499. { /* Adjust editor indent */
  500. #endif
  501. #ifdef __cplusplus
  502. } /* extern "C" */
  503. #endif
  504. #endif /* __jack_control_h__ */