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.

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