10b966c5eSopenharmony_ci/****************************************************************************** 20b966c5eSopenharmony_ci * 30b966c5eSopenharmony_ci * Copyright 2015 Broadcom Corporation 40b966c5eSopenharmony_ci * 50b966c5eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 60b966c5eSopenharmony_ci * you may not use this file except in compliance with the License. 70b966c5eSopenharmony_ci * You may obtain a copy of the License at: 80b966c5eSopenharmony_ci * 90b966c5eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 100b966c5eSopenharmony_ci * 110b966c5eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 120b966c5eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 130b966c5eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 140b966c5eSopenharmony_ci * See the License for the specific language governing permissions and 150b966c5eSopenharmony_ci * limitations under the License. 160b966c5eSopenharmony_ci * 170b966c5eSopenharmony_ci ******************************************************************************/ 180b966c5eSopenharmony_ci#ifndef BT_VENDOR_ESCO_PARAMETER_H 190b966c5eSopenharmony_ci#define BT_VENDOR_ESCO_PARAMETER_H 200b966c5eSopenharmony_ci 210b966c5eSopenharmony_ci#include <stdint.h> 220b966c5eSopenharmony_ci/******************* 230b966c5eSopenharmony_ci * SCO Codec Types 240b966c5eSopenharmony_ci *******************/ 250b966c5eSopenharmony_citypedef enum { 260b966c5eSopenharmony_ci SCO_CODEC_NONE = 0x0000, 270b966c5eSopenharmony_ci SCO_CODEC_CVSD = 0x0001, 280b966c5eSopenharmony_ci SCO_CODEC_MSBC = 0x0002, 290b966c5eSopenharmony_ci} sco_codec_t; 300b966c5eSopenharmony_ci 310b966c5eSopenharmony_citypedef enum { 320b966c5eSopenharmony_ci ESCO_CODEC_CVSD = 0, 330b966c5eSopenharmony_ci ESCO_CODEC_MSBC_T1, 340b966c5eSopenharmony_ci ESCO_CODEC_MSBC_T2, 350b966c5eSopenharmony_ci} esco_codec_t; 360b966c5eSopenharmony_ci 370b966c5eSopenharmony_ci#define ESCO_NUM_CODECS 3 380b966c5eSopenharmony_ci 390b966c5eSopenharmony_ci// Coding Formats (BT 4.1 or later Assigned numbers) 400b966c5eSopenharmony_ci#define ESCO_CODING_FORMAT_ULAW ((uint8_t)0x00) /* u-Law log */ 410b966c5eSopenharmony_ci#define ESCO_CODING_FORMAT_ALAW ((uint8_t)0x01) /* A-Law log */ 420b966c5eSopenharmony_ci#define ESCO_CODING_FORMAT_CVSD ((uint8_t)0x02) /* CVSD */ 430b966c5eSopenharmony_ci#define ESCO_CODING_FORMAT_TRANSPNT ((uint8_t)0x03) /* Transparent */ 440b966c5eSopenharmony_ci#define ESCO_CODING_FORMAT_LINEAR ((uint8_t)0x04) /* Linear PCM */ 450b966c5eSopenharmony_ci#define ESCO_CODING_FORMAT_MSBC ((uint8_t)0x05) /* MSBC PCM */ 460b966c5eSopenharmony_ci#define ESCO_CODING_FORMAT_VS ((uint8_t)0xFF) /* Specifies VSC used */ 470b966c5eSopenharmony_ci 480b966c5eSopenharmony_ci// PCM Data Formats (BT 4.1 or later Assigned numbers) 490b966c5eSopenharmony_ci#define ESCO_PCM_DATA_FORMAT_NA ((uint8_t)0x00) /* N/A to coding format in use */ 500b966c5eSopenharmony_ci#define ESCO_PCM_DATA_FORMAT_1_COMP ((uint8_t)0x01) /* 1's complement */ 510b966c5eSopenharmony_ci#define ESCO_PCM_DATA_FORMAT_2_COMP ((uint8_t)0x02) /* 2's complement */ 520b966c5eSopenharmony_ci#define ESCO_PCM_DATA_FORMAT_SIGN ((uint8_t)0x03) /* Sign-magnitude */ 530b966c5eSopenharmony_ci#define ESCO_PCM_DATA_FORMAT_UNSIGN ((uint8_t)0x04) /* Unsigned */ 540b966c5eSopenharmony_ci 550b966c5eSopenharmony_ci// SCO Data Path 560b966c5eSopenharmony_ci#define ESCO_DATA_PATH_PCM 1 /* 0x01-0xFE (PCM Chan) */ 570b966c5eSopenharmony_ci#define ESCO_DATA_PATH_HCI ((uint8_t)0x00) /* HCI-0, 0x01-0xFE (PCM Chan) */ 580b966c5eSopenharmony_ci#define ESCO_DATA_PATH_TEST ((uint8_t)0xFF) /* 0xFF-Audio Test */ 590b966c5eSopenharmony_ci 600b966c5eSopenharmony_ci// eSCO constants 610b966c5eSopenharmony_ci#define TXRX_64KBITS_RATE 0x00001f40 /* 64 kbits/sec data rate */ 620b966c5eSopenharmony_ci#define TXRX_128KBITS_RATE 0x00003E80 /* 128 kbits/sec data rate */ 630b966c5eSopenharmony_ci 640b966c5eSopenharmony_ci#define INPUT_OUTPUT_64K_RATE 0x00003E80 /* 16000 Bytes/sec over transport */ 650b966c5eSopenharmony_ci#define INPUT_OUTPUT_128K_RATE 0x00007D00 /* 32000 Bytes/sec over transport */ 660b966c5eSopenharmony_ci 670b966c5eSopenharmony_ci// Retransmission effort 680b966c5eSopenharmony_ci#define ESCO_RETRANSMISSION_OFF 0 690b966c5eSopenharmony_ci#define ESCO_RETRANSMISSION_POWER 1 700b966c5eSopenharmony_ci#define ESCO_RETRANSMISSION_QUALITY 2 710b966c5eSopenharmony_ci#define ESCO_RETRANSMISSION_DONTCARE 0xff 720b966c5eSopenharmony_ci 730b966c5eSopenharmony_ci// Definitions for eSCO packet type masks (BT1.2 and BT2.0 definitions) 740b966c5eSopenharmony_ci#define ESCO_PKT_TYPES_MASK_HV1 0x0001 750b966c5eSopenharmony_ci#define ESCO_PKT_TYPES_MASK_HV2 0x0002 760b966c5eSopenharmony_ci#define ESCO_PKT_TYPES_MASK_HV3 0x0004 770b966c5eSopenharmony_ci#define ESCO_PKT_TYPES_MASK_EV3 0x0008 780b966c5eSopenharmony_ci#define ESCO_PKT_TYPES_MASK_EV4 0x0010 790b966c5eSopenharmony_ci#define ESCO_PKT_TYPES_MASK_EV5 0x0020 800b966c5eSopenharmony_ci#define ESCO_PKT_TYPES_MASK_NO_2_EV3 0x0040 810b966c5eSopenharmony_ci#define ESCO_PKT_TYPES_MASK_NO_3_EV3 0x0080 820b966c5eSopenharmony_ci#define ESCO_PKT_TYPES_MASK_NO_2_EV5 0x0100 830b966c5eSopenharmony_ci#define ESCO_PKT_TYPES_MASK_NO_3_EV5 0x0200 840b966c5eSopenharmony_ci 850b966c5eSopenharmony_ci// type definition 860b966c5eSopenharmony_citypedef struct { 870b966c5eSopenharmony_ci uint8_t coding_format; /* Coding Format */ 880b966c5eSopenharmony_ci uint16_t company_id; /* Company ID from BT SIG Assigned Numbers */ 890b966c5eSopenharmony_ci uint16_t vendor_specific_codec_id; /* Vendor Specific Codec ID */ 900b966c5eSopenharmony_ci} esco_coding_id_format_t; 910b966c5eSopenharmony_ci 920b966c5eSopenharmony_ci// Enhanced setup/accept synchronous connection See BT 4.1 or later HCI spec for 930b966c5eSopenharmony_ci// details 940b966c5eSopenharmony_citypedef struct { 950b966c5eSopenharmony_ci uint32_t transmit_bandwidth; /* Transmit Bandwidth (in octets/second) */ 960b966c5eSopenharmony_ci uint32_t receive_bandwidth; /* RX BW (# of octets/second) */ 970b966c5eSopenharmony_ci esco_coding_id_format_t transmit_coding_format; /* TX coding format */ 980b966c5eSopenharmony_ci esco_coding_id_format_t receive_coding_format; /* RX coding format */ 990b966c5eSopenharmony_ci uint16_t transmit_codec_frame_size; /* TX CODEC frame size (OTA frame size) */ 1000b966c5eSopenharmony_ci uint16_t receive_codec_frame_size; /* RX CODEC frame size (OTA frame size) */ 1010b966c5eSopenharmony_ci uint32_t input_bandwidth; /* Input BW (nominal rate octets/sec) */ 1020b966c5eSopenharmony_ci uint32_t output_bandwidth; /* Output BW (nominal rate octets/sec) */ 1030b966c5eSopenharmony_ci esco_coding_id_format_t input_coding_format; /* Input coding format */ 1040b966c5eSopenharmony_ci esco_coding_id_format_t output_coding_format; /* Output coding format */ 1050b966c5eSopenharmony_ci uint16_t input_coded_data_size; /* Input coded data size (in bits) */ 1060b966c5eSopenharmony_ci uint16_t output_coded_data_size; /* Output coded data size (in bits) */ 1070b966c5eSopenharmony_ci uint8_t input_pcm_data_format; /* Input PCM data format (see hcidefs.h) */ 1080b966c5eSopenharmony_ci uint8_t output_pcm_data_format; /* Output PCM data format (see hcidefs.h) */ 1090b966c5eSopenharmony_ci uint8_t input_pcm_payload_msb_position; /* Input PCM sample payload MSB position */ 1100b966c5eSopenharmony_ci uint8_t output_pcm_payload_msb_position; /* Output PCM sample payload MSB position */ 1110b966c5eSopenharmony_ci uint8_t input_data_path; /* 0x00 - HCI, or 0x01-0xFE for VS) */ 1120b966c5eSopenharmony_ci uint8_t output_data_path; /* 0x00 - HCI, or 0x01-0xFE for VS) */ 1130b966c5eSopenharmony_ci uint8_t input_transport_unit_size; /* Input transport unit size */ 1140b966c5eSopenharmony_ci uint8_t output_transport_unit_size; /* Output transport unit size */ 1150b966c5eSopenharmony_ci uint16_t max_latency_ms; /* Maximum latency (0x4-0xFFFE in msecs) */ 1160b966c5eSopenharmony_ci uint16_t packet_types; /* Packet Types */ 1170b966c5eSopenharmony_ci uint8_t retransmission_effort; /* 0x00-0x02, 0xFF don't care */ 1180b966c5eSopenharmony_ci} enh_esco_params_t; 1190b966c5eSopenharmony_ci 1200b966c5eSopenharmony_ci// Get the enhanced eSCO configuration parameters for the provided |codec| 1210b966c5eSopenharmony_cienh_esco_params_t esco_parameters_for_codec(esco_codec_t codec); 1220b966c5eSopenharmony_ci#endif