summaryrefslogtreecommitdiff
path: root/src/shared/lc3.h
blob: ae193f9e2fa73d936b9ce270363b3bd5a98c1d7f (plain)
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)