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.

559 lines
14KB

  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. * @return server object handle, NULL if creation of server object
  93. * failed. Successfully created server object must be destroyed with
  94. * paired call to ::jackctl_server_destroy
  95. */
  96. jackctl_server_t *
  97. jackctl_server_create();
  98. /**
  99. * Call this function to destroy server object.
  100. *
  101. * @param server server object handle to destroy
  102. */
  103. void
  104. jackctl_server_destroy(
  105. jackctl_server_t * server);
  106. /**
  107. * Call this function to get list of available drivers. List node data
  108. * pointers is a driver object handle (::jackctl_driver_t).
  109. *
  110. * @param server server object handle to get drivers for
  111. *
  112. * @return Single linked list of driver object handles. Must not be
  113. * modified. Always same for same server object.
  114. */
  115. const JSList *
  116. jackctl_server_get_drivers_list(
  117. jackctl_server_t * server);
  118. /**
  119. * Call this function to start JACK server
  120. *
  121. * @param server server object handle
  122. * @param driver driver to use
  123. *
  124. * @return success status: true - success, false - fail
  125. */
  126. bool
  127. jackctl_server_start(
  128. jackctl_server_t * server,
  129. jackctl_driver_t * driver);
  130. /**
  131. * Call this function to stop JACK server
  132. *
  133. * @param server server object handle
  134. *
  135. * @return success status: true - success, false - fail
  136. */
  137. bool
  138. jackctl_server_stop(
  139. jackctl_server_t * server);
  140. /**
  141. * Call this function to get list of server parameters. List node data
  142. * pointers is a parameter object handle (::jackctl_parameter_t).
  143. *
  144. * @param server server object handle to get parameters for
  145. *
  146. * @return Single linked list of parameter object handles. Must not be
  147. * modified. Always same for same server object.
  148. */
  149. const JSList *
  150. jackctl_server_get_parameters(
  151. jackctl_server_t * server);
  152. /**
  153. * Call this function to get name of driver.
  154. *
  155. * @param driver driver object handle to get name of
  156. *
  157. * @return driver name. Must not be modified. Always same for same
  158. * driver object.
  159. */
  160. const char *
  161. jackctl_driver_get_name(
  162. jackctl_driver_t * driver);
  163. /**
  164. * Call this function to get list of driver parameters. List node data
  165. * pointers is a parameter object handle (::jackctl_parameter_t).
  166. *
  167. * @param driver driver object handle to get parameters for
  168. *
  169. * @return Single linked list of parameter object handles. Must not be
  170. * modified. Always same for same driver object.
  171. */
  172. const JSList *
  173. jackctl_driver_get_parameters(
  174. jackctl_driver_t * driver);
  175. /**
  176. * Call this function to get parameter name.
  177. *
  178. * @param parameter parameter object handle to get name of
  179. *
  180. * @return parameter name. Must not be modified. Always same for same
  181. * parameter object.
  182. */
  183. const char *
  184. jackctl_parameter_get_name(
  185. jackctl_parameter_t * parameter);
  186. /**
  187. * Call this function to get parameter short description.
  188. *
  189. * @param parameter parameter object handle to get short description of
  190. *
  191. * @return parameter short description. Must not be modified. Always
  192. * same for same parameter object.
  193. */
  194. const char *
  195. jackctl_parameter_get_short_description(
  196. jackctl_parameter_t * parameter);
  197. /**
  198. * Call this function to get parameter long description.
  199. *
  200. * @param parameter parameter object handle to get long description of
  201. *
  202. * @return parameter long description. Must not be modified. Always
  203. * same for same parameter object.
  204. */
  205. const char *
  206. jackctl_parameter_get_long_description(
  207. jackctl_parameter_t * parameter);
  208. /**
  209. * Call this function to get parameter type.
  210. *
  211. * @param parameter parameter object handle to get type of
  212. *
  213. * @return parameter type. Always same for same parameter object.
  214. */
  215. jackctl_param_type_t
  216. jackctl_parameter_get_type(
  217. jackctl_parameter_t * parameter);
  218. /**
  219. * Call this function to get parameter character.
  220. *
  221. * @param parameter parameter object handle to get character of
  222. *
  223. * @return character.
  224. */
  225. char
  226. jackctl_parameter_get_id(
  227. jackctl_parameter_t * parameter);
  228. /**
  229. * Call this function to check whether parameter has been set, or its
  230. * default value is being used.
  231. *
  232. * @param parameter parameter object handle to check
  233. *
  234. * @return true - parameter is set, false - parameter is using default
  235. * value.
  236. */
  237. bool
  238. jackctl_parameter_is_set(
  239. jackctl_parameter_t * parameter);
  240. /**
  241. * Call this function to reset parameter to its default value.
  242. *
  243. * @param parameter parameter object handle to reset value of
  244. *
  245. * @return success status: true - success, false - fail
  246. */
  247. bool
  248. jackctl_parameter_reset(
  249. jackctl_parameter_t * parameter);
  250. /**
  251. * Call this function to get parameter value.
  252. *
  253. * @param parameter parameter object handle to get value of
  254. *
  255. * @return parameter value.
  256. */
  257. union jackctl_parameter_value
  258. jackctl_parameter_get_value(
  259. jackctl_parameter_t * parameter);
  260. /**
  261. * Call this function to set parameter value.
  262. *
  263. * @param parameter parameter object handle to get value of
  264. * @param value_ptr pointer to variable containing parameter value
  265. *
  266. * @return success status: true - success, false - fail
  267. */
  268. bool
  269. jackctl_parameter_set_value(
  270. jackctl_parameter_t * parameter,
  271. const union jackctl_parameter_value * value_ptr);
  272. /**
  273. * Call this function to get parameter default value.
  274. *
  275. * @param parameter parameter object handle to get default value of
  276. *
  277. * @return parameter default value.
  278. */
  279. union jackctl_parameter_value
  280. jackctl_parameter_get_default_value(
  281. jackctl_parameter_t * parameter);
  282. /**
  283. * Call this function check whether parameter has range constraint.
  284. *
  285. * @param parameter object handle of parameter to check
  286. *
  287. * @return whether parameter has range constraint.
  288. */
  289. bool
  290. jackctl_parameter_has_range_constraint(
  291. jackctl_parameter_t * parameter);
  292. /**
  293. * Call this function check whether parameter has enumeration constraint.
  294. *
  295. * @param parameter object handle of parameter to check
  296. *
  297. * @return whether parameter has enumeration constraint.
  298. */
  299. bool
  300. jackctl_parameter_has_enum_constraint(
  301. jackctl_parameter_t * parameter);
  302. /**
  303. * Call this function get how many enumeration values parameter has.
  304. *
  305. * @param parameter object handle of parameter
  306. *
  307. * @return number of enumeration values
  308. */
  309. uint32_t
  310. jackctl_parameter_get_enum_constraints_count(
  311. jackctl_parameter_t * parameter);
  312. /**
  313. * Call this function to get parameter enumeration value.
  314. *
  315. * @param parameter object handle of parameter
  316. * @param index index of parameter enumeration value
  317. *
  318. * @return enumeration value.
  319. */
  320. union jackctl_parameter_value
  321. jackctl_parameter_get_enum_constraint_value(
  322. jackctl_parameter_t * parameter,
  323. uint32_t index);
  324. /**
  325. * Call this function to get parameter enumeration value description.
  326. *
  327. * @param parameter object handle of parameter
  328. * @param index index of parameter enumeration value
  329. *
  330. * @return enumeration value description.
  331. */
  332. const char *
  333. jackctl_parameter_get_enum_constraint_description(
  334. jackctl_parameter_t * parameter,
  335. uint32_t index);
  336. /**
  337. * Call this function to get parameter range.
  338. *
  339. * @param parameter object handle of parameter
  340. * @param min_ptr pointer to variable receiving parameter minimum value
  341. * @param max_ptr pointer to variable receiving parameter maximum value
  342. */
  343. void
  344. jackctl_parameter_get_range_constraint(
  345. jackctl_parameter_t * parameter,
  346. union jackctl_parameter_value * min_ptr,
  347. union jackctl_parameter_value * max_ptr);
  348. /**
  349. * Call this function to check whether parameter constraint is strict,
  350. * i.e. whether supplying non-matching value will not work for sure.
  351. *
  352. * @param parameter parameter object handle to check
  353. *
  354. * @return whether parameter constraint is strict.
  355. */
  356. bool
  357. jackctl_parameter_constraint_is_strict(
  358. jackctl_parameter_t * parameter);
  359. /**
  360. * Call this function to check whether parameter has fake values,
  361. * i.e. values have no user meaningful meaning and only value
  362. * description is meaningful to user.
  363. *
  364. * @param parameter parameter object handle to check
  365. *
  366. * @return whether parameter constraint is strict.
  367. */
  368. bool
  369. jackctl_parameter_constraint_is_fake_value(
  370. jackctl_parameter_t * parameter);
  371. /**
  372. * Call this function to get list of available internal clients. List node data
  373. * pointers is a internal client object handle (::jackctl_internal_t).
  374. *
  375. * @param server server object handle to get internal clients for
  376. *
  377. * @return Single linked list of internal client object handles. Must not be
  378. * modified. Always same for same server object.
  379. */
  380. const JSList *
  381. jackctl_server_get_internals_list(
  382. jackctl_server_t * server);
  383. /**
  384. * Call this function to get name of internal client.
  385. *
  386. * @param internal internal object handle to get name of
  387. *
  388. * @return internal name. Must not be modified. Always same for same
  389. * internal object.
  390. */
  391. const char *
  392. jackctl_internal_get_name(
  393. jackctl_internal_t * internal);
  394. /**
  395. * Call this function to get list of internal parameters. List node data
  396. * pointers is a parameter object handle (::jackctl_parameter_t).
  397. *
  398. * @param internal internal object handle to get parameters for
  399. *
  400. * @return Single linked list of parameter object handles. Must not be
  401. * modified. Always same for same internal object.
  402. */
  403. const JSList *
  404. jackctl_internal_get_parameters(
  405. jackctl_internal_t * internal);
  406. /**
  407. * Call this function to load one internal client.
  408. *
  409. * @param server server object handle
  410. * @param internal internal to use
  411. *
  412. * @return success status: true - success, false - fail
  413. */
  414. bool
  415. jackctl_server_load_internal(
  416. jackctl_server_t * server,
  417. jackctl_internal_t * internal);
  418. /**
  419. * Call this function to unload one internal client.
  420. *
  421. * @param server server object handle
  422. * @param internal internal to unload
  423. *
  424. * @return success status: true - success, false - fail
  425. */
  426. bool
  427. jackctl_server_unload_internal(
  428. jackctl_server_t * server,
  429. jackctl_internal_t * internal);
  430. /**
  431. * Call this function to log an error message.
  432. *
  433. * @param format string
  434. */
  435. void
  436. jack_error(
  437. const char *format,
  438. ...);
  439. /**
  440. * Call this function to log an information message.
  441. *
  442. * @param format string
  443. */
  444. void
  445. jack_info(
  446. const char *format,
  447. ...);
  448. /**
  449. * Call this function to log an information message but only when
  450. * verbose mode is enabled.
  451. *
  452. * @param format string
  453. */
  454. void
  455. jack_log(
  456. const char *format,
  457. ...);
  458. /* @} */
  459. /**
  460. * Call this function to add a slave in the driver slave list.
  461. *
  462. * @param server server object handle
  463. * @param driver driver to add in the driver slave list.
  464. *
  465. * @return success status: true - success, false - fail
  466. */
  467. bool
  468. jackctl_server_add_slave(jackctl_server_t * server,
  469. jackctl_driver_t * driver);
  470. /**
  471. * Call this function to remove a slave from the driver slave list.
  472. *
  473. * @param server server object handle
  474. * @param driver driver to remove from the driver slave list.
  475. *
  476. * @return success status: true - success, false - fail
  477. */
  478. bool
  479. jackctl_server_remove_slave(jackctl_server_t * server,
  480. jackctl_driver_t * driver);
  481. /**
  482. * Call this function to switch master driver.
  483. *
  484. * @param server server object handle
  485. * @param driver driver to switch to
  486. *
  487. * @return success status: true - success, false - fail
  488. */
  489. bool
  490. jackctl_server_switch_master(jackctl_server_t * server,
  491. jackctl_driver_t * driver);
  492. #if 0
  493. { /* Adjust editor indent */
  494. #endif
  495. #ifdef __cplusplus
  496. } /* extern "C" */
  497. #endif
  498. #endif /* #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED */