• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  *  Copyright (C) 1999-2012 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 /******************************************************************************
20  *
21  *  This file contains sync message over UIPC
22  *
23  ******************************************************************************/
24 
25 #ifndef BT_VENDOR_UIPC_MSG_H
26 #define BT_VENDOR_UIPC_MSG_H
27 
28 #include "bt_types.h"
29 
30 /****************************************************************************/
31 /*                            UIPC version number: 1.0                      */
32 /****************************************************************************/
33 #define UIPC_VERSION_MAJOR 0x0001
34 #define UIPC_VERSION_MINOR 0x0000
35 
36 /********************************
37 
38     UIPC Management Messages
39 
40 ********************************/
41 
42 /* tUIPC_STATUS codes */
43 enum {
44     UIPC_STATUS_SUCCESS,
45     UIPC_STATUS_FAIL
46 };
47 
48 /* op_code */
49 #define UIPC_OPEN_REQ 0x00
50 #define UIPC_OPEN_RSP 0x01
51 #define UIPC_CLOSE_REQ 0x02
52 #define UIPC_CLOSE_RSP 0x03
53 
54 #pragma pack(push) /* push current alignment to stack */
55 #pragma pack(1)    /* set alignment to 1 byte boundary to allow for offset mappings */
56 
57 /* Structure of UIPC_OPEN_REQ message */
58 typedef struct {
59     uint8_t opcode; /* UIPC_OPEN_REQ */
60 } tUIPC_OPEN_REQ;
61 #define UIPC_OPEN_REQ_MSGLEN (1)
62 
63 /* Structure of UIPC_OPEN_RSP message */
64 typedef struct {
65     uint8_t opcode;         /* UIPC_OPEN_RESP */
66     uint8_t status;         /* UIPC_STATUS */
67     uint16_t version_major; /* UIPC_VERSION_MAJOR */
68     uint16_t version_minor; /* UIPC_VERSION_MINOR */
69     uint8_t num_streams;    /* Number of simultaneous streams supported by the light stack */
70 } tUIPC_OPEN_RSP;
71 #define UIPC_OPEN_RSP_MSGLEN (7)
72 
73 /* Structure of UIPC_CLOSE_REQ message */
74 typedef struct t_uipc_close_req {
75     uint8_t opcode; /* UIPC_CLOSE_REQ */
76 } tUIPC_CLOSE_REQ;
77 #define UIPC_CLOSE_REQ_MSGLEN (1)
78 
79 /* Structure of UIPC_CLOSE_RSP message, only for BTC, full stack may ignore it */
80 typedef struct t_uipc_close_rsp {
81     uint8_t opcode; /* UIPC_CLOSE_RSP */
82 } tUIPC_CLOSE_RSP;
83 #define UIPC_CLOSE_RSP_MSGLEN (1)
84 
85 /* UIPC management message structures */
86 typedef union {
87     uint8_t opcode;
88     tUIPC_OPEN_REQ open_req;
89     tUIPC_OPEN_RSP open_resp;
90     tUIPC_CLOSE_REQ close_req;
91 } tUIPC_MSG;
92 
93 #define UIPC_MGMT_MSG_MAXLEN (sizeof(tUIPC_MSG))
94 
95 #define IPC_LOG_MSG_LEN 100
96 typedef struct t_uipc_log_msg {
97     uint32_t trace_set_mask;
98     uint8_t msg[IPC_LOG_MSG_LEN];
99 } tUIPC_LOG_MSG;
100 #define UIPC_LOG_MSGLEN (IPC_LOG_MSG_LEN + 4)
101 
102 /********************************
103 
104     H5 Sync Message
105 
106 ********************************/
107 
108 /* op_code */
109 #define SLIP_SYNC_TO_LITE_REQ 0
110 #define SLIP_SYNC_TO_LITE_RESP 1
111 #define SLIP_SYNC_TO_FULL_REQ 2
112 #define SLIP_SYNC_TO_FULL_RESP 3
113 #define SLIP_SYNC_NOTIFY 4
114 
115 /* status */
116 #define SLIP_SYNC_SUCCESS 0
117 #define SLIP_SYNC_FAILURE 1
118 
119 typedef struct {
120     uint8_t op_code;
121     uint8_t status;
122     uint16_t acl_pkt_size;
123     uint8_t state;
124     uint8_t lp_state;            /* Low Power state */
125     uint8_t next_seqno;          /* next send seq */
126     uint8_t ack;                 /* next ack seq, expected seq from peer */
127     uint8_t sent_ack;            /* last sent ack */
128     uint8_t sliding_window_size; /* window size */
129     bool oof_flow_control;       /* Out of Frame SW Flow Control */
130     bool data_integrity_type;    /* Level of Data Integrity Check */
131     uint8_t rx_state;            /* rx state for incoming packet processing */
132 } tSLIP_SYNC_INFO;
133 
134 /********************************
135 
136     L2CAP Sync Message
137 
138 ********************************/
139 
140 /* op_code */
141 #define L2C_SYNC_TO_LITE_REQ 0
142 #define L2C_SYNC_TO_LITE_RESP 1
143 #define L2C_REMOVE_TO_LITE_REQ 2
144 #define L2C_REMOVE_TO_LITE_RESP 3
145 #define L2C_FLUSH_TO_FULL_IND 4
146 
147 /* status */
148 #define L2C_SYNC_SUCCESS 0
149 #define L2C_SYNC_FAILURE 1
150 
151 typedef struct t_l2c_stream_info {
152     uint16_t local_cid;       /* Local CID                        */
153     uint16_t remote_cid;      /* Remote CID                       */
154     uint16_t out_mtu;         /* Max MTU we will send             */
155     uint16_t handle;          /* The handle used with LM          */
156     uint16_t link_xmit_quota; /* Num outstanding pkts allowed     */
157     bool is_flushable;        /* TRUE if flushable channel        */
158 } tL2C_STREAM_INFO;
159 
160 typedef struct t_l2c_sync_to_lite_req {
161     uint8_t op_code;                    /* L2C_SYNC_TO_LITE_REQ */
162     uint16_t light_xmit_quota;          /* Total quota for light stack    */
163     uint16_t acl_data_size;             /* Max ACL data size across HCI transport    */
164     uint16_t non_flushable_pbf;         /* L2CAP_PKT_START_NON_FLUSHABLE if controller supports */
165                                         /* Otherwise, L2CAP_PKT_START */
166     uint8_t multi_av_data_cong_start;   /* Multi-AV queue size to start congestion */
167     uint8_t multi_av_data_cong_end;     /* Multi-AV queue size to end congestion */
168     uint8_t multi_av_data_cong_discard; /* Multi-AV queue size to discard */
169     uint8_t num_stream;
170     tL2C_STREAM_INFO stream;
171 } tL2C_SYNC_TO_LITE_REQ;
172 
173 typedef struct t_l2c_sync_to_lite_resp_stream {
174     uint16_t lcid;
175     uint8_t status;
176 } tL2C_SYNC_TO_LITE_RESP_STREAM;
177 
178 typedef struct t_l2c_sync_to_lite_resp {
179     uint8_t op_code;             /* L2C_SYNC_TO_LITE_RESP */
180     uint16_t light_xmit_unacked; /* unacked packet more than quota in light stack    */
181     uint8_t num_stream;
182     tL2C_SYNC_TO_LITE_RESP_STREAM stream;
183 } tL2C_SYNC_TO_LITE_RESP;
184 
185 typedef struct t_l2c_remove_to_lite_req {
186     uint8_t op_code;           /* L2C_REMOVE_TO_LITE_REQ */
187     uint16_t light_xmit_quota; /* Total quota for light stack    */
188     uint8_t num_stream;
189     uint16_t lcid;
190 } tL2C_REMOVE_TO_LITE_REQ;
191 
192 typedef tL2C_SYNC_TO_LITE_RESP tL2C_REMOVE_TO_LITE_RESP;
193 typedef tL2C_REMOVE_TO_LITE_REQ tL2C_FLUSH_TO_FULL_IND;
194 
195 typedef union t_l2c_sync_msg {
196     uint8_t op_code;
197     tL2C_SYNC_TO_LITE_REQ sync_req;
198     tL2C_SYNC_TO_LITE_RESP sync_resp;
199     tL2C_REMOVE_TO_LITE_REQ remove_req;
200     tL2C_REMOVE_TO_LITE_RESP remove_resp;
201     tL2C_FLUSH_TO_FULL_IND flush_ind;
202 } tL2C_SYNC_MSG;
203 
204 /********************************
205 
206     AVDTP Sync Message
207 
208 ********************************/
209 
210 /* op_code */
211 #define AVDT_SYNC_TO_LITE_REQ 0
212 #define AVDT_SYNC_TO_LITE_RESP 1
213 #define AVDT_RESYNC_TO_LITE_REQ 2
214 #define AVDT_RESYNC_TO_LITE_RESP 3
215 #define AVDT_SYNC_TO_FULL_REQ 4
216 #define AVDT_SYNC_TO_FULL_RESP 5
217 #define AVDT_REMOVE_TO_LITE_REQ 6
218 #define AVDT_REMOVE_TO_LITE_RESP 7
219 #define AVDT_SYNC_TO_BTC_LITE_REQ 8
220 #define AVDT_SYNC_TO_BTC_LITE_RESP 9
221 
222 /* status */
223 #define AVDT_SYNC_SUCCESS 0
224 #define AVDT_SYNC_FAILURE 1
225 
226 typedef struct {
227     uint16_t lcid;
228     uint32_t ssrc;
229 } tAVDT_SYNC_TO_BTC_LITE_REQ_STREAM;
230 
231 typedef struct {
232     uint8_t opcode; /* AVDT_SYNC_TO_BTC_LITE_REQ */
233     uint8_t num_stream;
234     tAVDT_SYNC_TO_BTC_LITE_REQ_STREAM stream;
235 } tAVDT_SYNC_TO_BTC_LITE_REQ;
236 
237 typedef struct {
238     uint8_t opcode; /* AVDT_SYNC_TO_BTC_LITE_RESP */
239     uint8_t status;
240 } tAVDT_SYNC_TO_BTC_LITE_RESP;
241 
242 typedef struct t_avdt_scb_sync_info {
243     uint8_t handle;         /* SCB handle */
244     BD_ADDR peer_addr;      /* BD address of peer */
245     uint16_t local_cid;     /* Local CID                        */
246     uint16_t peer_mtu;      /* L2CAP mtu of the peer device */
247     uint8_t mux_tsid_media; /* TSID for media transport session */
248     uint16_t media_seq;     /* media packet sequence number */
249 } tAVDT_SCB_SYNC_INFO;
250 
251 typedef struct t_avdt_sync_info {
252     uint8_t op_code;
253     uint8_t status;
254     tAVDT_SCB_SYNC_INFO scb_info;
255 } tAVDT_SYNC_INFO;
256 
257 typedef union t_avdt_sync_msg {
258     uint8_t op_code;
259     tAVDT_SYNC_INFO sync_info;
260     tAVDT_SYNC_TO_BTC_LITE_REQ btc_sync_req;
261     tAVDT_SYNC_TO_BTC_LITE_RESP btc_sync_resp;
262 } tAVDT_SYNC_MSG;
263 
264 /********************************
265 
266     BTA AV Sync Message
267 
268 ********************************/
269 
270 /* op_code for MM light stack */
271 #define BTA_AV_SYNC_TO_LITE_REQ 0
272 #define BTA_AV_SYNC_TO_LITE_RESP 1
273 #define BTA_AV_STR_START_TO_LITE_REQ 2
274 #define BTA_AV_STR_START_TO_LITE_RESP 3
275 #define BTA_AV_STR_STOP_TO_LITE_REQ 4
276 #define BTA_AV_STR_STOP_TO_LITE_RESP 5
277 #define BTA_AV_STR_CLEANUP_TO_LITE_REQ 6
278 #define BTA_AV_STR_CLEANUP_TO_LITE_RESP 7
279 #define BTA_AV_STR_SUSPEND_TO_LITE_REQ 8
280 #define BTA_AV_STR_SUSPEND_TO_LITE_RESP 9
281 #define BTA_AV_SYNC_ERROR_RESP 10
282 
283 /* op_code for BTC light stack */
284 #define A2DP_START_REQ 11
285 #define A2DP_START_RESP 12
286 #define A2DP_STOP_REQ 13
287 #define A2DP_STOP_RESP 14
288 #define A2DP_CLEANUP_REQ 15
289 #define A2DP_CLEANUP_RESP 16
290 #define A2DP_SUSPEND_REQ 17
291 #define A2DP_SUSPEND_RESP 18
292 
293 #define A2DP_JITTER_DONE_IND 41 /* For BTSNK */
294 
295 #define AUDIO_CODEC_CONFIG_REQ 19
296 #define AUDIO_CODEC_CONFIG_RESP 20
297 #define AUDIO_CODEC_SET_BITRATE_REQ 21
298 #define AUDIO_CODEC_FLUSH_REQ 22
299 #define AUDIO_ROUTE_CONFIG_REQ 23
300 #define AUDIO_ROUTE_CONFIG_RESP 24
301 #define AUDIO_MIX_CONFIG_REQ 25
302 #define AUDIO_MIX_CONFIG_RESP 26
303 #define AUDIO_BURST_FRAMES_IND 27
304 #define AUDIO_BURST_END_IND 28
305 #define AUDIO_EQ_MODE_CONFIG_REQ 29
306 #define AUDIO_SCALE_CONFIG_REQ 30
307 
308 /* For TIVO, only applicable for I2S -> DAC */
309 #define AUDIO_SUB_ROUTE_REQ 51
310 #define AUDIO_SUB_ROUTE_RESP 52
311 
312 typedef struct {
313     uint8_t opcode; /* A2DP_START_REQ */
314     uint16_t lcid;
315     uint16_t curr_mtu;
316 } tA2DP_START_REQ;
317 
318 typedef struct {
319     uint8_t opcode; /* A2DP_STOP_REQ */
320     uint16_t lcid;
321 } tA2DP_STOP_REQ;
322 
323 typedef struct {
324     uint8_t opcode; /* A2DP_SUSPEND_REQ */
325     uint16_t lcid;
326 } tA2DP_SUSPEND_REQ;
327 
328 typedef struct {
329     uint8_t opcode; /* A2DP_CLEANUP_REQ */
330     uint16_t lcid;
331     uint16_t curr_mtu;
332 } tA2DP_CLEANUP_REQ;
333 
334 typedef struct {
335     uint8_t opcode; /* A2DP_START_RESP, A2DP_STOP_RESP, A2DP_CLEANUP_RESP, A2DP_SUSPEND_RESP */
336     uint16_t lcid;
337 } tA2DP_GENERIC_RESP;
338 
339 #define AUDIO_CODEC_NONE 0x0000
340 #define AUDIO_CODEC_SBC_ENC 0x0001
341 #define AUDIO_CODEC_SBC_DEC 0x0002
342 #define AUDIO_CODEC_MP3_ENC 0x0004
343 #define AUDIO_CODEC_MP3_DEC 0x0008
344 #define AUDIO_CODEC_AAC_ENC 0x0010
345 #define AUDIO_CODEC_AAC_DEC 0x0020
346 #define AUDIO_CODEC_AAC_PLUS_ENC 0x0040
347 #define AUDIO_CODEC_AAC_PLUS_DEC 0x0080
348 #define AUDIO_CODEC_MP2_ENC 0x0100
349 #define AUDIO_CODEC_MP2_DEC 0x0200
350 #define AUDIO_CODEC_MP2_5_ENC 0x0400
351 #define AUDIO_CODEC_MP2_5_DEC 0x0800
352 
353 /* SBC CODEC Parameters */
354 
355 #define CODEC_INFO_SBC_SF_16K 0x00
356 #define CODEC_INFO_SBC_SF_32K 0x01
357 #define CODEC_INFO_SBC_SF_44K 0x02
358 #define CODEC_INFO_SBC_SF_48K 0x03
359 
360 #define CODEC_INFO_SBC_BLOCK_4 0x00
361 #define CODEC_INFO_SBC_BLOCK_8 0x01
362 #define CODEC_INFO_SBC_BLOCK_12 0x02
363 #define CODEC_INFO_SBC_BLOCK_16 0x03
364 
365 #define CODEC_INFO_SBC_CH_MONO 0x00
366 #define CODEC_INFO_SBC_CH_DUAL 0x01
367 #define CODEC_INFO_SBC_CH_STEREO 0x02
368 #define CODEC_INFO_SBC_CH_JS 0x03
369 
370 #define CODEC_INFO_SBC_ALLOC_LOUDNESS 0x00
371 #define CODEC_INFO_SBC_ALLOC_SNR 0x01
372 
373 #define CODEC_INFO_SBC_SUBBAND_4 0x00
374 #define CODEC_INFO_SBC_SUBBAND_8 0x01
375 
376 /* MPEG audio version ID */
377 #define CODEC_INFO_MP25_ID 0x00
378 #define CODEC_INFO_RESERVE 0x01
379 #define CODEC_INFO_MP2_ID 0x02
380 #define CODEC_INFO_MP3_ID 0x03
381 
382 #define CODEC_INFO_MP3_PROTECTION_ON 0x00
383 #define CODEC_INFO_MP3_PROTECTION_OFF 0x01
384 
385 #define CODEC_INFO_MP3_BR_IDX_FREE 0x00
386 #define CODEC_INFO_MP3_BR_IDX_32K 0x01
387 #define CODEC_INFO_MP3_BR_IDX_40K 0x02
388 #define CODEC_INFO_MP3_BR_IDX_48K 0x03
389 #define CODEC_INFO_MP3_BR_IDX_56K 0x04
390 #define CODEC_INFO_MP3_BR_IDX_64K 0x05
391 #define CODEC_INFO_MP3_BR_IDX_80K 0x06
392 #define CODEC_INFO_MP3_BR_IDX_96K 0x07
393 #define CODEC_INFO_MP3_BR_IDX_112K 0x08
394 #define CODEC_INFO_MP3_BR_IDX_128K 0x09
395 #define CODEC_INFO_MP3_BR_IDX_160K 0x0A
396 #define CODEC_INFO_MP3_BR_IDX_192K 0x0B
397 #define CODEC_INFO_MP3_BR_IDX_224K 0x0C
398 #define CODEC_INFO_MP3_BR_IDX_256K 0x0D
399 #define CODEC_INFO_MP3_BR_IDX_320K 0x0E
400 
401 #define CODEC_INFO_MP3_SF_44K 0x00
402 #define CODEC_INFO_MP3_SF_48K 0x01
403 #define CODEC_INFO_MP3_SF_32K 0x02
404 
405 #define CODEC_INFO_MP3_MODE_STEREO 0x00
406 #define CODEC_INFO_MP3_MODE_JS 0x01
407 #define CODEC_INFO_MP3_MODE_DUAL 0x02
408 #define CODEC_INFO_MP3_MODE_SINGLE 0x03
409 
410 /* layer 3, type of joint stereo coding method (intensity and ms) */
411 #define CODEC_INFO_MP3_MODE_EXT_OFF_OFF 0x00
412 #define CODEC_INFO_MP3_MODE_EXT_ON_OFF 0x01
413 #define CODEC_INFO_MP3_MODE_EXT_OFF_ON 0x02
414 #define CODEC_INFO_MP3_MODE_EXT_ON_ON 0x03
415 
416 #define CODEC_INFO_MP2_PROTECTION_ON 0x00
417 #define CODEC_INFO_MP2_PROTECTION_OFF 0x01
418 
419 #define CODEC_INFO_MP2_BR_IDX_FREE 0x00
420 #define CODEC_INFO_MP2_BR_IDX_8K 0x01
421 #define CODEC_INFO_MP2_BR_IDX_16K 0x02
422 #define CODEC_INFO_MP2_BR_IDX_24K 0x03
423 #define CODEC_INFO_MP2_BR_IDX_32K 0x04
424 #define CODEC_INFO_MP2_BR_IDX_40K 0x05
425 #define CODEC_INFO_MP2_BR_IDX_48K 0x06
426 #define CODEC_INFO_MP2_BR_IDX_56K 0x07
427 #define CODEC_INFO_MP2_BR_IDX_64K 0x08
428 #define CODEC_INFO_MP2_BR_IDX_80K 0x09
429 #define CODEC_INFO_MP2_BR_IDX_96K 0x0A
430 #define CODEC_INFO_MP2_BR_IDX_112K 0x0B
431 #define CODEC_INFO_MP2_BR_IDX_128K 0x0C
432 #define CODEC_INFO_MP2_BR_IDX_144K 0x0D
433 #define CODEC_INFO_MP2_BR_IDX_160K 0x0E
434 
435 #define CODEC_INFO_MP2_SF_22K 0x00
436 #define CODEC_INFO_MP2_SF_24K 0x01
437 #define CODEC_INFO_MP2_SF_16K 0x02
438 
439 #define CODEC_INFO_MP2_MODE_STEREO 0x00
440 #define CODEC_INFO_MP2_MODE_JS 0x01
441 #define CODEC_INFO_MP2_MODE_DUAL 0x02
442 #define CODEC_INFO_MP2_MODE_SINGLE 0x03
443 
444 /* layer 3, type of joint stereo coding method (intensity and ms) */
445 #define CODEC_INFO_MP2_MODE_EXT_OFF_OFF 0x00
446 #define CODEC_INFO_MP2_MODE_EXT_ON_OFF 0x01
447 #define CODEC_INFO_MP2_MODE_EXT_OFF_ON 0x02
448 #define CODEC_INFO_MP2_MODE_EXT_ON_ON 0x03
449 
450 #define CODEC_INFO_MP2_SAMPLE_PER_FRAME 576
451 
452 /* mpeg 2.5 layer 3 decoder */
453 
454 #define CODEC_INFO_MP25_PROTECTION_ON 0x00
455 #define CODEC_INFO_MP25_PROTECTION_OFF 0x01
456 
457 #define CODEC_INFO_MP25_BR_IDX_FREE 0x00
458 #define CODEC_INFO_MP25_BR_IDX_8K 0x01
459 #define CODEC_INFO_MP25_BR_IDX_16K 0x02
460 #define CODEC_INFO_MP25_BR_IDX_24K 0x03
461 #define CODEC_INFO_MP25_BR_IDX_32K 0x04
462 #define CODEC_INFO_MP25_BR_IDX_40K 0x05
463 #define CODEC_INFO_MP25_BR_IDX_48K 0x06
464 #define CODEC_INFO_MP25_BR_IDX_56K 0x07
465 #define CODEC_INFO_MP25_BR_IDX_64K 0x08
466 #define CODEC_INFO_MP25_BR_IDX_80K 0x09
467 #define CODEC_INFO_MP25_BR_IDX_96K 0x0A
468 #define CODEC_INFO_MP25_BR_IDX_112K 0x0B
469 #define CODEC_INFO_MP25_BR_IDX_128K 0x0C
470 #define CODEC_INFO_MP25_BR_IDX_144K 0x0D
471 #define CODEC_INFO_MP25_BR_IDX_160K 0x0E
472 
473 #define CODEC_INFO_MP25_SF_11K 0x00
474 #define CODEC_INFO_MP25_SF_12K 0x01
475 #define CODEC_INFO_MP25_SF_8K 0x02
476 
477 #define CODEC_INFO_MP25_MODE_STEREO 0x00
478 #define CODEC_INFO_MP25_MODE_JS 0x01
479 #define CODEC_INFO_MP25_MODE_DUAL 0x02
480 #define CODEC_INFO_MP25_MODE_SINGLE 0x03
481 
482 /* layer 3, type of joint stereo coding method (intensity and ms) */
483 #define CODEC_INFO_MP25_MODE_EXT_OFF_OFF 0x00
484 #define CODEC_INFO_MP25_MODE_EXT_ON_OFF 0x01
485 #define CODEC_INFO_MP25_MODE_EXT_OFF_ON 0x02
486 #define CODEC_INFO_MP25_MODE_EXT_ON_ON 0x03
487 
488 #define CODEC_INFO_MP25_SAMPLE_PER_FRAME 576
489 
490 /* AAC/AAC+ CODEC Parameters */
491 #define CODEC_INFO_AAC_SF_IDX_96K 0x0
492 #define CODEC_INFO_AAC_SF_IDX_88K 0x1
493 #define CODEC_INFO_AAC_SF_IDX_64K 0x2
494 #define CODEC_INFO_AAC_SF_IDX_48K 0x3
495 #define CODEC_INFO_AAC_SF_IDX_44K 0x4
496 #define CODEC_INFO_AAC_SF_IDX_32K 0x5
497 #define CODEC_INFO_AAC_SF_IDX_24K 0x6
498 #define CODEC_INFO_AAC_SF_IDX_22K 0x7
499 #define CODEC_INFO_AAC_SF_IDX_16K 0x8
500 #define CODEC_INFO_AAC_SF_IDX_12K 0x9
501 #define CODEC_INFO_AAC_SF_IDX_11K 0xA
502 #define CODEC_INFO_AAC_SF_IDX_08K 0xB
503 #define CODEC_INFO_AAC_SF_IDX_RESERVE 0xC
504 
505 #define CODEC_INFO_AAC_BR_RATE_48K 288000
506 #define CODEC_INFO_AAC_BR_RATE_44K 264600
507 #define CODEC_INFO_AAC_BR_RATE_32K 192000
508 
509 #define CODEC_INFO_AAC_1_CH 1 /* center front speaker */
510 #define CODEC_INFO_AAC_2_CH 2 /* left, right front speaker */
511 #define CODEC_INFO_AAC_3_CH 3 /* center front speaker, left right front speaker */
512 #define CODEC_INFO_AAC_4_CH 4 /* center/rear front speaker, left/right front speaker */
513 #define CODEC_INFO_AAC_5_CH 5 /* center, left, right front speaker, left/right surround */
514 #define CODEC_INFO_AAC_6_CH 6 /* center, left, right front speaker, left/right surround, LFE */
515 #define CODEC_INFO_AAC_7_CH 7 /* (left, right)center/left,right front speaker, left/right surround, LFE */
516 
517 typedef struct {
518     uint8_t sampling_freq;
519     uint8_t channel_mode;
520     uint8_t block_length;
521     uint8_t num_subbands;
522     uint8_t alloc_method;
523     uint8_t bitpool_size; /* 2 - 250 */
524 } tCODEC_INFO_SBC;
525 
526 typedef struct {
527     uint8_t ch_mode;
528     uint8_t sampling_freq;
529     uint8_t bitrate_index; /* 0 - 14 */
530 } tCODEC_INFO_MP3;
531 
532 typedef struct {
533     uint8_t ch_mode;
534     uint8_t sampling_freq;
535     uint8_t bitrate_index; /* 0 - 14 */
536 } tCODEC_INFO_MP2;
537 
538 typedef struct {
539     uint8_t ch_mode;
540     uint8_t sampling_freq;
541     uint8_t bitrate_index; /* 0 - 14 */
542 } tCODEC_INFO_MP2_5;
543 
544 typedef struct {
545     uint16_t sampling_freq;
546     uint8_t channel_mode; /* 0x02:mono, 0x01:dual */
547     uint32_t bitrate;     /* 0 - 320K */
548     uint32_t sbr_profile; /* 1: ON, 0: OFF */
549 } tCODEC_INFO_AAC;
550 
551 typedef union {
552     tCODEC_INFO_SBC sbc;
553     tCODEC_INFO_MP3 mp3;
554     tCODEC_INFO_MP2 mp2;
555     tCODEC_INFO_MP2_5 mp2_5;
556     tCODEC_INFO_AAC aac;
557 } tCODEC_INFO;
558 
559 typedef struct {
560     uint8_t opcode; /* AUDIO_CODEC_CONFIG_REQ */
561     uint16_t codec_type;
562     tCODEC_INFO codec_info;
563 } tAUDIO_CODEC_CONFIG_REQ;
564 
565 #define AUDIO_CONFIG_SUCCESS 0x00
566 #define AUDIO_CONFIG_NOT_SUPPORTED 0x01
567 #define AUDIO_CONFIG_FAIL_OUT_OF_MEMORY 0x02
568 #define AUDIO_CONFIG_FAIL_CODEC_USED 0x03
569 #define AUDIO_CONFIG_FAIL_ROUTE 0x04
570 
571 typedef struct {
572     uint8_t opcode; /* AUDIO_CODEC_CONFIG_RESP */
573     uint8_t status;
574 } tAUDIO_CODEC_CONFIG_RESP;
575 
576 typedef struct {
577     uint8_t opcode; /* AUDIO_CODEC_SET_BITRATE_REQ */
578     uint16_t codec_type;
579     union {
580         uint8_t sbc;
581         uint8_t mp3;
582         uint32_t aac;
583     } codec_bitrate;
584 } tAUDIO_CODEC_SET_BITRATE_REQ;
585 
586 #define AUDIO_ROUTE_SRC_FMRX 0x00
587 #define AUDIO_ROUTE_SRC_I2S 0x01
588 #define AUDIO_ROUTE_SRC_ADC 0x02
589 #define AUDIO_ROUTE_SRC_HOST 0x03
590 #define AUDIO_ROUTE_SRC_PTU 0x04
591 #define AUDIO_ROUTE_SRC_BTSNK 0x05
592 #define AUDIO_ROUTE_SRC_NONE 0x80
593 #define MAX_AUDIO_ROUTE_SRC 6
594 
595 #define AUDIO_ROUTE_MIX_NONE 0x00
596 #define AUDIO_ROUTE_MIX_HOST 0x01
597 #define AUDIO_ROUTE_MIX_PCM 0x02
598 #define AUDIO_ROUTE_MIX_CHIRP 0x03
599 #define AUDIO_ROUTE_MIX_I2S 0x04
600 #define AUDIO_ROUTE_MIX_ADC 0x05
601 #define AUDIO_ROUTE_MIX_RESERVED 0x06
602 #define MAX_AUDIO_ROUTE_MIX 7
603 
604 #define AUDIO_ROUTE_OUT_NONE 0x0000
605 #define AUDIO_ROUTE_OUT_BTA2DP 0x0001
606 #define AUDIO_ROUTE_OUT_FMTX 0x0002
607 #define AUDIO_ROUTE_OUT_BTSCO 0x0004
608 #define AUDIO_ROUTE_OUT_HOST 0x0008
609 #define AUDIO_ROUTE_OUT_DAC 0x0010
610 #define AUDIO_ROUTE_OUT_I2S 0x0020
611 #define AUDIO_ROUTE_OUT_BTA2DP_DAC 0x0040
612 #define AUDIO_ROUTE_OUT_BTA2DP_I2S 0x0080
613 #define AUDIO_ROUTE_OUT_BTSCO_DAC 0x0100
614 #define AUDIO_ROUTE_OUT_BTSCO_I2S 0x0200
615 #define AUDIO_ROUTE_OUT_HOST_BTA2DP 0x0400
616 #define AUDIO_ROUTE_OUT_HOST_BTSCO 0x0800
617 #define AUDIO_ROUTE_OUT_HOST_DAC 0x1000
618 #define AUDIO_ROUTE_OUT_HOST_I2S 0x2000
619 #define AUDIO_ROUTE_OUT_DAC_I2S 0x4000
620 #define AUDIO_ROUTE_OUT_RESERVED_2 0x8000
621 
622 #define MAX_AUDIO_SINGLE_ROUTE_OUT 6
623 #define MAX_AUDIO_MULTI_ROUTE_OUT 16
624 
625 #define AUDIO_ROUTE_SF_8K 0x00
626 #define AUDIO_ROUTE_SF_16K 0x01
627 #define AUDIO_ROUTE_SF_32K 0x02
628 #define AUDIO_ROUTE_SF_44_1K 0x03
629 #define AUDIO_ROUTE_SF_48K 0x04
630 #define AUDIO_ROUTE_SF_11K 0x05
631 #define AUDIO_ROUTE_SF_12K 0x06
632 #define AUDIO_ROUTE_SF_22K 0x07
633 #define AUDIO_ROUTE_SF_24K 0x08
634 #define AUDIO_ROUTE_SF_NA 0xFF
635 
636 #define AUDIO_ROUTE_EQ_BASS_BOOST 0x00
637 #define AUDIO_ROUTE_EQ_CLASSIC 0x01
638 #define AUDIO_ROUTE_EQ_JAZZ 0x02
639 #define AUDIO_ROUTE_EQ_LIVE 0x03
640 #define AUDIO_ROUTE_EQ_NORMAL 0x04
641 #define AUDIO_ROUTE_EQ_ROCK 0x05
642 #define AUDIO_ROUTE_EQ_BYPASS 0x06
643 
644 #define AUDIO_ROUTE_DIGITAL_VOLUME_CONTROL 0x07
645 
646 #define AUDIO_ROUTE_EQ_CONFIG_GAIN 0xFF /* Custion Gain Config */
647 
648 typedef struct {
649     uint8_t opcode; /* AUDIO_ROUTE_CONFIG_REQ */
650     uint8_t src;
651     uint8_t src_sf;
652     uint8_t out;
653     uint8_t out_codec_sf;
654     uint8_t out_i2s_sf;
655     uint8_t eq_mode;
656 } tAUDIO_ROUTE_CONFIG_REQ;
657 
658 typedef struct {
659     uint8_t opcode; /* AUDIO_ROUTE_CONFIG_RESP */
660     uint8_t status;
661 } tAUDIO_ROUTE_CONFIG_RESP;
662 
663 typedef struct {
664     uint16_t amp[2];   /* left/right 15 bit amplitude value        */
665     uint16_t tone[2];  /* left/right 12 bit frequency 0 - 4096Hz   */
666     uint16_t mark[2];  /* left/right 16 bit mark time 0 - 65535ms  */
667     uint16_t space[2]; /* left/right 16 bit space time 0 - 65535ms */
668 } tCHIRP_CONFIG;
669 
670 typedef struct {
671     uint8_t pri_l; /* Primary Left scale : 0 ~ 255     */
672     uint8_t mix_l; /* Mixing Left scale : 0 ~ 255      */
673     uint8_t pri_r; /* Primary Right scale : 0 ~ 255    */
674     uint8_t mix_r; /* Mixing Right scale : 0 ~ 255     */
675 } tMIX_SCALE_CONFIG;
676 
677 /* For custon equalizer gain configuration */
678 typedef struct {
679     uint32_t audio_l_g0; /* IIR biquad filter left ch gain 0 */
680     uint32_t audio_l_g1; /* IIR biquad filter left ch gain 1 */
681     uint32_t audio_l_g2; /* IIR biquad filter left ch gain 2 */
682     uint32_t audio_l_g3; /* IIR biquad filter left ch gain 3 */
683     uint32_t audio_l_g4; /* IIR biquad filter left ch gain 4 */
684     uint32_t audio_l_gl; /* IIR biquad filter left ch global gain  */
685     uint32_t audio_r_g0; /* IIR biquad filter left ch gain 0 */
686     uint32_t audio_r_g1; /* IIR biquad filter left ch gain 1 */
687     uint32_t audio_r_g2; /* IIR biquad filter left ch gain 2 */
688     uint32_t audio_r_g3; /* IIR biquad filter left ch gain 3 */
689     uint32_t audio_r_g4; /* IIR biquad filter left ch gain 4 */
690     uint32_t audio_r_gl; /* IIR biquad filter left ch global gain */
691 } tEQ_GAIN_CONFIG;
692 
693 typedef struct {
694     uint8_t opcode; /* AUDIO_MIX_CONFIG_REQ */
695     uint8_t mix_src;
696     uint8_t mix_src_sf;
697     tMIX_SCALE_CONFIG mix_scale;
698     tCHIRP_CONFIG chirp_config;
699 } tAUDIO_MIX_CONFIG_REQ;
700 
701 typedef struct {
702     uint8_t opcode; /* AUDIO_MIX_CONFIG_RESP */
703     uint8_t status;
704 } tAUDIO_MIX_CONFIG_RESP;
705 
706 typedef struct {
707     uint8_t opcode;      /* AUDIO_BURST_FRAMES_IND */
708     uint32_t burst_size; /* in bytes */
709 } tAUDIO_BURST_FRAMES_IND;
710 
711 typedef struct {
712     uint8_t opcode; /* AUDIO_BURST_END_IND */
713 } tAUDIO_BURST_END_IND;
714 
715 typedef struct {
716     uint8_t opcode; /* AUDIO_CODEC_FLUSH_REQ */
717 } tAUDIO_CODEC_FLUSH_REQ;
718 
719 typedef struct {
720     uint8_t opcode; /* AUDIO_EQ_MODE_CONFIG_REQ */
721     uint8_t eq_mode;
722     tEQ_GAIN_CONFIG filter_gain; /* Valid only when eq_mode is 0xFF */
723 } tAUDIO_EQ_MODE_CONFIG_REQ;
724 
725 typedef struct {
726     uint8_t opcode; /* AUDIO_SCALE_CONFIG_REQ */
727     tMIX_SCALE_CONFIG mix_scale;
728 } tAUDIO_SCALE_CONFIG_REQ;
729 
730 #pragma pack(pop) /* pop saved alignment to stack */
731 
732 #endif /* BT_VENDOR_UIPC_MSG_H */
733