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.

659 lines
17KB

  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. * \bold THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED IN
  102. * NEW JACK PROJECTS
  103. *
  104. * @deprecated Please use jackctl_server_create2().
  105. */
  106. jackctl_server_t *
  107. jackctl_server_create(
  108. bool (* on_device_acquire)(const char * device_name),
  109. void (* on_device_release)(const char * device_name));
  110. /**
  111. * Call this function to create server object.
  112. *
  113. * @param on_device_acquire - Optional callback to be called before device is acquired. If false is returned, device usage will fail
  114. * @param on_device_release - Optional callback to be called after device is released.
  115. * @param on_device_reservation_loop - Optional callback to be called when looping/idling the reservation.
  116. *
  117. * @return server object handle, NULL if creation of server object
  118. * failed. Successfully created server object must be destroyed with
  119. * paired call to ::jackctl_server_destroy
  120. */
  121. jackctl_server_t *
  122. jackctl_server_create2(
  123. bool (* on_device_acquire)(const char * device_name),
  124. void (* on_device_release)(const char * device_name),
  125. void (* on_device_reservation_loop)(void));
  126. /**
  127. * Call this function to destroy server object.
  128. *
  129. * @param server server object handle to destroy
  130. */
  131. void
  132. jackctl_server_destroy(
  133. jackctl_server_t * server);
  134. /**
  135. * Call this function to open JACK server
  136. *
  137. * @param server server object handle
  138. * @param driver driver to use
  139. *
  140. * @return success status: true - success, false - fail
  141. */
  142. bool
  143. jackctl_server_open(
  144. jackctl_server_t * server,
  145. jackctl_driver_t * driver);
  146. /**
  147. * Call this function to start JACK server
  148. *
  149. * @param server server object handle
  150. *
  151. * @return success status: true - success, false - fail
  152. */
  153. bool
  154. jackctl_server_start(
  155. jackctl_server_t * server);
  156. /**
  157. * Call this function to stop JACK server
  158. *
  159. * @param server server object handle
  160. *
  161. * @return success status: true - success, false - fail
  162. */
  163. bool
  164. jackctl_server_stop(
  165. jackctl_server_t * server);
  166. /**
  167. * Call this function to close JACK server
  168. *
  169. * @param server server object handle
  170. *
  171. * @return success status: true - success, false - fail
  172. */
  173. bool
  174. jackctl_server_close(
  175. jackctl_server_t * server);
  176. /**
  177. * Call this function to get list of available drivers. List node data
  178. * pointers is a driver object handle (::jackctl_driver_t).
  179. *
  180. * @param server server object handle to get drivers for
  181. *
  182. * @return Single linked list of driver object handles. Must not be
  183. * modified. Always same for same server object.
  184. */
  185. const JSList *
  186. jackctl_server_get_drivers_list(
  187. jackctl_server_t * server);
  188. /**
  189. * Call this function to get list of server parameters. List node data
  190. * pointers is a parameter object handle (::jackctl_parameter_t).
  191. *
  192. * @param server server object handle to get parameters for
  193. *
  194. * @return Single linked list of parameter object handles. Must not be
  195. * modified. Always same for same server object.
  196. */
  197. const JSList *
  198. jackctl_server_get_parameters(
  199. jackctl_server_t * server);
  200. /**
  201. * Call this function to get list of available internal clients. List node data
  202. * pointers is a internal client object handle (::jackctl_internal_t).
  203. *
  204. * @param server server object handle to get internal clients for
  205. *
  206. * @return Single linked list of internal client object handles. Must not be
  207. * modified. Always same for same server object.
  208. */
  209. const JSList *
  210. jackctl_server_get_internals_list(
  211. jackctl_server_t * server);
  212. /**
  213. * Call this function to load one internal client.
  214. * (can be used when the server is running)
  215. *
  216. * @param server server object handle
  217. * @param internal internal to use
  218. *
  219. * @return success status: true - success, false - fail
  220. */
  221. bool
  222. jackctl_server_load_internal(
  223. jackctl_server_t * server,
  224. jackctl_internal_t * internal);
  225. /**
  226. * Call this function to unload one internal client.
  227. * (can be used when the server is running)
  228. *
  229. * @param server server object handle
  230. * @param internal internal to unload
  231. *
  232. * @return success status: true - success, false - fail
  233. */
  234. bool
  235. jackctl_server_unload_internal(
  236. jackctl_server_t * server,
  237. jackctl_internal_t * internal);
  238. /**
  239. * Call this function to load a session file.
  240. * (can be used when the server is running)
  241. *
  242. * @param server server object handle
  243. * @param file the session file to load, containing a list of
  244. * internal clients and connections to be made.
  245. *
  246. * @return success status: true - success, false - fail
  247. */
  248. bool jackctl_server_load_session_file(
  249. jackctl_server_t * server_ptr,
  250. const char * file);
  251. /**
  252. * Call this function to add a slave in the driver slave list.
  253. * (cannot be used when the server is running that is between
  254. * jackctl_server_start and jackctl_server_stop)
  255. *
  256. * @param server server object handle
  257. * @param driver driver to add in the driver slave list.
  258. *
  259. * @return success status: true - success, false - fail
  260. */
  261. bool
  262. jackctl_server_add_slave(jackctl_server_t * server,
  263. jackctl_driver_t * driver);
  264. /**
  265. * Call this function to remove a slave from the driver slave list.
  266. * (cannot be used when the server is running that is between
  267. * jackctl_server_start and jackctl_server_stop)
  268. *
  269. * @param server server object handle
  270. * @param driver driver to remove from the driver slave list.
  271. *
  272. * @return success status: true - success, false - fail
  273. */
  274. bool
  275. jackctl_server_remove_slave(jackctl_server_t * server,
  276. jackctl_driver_t * driver);
  277. /**
  278. * Call this function to switch master driver.
  279. *
  280. * @param server server object handle
  281. * @param driver driver to switch to
  282. *
  283. * @return success status: true - success, false - fail
  284. */
  285. bool
  286. jackctl_server_switch_master(jackctl_server_t * server,
  287. jackctl_driver_t * driver);
  288. /**
  289. * Call this function to get name of driver.
  290. *
  291. * @param driver driver object handle to get name of
  292. *
  293. * @return driver name. Must not be modified. Always same for same
  294. * driver object.
  295. */
  296. const char *
  297. jackctl_driver_get_name(
  298. jackctl_driver_t * driver);
  299. /**
  300. * Call this function to get type of driver.
  301. *
  302. * @param driver driver object handle to get name of
  303. *
  304. * @return driver type. Must not be modified. Always same for same
  305. * driver object.
  306. */
  307. jackctl_driver_type_t
  308. jackctl_driver_get_type(
  309. jackctl_driver_t * driver);
  310. /**
  311. * Call this function to get list of driver parameters. List node data
  312. * pointers is a parameter object handle (::jackctl_parameter_t).
  313. *
  314. * @param driver driver object handle to get parameters for
  315. *
  316. * @return Single linked list of parameter object handles. Must not be
  317. * modified. Always same for same driver object.
  318. */
  319. const JSList *
  320. jackctl_driver_get_parameters(
  321. jackctl_driver_t * driver);
  322. /**
  323. * Call this function to parse parameters for a driver.
  324. *
  325. * @param driver driver object handle
  326. * @param argc parameter list len
  327. * @param argv parameter list, as an array of char*
  328. *
  329. * @return success status: true - success, false - fail
  330. */
  331. int
  332. jackctl_driver_params_parse(
  333. jackctl_driver_t * driver,
  334. int argc,
  335. char* argv[]);
  336. /**
  337. * Call this function to get name of internal client.
  338. *
  339. * @param internal internal object handle to get name of
  340. *
  341. * @return internal name. Must not be modified. Always same for same
  342. * internal object.
  343. */
  344. const char *
  345. jackctl_internal_get_name(
  346. jackctl_internal_t * internal);
  347. /**
  348. * Call this function to get list of internal parameters. List node data
  349. * pointers is a parameter object handle (::jackctl_parameter_t).
  350. *
  351. * @param internal internal object handle to get parameters for
  352. *
  353. * @return Single linked list of parameter object handles. Must not be
  354. * modified. Always same for same internal object.
  355. */
  356. const JSList *
  357. jackctl_internal_get_parameters(
  358. jackctl_internal_t * internal);
  359. /**
  360. * Call this function to get parameter name.
  361. *
  362. * @param parameter parameter object handle to get name of
  363. *
  364. * @return parameter name. Must not be modified. Always same for same
  365. * parameter object.
  366. */
  367. const char *
  368. jackctl_parameter_get_name(
  369. jackctl_parameter_t * parameter);
  370. /**
  371. * Call this function to get parameter short description.
  372. *
  373. * @param parameter parameter object handle to get short description of
  374. *
  375. * @return parameter short description. Must not be modified. Always
  376. * same for same parameter object.
  377. */
  378. const char *
  379. jackctl_parameter_get_short_description(
  380. jackctl_parameter_t * parameter);
  381. /**
  382. * Call this function to get parameter long description.
  383. *
  384. * @param parameter parameter object handle to get long description of
  385. *
  386. * @return parameter long description. Must not be modified. Always
  387. * same for same parameter object.
  388. */
  389. const char *
  390. jackctl_parameter_get_long_description(
  391. jackctl_parameter_t * parameter);
  392. /**
  393. * Call this function to get parameter type.
  394. *
  395. * @param parameter parameter object handle to get type of
  396. *
  397. * @return parameter type. Always same for same parameter object.
  398. */
  399. jackctl_param_type_t
  400. jackctl_parameter_get_type(
  401. jackctl_parameter_t * parameter);
  402. /**
  403. * Call this function to get parameter character.
  404. *
  405. * @param parameter parameter object handle to get character of
  406. *
  407. * @return character.
  408. */
  409. char
  410. jackctl_parameter_get_id(
  411. jackctl_parameter_t * parameter);
  412. /**
  413. * Call this function to check whether parameter has been set, or its
  414. * default value is being used.
  415. *
  416. * @param parameter parameter object handle to check
  417. *
  418. * @return true - parameter is set, false - parameter is using default
  419. * value.
  420. */
  421. bool
  422. jackctl_parameter_is_set(
  423. jackctl_parameter_t * parameter);
  424. /**
  425. * Call this function to reset parameter to its default value.
  426. *
  427. * @param parameter parameter object handle to reset value of
  428. *
  429. * @return success status: true - success, false - fail
  430. */
  431. bool
  432. jackctl_parameter_reset(
  433. jackctl_parameter_t * parameter);
  434. /**
  435. * Call this function to get parameter value.
  436. *
  437. * @param parameter parameter object handle to get value of
  438. *
  439. * @return parameter value.
  440. */
  441. union jackctl_parameter_value
  442. jackctl_parameter_get_value(
  443. jackctl_parameter_t * parameter);
  444. /**
  445. * Call this function to set parameter value.
  446. *
  447. * @param parameter parameter object handle to get value of
  448. * @param value_ptr pointer to variable containing parameter value
  449. *
  450. * @return success status: true - success, false - fail
  451. */
  452. bool
  453. jackctl_parameter_set_value(
  454. jackctl_parameter_t * parameter,
  455. const union jackctl_parameter_value * value_ptr);
  456. /**
  457. * Call this function to get parameter default value.
  458. *
  459. * @param parameter parameter object handle to get default value of
  460. *
  461. * @return parameter default value.
  462. */
  463. union jackctl_parameter_value
  464. jackctl_parameter_get_default_value(
  465. jackctl_parameter_t * parameter);
  466. /**
  467. * Call this function check whether parameter has range constraint.
  468. *
  469. * @param parameter object handle of parameter to check
  470. *
  471. * @return whether parameter has range constraint.
  472. */
  473. bool
  474. jackctl_parameter_has_range_constraint(
  475. jackctl_parameter_t * parameter);
  476. /**
  477. * Call this function check whether parameter has enumeration constraint.
  478. *
  479. * @param parameter object handle of parameter to check
  480. *
  481. * @return whether parameter has enumeration constraint.
  482. */
  483. bool
  484. jackctl_parameter_has_enum_constraint(
  485. jackctl_parameter_t * parameter);
  486. /**
  487. * Call this function get how many enumeration values parameter has.
  488. *
  489. * @param parameter object handle of parameter
  490. *
  491. * @return number of enumeration values
  492. */
  493. uint32_t
  494. jackctl_parameter_get_enum_constraints_count(
  495. jackctl_parameter_t * parameter);
  496. /**
  497. * Call this function to get parameter enumeration value.
  498. *
  499. * @param parameter object handle of parameter
  500. * @param index index of parameter enumeration value
  501. *
  502. * @return enumeration value.
  503. */
  504. union jackctl_parameter_value
  505. jackctl_parameter_get_enum_constraint_value(
  506. jackctl_parameter_t * parameter,
  507. uint32_t index);
  508. /**
  509. * Call this function to get parameter enumeration value description.
  510. *
  511. * @param parameter object handle of parameter
  512. * @param index index of parameter enumeration value
  513. *
  514. * @return enumeration value description.
  515. */
  516. const char *
  517. jackctl_parameter_get_enum_constraint_description(
  518. jackctl_parameter_t * parameter,
  519. uint32_t index);
  520. /**
  521. * Call this function to get parameter range.
  522. *
  523. * @param parameter object handle of parameter
  524. * @param min_ptr pointer to variable receiving parameter minimum value
  525. * @param max_ptr pointer to variable receiving parameter maximum value
  526. */
  527. void
  528. jackctl_parameter_get_range_constraint(
  529. jackctl_parameter_t * parameter,
  530. union jackctl_parameter_value * min_ptr,
  531. union jackctl_parameter_value * max_ptr);
  532. /**
  533. * Call this function to check whether parameter constraint is strict,
  534. * i.e. whether supplying non-matching value will not work for sure.
  535. *
  536. * @param parameter parameter object handle to check
  537. *
  538. * @return whether parameter constraint is strict.
  539. */
  540. bool
  541. jackctl_parameter_constraint_is_strict(
  542. jackctl_parameter_t * parameter);
  543. /**
  544. * Call this function to check whether parameter has fake values,
  545. * i.e. values have no user meaningful meaning and only value
  546. * description is meaningful to user.
  547. *
  548. * @param parameter parameter object handle to check
  549. *
  550. * @return whether parameter constraint is strict.
  551. */
  552. bool
  553. jackctl_parameter_constraint_is_fake_value(
  554. jackctl_parameter_t * parameter);
  555. /**
  556. * Call this function to log an error message.
  557. *
  558. * @param format string
  559. */
  560. void
  561. jack_error(
  562. const char *format,
  563. ...);
  564. /**
  565. * Call this function to log an information message.
  566. *
  567. * @param format string
  568. */
  569. void
  570. jack_info(
  571. const char *format,
  572. ...);
  573. /**
  574. * Call this function to log an information message but only when
  575. * verbose mode is enabled.
  576. *
  577. * @param format string
  578. */
  579. void
  580. jack_log(
  581. const char *format,
  582. ...);
  583. /* @} */
  584. #if 0
  585. { /* Adjust editor indent */
  586. #endif
  587. #ifdef __cplusplus
  588. } /* extern "C" */
  589. #endif
  590. #endif /* #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED */