1 /******************************************************************************
2 *
3 * Copyright 2015 Broadcom Corporation
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 ******************************************************************************/
18
19 #include "base/logging.h"
20
21 #include "device/include/esco_parameters.h"
22
23 #include "check.h"
24
25 static const enh_esco_params_t default_esco_parameters[ESCO_NUM_CODECS] = {
26 // CVSD D1
27 {
28 .transmit_bandwidth = TXRX_64KBITS_RATE,
29 .receive_bandwidth = TXRX_64KBITS_RATE,
30 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD,
31 .company_id = 0x0000,
32 .vendor_specific_codec_id = 0x0000},
33 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD,
34 .company_id = 0x0000,
35 .vendor_specific_codec_id = 0x0000},
36 .transmit_codec_frame_size = 60,
37 .receive_codec_frame_size = 60,
38 .input_bandwidth = INPUT_OUTPUT_64K_RATE,
39 .output_bandwidth = INPUT_OUTPUT_64K_RATE,
40 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR,
41 .company_id = 0x0000,
42 .vendor_specific_codec_id = 0x0000},
43 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR,
44 .company_id = 0x0000,
45 .vendor_specific_codec_id = 0x0000},
46 .input_coded_data_size = 16,
47 .output_coded_data_size = 16,
48 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP,
49 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP,
50 .input_pcm_payload_msb_position = 0,
51 .output_pcm_payload_msb_position = 0,
52 .input_data_path = ESCO_DATA_PATH_PCM,
53 .output_data_path = ESCO_DATA_PATH_PCM,
54 .input_transport_unit_size = 0x00,
55 .output_transport_unit_size = 0x00,
56 .max_latency_ms = 0xFFFF, // Don't care
57 .packet_types = (ESCO_PKT_TYPES_MASK_HV1 | ESCO_PKT_TYPES_MASK_HV2 |
58 ESCO_PKT_TYPES_MASK_HV3),
59 .retransmission_effort = ESCO_RETRANSMISSION_OFF,
60 },
61 // CVSD S3
62 {
63 .transmit_bandwidth = TXRX_64KBITS_RATE,
64 .receive_bandwidth = TXRX_64KBITS_RATE,
65 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD,
66 .company_id = 0x0000,
67 .vendor_specific_codec_id = 0x0000},
68 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD,
69 .company_id = 0x0000,
70 .vendor_specific_codec_id = 0x0000},
71 .transmit_codec_frame_size = 60,
72 .receive_codec_frame_size = 60,
73 .input_bandwidth = INPUT_OUTPUT_64K_RATE,
74 .output_bandwidth = INPUT_OUTPUT_64K_RATE,
75 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR,
76 .company_id = 0x0000,
77 .vendor_specific_codec_id = 0x0000},
78 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR,
79 .company_id = 0x0000,
80 .vendor_specific_codec_id = 0x0000},
81 .input_coded_data_size = 16,
82 .output_coded_data_size = 16,
83 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP,
84 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP,
85 .input_pcm_payload_msb_position = 0,
86 .output_pcm_payload_msb_position = 0,
87 .input_data_path = ESCO_DATA_PATH_PCM,
88 .output_data_path = ESCO_DATA_PATH_PCM,
89 .input_transport_unit_size = 0x00,
90 .output_transport_unit_size = 0x00,
91 .max_latency_ms = 10,
92 .packet_types =
93 (ESCO_PKT_TYPES_MASK_HV1 | ESCO_PKT_TYPES_MASK_HV2 |
94 ESCO_PKT_TYPES_MASK_HV3 | ESCO_PKT_TYPES_MASK_EV3 |
95 ESCO_PKT_TYPES_MASK_EV4 | ESCO_PKT_TYPES_MASK_EV5 |
96 ESCO_PKT_TYPES_MASK_NO_3_EV3 | ESCO_PKT_TYPES_MASK_NO_2_EV5 |
97 ESCO_PKT_TYPES_MASK_NO_3_EV5),
98 .retransmission_effort = ESCO_RETRANSMISSION_POWER,
99 },
100 // CVSD S4
101 {
102 .transmit_bandwidth = TXRX_64KBITS_RATE,
103 .receive_bandwidth = TXRX_64KBITS_RATE,
104 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD,
105 .company_id = 0x0000,
106 .vendor_specific_codec_id = 0x0000},
107 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD,
108 .company_id = 0x0000,
109 .vendor_specific_codec_id = 0x0000},
110 .transmit_codec_frame_size = 60,
111 .receive_codec_frame_size = 60,
112 .input_bandwidth = INPUT_OUTPUT_64K_RATE,
113 .output_bandwidth = INPUT_OUTPUT_64K_RATE,
114 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR,
115 .company_id = 0x0000,
116 .vendor_specific_codec_id = 0x0000},
117 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR,
118 .company_id = 0x0000,
119 .vendor_specific_codec_id = 0x0000},
120 .input_coded_data_size = 16,
121 .output_coded_data_size = 16,
122 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP,
123 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP,
124 .input_pcm_payload_msb_position = 0,
125 .output_pcm_payload_msb_position = 0,
126 .input_data_path = ESCO_DATA_PATH_PCM,
127 .output_data_path = ESCO_DATA_PATH_PCM,
128 .input_transport_unit_size = 0x00,
129 .output_transport_unit_size = 0x00,
130 .max_latency_ms = 12,
131 .packet_types =
132 (ESCO_PKT_TYPES_MASK_HV1 | ESCO_PKT_TYPES_MASK_HV2 |
133 ESCO_PKT_TYPES_MASK_HV3 | ESCO_PKT_TYPES_MASK_EV3 |
134 ESCO_PKT_TYPES_MASK_EV4 | ESCO_PKT_TYPES_MASK_EV5 |
135 ESCO_PKT_TYPES_MASK_NO_3_EV3 | ESCO_PKT_TYPES_MASK_NO_2_EV5 |
136 ESCO_PKT_TYPES_MASK_NO_3_EV5),
137 .retransmission_effort = ESCO_RETRANSMISSION_QUALITY,
138 },
139 // mSBC T1
140 {
141 .transmit_bandwidth = TXRX_64KBITS_RATE,
142 .receive_bandwidth = TXRX_64KBITS_RATE,
143 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_MSBC,
144 .company_id = 0x0000,
145 .vendor_specific_codec_id = 0x0000},
146 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_MSBC,
147 .company_id = 0x0000,
148 .vendor_specific_codec_id = 0x0000},
149 .transmit_codec_frame_size = 60,
150 .receive_codec_frame_size = 60,
151 .input_bandwidth = INPUT_OUTPUT_128K_RATE,
152 .output_bandwidth = INPUT_OUTPUT_128K_RATE,
153 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR,
154 .company_id = 0x0000,
155 .vendor_specific_codec_id = 0x0000},
156 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR,
157 .company_id = 0x0000,
158 .vendor_specific_codec_id = 0x0000},
159 .input_coded_data_size = 16,
160 .output_coded_data_size = 16,
161 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP,
162 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP,
163 .input_pcm_payload_msb_position = 0,
164 .output_pcm_payload_msb_position = 0,
165 .input_data_path = ESCO_DATA_PATH_PCM,
166 .output_data_path = ESCO_DATA_PATH_PCM,
167 .input_transport_unit_size = 0x00,
168 .output_transport_unit_size = 0x00,
169 .max_latency_ms = 8,
170 .packet_types =
171 (ESCO_PKT_TYPES_MASK_EV3 | ESCO_PKT_TYPES_MASK_NO_3_EV3 |
172 ESCO_PKT_TYPES_MASK_NO_2_EV5 | ESCO_PKT_TYPES_MASK_NO_3_EV5 |
173 ESCO_PKT_TYPES_MASK_NO_2_EV3),
174 .retransmission_effort = ESCO_RETRANSMISSION_QUALITY,
175 },
176 // mSBC T2
177 {
178 .transmit_bandwidth = TXRX_64KBITS_RATE,
179 .receive_bandwidth = TXRX_64KBITS_RATE,
180 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_MSBC,
181 .company_id = 0x0000,
182 .vendor_specific_codec_id = 0x0000},
183 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_MSBC,
184 .company_id = 0x0000,
185 .vendor_specific_codec_id = 0x0000},
186 .transmit_codec_frame_size = 60,
187 .receive_codec_frame_size = 60,
188 .input_bandwidth = INPUT_OUTPUT_128K_RATE,
189 .output_bandwidth = INPUT_OUTPUT_128K_RATE,
190 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR,
191 .company_id = 0x0000,
192 .vendor_specific_codec_id = 0x0000},
193 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR,
194 .company_id = 0x0000,
195 .vendor_specific_codec_id = 0x0000},
196 .input_coded_data_size = 16,
197 .output_coded_data_size = 16,
198 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP,
199 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP,
200 .input_pcm_payload_msb_position = 0,
201 .output_pcm_payload_msb_position = 0,
202 .input_data_path = ESCO_DATA_PATH_PCM,
203 .output_data_path = ESCO_DATA_PATH_PCM,
204 .input_transport_unit_size = 0x00,
205 .output_transport_unit_size = 0x00,
206 .max_latency_ms = 13,
207 .packet_types =
208 (ESCO_PKT_TYPES_MASK_EV3 | ESCO_PKT_TYPES_MASK_NO_3_EV3 |
209 ESCO_PKT_TYPES_MASK_NO_2_EV5 | ESCO_PKT_TYPES_MASK_NO_3_EV5),
210 .retransmission_effort = ESCO_RETRANSMISSION_QUALITY,
211 },
212 };
213
esco_parameters_for_codec(esco_codec_t codec)214 enh_esco_params_t esco_parameters_for_codec(esco_codec_t codec) {
215 CHECK(codec >= 0) << "codec index " << (int)codec << "< 0";
216 CHECK(codec < ESCO_NUM_CODECS) << "codec index " << (int)codec << " > "
217 << ESCO_NUM_CODECS;
218 return default_esco_parameters[codec];
219 }
220