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