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.

632 lines
16KB

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