control.inc 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677
  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/types.h>
  26. //#include <jack/jslist.h>
  27. //#include <jack/systemdeps.h>
  28. {$I systemdeps.inc}
  29. //#if !defined(sun) && !defined(__sun__)
  30. //#include <stdbool.h>
  31. //#endif
  32. (** Parameter types, intentionally similar to jack_driver_param_type_t *)
  33. type
  34. PPjackctl_param_type_t = ^Pjackctl_param_type_t;
  35. Pjackctl_param_type_t = ^jackctl_param_type_t;
  36. jackctl_param_type_t = (
  37. JackParamInt = 1, (**< @brief value type is a signed integer *)
  38. JackParamUInt, (**< @brief value type is an unsigned integer *)
  39. JackParamChar, (**< @brief value type is a char *)
  40. JackParamString, (**< @brief value type is a string with max size of ::JACK_PARAM_STRING_MAX+1 chars *)
  41. JackParamBool (**< @brief value type is a boolean *)
  42. );
  43. (** Driver types *)
  44. PPjackctl_driver_type_t = ^Pjackctl_driver_type_t;
  45. Pjackctl_driver_type_t = ^jackctl_driver_type_t;
  46. jackctl_driver_type_t = (
  47. JackMaster = 1, (**< @brief master driver *)
  48. JackSlave (**< @brief slave driver *)
  49. );
  50. (** @brief Max value that jackctl_param_type_t type can have *)
  51. const
  52. JACK_PARAM_MAX = (Ord(JackParamBool) + 1);
  53. (** @brief Max length of string parameter value, excluding terminating null char *)
  54. JACK_PARAM_STRING_MAX = 127;
  55. (** @brief Type for parameter value *)
  56. (* intentionally similar to jack_driver_param_value_t *)
  57. type
  58. PPjackctl_parameter_value = ^Pjackctl_parameter_value;
  59. Pjackctl_parameter_value = ^jackctl_parameter_value;
  60. jackctl_parameter_value = record
  61. case Integer of
  62. 0: (ui: uint32_t); (**< @brief member used for ::JackParamUInt *)
  63. 1: (i: int32_t); (**< @brief member used for ::JackParamInt *)
  64. 2: (c: cchar); (**< @brief member used for ::JackParamChar *)
  65. 3: (str: array [0..JACK_PARAM_STRING_MAX] of char); (**< @brief member used for ::JackParamString *)
  66. 4: (b: cbool); (**< @brief member used for ::JackParamBool *)
  67. end;
  68. (** opaque type for server object *)
  69. PPjackctl_server_t = ^Pjackctl_server_t;
  70. Pjackctl_server_t = ^jackctl_server_t;
  71. jackctl_server_t = record end;
  72. (** opaque type for driver object *)
  73. PPjackctl_driver_t = ^Pjackctl_driver_t;
  74. Pjackctl_driver_t = ^jackctl_driver_t;
  75. jackctl_driver_t = record end;
  76. (** opaque type for internal client object *)
  77. PPjackctl_internal_t = ^Pjackctl_internal_t;
  78. Pjackctl_internal_t = ^jackctl_internal_t;
  79. jackctl_internal_t = record end;
  80. (** opaque type for parameter object *)
  81. PPjackctl_parameter_t = ^Pjackctl_parameter_t;
  82. Pjackctl_parameter_t = ^jackctl_parameter_t;
  83. jackctl_parameter_t = record end;
  84. (** opaque type for sigmask object *)
  85. PPjackctl_sigmask_t = ^Pjackctl_sigmask_t;
  86. Pjackctl_sigmask_t = ^jackctl_sigmask_t;
  87. jackctl_sigmask_t = record end;
  88. //#ifdef __cplusplus
  89. //extern "C" {
  90. //#endif
  91. //#if 0
  92. //} /* Adjust editor indent */
  93. //#endif
  94. (**
  95. * @defgroup ControlAPI The API for starting and controlling a JACK server
  96. * @{
  97. *)
  98. (**
  99. * Call this function to setup process signal handling. As a general
  100. * rule, it is required for proper operation for the server object.
  101. *
  102. * @param flags signals setup flags, use 0 for none. Currently no
  103. * flags are defined
  104. *
  105. * @return the configurated signal set.
  106. *)
  107. function jackctl_setup_signals(
  108. flags: cuint): Pjackctl_sigmask_t; cdecl; external libjackserver;
  109. (**
  110. * Call this function to wait on a signal set.
  111. *
  112. * @param signals signals set to wait on
  113. *)
  114. procedure
  115. jackctl_wait_signals(
  116. signals: Pjackctl_sigmask_t); cdecl; external libjackserver;
  117. (**
  118. * \bold THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED IN
  119. * NEW JACK PROJECTS
  120. *
  121. * @deprecated Please use jackctl_server_create2().
  122. *)
  123. type
  124. TOnDeviceAcquireProc = function(const device_name: PChar): cbool; cdecl;
  125. TOnDeviceReleaseProc = procedure(const device_name: PChar); cdecl;
  126. function jackctl_server_create(
  127. on_device_acquire: TOnDeviceAcquireProc;
  128. on_device_release: TOnDeviceReleaseProc): Pjackctl_server_t; cdecl; external libjackserver;
  129. (**
  130. * Call this function to create server object.
  131. *
  132. * @param on_device_acquire - Optional callback to be called before device is acquired. If false is returned, device usage will fail
  133. * @param on_device_release - Optional callback to be called after device is released.
  134. * @param on_device_reservation_loop - Optional callback to be called when looping/idling the reservation.
  135. *
  136. * @return server object handle, NULL if creation of server object
  137. * failed. Successfully created server object must be destroyed with
  138. * paired call to ::jackctl_server_destroy
  139. *)
  140. type
  141. TOnDeviceReservationLoopProc = procedure; cdecl;
  142. function
  143. jackctl_server_create2(
  144. on_device_acquire: TOnDeviceAcquireProc;
  145. on_device_release: TOnDeviceReleaseProc;
  146. on_device_reservation_loop: TOnDeviceReservationLoopProc): Pjackctl_server_t; cdecl; external libjackserver;
  147. (**
  148. * Call this function to destroy server object.
  149. *
  150. * @param server server object handle to destroy
  151. *)
  152. procedure
  153. jackctl_server_destroy(
  154. server: Pjackctl_server_t); cdecl; external libjackserver;
  155. (**
  156. * Call this function to open JACK server
  157. *
  158. * @param server server object handle
  159. * @param driver driver to use
  160. *
  161. * @return success status: true - success, false - fail
  162. *)
  163. function
  164. jackctl_server_open(
  165. server: Pjackctl_server_t;
  166. driver: Pjackctl_driver_t): cbool; cdecl; external libjackserver;
  167. (**
  168. * Call this function to start JACK server
  169. *
  170. * @param server server object handle
  171. *
  172. * @return success status: true - success, false - fail
  173. *)
  174. function
  175. jackctl_server_start(
  176. server: Pjackctl_server_t): cbool; cdecl; external libjackserver;
  177. (**
  178. * Call this function to stop JACK server
  179. *
  180. * @param server server object handle
  181. *
  182. * @return success status: true - success, false - fail
  183. *)
  184. function
  185. jackctl_server_stop(
  186. server: Pjackctl_server_t): cbool; cdecl; external libjackserver;
  187. (**
  188. * Call this function to close JACK server
  189. *
  190. * @param server server object handle
  191. *
  192. * @return success status: true - success, false - fail
  193. *)
  194. function
  195. jackctl_server_close(
  196. server: Pjackctl_server_t): cbool; cdecl; external libjackserver;
  197. (**
  198. * Call this function to get list of available drivers. List node data
  199. * pointers is a driver object handle (::jackctl_driver_t).
  200. *
  201. * @param server server object handle to get drivers for
  202. *
  203. * @return Single linked list of driver object handles. Must not be
  204. * modified. Always same for same server object.
  205. *)
  206. function
  207. jackctl_server_get_drivers_list(
  208. server: Pjackctl_server_t): PJSList; cdecl; external libjackserver;
  209. (**
  210. * Call this function to get list of server parameters. List node data
  211. * pointers is a parameter object handle (::jackctl_parameter_t).
  212. *
  213. * @param server server object handle to get parameters for
  214. *
  215. * @return Single linked list of parameter object handles. Must not be
  216. * modified. Always same for same server object.
  217. *)
  218. function
  219. jackctl_server_get_parameters(
  220. server: Pjackctl_server_t): PJSList; cdecl; external libjackserver;
  221. (**
  222. * Call this function to get list of available internal clients. List node data
  223. * pointers is a internal client object handle (::jackctl_internal_t).
  224. *
  225. * @param server server object handle to get internal clients for
  226. *
  227. * @return Single linked list of internal client object handles. Must not be
  228. * modified. Always same for same server object.
  229. *)
  230. function
  231. jackctl_server_get_internals_list(
  232. server: Pjackctl_server_t): PJSList; cdecl; external libjackserver;
  233. (**
  234. * Call this function to load one internal client.
  235. * (can be used when the server is running)
  236. *
  237. * @param server server object handle
  238. * @param internal internal to use
  239. *
  240. * @return success status: true - success, false - fail
  241. *)
  242. function
  243. jackctl_server_load_internal(
  244. server: Pjackctl_server_t;
  245. internal: Pjackctl_internal_t): cbool; cdecl; external libjackserver;
  246. (**
  247. * Call this function to unload one internal client.
  248. * (can be used when the server is running)
  249. *
  250. * @param server server object handle
  251. * @param internal internal to unload
  252. *
  253. * @return success status: true - success, false - fail
  254. *)
  255. function
  256. jackctl_server_unload_internal(
  257. server: Pjackctl_server_t;
  258. internal: Pjackctl_internal_t): cbool; cdecl; external libjackserver;
  259. (**
  260. * Call this function to load a session file.
  261. * (can be used when the server is running)
  262. *
  263. * @param server server object handle
  264. * @param file the session file to load, containing a list of
  265. * internal clients and connections to be made.
  266. *
  267. * @return success status: true - success, false - fail
  268. *)
  269. function jackctl_server_load_session_file(
  270. server_ptr: Pjackctl_server_t;
  271. const _file: PChar): cbool; cdecl; external libjackserver;
  272. (**
  273. * Call this function to add a slave in the driver slave list.
  274. * (cannot be used when the server is running that is between
  275. * jackctl_server_start and jackctl_server_stop)
  276. *
  277. * @param server server object handle
  278. * @param driver driver to add in the driver slave list.
  279. *
  280. * @return success status: true - success, false - fail
  281. *)
  282. function
  283. jackctl_server_add_slave(server: Pjackctl_server_t;
  284. driver: Pjackctl_driver_t): cbool; cdecl; external libjackserver;
  285. (**
  286. * Call this function to remove a slave from the driver slave list.
  287. * (cannot be used when the server is running that is between
  288. * jackctl_server_start and jackctl_server_stop)
  289. *
  290. * @param server server object handle
  291. * @param driver driver to remove from the driver slave list.
  292. *
  293. * @return success status: true - success, false - fail
  294. *)
  295. function
  296. jackctl_server_remove_slave(server: Pjackctl_server_t;
  297. driver: Pjackctl_driver_t): cbool; cdecl; external libjackserver;
  298. (**
  299. * Call this function to switch master driver.
  300. *
  301. * @param server server object handle
  302. * @param driver driver to switch to
  303. *
  304. * @return success status: true - success, false - fail
  305. *)
  306. function
  307. jackctl_server_switch_master(server: Pjackctl_server_t;
  308. driver: Pjackctl_driver_t): cbool; cdecl; external libjackserver;
  309. (**
  310. * Call this function to get name of driver.
  311. *
  312. * @param driver driver object handle to get name of
  313. *
  314. * @return driver name. Must not be modified. Always same for same
  315. * driver object.
  316. *)
  317. function
  318. jackctl_driver_get_name(
  319. driver: Pjackctl_driver_t): PChar; cdecl; external libjackserver;
  320. (**
  321. * Call this function to get type of driver.
  322. *
  323. * @param driver driver object handle to get name of
  324. *
  325. * @return driver type. Must not be modified. Always same for same
  326. * driver object.
  327. *)
  328. function
  329. jackctl_driver_get_type(
  330. driver: Pjackctl_driver_t): jackctl_driver_type_t; cdecl; external libjackserver;
  331. (**
  332. * Call this function to get list of driver parameters. List node data
  333. * pointers is a parameter object handle (::jackctl_parameter_t).
  334. *
  335. * @param driver driver object handle to get parameters for
  336. *
  337. * @return Single linked list of parameter object handles. Must not be
  338. * modified. Always same for same driver object.
  339. *)
  340. function
  341. jackctl_driver_get_parameters(
  342. driver: Pjackctl_driver_t): PJSList; cdecl; external libjackserver;
  343. (**
  344. * Call this function to parse parameters for a driver.
  345. *
  346. * @param driver driver object handle
  347. * @param argc parameter list len
  348. * @param argv parameter list, as an array of char*
  349. *
  350. * @return success status: true - success, false - fail
  351. *)
  352. function
  353. jackctl_driver_params_parse(
  354. driver: Pjackctl_driver_t;
  355. argc: cint;
  356. argv: PPChar): cint; cdecl; external libjackserver;
  357. (**
  358. * Call this function to get name of internal client.
  359. *
  360. * @param internal internal object handle to get name of
  361. *
  362. * @return internal name. Must not be modified. Always same for same
  363. * internal object.
  364. *)
  365. function
  366. jackctl_internal_get_name(
  367. internal: Pjackctl_internal_t): PChar; cdecl; external libjackserver;
  368. (**
  369. * Call this function to get list of internal parameters. List node data
  370. * pointers is a parameter object handle (::jackctl_parameter_t).
  371. *
  372. * @param internal internal object handle to get parameters for
  373. *
  374. * @return Single linked list of parameter object handles. Must not be
  375. * modified. Always same for same internal object.
  376. *)
  377. function
  378. jackctl_internal_get_parameters(
  379. internal: Pjackctl_internal_t): PJSList; cdecl; external libjackserver;
  380. (**
  381. * Call this function to get parameter name.
  382. *
  383. * @param parameter parameter object handle to get name of
  384. *
  385. * @return parameter name. Must not be modified. Always same for same
  386. * parameter object.
  387. *)
  388. function
  389. jackctl_parameter_get_name(
  390. parameter: Pjackctl_parameter_t): PChar; cdecl; external libjackserver;
  391. (**
  392. * Call this function to get parameter short description.
  393. *
  394. * @param parameter parameter object handle to get short description of
  395. *
  396. * @return parameter short description. Must not be modified. Always
  397. * same for same parameter object.
  398. *)
  399. function
  400. jackctl_parameter_get_short_description(
  401. parameter: Pjackctl_parameter_t): PChar; cdecl; external libjackserver;
  402. (**
  403. * Call this function to get parameter long description.
  404. *
  405. * @param parameter parameter object handle to get long description of
  406. *
  407. * @return parameter long description. Must not be modified. Always
  408. * same for same parameter object.
  409. *)
  410. function
  411. jackctl_parameter_get_long_description(
  412. parameter: Pjackctl_parameter_t): PChar; cdecl; external libjackserver;
  413. (**
  414. * Call this function to get parameter type.
  415. *
  416. * @param parameter parameter object handle to get type of
  417. *
  418. * @return parameter type. Always same for same parameter object.
  419. *)
  420. function
  421. jackctl_parameter_get_type(
  422. parameter: Pjackctl_parameter_t): jackctl_param_type_t; cdecl; external libjackserver;
  423. (**
  424. * Call this function to get parameter character.
  425. *
  426. * @param parameter parameter object handle to get character of
  427. *
  428. * @return character.
  429. *)
  430. function
  431. jackctl_parameter_get_id(
  432. parameter: Pjackctl_parameter_t): Char; cdecl; external libjackserver;
  433. (**
  434. * Call this function to check whether parameter has been set, or its
  435. * default value is being used.
  436. *
  437. * @param parameter parameter object handle to check
  438. *
  439. * @return true - parameter is set, false - parameter is using default
  440. * value.
  441. *)
  442. function
  443. jackctl_parameter_is_set(
  444. parameter: Pjackctl_parameter_t): cbool; cdecl; external libjackserver;
  445. (**
  446. * Call this function to reset parameter to its default value.
  447. *
  448. * @param parameter parameter object handle to reset value of
  449. *
  450. * @return success status: true - success, false - fail
  451. *)
  452. function
  453. jackctl_parameter_reset(
  454. parameter: Pjackctl_parameter_t): cbool; cdecl; external libjackserver;
  455. (**
  456. * Call this function to get parameter value.
  457. *
  458. * @param parameter parameter object handle to get value of
  459. *
  460. * @return parameter value.
  461. *)
  462. function
  463. jackctl_parameter_get_value(
  464. parameter: Pjackctl_parameter_t): jackctl_parameter_value; cdecl; external libjackserver;
  465. (**
  466. * Call this function to set parameter value.
  467. *
  468. * @param parameter parameter object handle to get value of
  469. * @param value_ptr pointer to variable containing parameter value
  470. *
  471. * @return success status: true - success, false - fail
  472. *)
  473. function
  474. jackctl_parameter_set_value(
  475. parameter: Pjackctl_parameter_t;
  476. const value_ptr: Pjackctl_parameter_value): cbool; cdecl; external libjackserver;
  477. (**
  478. * Call this function to get parameter default value.
  479. *
  480. * @param parameter parameter object handle to get default value of
  481. *
  482. * @return parameter default value.
  483. *)
  484. function
  485. jackctl_parameter_get_default_value(
  486. parameter: Pjackctl_parameter_t): jackctl_parameter_value; cdecl; external libjackserver;
  487. (**
  488. * Call this function check whether parameter has range constraint.
  489. *
  490. * @param parameter object handle of parameter to check
  491. *
  492. * @return whether parameter has range constraint.
  493. *)
  494. function
  495. jackctl_parameter_has_range_constraint(
  496. parameter: Pjackctl_parameter_t): cbool; cdecl; external libjackserver;
  497. (**
  498. * Call this function check whether parameter has enumeration constraint.
  499. *
  500. * @param parameter object handle of parameter to check
  501. *
  502. * @return whether parameter has enumeration constraint.
  503. *)
  504. function
  505. jackctl_parameter_has_enum_constraint(
  506. parameter: Pjackctl_parameter_t): cbool; cdecl; external libjackserver;
  507. (**
  508. * Call this function get how many enumeration values parameter has.
  509. *
  510. * @param parameter object handle of parameter
  511. *
  512. * @return number of enumeration values
  513. *)
  514. function
  515. jackctl_parameter_get_enum_constraints_count(
  516. parameter: Pjackctl_parameter_t): uint32_t; cdecl; external libjackserver;
  517. (**
  518. * Call this function to get parameter enumeration value.
  519. *
  520. * @param parameter object handle of parameter
  521. * @param index index of parameter enumeration value
  522. *
  523. * @return enumeration value.
  524. *)
  525. function
  526. jackctl_parameter_get_enum_constraint_value(
  527. parameter: Pjackctl_parameter_t;
  528. index: uint32_t): jackctl_parameter_value; cdecl; external libjackserver;
  529. (**
  530. * Call this function to get parameter enumeration value description.
  531. *
  532. * @param parameter object handle of parameter
  533. * @param index index of parameter enumeration value
  534. *
  535. * @return enumeration value description.
  536. *)
  537. function
  538. jackctl_parameter_get_enum_constraint_description(
  539. parameter: jackctl_parameter_t;
  540. index: uint32_t): PChar; cdecl; external libjackserver;
  541. (**
  542. * Call this function to get parameter range.
  543. *
  544. * @param parameter object handle of parameter
  545. * @param min_ptr pointer to variable receiving parameter minimum value
  546. * @param max_ptr pointer to variable receiving parameter maximum value
  547. *)
  548. procedure
  549. jackctl_parameter_get_range_constraint(
  550. parameter: jackctl_parameter_t;
  551. min_ptr: Pjackctl_parameter_value;
  552. max_ptr: Pjackctl_parameter_value); cdecl; external libjackserver;
  553. (**
  554. * Call this function to check whether parameter constraint is strict,
  555. * i.e. whether supplying non-matching value will not work for sure.
  556. *
  557. * @param parameter parameter object handle to check
  558. *
  559. * @return whether parameter constraint is strict.
  560. *)
  561. function
  562. jackctl_parameter_constraint_is_strict(
  563. parameter: Pjackctl_parameter_t): cbool; cdecl; external libjackserver;
  564. (**
  565. * Call this function to check whether parameter has fake values,
  566. * i.e. values have no user meaningful meaning and only value
  567. * description is meaningful to user.
  568. *
  569. * @param parameter parameter object handle to check
  570. *
  571. * @return whether parameter constraint is strict.
  572. *)
  573. function
  574. jackctl_parameter_constraint_is_fake_value(
  575. parameter: Pjackctl_parameter_t): cbool; cdecl; external libjackserver;
  576. (**
  577. * Call this function to log an error message.
  578. *
  579. * @param format string
  580. *)
  581. procedure
  582. jack_error(const format: PChar); cdecl; varargs; external libjackserver;
  583. (**
  584. * Call this function to log an information message.
  585. *
  586. * @param format string
  587. *)
  588. procedure
  589. jack_info(const format: PChar); cdecl; varargs; external libjackserver;
  590. (**
  591. * Call this function to log an information message but only when
  592. * verbose mode is enabled.
  593. *
  594. * @param format string
  595. *)
  596. procedure
  597. jack_log(const format: PChar); cdecl; varargs; external libjackserver;
  598. ///**@}*/
  599. //#if 0
  600. //{ /* Adjust editor indent */
  601. //#endif
  602. //#ifdef __cplusplus
  603. //} /* extern "C" */
  604. //#endif
  605. {$endif JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED}