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 static const enh_esco_params_t default_esco_parameters[ESCO_NUM_CODECS] = { 24 // CVSD D1 25 { 26 .transmit_bandwidth = TXRX_64KBITS_RATE, 27 .receive_bandwidth = TXRX_64KBITS_RATE, 28 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD, 29 .company_id = 0x0000, 30 .vendor_specific_codec_id = 0x0000}, 31 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD, 32 .company_id = 0x0000, 33 .vendor_specific_codec_id = 0x0000}, 34 .transmit_codec_frame_size = 60, 35 .receive_codec_frame_size = 60, 36 .input_bandwidth = INPUT_OUTPUT_64K_RATE, 37 .output_bandwidth = INPUT_OUTPUT_64K_RATE, 38 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 39 .company_id = 0x0000, 40 .vendor_specific_codec_id = 0x0000}, 41 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 42 .company_id = 0x0000, 43 .vendor_specific_codec_id = 0x0000}, 44 .input_coded_data_size = 16, 45 .output_coded_data_size = 16, 46 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 47 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 48 .input_pcm_payload_msb_position = 0, 49 .output_pcm_payload_msb_position = 0, 50 .input_data_path = ESCO_DATA_PATH_PCM, 51 .output_data_path = ESCO_DATA_PATH_PCM, 52 .input_transport_unit_size = 0x00, 53 .output_transport_unit_size = 0x00, 54 .max_latency_ms = 0xFFFF, // Don't care 55 .packet_types = (ESCO_PKT_TYPES_MASK_HV1 | ESCO_PKT_TYPES_MASK_HV2 | 56 ESCO_PKT_TYPES_MASK_HV3), 57 .retransmission_effort = ESCO_RETRANSMISSION_OFF, 58 }, 59 // CVSD S3 60 { 61 .transmit_bandwidth = TXRX_64KBITS_RATE, 62 .receive_bandwidth = TXRX_64KBITS_RATE, 63 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD, 64 .company_id = 0x0000, 65 .vendor_specific_codec_id = 0x0000}, 66 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD, 67 .company_id = 0x0000, 68 .vendor_specific_codec_id = 0x0000}, 69 .transmit_codec_frame_size = 60, 70 .receive_codec_frame_size = 60, 71 .input_bandwidth = INPUT_OUTPUT_64K_RATE, 72 .output_bandwidth = INPUT_OUTPUT_64K_RATE, 73 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 74 .company_id = 0x0000, 75 .vendor_specific_codec_id = 0x0000}, 76 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 77 .company_id = 0x0000, 78 .vendor_specific_codec_id = 0x0000}, 79 .input_coded_data_size = 16, 80 .output_coded_data_size = 16, 81 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 82 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 83 .input_pcm_payload_msb_position = 0, 84 .output_pcm_payload_msb_position = 0, 85 .input_data_path = ESCO_DATA_PATH_PCM, 86 .output_data_path = ESCO_DATA_PATH_PCM, 87 .input_transport_unit_size = 0x00, 88 .output_transport_unit_size = 0x00, 89 .max_latency_ms = 10, 90 .packet_types = 91 (ESCO_PKT_TYPES_MASK_HV1 | ESCO_PKT_TYPES_MASK_HV2 | 92 ESCO_PKT_TYPES_MASK_HV3 | ESCO_PKT_TYPES_MASK_EV3 | 93 ESCO_PKT_TYPES_MASK_EV4 | ESCO_PKT_TYPES_MASK_EV5 | 94 ESCO_PKT_TYPES_MASK_NO_3_EV3 | ESCO_PKT_TYPES_MASK_NO_2_EV5 | 95 ESCO_PKT_TYPES_MASK_NO_3_EV5), 96 .retransmission_effort = ESCO_RETRANSMISSION_POWER, 97 }, 98 // CVSD S4 99 { 100 .transmit_bandwidth = TXRX_64KBITS_RATE, 101 .receive_bandwidth = TXRX_64KBITS_RATE, 102 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD, 103 .company_id = 0x0000, 104 .vendor_specific_codec_id = 0x0000}, 105 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD, 106 .company_id = 0x0000, 107 .vendor_specific_codec_id = 0x0000}, 108 .transmit_codec_frame_size = 60, 109 .receive_codec_frame_size = 60, 110 .input_bandwidth = INPUT_OUTPUT_64K_RATE, 111 .output_bandwidth = INPUT_OUTPUT_64K_RATE, 112 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 113 .company_id = 0x0000, 114 .vendor_specific_codec_id = 0x0000}, 115 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 116 .company_id = 0x0000, 117 .vendor_specific_codec_id = 0x0000}, 118 .input_coded_data_size = 16, 119 .output_coded_data_size = 16, 120 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 121 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 122 .input_pcm_payload_msb_position = 0, 123 .output_pcm_payload_msb_position = 0, 124 .input_data_path = ESCO_DATA_PATH_PCM, 125 .output_data_path = ESCO_DATA_PATH_PCM, 126 .input_transport_unit_size = 0x00, 127 .output_transport_unit_size = 0x00, 128 .max_latency_ms = 12, 129 .packet_types = 130 (ESCO_PKT_TYPES_MASK_HV1 | ESCO_PKT_TYPES_MASK_HV2 | 131 ESCO_PKT_TYPES_MASK_HV3 | ESCO_PKT_TYPES_MASK_EV3 | 132 ESCO_PKT_TYPES_MASK_EV4 | ESCO_PKT_TYPES_MASK_EV5 | 133 ESCO_PKT_TYPES_MASK_NO_3_EV3 | ESCO_PKT_TYPES_MASK_NO_2_EV5 | 134 ESCO_PKT_TYPES_MASK_NO_3_EV5), 135 .retransmission_effort = ESCO_RETRANSMISSION_QUALITY, 136 }, 137 // mSBC T1 138 { 139 .transmit_bandwidth = TXRX_64KBITS_RATE, 140 .receive_bandwidth = TXRX_64KBITS_RATE, 141 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_MSBC, 142 .company_id = 0x0000, 143 .vendor_specific_codec_id = 0x0000}, 144 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_MSBC, 145 .company_id = 0x0000, 146 .vendor_specific_codec_id = 0x0000}, 147 .transmit_codec_frame_size = 60, 148 .receive_codec_frame_size = 60, 149 .input_bandwidth = INPUT_OUTPUT_128K_RATE, 150 .output_bandwidth = INPUT_OUTPUT_128K_RATE, 151 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 152 .company_id = 0x0000, 153 .vendor_specific_codec_id = 0x0000}, 154 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 155 .company_id = 0x0000, 156 .vendor_specific_codec_id = 0x0000}, 157 .input_coded_data_size = 16, 158 .output_coded_data_size = 16, 159 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 160 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 161 .input_pcm_payload_msb_position = 0, 162 .output_pcm_payload_msb_position = 0, 163 .input_data_path = ESCO_DATA_PATH_PCM, 164 .output_data_path = ESCO_DATA_PATH_PCM, 165 .input_transport_unit_size = 0x00, 166 .output_transport_unit_size = 0x00, 167 .max_latency_ms = 8, 168 .packet_types = 169 (ESCO_PKT_TYPES_MASK_EV3 | ESCO_PKT_TYPES_MASK_NO_3_EV3 | 170 ESCO_PKT_TYPES_MASK_NO_2_EV5 | ESCO_PKT_TYPES_MASK_NO_3_EV5 | 171 ESCO_PKT_TYPES_MASK_NO_2_EV3), 172 .retransmission_effort = ESCO_RETRANSMISSION_QUALITY, 173 }, 174 // mSBC T2 175 { 176 .transmit_bandwidth = TXRX_64KBITS_RATE, 177 .receive_bandwidth = TXRX_64KBITS_RATE, 178 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_MSBC, 179 .company_id = 0x0000, 180 .vendor_specific_codec_id = 0x0000}, 181 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_MSBC, 182 .company_id = 0x0000, 183 .vendor_specific_codec_id = 0x0000}, 184 .transmit_codec_frame_size = 60, 185 .receive_codec_frame_size = 60, 186 .input_bandwidth = INPUT_OUTPUT_128K_RATE, 187 .output_bandwidth = INPUT_OUTPUT_128K_RATE, 188 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 189 .company_id = 0x0000, 190 .vendor_specific_codec_id = 0x0000}, 191 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 192 .company_id = 0x0000, 193 .vendor_specific_codec_id = 0x0000}, 194 .input_coded_data_size = 16, 195 .output_coded_data_size = 16, 196 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 197 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 198 .input_pcm_payload_msb_position = 0, 199 .output_pcm_payload_msb_position = 0, 200 .input_data_path = ESCO_DATA_PATH_PCM, 201 .output_data_path = ESCO_DATA_PATH_PCM, 202 .input_transport_unit_size = 0x00, 203 .output_transport_unit_size = 0x00, 204 .max_latency_ms = 13, 205 .packet_types = 206 (ESCO_PKT_TYPES_MASK_EV3 | ESCO_PKT_TYPES_MASK_NO_3_EV3 | 207 ESCO_PKT_TYPES_MASK_NO_2_EV5 | ESCO_PKT_TYPES_MASK_NO_3_EV5), 208 .retransmission_effort = ESCO_RETRANSMISSION_QUALITY, 209 }, 210 }; 211 212 enh_esco_params_t esco_parameters_for_codec(esco_codec_t codec) { 213 CHECK(codec >= 0) << "codec index " << (int)codec << "< 0"; 214 CHECK(codec < ESCO_NUM_CODECS) << "codec index " << (int)codec << " > " 215 << ESCO_NUM_CODECS; 216 return default_esco_parameters[codec]; 217 } 218