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.

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