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.

563 lines
14KB

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