1#![allow(non_camel_case_types)]
2#![allow(non_snake_case)]
3#![allow(non_upper_case_globals)]
4
5use libc::{c_float, c_int, c_void};
6
7pub const GGWAVE_MAX_INSTANCES: c_int = 4;
8
9#[repr(C)]
10#[derive(Debug, Copy, Clone, PartialEq, Eq)]
11pub enum ggwave_SampleFormat {
12 GGWAVE_SAMPLE_FORMAT_UNDEFINED = 0,
13 GGWAVE_SAMPLE_FORMAT_U8 = 1,
14 GGWAVE_SAMPLE_FORMAT_I8 = 2,
15 GGWAVE_SAMPLE_FORMAT_U16 = 3,
16 GGWAVE_SAMPLE_FORMAT_I16 = 4,
17 GGWAVE_SAMPLE_FORMAT_F32 = 5,
18}
19
20#[repr(C)]
21#[derive(Debug, Copy, Clone, PartialEq, Eq)]
22pub enum ggwave_ProtocolId {
23 GGWAVE_PROTOCOL_AUDIBLE_NORMAL = 0,
24 GGWAVE_PROTOCOL_AUDIBLE_FAST = 1,
25 GGWAVE_PROTOCOL_AUDIBLE_FASTEST = 2,
26 GGWAVE_PROTOCOL_ULTRASOUND_NORMAL = 3,
27 GGWAVE_PROTOCOL_ULTRASOUND_FAST = 4,
28 GGWAVE_PROTOCOL_ULTRASOUND_FASTEST = 5,
29 GGWAVE_PROTOCOL_DT_NORMAL = 6,
30 GGWAVE_PROTOCOL_DT_FAST = 7,
31 GGWAVE_PROTOCOL_DT_FASTEST = 8,
32 GGWAVE_PROTOCOL_MT_NORMAL = 9,
33 GGWAVE_PROTOCOL_MT_FAST = 10,
34 GGWAVE_PROTOCOL_MT_FASTEST = 11,
35 GGWAVE_PROTOCOL_CUSTOM_0 = 12,
36 GGWAVE_PROTOCOL_CUSTOM_1 = 13,
37 GGWAVE_PROTOCOL_CUSTOM_2 = 14,
38 GGWAVE_PROTOCOL_CUSTOM_3 = 15,
39 GGWAVE_PROTOCOL_CUSTOM_4 = 16,
40 GGWAVE_PROTOCOL_CUSTOM_5 = 17,
41 GGWAVE_PROTOCOL_CUSTOM_6 = 18,
42 GGWAVE_PROTOCOL_CUSTOM_7 = 19,
43 GGWAVE_PROTOCOL_CUSTOM_8 = 20,
44 GGWAVE_PROTOCOL_CUSTOM_9 = 21,
45 GGWAVE_PROTOCOL_COUNT = 22,
46}
47
48#[repr(C)]
49#[derive(Debug, Copy, Clone, PartialEq, Eq)]
50pub enum ggwave_Filter {
51 GGWAVE_FILTER_HANN = 0,
52 GGWAVE_FILTER_HAMMING = 1,
53 GGWAVE_FILTER_FIRST_ORDER_HIGH_PASS = 2,
54}
55
56pub const GGWAVE_OPERATING_MODE_RX: c_int = 1 << 1;
57pub const GGWAVE_OPERATING_MODE_TX: c_int = 1 << 2;
58pub const GGWAVE_OPERATING_MODE_RX_AND_TX: c_int =
59 GGWAVE_OPERATING_MODE_RX | GGWAVE_OPERATING_MODE_TX;
60pub const GGWAVE_OPERATING_MODE_TX_ONLY_TONES: c_int = 1 << 3;
61pub const GGWAVE_OPERATING_MODE_USE_DSS: c_int = 1 << 4;
62
63#[repr(C)]
64#[derive(Debug, Copy, Clone)]
65pub struct ggwave_Parameters {
66 pub payloadLength: c_int,
67 pub sampleRateInp: c_float,
68 pub sampleRateOut: c_float,
69 pub sampleRate: c_float,
70 pub samplesPerFrame: c_int,
71 pub soundMarkerThreshold: c_float,
72 pub sampleFormatInp: ggwave_SampleFormat,
73 pub sampleFormatOut: ggwave_SampleFormat,
74 pub operatingMode: c_int,
75}
76
77pub type ggwave_Instance = c_int;
78
79extern "C" {
80 pub fn ggwave_setLogFile(fptr: *mut c_void);
81 pub fn ggwave_getDefaultParameters() -> ggwave_Parameters;
82 pub fn ggwave_init(parameters: ggwave_Parameters) -> ggwave_Instance;
83 pub fn ggwave_free(instance: ggwave_Instance);
84 pub fn ggwave_encode(
85 instance: ggwave_Instance,
86 payloadBuffer: *const c_void,
87 payloadSize: c_int,
88 protocolId: ggwave_ProtocolId,
89 volume: c_int,
90 waveformBuffer: *mut c_void,
91 query: c_int,
92 ) -> c_int;
93 pub fn ggwave_decode(
94 instance: ggwave_Instance,
95 waveformBuffer: *const c_void,
96 waveformSize: c_int,
97 payloadBuffer: *mut c_void,
98 ) -> c_int;
99 pub fn ggwave_ndecode(
100 instance: ggwave_Instance,
101 waveformBuffer: *const c_void,
102 waveformSize: c_int,
103 payloadBuffer: *mut c_void,
104 payloadSize: c_int,
105 ) -> c_int;
106 pub fn ggwave_rxToggleProtocol(protocolId: ggwave_ProtocolId, state: c_int);
107 pub fn ggwave_txToggleProtocol(protocolId: ggwave_ProtocolId, state: c_int);
108 pub fn ggwave_rxProtocolSetFreqStart(protocolId: ggwave_ProtocolId, freqStart: c_int);
109 pub fn ggwave_txProtocolSetFreqStart(protocolId: ggwave_ProtocolId, freqStart: c_int);
110 pub fn ggwave_rxDurationFrames(instance: ggwave_Instance) -> c_int;
111}
112