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.

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