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.

703 lines
18KB

  1. /* -*- Mode: C ; c-basic-offset: 4 -*- */
  2. /*
  3. JACK control API
  4. Copyright (C) 2008 Nedko Arnaudov
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; version 2 of the License.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program; if not, write to the Free Software
  14. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  15. */
  16. /**
  17. * @file jack/control.h
  18. * @ingroup publicheader
  19. * @brief JACK control API
  20. *
  21. */
  22. #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED
  23. #define JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED
  24. #include <jack/jslist.h>
  25. #ifdef WIN32
  26. typedef unsigned long sigset_t;
  27. #endif
  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 parameter object */
  56. typedef struct jackctl_parameter jackctl_parameter_t;
  57. #ifdef __cplusplus
  58. extern "C" {
  59. #endif
  60. #if 0
  61. } /* Adjust editor indent */
  62. #endif
  63. /**
  64. * Call this function to setup process signal handling. As a general
  65. * rule, it is required for proper operation for the server object.
  66. *
  67. * @param flags signals setup flags, use 0 for none. Currently no
  68. * flags are defined
  69. *
  70. * @return the configurated signal set.
  71. */
  72. sigset_t
  73. jackctl_setup_signals(
  74. unsigned int flags);
  75. /**
  76. * Call this function to wait on a signal set.
  77. *
  78. * @param signals signals set to wait on
  79. */
  80. void
  81. jackctl_wait_signals(
  82. sigset_t signals);
  83. /**
  84. * Call this function to create server object.
  85. *
  86. * @return server object handle, NULL if creation of server object
  87. * failed. Successfully created server object must be destroyed with
  88. * paired call to ::jackctl_server_destroy
  89. */
  90. jackctl_server_t *
  91. jackctl_server_create();
  92. /**
  93. * Call this function to destroy server object.
  94. *
  95. * @param server server object handle to destroy
  96. */
  97. void
  98. jackctl_server_destroy(
  99. jackctl_server_t * server);
  100. /**
  101. * Call this function to get list of available drivers. List node data
  102. * pointers is a driver object handle (::jackctl_driver_t).
  103. *
  104. * @param server server object handle to get drivers for
  105. *
  106. * @return Single linked list of driver object handles. Must not be
  107. * modified. Always same for same server object.
  108. */
  109. const JSList *
  110. jackctl_server_get_drivers_list(
  111. jackctl_server_t * server);
  112. /**
  113. * Call this function to start JACK server
  114. *
  115. * @param server server object handle
  116. * @param driver driver to use
  117. *
  118. * @return success status: true - success, false - fail
  119. */
  120. bool
  121. jackctl_server_start(
  122. jackctl_server_t * server,
  123. jackctl_driver_t * driver);
  124. /**
  125. * Call this function to stop JACK server
  126. *
  127. * @param server server object handle
  128. *
  129. * @return success status: true - success, false - fail
  130. */
  131. bool
  132. jackctl_server_stop(
  133. jackctl_server_t * server);
  134. /**
  135. * Call this function to get list of server parameters. List node data
  136. * pointers is a parameter object handle (::jackctl_parameter_t).
  137. *
  138. * @param server server object handle to get parameters for
  139. *
  140. * @return Single linked list of parameter object handles. Must not be
  141. * modified. Always same for same server object.
  142. */
  143. const JSList *
  144. jackctl_server_get_parameters(
  145. jackctl_server_t * server);
  146. /**
  147. * Call this function to get name of driver.
  148. *
  149. * @param driver driver object handle to get name of
  150. *
  151. * @return driver name. Must not be modified. Always same for same
  152. * driver object.
  153. */
  154. const char *
  155. jackctl_driver_get_name(
  156. jackctl_driver_t * driver);
  157. /**
  158. * Call this function to get list of driver parameters. List node data
  159. * pointers is a parameter object handle (::jackctl_parameter_t).
  160. *
  161. * @param driver driver object handle to get parameters for
  162. *
  163. * @return Single linked list of parameter object handles. Must not be
  164. * modified. Always same for same driver object.
  165. */
  166. const JSList *
  167. jackctl_driver_get_parameters(
  168. jackctl_driver_t * driver);
  169. /**
  170. * Call this function to get parameter name.
  171. *
  172. * @param parameter parameter object handle to get name of
  173. *
  174. * @return parameter name. Must not be modified. Always same for same
  175. * parameter object.
  176. */
  177. const char *
  178. jackctl_parameter_get_name(
  179. jackctl_parameter_t * parameter);
  180. /**
  181. * Call this function to get parameter short description.
  182. *
  183. * @param parameter parameter object handle to get short description of
  184. *
  185. * @return parameter short description. Must not be modified. Always
  186. * same for same parameter object.
  187. */
  188. const char *
  189. jackctl_parameter_get_short_description(
  190. jackctl_parameter_t * parameter);
  191. /**
  192. * Call this function to get parameter long description.
  193. *
  194. * @param parameter parameter object handle to get long description of
  195. *
  196. * @return parameter long description. Must not be modified. Always
  197. * same for same parameter object.
  198. */
  199. const char *
  200. jackctl_parameter_get_long_description(
  201. jackctl_parameter_t * parameter);
  202. /**
  203. * Call this function to get parameter type.
  204. *
  205. * @param parameter parameter object handle to get type of
  206. *
  207. * @return parameter type. Always same for same parameter object.
  208. */
  209. jackctl_param_type_t
  210. jackctl_parameter_get_type(
  211. jackctl_parameter_t * parameter);
  212. /**
  213. * Call this function to get parameter character.
  214. *
  215. * @param parameter parameter object handle to get character of
  216. *
  217. * @return character.
  218. */
  219. char
  220. jackctl_parameter_get_id(
  221. jackctl_parameter_t * parameter);
  222. /**
  223. * Call this function to check whether parameter has been set, or its
  224. * default value is being used.
  225. *
  226. * @param parameter parameter object handle to check
  227. *
  228. * @return true - parameter is set, false - parameter is using default
  229. * value.
  230. */
  231. bool
  232. jackctl_parameter_is_set(
  233. jackctl_parameter_t * parameter);
  234. /**
  235. * Call this function to reset parameter to its default value.
  236. *
  237. * @param parameter parameter object handle to reset value of
  238. *
  239. * @return success status: true - success, false - fail
  240. */
  241. bool
  242. jackctl_parameter_reset(
  243. jackctl_parameter_t * parameter);
  244. /**
  245. * Call this function to get parameter value.
  246. *
  247. * @param parameter parameter object handle to get value of
  248. *
  249. * @return parameter value.
  250. */
  251. union jackctl_parameter_value
  252. jackctl_parameter_get_value(
  253. jackctl_parameter_t * parameter);
  254. /**
  255. * Call this function to set parameter value.
  256. *
  257. * @param parameter parameter object handle to get value of
  258. * @param value_ptr pointer to variable containing parameter value
  259. *
  260. * @return success status: true - success, false - fail
  261. */
  262. bool
  263. jackctl_parameter_set_value(
  264. jackctl_parameter_t * parameter,
  265. const union jackctl_parameter_value * value_ptr);
  266. /**
  267. * Call this function to get parameter default value.
  268. *
  269. * @param parameter parameter object handle to get default value of
  270. *
  271. * @return parameter default value.
  272. */
  273. union jackctl_parameter_value
  274. jackctl_parameter_get_default_value(
  275. jackctl_parameter_t * parameter);
  276. /**
  277. * Call this function to log an error message.
  278. *
  279. * @param format string
  280. */
  281. void
  282. jack_error(
  283. const char *format,
  284. ...);
  285. /**
  286. * Call this function to log an information message.
  287. *
  288. * @param format string
  289. */
  290. void
  291. jack_info(
  292. const char *format,
  293. ...);
  294. /**
  295. * Call this function to log an information message but only when
  296. * verbose mode is enabled.
  297. *
  298. * @param format string
  299. */
  300. void
  301. jack_log(
  302. const char *format,
  303. ...);
  304. #if 0
  305. { /* Adjust editor indent */
  306. #endif
  307. #ifdef __cplusplus
  308. } /* extern "C" */
  309. #endif
  310. #endif /* #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED */
  311. /* -*- Mode: C ; c-basic-offset: 4 -*- */
  312. /*
  313. JACK control API
  314. Copyright (C) 2008 Nedko Arnaudov
  315. This program is free software; you can redistribute it and/or modify
  316. it under the terms of the GNU General Public License as published by
  317. the Free Software Foundation; version 2 of the License.
  318. This program is distributed in the hope that it will be useful,
  319. but WITHOUT ANY WARRANTY; without even the implied warranty of
  320. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  321. GNU General Public License for more details.
  322. You should have received a copy of the GNU General Public License
  323. along with this program; if not, write to the Free Software
  324. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  325. */
  326. /**
  327. * @file jack/control.h
  328. * @ingroup publicheader
  329. * @brief JACK control API
  330. *
  331. */
  332. #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED
  333. #define JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED
  334. #include <jack/jslist.h>
  335. #ifdef WIN32
  336. typedef unsigned long sigset_t;
  337. #endif
  338. /** Parameter types, intentionally similar to jack_driver_param_type_t */
  339. typedef enum
  340. {
  341. JackParamInt = 1, /**< @brief value type is a signed integer */
  342. JackParamUInt, /**< @brief value type is an unsigned integer */
  343. JackParamChar, /**< @brief value type is a char */
  344. JackParamString, /**< @brief value type is a string with max size of ::JACK_PARAM_STRING_MAX+1 chars */
  345. JackParamBool, /**< @brief value type is a boolean */
  346. } jackctl_param_type_t;
  347. /** @brief Max value that jackctl_param_type_t type can have */
  348. #define JACK_PARAM_MAX (JackParamBool + 1)
  349. /** @brief Max length of string parameter value, excluding terminating nul char */
  350. #define JACK_PARAM_STRING_MAX 63
  351. /** @brief Type for parameter value */
  352. /* intentionally similar to jack_driver_param_value_t */
  353. union jackctl_parameter_value
  354. {
  355. uint32_t ui; /**< @brief member used for ::JackParamUInt */
  356. int32_t i; /**< @brief member used for ::JackParamInt */
  357. char c; /**< @brief member used for ::JackParamChar */
  358. char str[JACK_PARAM_STRING_MAX + 1]; /**< @brief member used for ::JackParamString */
  359. bool b; /**< @brief member used for ::JackParamBool */
  360. };
  361. /** opaque type for server object */
  362. typedef struct jackctl_server jackctl_server_t;
  363. /** opaque type for driver object */
  364. typedef struct jackctl_driver jackctl_driver_t;
  365. /** opaque type for parameter object */
  366. typedef struct jackctl_parameter jackctl_parameter_t;
  367. #ifdef __cplusplus
  368. extern "C" {
  369. #endif
  370. #if 0
  371. } /* Adjust editor indent */
  372. #endif
  373. /**
  374. * Call this function to setup process signal handling. As a general
  375. * rule, it is required for proper operation for the server object.
  376. *
  377. * @param flags signals setup flags, use 0 for none. Currently no
  378. * flags are defined
  379. *
  380. * @return the configurated signal set.
  381. */
  382. sigset_t
  383. jackctl_setup_signals(
  384. unsigned int flags);
  385. /**
  386. * Call this function to wait on a signal set.
  387. *
  388. * @param signals signals set to wait on
  389. */
  390. void
  391. jackctl_wait_signals(
  392. sigset_t signals);
  393. /**
  394. * Call this function to create server object.
  395. *
  396. * @return server object handle, NULL if creation of server object
  397. * failed. Successfully created server object must be destroyed with
  398. * paired call to ::jackctl_server_destroy
  399. */
  400. jackctl_server_t *
  401. jackctl_server_create();
  402. /**
  403. * Call this function to destroy server object.
  404. *
  405. * @param server server object handle to destroy
  406. */
  407. void
  408. jackctl_server_destroy(
  409. jackctl_server_t * server);
  410. /**
  411. * Call this function to get list of available drivers. List node data
  412. * pointers is a driver object handle (::jackctl_driver_t).
  413. *
  414. * @param server server object handle to get drivers for
  415. *
  416. * @return Single linked list of driver object handles. Must not be
  417. * modified. Always same for same server object.
  418. */
  419. const JSList *
  420. jackctl_server_get_drivers_list(
  421. jackctl_server_t * server);
  422. /**
  423. * Call this function to start JACK server
  424. *
  425. * @param server server object handle
  426. * @param driver driver to use
  427. *
  428. * @return success status: true - success, false - fail
  429. */
  430. bool
  431. jackctl_server_start(
  432. jackctl_server_t * server,
  433. jackctl_driver_t * driver);
  434. /**
  435. * Call this function to stop JACK server
  436. *
  437. * @param server server object handle
  438. *
  439. * @return success status: true - success, false - fail
  440. */
  441. bool
  442. jackctl_server_stop(
  443. jackctl_server_t * server);
  444. /**
  445. * Call this function to get list of server parameters. List node data
  446. * pointers is a parameter object handle (::jackctl_parameter_t).
  447. *
  448. * @param server server object handle to get parameters for
  449. *
  450. * @return Single linked list of parameter object handles. Must not be
  451. * modified. Always same for same server object.
  452. */
  453. const JSList *
  454. jackctl_server_get_parameters(
  455. jackctl_server_t * server);
  456. /**
  457. * Call this function to get name of driver.
  458. *
  459. * @param driver driver object handle to get name of
  460. *
  461. * @return driver name. Must not be modified. Always same for same
  462. * driver object.
  463. */
  464. const char *
  465. jackctl_driver_get_name(
  466. jackctl_driver_t * driver);
  467. /**
  468. * Call this function to get list of driver parameters. List node data
  469. * pointers is a parameter object handle (::jackctl_parameter_t).
  470. *
  471. * @param driver driver object handle to get parameters for
  472. *
  473. * @return Single linked list of parameter object handles. Must not be
  474. * modified. Always same for same driver object.
  475. */
  476. const JSList *
  477. jackctl_driver_get_parameters(
  478. jackctl_driver_t * driver);
  479. /**
  480. * Call this function to get parameter name.
  481. *
  482. * @param parameter parameter object handle to get name of
  483. *
  484. * @return parameter name. Must not be modified. Always same for same
  485. * parameter object.
  486. */
  487. const char *
  488. jackctl_parameter_get_name(
  489. jackctl_parameter_t * parameter);
  490. /**
  491. * Call this function to get parameter short description.
  492. *
  493. * @param parameter parameter object handle to get short description of
  494. *
  495. * @return parameter short description. Must not be modified. Always
  496. * same for same parameter object.
  497. */
  498. const char *
  499. jackctl_parameter_get_short_description(
  500. jackctl_parameter_t * parameter);
  501. /**
  502. * Call this function to get parameter long description.
  503. *
  504. * @param parameter parameter object handle to get long description of
  505. *
  506. * @return parameter long description. Must not be modified. Always
  507. * same for same parameter object.
  508. */
  509. const char *
  510. jackctl_parameter_get_long_description(
  511. jackctl_parameter_t * parameter);
  512. /**
  513. * Call this function to get parameter type.
  514. *
  515. * @param parameter parameter object handle to get type of
  516. *
  517. * @return parameter type. Always same for same parameter object.
  518. */
  519. jackctl_param_type_t
  520. jackctl_parameter_get_type(
  521. jackctl_parameter_t * parameter);
  522. /**
  523. * Call this function to get parameter character.
  524. *
  525. * @param parameter parameter object handle to get character of
  526. *
  527. * @return character.
  528. */
  529. char
  530. jackctl_parameter_get_id(
  531. jackctl_parameter_t * parameter);
  532. /**
  533. * Call this function to check whether parameter has been set, or its
  534. * default value is being used.
  535. *
  536. * @param parameter parameter object handle to check
  537. *
  538. * @return true - parameter is set, false - parameter is using default
  539. * value.
  540. */
  541. bool
  542. jackctl_parameter_is_set(
  543. jackctl_parameter_t * parameter);
  544. /**
  545. * Call this function to reset parameter to its default value.
  546. *
  547. * @param parameter parameter object handle to reset value of
  548. *
  549. * @return success status: true - success, false - fail
  550. */
  551. bool
  552. jackctl_parameter_reset(
  553. jackctl_parameter_t * parameter);
  554. /**
  555. * Call this function to get parameter value.
  556. *
  557. * @param parameter parameter object handle to get value of
  558. *
  559. * @return parameter value.
  560. */
  561. union jackctl_parameter_value
  562. jackctl_parameter_get_value(
  563. jackctl_parameter_t * parameter);
  564. /**
  565. * Call this function to set parameter value.
  566. *
  567. * @param parameter parameter object handle to get value of
  568. * @param value_ptr pointer to variable containing parameter value
  569. *
  570. * @return success status: true - success, false - fail
  571. */
  572. bool
  573. jackctl_parameter_set_value(
  574. jackctl_parameter_t * parameter,
  575. const union jackctl_parameter_value * value_ptr);
  576. /**
  577. * Call this function to get parameter default value.
  578. *
  579. * @param parameter parameter object handle to get default value of
  580. *
  581. * @return parameter default value.
  582. */
  583. union jackctl_parameter_value
  584. jackctl_parameter_get_default_value(
  585. jackctl_parameter_t * parameter);
  586. /**
  587. * Call this function to log an error message.
  588. *
  589. * @param format string
  590. */
  591. void
  592. jack_error(
  593. const char *format,
  594. ...);
  595. /**
  596. * Call this function to log an information message.
  597. *
  598. * @param format string
  599. */
  600. void
  601. jack_info(
  602. const char *format,
  603. ...);
  604. /**
  605. * Call this function to log an information message but only when
  606. * verbose mode is enabled.
  607. *
  608. * @param format string
  609. */
  610. void
  611. jack_log(
  612. const char *format,
  613. ...);
  614. #if 0
  615. { /* Adjust editor indent */
  616. #endif
  617. #ifdef __cplusplus
  618. } /* extern "C" */
  619. #endif
  620. #endif /* #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED */