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