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.

521 lines
13KB

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