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.

594 lines
15KB

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