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.

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