1/****************************************************************************** 2 * 3 * Copyright (C) 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 23static const enh_esco_params_t default_esco_parameters[ESCO_NUM_CODECS] = { 24 // CVSD 25 {.transmit_bandwidth = TXRX_64KBITS_RATE, 26 .receive_bandwidth = TXRX_64KBITS_RATE, 27 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD, 28 .company_id = 0x0000, 29 .vendor_specific_codec_id = 0x0000}, 30 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_CVSD, 31 .company_id = 0x0000, 32 .vendor_specific_codec_id = 0x0000}, 33 .transmit_codec_frame_size = 60, 34 .receive_codec_frame_size = 60, 35 .input_bandwidth = INPUT_OUTPUT_64K_RATE, 36 .output_bandwidth = INPUT_OUTPUT_64K_RATE, 37 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 38 .company_id = 0x0000, 39 .vendor_specific_codec_id = 0x0000}, 40 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 41 .company_id = 0x0000, 42 .vendor_specific_codec_id = 0x0000}, 43 .input_coded_data_size = 16, 44 .output_coded_data_size = 16, 45 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 46 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 47 .input_pcm_payload_msb_position = 0, 48 .output_pcm_payload_msb_position = 0, 49 .input_data_path = ESCO_DATA_PATH_PCM, 50 .output_data_path = ESCO_DATA_PATH_PCM, 51 .input_transport_unit_size = 0x00, 52 .output_transport_unit_size = 0x00, 53#if (BTA_HFP_VERSION >= HFP_VERSION_1_7) 54 .max_latency_ms = 12, 55#else 56 .max_latency_ms = 10, 57#endif 58 59 .packet_types = 60 (ESCO_PKT_TYPES_MASK_HV1 | ESCO_PKT_TYPES_MASK_HV2 | 61 ESCO_PKT_TYPES_MASK_HV3 | ESCO_PKT_TYPES_MASK_EV3 | 62 ESCO_PKT_TYPES_MASK_EV4 | ESCO_PKT_TYPES_MASK_EV5 | 63 ESCO_PKT_TYPES_MASK_NO_3_EV3 | ESCO_PKT_TYPES_MASK_NO_2_EV5 | 64 ESCO_PKT_TYPES_MASK_NO_3_EV5), 65#if (BTA_HFP_VERSION >= HFP_VERSION_1_7) 66 .retransmission_effort = ESCO_RETRANSMISSION_QUALITY 67#else 68 .retransmission_effort = ESCO_RETRANSMISSION_POWER 69#endif 70 71 }, 72 // mSBC T1 73 {.transmit_bandwidth = TXRX_64KBITS_RATE, 74 .receive_bandwidth = TXRX_64KBITS_RATE, 75 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_MSBC, 76 .company_id = 0x0000, 77 .vendor_specific_codec_id = 0x0000}, 78 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_MSBC, 79 .company_id = 0x0000, 80 .vendor_specific_codec_id = 0x0000}, 81 .transmit_codec_frame_size = 60, 82 .receive_codec_frame_size = 60, 83 .input_bandwidth = INPUT_OUTPUT_128K_RATE, 84 .output_bandwidth = INPUT_OUTPUT_128K_RATE, 85 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 86 .company_id = 0x0000, 87 .vendor_specific_codec_id = 0x0000}, 88 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 89 .company_id = 0x0000, 90 .vendor_specific_codec_id = 0x0000}, 91 .input_coded_data_size = 16, 92 .output_coded_data_size = 16, 93 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 94 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 95 .input_pcm_payload_msb_position = 0, 96 .output_pcm_payload_msb_position = 0, 97 .input_data_path = ESCO_DATA_PATH_PCM, 98 .output_data_path = ESCO_DATA_PATH_PCM, 99 .input_transport_unit_size = 0x00, 100 .output_transport_unit_size = 0x00, 101 .max_latency_ms = 8, 102 .packet_types = 103 (ESCO_PKT_TYPES_MASK_EV3 | ESCO_PKT_TYPES_MASK_NO_3_EV3 | 104 ESCO_PKT_TYPES_MASK_NO_2_EV5 | ESCO_PKT_TYPES_MASK_NO_3_EV5 | 105 ESCO_PKT_TYPES_MASK_NO_2_EV3), 106 .retransmission_effort = ESCO_RETRANSMISSION_QUALITY}, 107 // mSBC T2 108 {.transmit_bandwidth = TXRX_64KBITS_RATE, 109 .receive_bandwidth = TXRX_64KBITS_RATE, 110 .transmit_coding_format = {.coding_format = ESCO_CODING_FORMAT_MSBC, 111 .company_id = 0x0000, 112 .vendor_specific_codec_id = 0x0000}, 113 .receive_coding_format = {.coding_format = ESCO_CODING_FORMAT_MSBC, 114 .company_id = 0x0000, 115 .vendor_specific_codec_id = 0x0000}, 116 .transmit_codec_frame_size = 60, 117 .receive_codec_frame_size = 60, 118 .input_bandwidth = INPUT_OUTPUT_128K_RATE, 119 .output_bandwidth = INPUT_OUTPUT_128K_RATE, 120 .input_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 121 .company_id = 0x0000, 122 .vendor_specific_codec_id = 0x0000}, 123 .output_coding_format = {.coding_format = ESCO_CODING_FORMAT_LINEAR, 124 .company_id = 0x0000, 125 .vendor_specific_codec_id = 0x0000}, 126 .input_coded_data_size = 16, 127 .output_coded_data_size = 16, 128 .input_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 129 .output_pcm_data_format = ESCO_PCM_DATA_FORMAT_2_COMP, 130 .input_pcm_payload_msb_position = 0, 131 .output_pcm_payload_msb_position = 0, 132 .input_data_path = ESCO_DATA_PATH_PCM, 133 .output_data_path = ESCO_DATA_PATH_PCM, 134 .input_transport_unit_size = 0x00, 135 .output_transport_unit_size = 0x00, 136 .max_latency_ms = 13, 137 .packet_types = 138 (ESCO_PKT_TYPES_MASK_EV3 | ESCO_PKT_TYPES_MASK_NO_3_EV3 | 139 ESCO_PKT_TYPES_MASK_NO_2_EV5 | ESCO_PKT_TYPES_MASK_NO_3_EV5), 140 .retransmission_effort = ESCO_RETRANSMISSION_QUALITY}}; 141 142enh_esco_params_t esco_parameters_for_codec(esco_codec_t codec) { 143 CHECK(codec >= 0) << "codec index " << (int)codec << "< 0"; 144 CHECK(codec < ESCO_NUM_CODECS) << "codec index " << (int)codec << " > " 145 << ESCO_NUM_CODECS; 146 return default_esco_parameters[codec]; 147} 148