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.

588 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. *
  194. * @param server server object handle
  195. * @param internal internal to use
  196. *
  197. * @return success status: true - success, false - fail
  198. */
  199. bool
  200. jackctl_server_load_internal(
  201. jackctl_server_t * server,
  202. jackctl_internal_t * internal);
  203. /**
  204. * Call this function to unload one internal client.
  205. *
  206. * @param server server object handle
  207. * @param internal internal to unload
  208. *
  209. * @return success status: true - success, false - fail
  210. */
  211. bool
  212. jackctl_server_unload_internal(
  213. jackctl_server_t * server,
  214. jackctl_internal_t * internal);
  215. /**
  216. * Call this function to add a slave in the driver slave list.
  217. *
  218. * @param server server object handle
  219. * @param driver driver to add in the driver slave list.
  220. *
  221. * @return success status: true - success, false - fail
  222. */
  223. bool
  224. jackctl_server_add_slave(jackctl_server_t * server,
  225. jackctl_driver_t * driver);
  226. /**
  227. * Call this function to remove a slave from the driver slave list.
  228. *
  229. * @param server server object handle
  230. * @param driver driver to remove from the driver slave list.
  231. *
  232. * @return success status: true - success, false - fail
  233. */
  234. bool
  235. jackctl_server_remove_slave(jackctl_server_t * server,
  236. jackctl_driver_t * driver);
  237. /**
  238. * Call this function to switch master driver.
  239. *
  240. * @param server server object handle
  241. * @param driver driver to switch to
  242. *
  243. * @return success status: true - success, false - fail
  244. */
  245. bool
  246. jackctl_server_switch_master(jackctl_server_t * server,
  247. jackctl_driver_t * driver);
  248. /**
  249. * Call this function to get name of driver.
  250. *
  251. * @param driver driver object handle to get name of
  252. *
  253. * @return driver name. Must not be modified. Always same for same
  254. * driver object.
  255. */
  256. const char *
  257. jackctl_driver_get_name(
  258. jackctl_driver_t * driver);
  259. /**
  260. * Call this function to get list of driver parameters. List node data
  261. * pointers is a parameter object handle (::jackctl_parameter_t).
  262. *
  263. * @param driver driver object handle to get parameters for
  264. *
  265. * @return Single linked list of parameter object handles. Must not be
  266. * modified. Always same for same driver object.
  267. */
  268. const JSList *
  269. jackctl_driver_get_parameters(
  270. jackctl_driver_t * driver);
  271. /**
  272. * Call this function to get name of internal client.
  273. *
  274. * @param internal internal object handle to get name of
  275. *
  276. * @return internal name. Must not be modified. Always same for same
  277. * internal object.
  278. */
  279. const char *
  280. jackctl_internal_get_name(
  281. jackctl_internal_t * internal);
  282. /**
  283. * Call this function to get list of internal parameters. List node data
  284. * pointers is a parameter object handle (::jackctl_parameter_t).
  285. *
  286. * @param internal internal 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 internal object.
  290. */
  291. const JSList *
  292. jackctl_internal_get_parameters(
  293. jackctl_internal_t * internal);
  294. /**
  295. * Call this function to get parameter name.
  296. *
  297. * @param parameter parameter object handle to get name of
  298. *
  299. * @return parameter name. Must not be modified. Always same for same
  300. * parameter object.
  301. */
  302. const char *
  303. jackctl_parameter_get_name(
  304. jackctl_parameter_t * parameter);
  305. /**
  306. * Call this function to get parameter short description.
  307. *
  308. * @param parameter parameter object handle to get short description of
  309. *
  310. * @return parameter short description. Must not be modified. Always
  311. * same for same parameter object.
  312. */
  313. const char *
  314. jackctl_parameter_get_short_description(
  315. jackctl_parameter_t * parameter);
  316. /**
  317. * Call this function to get parameter long description.
  318. *
  319. * @param parameter parameter object handle to get long description of
  320. *
  321. * @return parameter long description. Must not be modified. Always
  322. * same for same parameter object.
  323. */
  324. const char *
  325. jackctl_parameter_get_long_description(
  326. jackctl_parameter_t * parameter);
  327. /**
  328. * Call this function to get parameter type.
  329. *
  330. * @param parameter parameter object handle to get type of
  331. *
  332. * @return parameter type. Always same for same parameter object.
  333. */
  334. jackctl_param_type_t
  335. jackctl_parameter_get_type(
  336. jackctl_parameter_t * parameter);
  337. /**
  338. * Call this function to get parameter character.
  339. *
  340. * @param parameter parameter object handle to get character of
  341. *
  342. * @return character.
  343. */
  344. char
  345. jackctl_parameter_get_id(
  346. jackctl_parameter_t * parameter);
  347. /**
  348. * Call this function to check whether parameter has been set, or its
  349. * default value is being used.
  350. *
  351. * @param parameter parameter object handle to check
  352. *
  353. * @return true - parameter is set, false - parameter is using default
  354. * value.
  355. */
  356. bool
  357. jackctl_parameter_is_set(
  358. jackctl_parameter_t * parameter);
  359. /**
  360. * Call this function to reset parameter to its default value.
  361. *
  362. * @param parameter parameter object handle to reset value of
  363. *
  364. * @return success status: true - success, false - fail
  365. */
  366. bool
  367. jackctl_parameter_reset(
  368. jackctl_parameter_t * parameter);
  369. /**
  370. * Call this function to get parameter value.
  371. *
  372. * @param parameter parameter object handle to get value of
  373. *
  374. * @return parameter value.
  375. */
  376. union jackctl_parameter_value
  377. jackctl_parameter_get_value(
  378. jackctl_parameter_t * parameter);
  379. /**
  380. * Call this function to set parameter value.
  381. *
  382. * @param parameter parameter object handle to get value of
  383. * @param value_ptr pointer to variable containing parameter value
  384. *
  385. * @return success status: true - success, false - fail
  386. */
  387. bool
  388. jackctl_parameter_set_value(
  389. jackctl_parameter_t * parameter,
  390. const union jackctl_parameter_value * value_ptr);
  391. /**
  392. * Call this function to get parameter default value.
  393. *
  394. * @param parameter parameter object handle to get default value of
  395. *
  396. * @return parameter default value.
  397. */
  398. union jackctl_parameter_value
  399. jackctl_parameter_get_default_value(
  400. jackctl_parameter_t * parameter);
  401. /**
  402. * Call this function check whether parameter has range constraint.
  403. *
  404. * @param parameter object handle of parameter to check
  405. *
  406. * @return whether parameter has range constraint.
  407. */
  408. bool
  409. jackctl_parameter_has_range_constraint(
  410. jackctl_parameter_t * parameter);
  411. /**
  412. * Call this function check whether parameter has enumeration constraint.
  413. *
  414. * @param parameter object handle of parameter to check
  415. *
  416. * @return whether parameter has enumeration constraint.
  417. */
  418. bool
  419. jackctl_parameter_has_enum_constraint(
  420. jackctl_parameter_t * parameter);
  421. /**
  422. * Call this function get how many enumeration values parameter has.
  423. *
  424. * @param parameter object handle of parameter
  425. *
  426. * @return number of enumeration values
  427. */
  428. uint32_t
  429. jackctl_parameter_get_enum_constraints_count(
  430. jackctl_parameter_t * parameter);
  431. /**
  432. * Call this function to get parameter enumeration value.
  433. *
  434. * @param parameter object handle of parameter
  435. * @param index index of parameter enumeration value
  436. *
  437. * @return enumeration value.
  438. */
  439. union jackctl_parameter_value
  440. jackctl_parameter_get_enum_constraint_value(
  441. jackctl_parameter_t * parameter,
  442. uint32_t index);
  443. /**
  444. * Call this function to get parameter enumeration value description.
  445. *
  446. * @param parameter object handle of parameter
  447. * @param index index of parameter enumeration value
  448. *
  449. * @return enumeration value description.
  450. */
  451. const char *
  452. jackctl_parameter_get_enum_constraint_description(
  453. jackctl_parameter_t * parameter,
  454. uint32_t index);
  455. /**
  456. * Call this function to get parameter range.
  457. *
  458. * @param parameter object handle of parameter
  459. * @param min_ptr pointer to variable receiving parameter minimum value
  460. * @param max_ptr pointer to variable receiving parameter maximum value
  461. */
  462. void
  463. jackctl_parameter_get_range_constraint(
  464. jackctl_parameter_t * parameter,
  465. union jackctl_parameter_value * min_ptr,
  466. union jackctl_parameter_value * max_ptr);
  467. /**
  468. * Call this function to check whether parameter constraint is strict,
  469. * i.e. whether supplying non-matching value will not work for sure.
  470. *
  471. * @param parameter parameter object handle to check
  472. *
  473. * @return whether parameter constraint is strict.
  474. */
  475. bool
  476. jackctl_parameter_constraint_is_strict(
  477. jackctl_parameter_t * parameter);
  478. /**
  479. * Call this function to check whether parameter has fake values,
  480. * i.e. values have no user meaningful meaning and only value
  481. * description is meaningful to user.
  482. *
  483. * @param parameter parameter object handle to check
  484. *
  485. * @return whether parameter constraint is strict.
  486. */
  487. bool
  488. jackctl_parameter_constraint_is_fake_value(
  489. jackctl_parameter_t * parameter);
  490. /**
  491. * Call this function to log an error message.
  492. *
  493. * @param format string
  494. */
  495. void
  496. jack_error(
  497. const char *format,
  498. ...);
  499. /**
  500. * Call this function to log an information message.
  501. *
  502. * @param format string
  503. */
  504. void
  505. jack_info(
  506. const char *format,
  507. ...);
  508. /**
  509. * Call this function to log an information message but only when
  510. * verbose mode is enabled.
  511. *
  512. * @param format string
  513. */
  514. void
  515. jack_log(
  516. const char *format,
  517. ...);
  518. /* @} */
  519. #if 0
  520. { /* Adjust editor indent */
  521. #endif
  522. #ifdef __cplusplus
  523. } /* extern "C" */
  524. #endif
  525. #endif /* #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED */