1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
*
* BlueZ - Bluetooth protocol stack for Linux
*
* Copyright (C) 2022 Intel Corporation. All rights reserved.
*
*/
#define data(args...) ((const unsigned char[]) { args })
#define LC3_IOV(args...) \
{ \
.iov_base = (void *)data(args), \
.iov_len = sizeof(data(args)), \
}
#define LC3_ID 0x06
#define LC3_BASE 0x01
#define LC3_FREQ (LC3_BASE)
#define LC3_FREQ_8KHZ BIT(0)
#define LC3_FREQ_11KHZ BIT(1)
#define LC3_FREQ_16KHZ BIT(2)
#define LC3_FREQ_22KHZ BIT(3)
#define LC3_FREQ_24KHZ BIT(4)
#define LC3_FREQ_32KHZ BIT(5)
#define LC3_FREQ_44KHZ BIT(6)
#define LC3_FREQ_48KHZ BIT(7)
#define LC3_FREQ_ANY (LC3_FREQ_8KHZ | \
LC3_FREQ_11KHZ | \
LC3_FREQ_16KHZ | \
LC3_FREQ_22KHZ | \
LC3_FREQ_24KHZ | \
LC3_FREQ_32KHZ | \
LC3_FREQ_44KHZ | \
LC3_FREQ_48KHZ)
#define LC3_DURATION (LC3_BASE + 1)
#define LC3_DURATION_7_5 BIT(0)
#define LC3_DURATION_10 BIT(1)
#define LC3_DURATION_ANY (LC3_DURATION_7_5 | LC3_DURATION_10)
#define LC3_DURATION_PREFER_7_5 BIT(4)
#define LC3_DURATION_PREFER_10 BIT(5)
#define LC3_CHAN_COUNT (LC3_BASE + 2)
#define LC3_CHAN_COUNT_SUPPORT BIT(0)
#define LC3_FRAME_LEN (LC3_BASE + 3)
#define LC3_FRAME_COUNT (LC3_BASE + 4)
#define LC3_CAPABILITIES(_freq, _duration, _chan_count, _len_min, _len_max) \
LC3_IOV(0x02, LC3_FREQ, _freq, _freq >> 8, \
0x02, LC3_DURATION, _duration, \
0x02, LC3_CHAN_COUNT, _chan_count, \
0x05, LC3_FRAME_LEN, _len_min, _len_min >> 8, \
_len_max, _len_max >> 8)
#define LC3_CONFIG_BASE 0x01
#define LC3_CONFIG_FREQ (LC3_CONFIG_BASE)
#define LC3_CONFIG_FREQ_8KHZ 0x01
#define LC3_CONFIG_FREQ_11KHZ 0x02
#define LC3_CONFIG_FREQ_16KHZ 0x03
#define LC3_CONFIG_FREQ_22KHZ 0x04
#define LC3_CONFIG_FREQ_24KHZ 0x05
#define LC3_CONFIG_FREQ_32KHZ 0x06
#define LC3_CONFIG_FREQ_44KHZ 0x07
#define LC3_CONFIG_FREQ_48KHZ 0x08
#define LC3_CONFIG_DURATION (LC3_CONFIG_BASE + 1)
#define LC3_CONFIG_DURATION_7_5 0x00
#define LC3_CONFIG_DURATION_10 0x01
#define LC3_CONFIG_CHAN_ALLOC (LC3_CONFIG_BASE + 2)
#define LC3_CONFIG_FRAME_LEN (LC3_CONFIG_BASE + 3)
#define LC3_CONFIG(_freq, _duration, _len) \
LC3_IOV(0x02, LC3_CONFIG_FREQ, _freq, \
0x02, LC3_CONFIG_DURATION, _duration, \
0x03, LC3_CONFIG_FRAME_LEN, _len, _len >> 8)
#define LC3_CONFIG_8(_duration, _len) \
LC3_CONFIG(LC3_CONFIG_FREQ_8KHZ, _duration, _len)
#define LC3_CONFIG_11(_duration, _len) \
LC3_CONFIG(LC3_CONFIG_FREQ_11KHZ, _duration, _len)
#define LC3_CONFIG_16(_duration, _len) \
LC3_CONFIG(LC3_CONFIG_FREQ_16KHZ, _duration, _len)
#define LC3_CONFIG_22(_duration, _len) \
LC3_CONFIG(LC3_CONFIG_FREQ_22KHZ, _duration, _len)
#define LC3_CONFIG_24(_duration, _len) \
LC3_CONFIG(LC3_CONFIG_FREQ_24KHZ, _duration, _len)
#define LC3_CONFIG_32(_duration, _len) \
LC3_CONFIG(LC3_CONFIG_FREQ_32KHZ, _duration, _len)
#define LC3_CONFIG_44(_duration, _len) \
LC3_CONFIG(LC3_CONFIG_FREQ_44KHZ, _duration, _len)
#define LC3_CONFIG_48(_duration, _len) \
LC3_CONFIG(LC3_CONFIG_FREQ_48KHZ, _duration, _len)
#define LC3_CONFIG_8_1 \
LC3_CONFIG_8(LC3_CONFIG_DURATION_7_5, 26u)
#define LC3_CONFIG_8_2 \
LC3_CONFIG_8(LC3_CONFIG_DURATION_10, 30u)
#define LC3_CONFIG_16_1 \
LC3_CONFIG_16(LC3_CONFIG_DURATION_7_5, 30u)
#define LC3_CONFIG_16_2 \
LC3_CONFIG_16(LC3_CONFIG_DURATION_10, 40u)
#define LC3_CONFIG_24_1 \
LC3_CONFIG_24(LC3_CONFIG_DURATION_7_5, 45u)
#define LC3_CONFIG_24_2 \
LC3_CONFIG_24(LC3_CONFIG_DURATION_10, 60u)
#define LC3_CONFIG_32_1 \
LC3_CONFIG_32(LC3_CONFIG_DURATION_7_5, 60u)
#define LC3_CONFIG_32_2 \
LC3_CONFIG_32(LC3_CONFIG_DURATION_10, 80u)
#define LC3_CONFIG_44_1 \
LC3_CONFIG_44(LC3_CONFIG_DURATION_7_5, 98u)
#define LC3_CONFIG_44_2 \
LC3_CONFIG_44(LC3_CONFIG_DURATION_10, 130u)
#define LC3_CONFIG_48_1 \
LC3_CONFIG_48(LC3_CONFIG_DURATION_7_5, 75u)
#define LC3_CONFIG_48_2 \
LC3_CONFIG_48(LC3_CONFIG_DURATION_10, 100u)
#define LC3_CONFIG_48_3 \
LC3_CONFIG_48(LC3_CONFIG_DURATION_7_5, 90u)
#define LC3_CONFIG_48_4 \
LC3_CONFIG_48(LC3_CONFIG_DURATION_10, 120u)
#define LC3_CONFIG_48_5 \
LC3_CONFIG_48(LC3_CONFIG_DURATION_7_5, 117u)
#define LC3_CONFIG_48_6 \
LC3_CONFIG_48(LC3_CONFIG_DURATION_10, 155u)
|