libpulse_sys/context/
introspect.rs

1// Copyright 2017 Lyndon Brown
2//
3// This file is part of the PulseAudio Rust language linking library.
4//
5// Licensed under the MIT license or the Apache license (version 2.0), at your option. You may not
6// copy, modify, or distribute this file except in compliance with said license. You can find copies
7// of these licenses either in the LICENSE-MIT and LICENSE-APACHE files, or alternatively at
8// <http://opensource.org/licenses/MIT> and <http://www.apache.org/licenses/LICENSE-2.0>
9// respectively.
10//
11// Portions of documentation are copied from the LGPL 2.1+ licensed PulseAudio C headers on a
12// fair-use basis, as discussed in the overall project readme (available in the git repository).
13
14//! Routines for daemon introspection.
15
16use std::os::raw::{c_char, c_void};
17use super::{pa_context, pa_context_success_cb_t};
18use crate::volume::{pa_cvolume, pa_volume_t};
19use crate::sample::{pa_sample_spec, pa_usec_t};
20use crate::def::{pa_sink_flags_t, pa_sink_state_t, pa_source_flags_t, pa_source_state_t};
21use crate::{operation::pa_operation, channelmap::pa_channel_map};
22use crate::{proplist::pa_proplist, format::pa_format_info};
23
24#[repr(C)]
25pub struct pa_sink_port_info {
26    pub name: *const c_char,
27    pub description: *const c_char,
28    pub priority: u32,
29    pub available: i32,
30    #[cfg(any(doc, feature = "pa_v14"))]
31    #[cfg_attr(docsrs, doc(cfg(feature = "pa_v14")))]
32    pub availability_group: *const c_char,
33    #[cfg(any(doc, feature = "pa_v14"))]
34    #[cfg_attr(docsrs, doc(cfg(feature = "pa_v14")))]
35    pub r#type: u32,
36}
37
38#[repr(C)]
39pub struct pa_sink_info {
40    pub name: *const c_char,
41    pub index: u32,
42    pub description: *const c_char,
43    pub sample_spec: pa_sample_spec,
44    pub channel_map: pa_channel_map,
45    pub owner_module: u32,
46    pub volume: pa_cvolume,
47    pub mute: i32,
48    pub monitor_source: u32,
49    pub monitor_source_name: *const c_char,
50    pub latency: pa_usec_t,
51    pub driver: *const c_char,
52    pub flags: pa_sink_flags_t,
53    pub proplist: *mut pa_proplist,
54    pub configured_latency: pa_usec_t,
55    pub base_volume: pa_volume_t,
56    pub state: pa_sink_state_t,
57    pub n_volume_steps: u32,
58    pub card: u32,
59    pub n_ports: u32,
60    pub ports: *mut *mut pa_sink_port_info,
61    pub active_port: *mut pa_sink_port_info,
62    pub n_formats: u8,
63    pub formats: *mut *mut pa_format_info,
64}
65
66#[rustfmt::skip]
67pub type pa_sink_info_cb_t = Option<extern "C" fn(c: *mut pa_context, i: *const pa_sink_info, eol: i32, userdata: *mut c_void)>;
68
69#[repr(C)]
70pub struct pa_source_port_info {
71    pub name: *const c_char,
72    pub description: *const c_char,
73    pub priority: u32,
74    pub available: i32,
75    #[cfg(any(doc, feature = "pa_v14"))]
76    #[cfg_attr(docsrs, doc(cfg(feature = "pa_v14")))]
77    pub availability_group: *const c_char,
78    #[cfg(any(doc, feature = "pa_v14"))]
79    #[cfg_attr(docsrs, doc(cfg(feature = "pa_v14")))]
80    pub r#type: u32,
81}
82
83#[repr(C)]
84pub struct pa_source_info {
85    pub name: *const c_char,
86    pub index: u32,
87    pub description: *const c_char,
88    pub sample_spec: pa_sample_spec,
89    pub channel_map: pa_channel_map,
90    pub owner_module: u32,
91    pub volume: pa_cvolume,
92    pub mute: i32,
93    pub monitor_of_sink: u32,
94    pub monitor_of_sink_name: *const c_char,
95    pub latency: pa_usec_t,
96    pub driver: *const c_char,
97    pub flags: pa_source_flags_t,
98    pub proplist: *mut pa_proplist,
99    pub configured_latency: pa_usec_t,
100    pub base_volume: pa_volume_t,
101    pub state: pa_source_state_t,
102    pub n_volume_steps: u32,
103    pub card: u32,
104    pub n_ports: u32,
105    pub ports: *mut *mut pa_source_port_info,
106    pub active_port: *mut pa_source_port_info,
107    pub n_formats: u8,
108    pub formats: *mut *mut pa_format_info,
109}
110
111#[rustfmt::skip]
112pub type pa_source_info_cb_t = Option<extern "C" fn(c: *mut pa_context, i: *const pa_source_info, eol: i32, userdata: *mut c_void)>;
113
114#[repr(C)]
115pub struct pa_server_info {
116    pub user_name: *const c_char,
117    pub host_name: *const c_char,
118    pub server_version: *const c_char,
119    pub server_name: *const c_char,
120    pub sample_spec: pa_sample_spec,
121    pub default_sink_name: *const c_char,
122    pub default_source_name: *const c_char,
123    pub cookie: u32,
124    pub channel_map: pa_channel_map,
125}
126
127#[rustfmt::skip]
128pub type pa_server_info_cb_t = Option<extern "C" fn(c: *mut pa_context, i: *const pa_server_info, userdata: *mut c_void)>;
129
130#[repr(C)]
131pub struct pa_module_info {
132    pub index: u32,
133    pub name: *const c_char,
134    pub argument: *const c_char,
135    pub n_used: u32,
136    #[deprecated]
137    pub auto_unload: i32,
138    pub proplist: *mut pa_proplist,
139}
140
141#[rustfmt::skip]
142pub type pa_module_info_cb_t = Option<extern "C" fn(c: *mut pa_context, i: *const pa_module_info, eol: i32, userdata: *mut c_void)>;
143
144#[rustfmt::skip]
145pub type pa_context_index_cb_t = Option<extern "C" fn(c: *mut pa_context, idx: u32, userdata: *mut c_void)>;
146
147/// Stores information about clients.
148///
149/// Please note that this structure can be extended as part of evolutionary API updates at any time
150/// in any new release.
151#[repr(C)]
152pub struct pa_client_info {
153    /// Index of this client.
154    pub index: u32,
155    /// Name of this client.
156    pub name: *const c_char,
157    /// Index of the owning module, or [`PA_INVALID_INDEX`](crate::def::PA_INVALID_INDEX).
158    pub owner_module: u32,
159    /// Driver name.
160    pub driver: *const c_char,
161    /// Property list.
162    pub proplist: *mut pa_proplist,
163}
164
165#[rustfmt::skip]
166pub type pa_client_info_cb_t = Option<extern "C" fn(c: *mut pa_context, i: *const pa_client_info, eol: i32, userdata: *mut c_void)>;
167
168/// Stores information about a specific profile of a card.
169///
170/// Please note that this structure is obsolete, replaced by [`pa_card_profile_info2`] in PA v5.
171#[repr(C)]
172pub struct pa_card_profile_info {
173    /// Name of this profile.
174    pub name: *const c_char,
175    /// Description of this profile.
176    pub description: *const c_char,
177    /// Number of sinks this profile would create.
178    pub n_sinks: u32,
179    /// Number of sources this profile would create.
180    pub n_sources: u32,
181    /// The higher this value is, the more useful this profile is as a default.
182    pub priority: u32,
183}
184
185/// Stores information about a specific profile of a card.
186///
187/// Please note that this structure can be extended as part of evolutionary API updates at any time
188/// in any new release.
189#[repr(C)]
190pub struct pa_card_profile_info2 {
191    /// Name of this profile.
192    pub name: *const c_char,
193    /// Description of this profile.
194    pub description: *const c_char,
195    /// Number of sinks this profile would create.
196    pub n_sinks: u32,
197    /// Number of sources this profile would create.
198    pub n_sources: u32,
199    /// The higher this value is, the more useful this profile is as a default.
200    pub priority: u32,
201
202    /// Is this profile available? If this is zero, meaning “unavailable”, then it makes no sense to
203    /// try to activate this profile. If this is non-zero, it’s still not a guarantee that
204    /// activating the profile will result in anything useful, it just means that the server isn’t
205    /// aware of any reason why the profile would definitely be useless.
206    pub available: i32,
207}
208
209#[repr(C)]
210pub struct pa_card_port_info {
211    pub name: *const c_char,
212    pub description: *const c_char,
213    pub priority: u32,
214    pub available: i32,
215    pub direction: i32,
216    pub n_profiles: u32,
217    #[deprecated]
218    pub profiles: *mut *mut pa_card_profile_info,
219    pub proplist: *mut pa_proplist,
220    pub latency_offset: i64,
221    pub profiles2: *mut *mut pa_card_profile_info2,
222    #[cfg(any(doc, feature = "pa_v14"))]
223    #[cfg_attr(docsrs, doc(cfg(feature = "pa_v14")))]
224    pub availability_group: *const c_char,
225    #[cfg(any(doc, feature = "pa_v14"))]
226    #[cfg_attr(docsrs, doc(cfg(feature = "pa_v14")))]
227    pub r#type: u32,
228}
229
230#[repr(C)]
231pub struct pa_card_info {
232    pub index: u32,
233    pub name: *const c_char,
234    pub owner_module: u32,
235    pub driver: *const c_char,
236    pub n_profiles: u32,
237    #[deprecated]
238    pub profiles: *mut pa_card_profile_info,
239    #[deprecated]
240    pub active_profile: *mut pa_card_profile_info,
241    pub proplist: *mut pa_proplist,
242    pub n_ports: u32,
243    pub ports: *mut *mut pa_card_port_info,
244    pub profiles2: *mut *mut pa_card_profile_info2,
245    pub active_profile2: *mut pa_card_profile_info2,
246}
247
248#[rustfmt::skip]
249pub type pa_card_info_cb_t = Option<extern "C" fn(c: *mut pa_context, i: *const pa_card_info, eol: i32, userdata: *mut c_void)>;
250
251#[repr(C)]
252pub struct pa_sink_input_info {
253    pub index: u32,
254    pub name: *const c_char,
255    pub owner_module: u32,
256    pub client: u32,
257    pub sink: u32,
258    pub sample_spec: pa_sample_spec,
259    pub channel_map: pa_channel_map,
260    pub volume: pa_cvolume,
261    pub buffer_usec: pa_usec_t,
262    pub sink_usec: pa_usec_t,
263    pub resample_method: *const c_char,
264    pub driver: *const c_char,
265    pub mute: i32,
266    pub proplist: *mut pa_proplist,
267    pub corked: i32,
268    pub has_volume: i32,
269    pub volume_writable: i32,
270    pub format: *mut pa_format_info,
271}
272
273#[rustfmt::skip]
274pub type pa_sink_input_info_cb_t = Option<extern "C" fn(c: *mut pa_context, i: *const pa_sink_input_info, eol: i32, userdata: *mut c_void)>;
275
276#[repr(C)]
277pub struct pa_source_output_info {
278    pub index: u32,
279    pub name: *const c_char,
280    pub owner_module: u32,
281    pub client: u32,
282    pub source: u32,
283    pub sample_spec: pa_sample_spec,
284    pub channel_map: pa_channel_map,
285    pub buffer_usec: pa_usec_t,
286    pub source_usec: pa_usec_t,
287    pub resample_method: *const c_char,
288    pub driver: *const c_char,
289    pub proplist: *mut pa_proplist,
290    pub corked: i32,
291    pub volume: pa_cvolume,
292    pub mute: i32,
293    pub has_volume: i32,
294    pub volume_writable: i32,
295    pub format: *mut pa_format_info,
296}
297
298#[rustfmt::skip]
299pub type pa_source_output_info_cb_t = Option<extern "C" fn(c: *mut pa_context, i: *const pa_source_output_info, eol: i32, userdata: *mut c_void)>;
300
301/// Memory block statistics.
302///
303/// Please note that this structure can be extended as part of evolutionary API updates at any time
304/// in any new release.
305#[repr(C)]
306#[derive(Debug)]
307pub struct pa_stat_info {
308    /// Currently allocated memory blocks.
309    pub memblock_total: u32,
310    /// Current total size of allocated memory blocks.
311    pub memblock_total_size: u32,
312    /// Allocated memory blocks during the whole lifetime of the daemon.
313    pub memblock_allocated: u32,
314    /// Total size of all memory blocks allocated during the whole lifetime of the daemon.
315    pub memblock_allocated_size: u32,
316    /// Total size of all sample cache entries.
317    pub scache_size: u32,
318}
319
320#[rustfmt::skip]
321pub type pa_stat_info_cb_t = Option<extern "C" fn(c: *mut pa_context, i: *const pa_stat_info, userdata: *mut c_void)>;
322
323#[repr(C)]
324pub struct pa_sample_info {
325    pub index: u32,
326    pub name: *const c_char,
327    pub volume: pa_cvolume,
328    pub sample_spec: pa_sample_spec,
329    pub channel_map: pa_channel_map,
330    pub duration: pa_usec_t,
331    pub bytes: u32,
332    pub lazy: i32,
333    pub filename: *const c_char,
334    pub proplist: *mut pa_proplist,
335}
336
337#[rustfmt::skip]
338pub type pa_sample_info_cb_t = Option<extern "C" fn(c: *mut pa_context, i: *const pa_sample_info, eol: i32, userdata: *mut c_void)>;
339
340#[rustfmt::skip]
341#[cfg(any(doc, feature = "pa_v15"))]
342#[cfg_attr(docsrs, doc(cfg(feature = "pa_v15")))]
343pub type pa_context_string_cb_t = Option<extern "C" fn(c: *mut pa_context, success: i32, response: *const c_char, userdata: *mut c_void)>;
344
345#[rustfmt::skip]
346#[link(name = "pulse")]
347extern "C" {
348    pub fn pa_context_get_sink_info_by_name(c: *mut pa_context, name: *const c_char, cb: pa_sink_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
349    pub fn pa_context_get_sink_info_by_index(c: *mut pa_context, idx: u32, cb: pa_sink_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
350    pub fn pa_context_get_sink_info_list(c: *mut pa_context, cb: pa_sink_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
351    pub fn pa_context_set_sink_volume_by_index(c: *mut pa_context, idx: u32, volume: *const pa_cvolume, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
352    pub fn pa_context_set_sink_volume_by_name(c: *mut pa_context, name: *const c_char, volume: *const pa_cvolume, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
353    pub fn pa_context_set_sink_mute_by_index(c: *mut pa_context, idx: u32, mute: i32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
354    pub fn pa_context_set_sink_mute_by_name(c: *mut pa_context, name: *const c_char, mute: i32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
355    pub fn pa_context_suspend_sink_by_name(c: *mut pa_context, sink_name: *const c_char, suspend: i32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
356    pub fn pa_context_suspend_sink_by_index(c: *mut pa_context, idx: u32, suspend: i32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
357    pub fn pa_context_set_sink_port_by_index(c: *mut pa_context, idx: u32, port: *const c_char, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
358    pub fn pa_context_set_sink_port_by_name(c: *mut pa_context, name: *const c_char, port: *const c_char, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
359
360    pub fn pa_context_get_source_info_by_name(c: *mut pa_context, name: *const c_char, cb: pa_source_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
361    pub fn pa_context_get_source_info_by_index(c: *mut pa_context, idx: u32, cb: pa_source_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
362    pub fn pa_context_get_source_info_list(c: *mut pa_context, cb: pa_source_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
363    pub fn pa_context_set_source_volume_by_index(c: *mut pa_context, idx: u32, volume: *const pa_cvolume, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
364    pub fn pa_context_set_source_volume_by_name(c: *mut pa_context, name: *const c_char, volume: *const pa_cvolume, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
365    pub fn pa_context_set_source_mute_by_index(c: *mut pa_context, idx: u32, mute: i32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
366    pub fn pa_context_set_source_mute_by_name(c: *mut pa_context, name: *const c_char, mute: i32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
367    pub fn pa_context_suspend_source_by_name(c: *mut pa_context, source_name: *const c_char, suspend: i32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
368    pub fn pa_context_suspend_source_by_index(c: *mut pa_context, idx: u32, suspend: i32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
369    pub fn pa_context_set_source_port_by_index(c: *mut pa_context, idx: u32, port: *const c_char, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
370    pub fn pa_context_set_source_port_by_name(c: *mut pa_context, name: *const c_char, port: *const c_char, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
371
372    pub fn pa_context_get_server_info(c: *mut pa_context, cb: pa_server_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
373
374    pub fn pa_context_get_module_info(c: *mut pa_context, idx: u32, cb: pa_module_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
375    pub fn pa_context_get_module_info_list(c: *mut pa_context, cb: pa_module_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
376    pub fn pa_context_load_module(c: *mut pa_context, name: *const c_char, argument: *const c_char, cb: pa_context_index_cb_t, userdata: *mut c_void) -> *mut pa_operation;
377    pub fn pa_context_unload_module(c: *mut pa_context, idx: u32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
378
379    #[cfg(any(doc, feature = "pa_v15"))]
380    #[cfg_attr(docsrs, doc(cfg(feature = "pa_v15")))]
381    pub fn pa_context_send_message_to_object(c: *mut pa_context, recipient_name: *const c_char, message: *const c_char, message_parameters: *const c_char, cb: pa_context_string_cb_t, userdata: *mut c_void) -> *mut pa_operation;
382
383    pub fn pa_context_get_client_info(c: *mut pa_context, idx: u32, cb: pa_client_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
384    pub fn pa_context_get_client_info_list(c: *mut pa_context, cb: pa_client_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
385    pub fn pa_context_kill_client(c: *mut pa_context, idx: u32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
386
387    pub fn pa_context_get_card_info_by_index(c: *mut pa_context, idx: u32, cb: pa_card_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
388    pub fn pa_context_get_card_info_by_name(c: *mut pa_context, name: *const c_char, cb: pa_card_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
389    pub fn pa_context_get_card_info_list(c: *mut pa_context, cb: pa_card_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
390    pub fn pa_context_set_card_profile_by_index(c: *mut pa_context, idx: u32, profile: *const c_char, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
391    pub fn pa_context_set_card_profile_by_name(c: *mut pa_context, name: *const c_char, profile: *const c_char, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
392    pub fn pa_context_set_port_latency_offset(c: *mut pa_context, card_name: *const c_char, port_name: *const c_char, offset: i64, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
393
394    pub fn pa_context_get_sink_input_info(c: *mut pa_context, idx: u32, cb: pa_sink_input_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
395    pub fn pa_context_get_sink_input_info_list(c: *mut pa_context, cb: pa_sink_input_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
396    pub fn pa_context_move_sink_input_by_name(c: *mut pa_context, idx: u32, sink_name: *const c_char, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
397    pub fn pa_context_move_sink_input_by_index(c: *mut pa_context, idx: u32, sink_idx: u32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
398    pub fn pa_context_set_sink_input_volume(c: *mut pa_context, idx: u32, volume: *const pa_cvolume, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
399    pub fn pa_context_set_sink_input_mute(c: *mut pa_context, idx: u32, mute: i32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
400    pub fn pa_context_kill_sink_input(c: *mut pa_context, idx: u32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
401
402    pub fn pa_context_get_source_output_info(c: *mut pa_context, idx: u32, cb: pa_source_output_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
403    pub fn pa_context_get_source_output_info_list(c: *mut pa_context, cb: pa_source_output_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
404    pub fn pa_context_move_source_output_by_name(c: *mut pa_context, idx: u32, source_name: *const c_char, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
405    pub fn pa_context_move_source_output_by_index(c: *mut pa_context, idx: u32, source_idx: u32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
406    pub fn pa_context_set_source_output_volume(c: *mut pa_context, idx: u32, volume: *const pa_cvolume, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
407    pub fn pa_context_set_source_output_mute(c: *mut pa_context, idx: u32, mute: i32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
408    pub fn pa_context_kill_source_output(c: *mut pa_context, idx: u32, cb: pa_context_success_cb_t, userdata: *mut c_void) -> *mut pa_operation;
409
410    pub fn pa_context_stat(c: *mut pa_context, cb: pa_stat_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
411
412    pub fn pa_context_get_sample_info_by_name(c: *mut pa_context, name: *const c_char, cb: pa_sample_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
413    pub fn pa_context_get_sample_info_by_index(c: *mut pa_context, idx: u32, cb: pa_sample_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
414    pub fn pa_context_get_sample_info_list(c: *mut pa_context, cb: pa_sample_info_cb_t, userdata: *mut c_void) -> *mut pa_operation;
415}