15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 2002-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This module contains the channel control block state machine and
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  functions which operate on the channel control block.
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h>
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "data_types.h"
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h"
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avdt_api.h"
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avdtc_api.h"
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "avdt_int.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h"
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h"
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** state machine constants and types
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if AVDT_DEBUG == TRUE
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* verbose state strings for trace */
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst char * const avdt_ccb_st_str[] = {
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "CCB_IDLE_ST",
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "CCB_OPENING_ST",
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "CCB_OPEN_ST",
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "CCB_CLOSING_ST"
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* verbose event strings for trace */
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst char * const avdt_ccb_evt_str[] = {
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "API_DISCOVER_REQ_EVT",
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "API_GETCAP_REQ_EVT",
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "API_START_REQ_EVT",
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "API_SUSPEND_REQ_EVT",
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "API_DISCOVER_RSP_EVT",
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "API_GETCAP_RSP_EVT",
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "API_START_RSP_EVT",
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "API_SUSPEND_RSP_EVT",
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "API_CONNECT_REQ_EVT",
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "API_DISCONNECT_REQ_EVT",
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "MSG_DISCOVER_CMD_EVT",
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "MSG_GETCAP_CMD_EVT",
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "MSG_START_CMD_EVT",
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "MSG_SUSPEND_CMD_EVT",
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "MSG_DISCOVER_RSP_EVT",
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "MSG_GETCAP_RSP_EVT",
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "MSG_START_RSP_EVT",
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "MSG_SUSPEND_RSP_EVT",
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "RCVRSP_EVT",
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "SENDMSG_EVT",
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "RET_TOUT_EVT",
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "RSP_TOUT_EVT",
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "IDLE_TOUT_EVT",
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "UL_OPEN_EVT",
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "UL_CLOSE_EVT",
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "LL_OPEN_EVT",
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "LL_CLOSE_EVT",
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    "LL_CONG_EVT"
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* action function list */
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tAVDT_CCB_ACTION avdt_ccb_action[] = {
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_chan_open,
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_chan_close,
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_chk_close,
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_hdl_discover_cmd,
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_hdl_discover_rsp,
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_hdl_getcap_cmd,
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_hdl_getcap_rsp,
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_hdl_start_cmd,
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_hdl_start_rsp,
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_hdl_suspend_cmd,
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_hdl_suspend_rsp,
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_snd_discover_cmd,
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_snd_discover_rsp,
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_snd_getcap_cmd,
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_snd_getcap_rsp,
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_snd_start_cmd,
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_snd_start_rsp,
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_snd_suspend_cmd,
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_snd_suspend_rsp,
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_clear_cmds,
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_cmd_fail,
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_free_cmd,
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_cong_state,
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_ret_cmd,
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_snd_cmd,
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_snd_msg,
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_set_reconn,
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_clr_reconn,
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_chk_reconn,
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_chk_timer,
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_set_conn,
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_set_disconn,
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_do_disconn,
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_ll_closed,
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_ll_opened,
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_dealloc
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table information */
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define AVDT_CCB_ACTIONS            2       /* number of actions */
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define AVDT_CCB_NEXT_STATE         2       /* position of next state */
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define AVDT_CCB_NUM_COLS           3       /* number of columns in state tables */
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for idle state */
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 avdt_ccb_st_idle[][AVDT_CCB_NUM_COLS] = {
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event                      Action 1                    Action 2                    Next state */
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DISCOVER_REQ_EVT */   {AVDT_CCB_SND_DISCOVER_CMD,  AVDT_CCB_CHAN_OPEN,         AVDT_CCB_OPENING_ST},
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_GETCAP_REQ_EVT */     {AVDT_CCB_SND_GETCAP_CMD,    AVDT_CCB_CHAN_OPEN,         AVDT_CCB_OPENING_ST},
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_START_REQ_EVT */      {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_SUSPEND_REQ_EVT */    {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DISCOVER_RSP_EVT */   {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_GETCAP_RSP_EVT */     {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_START_RSP_EVT */      {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_SUSPEND_RSP_EVT */    {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_CONNECT_REQ_EVT */    {AVDT_CCB_SET_CONN,          AVDT_CCB_CHAN_OPEN,         AVDT_CCB_OPENING_ST},
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DISCONNECT_REQ_EVT */ {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_DISCOVER_CMD_EVT */   {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_GETCAP_CMD_EVT */     {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_START_CMD_EVT */      {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_SUSPEND_CMD_EVT */    {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_DISCOVER_RSP_EVT */   {AVDT_CCB_HDL_DISCOVER_RSP,  AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_GETCAP_RSP_EVT */     {AVDT_CCB_HDL_GETCAP_RSP,    AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_START_RSP_EVT */      {AVDT_CCB_HDL_START_RSP,     AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_SUSPEND_RSP_EVT */    {AVDT_CCB_HDL_SUSPEND_RSP,   AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RCVRSP_EVT */             {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SENDMSG_EVT */            {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RET_TOUT_EVT */           {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RSP_TOUT_EVT */           {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* IDLE_TOUT_EVT */          {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UL_OPEN_EVT */            {AVDT_CCB_CHAN_OPEN,         AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UL_CLOSE_EVT */           {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* LL_OPEN_EVT */            {AVDT_CCB_LL_OPENED,         AVDT_CCB_IGNORE,            AVDT_CCB_OPEN_ST},
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* LL_CLOSE_EVT */           {AVDT_CCB_LL_CLOSED,         AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* LL_CONG_EVT */            {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST}
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for opening state */
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 avdt_ccb_st_opening[][AVDT_CCB_NUM_COLS] = {
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event                      Action 1                    Action 2                    Next state */
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DISCOVER_REQ_EVT */   {AVDT_CCB_SND_DISCOVER_CMD,  AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_GETCAP_REQ_EVT */     {AVDT_CCB_SND_GETCAP_CMD,    AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_START_REQ_EVT */      {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_SUSPEND_REQ_EVT */    {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DISCOVER_RSP_EVT */   {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_GETCAP_RSP_EVT */     {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_START_RSP_EVT */      {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_SUSPEND_RSP_EVT */    {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_CONNECT_REQ_EVT */    {AVDT_CCB_SET_CONN,          AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DISCONNECT_REQ_EVT */ {AVDT_CCB_SET_DISCONN,       AVDT_CCB_DO_DISCONN,        AVDT_CCB_CLOSING_ST},
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_DISCOVER_CMD_EVT */   {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_GETCAP_CMD_EVT */     {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_START_CMD_EVT */      {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_SUSPEND_CMD_EVT */    {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_DISCOVER_RSP_EVT */   {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_GETCAP_RSP_EVT */     {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_START_RSP_EVT */      {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_SUSPEND_RSP_EVT */    {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RCVRSP_EVT */             {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SENDMSG_EVT */            {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RET_TOUT_EVT */           {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RSP_TOUT_EVT */           {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* IDLE_TOUT_EVT */          {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UL_OPEN_EVT */            {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST},
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UL_CLOSE_EVT */           {AVDT_CCB_CLEAR_CMDS,        AVDT_CCB_CHAN_CLOSE,        AVDT_CCB_CLOSING_ST},
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* LL_OPEN_EVT */            {AVDT_CCB_SND_CMD,           AVDT_CCB_LL_OPENED,         AVDT_CCB_OPEN_ST},
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* LL_CLOSE_EVT */           {AVDT_CCB_LL_CLOSED,         AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* LL_CONG_EVT */            {AVDT_CCB_CONG_STATE,        AVDT_CCB_IGNORE,            AVDT_CCB_OPENING_ST}
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for open state */
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 avdt_ccb_st_open[][AVDT_CCB_NUM_COLS] = {
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event                      Action 1                    Action 2                    Next state */
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DISCOVER_REQ_EVT */   {AVDT_CCB_SND_DISCOVER_CMD,  AVDT_CCB_SND_CMD,           AVDT_CCB_OPEN_ST},
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_GETCAP_REQ_EVT */     {AVDT_CCB_SND_GETCAP_CMD,    AVDT_CCB_SND_CMD,           AVDT_CCB_OPEN_ST},
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_START_REQ_EVT */      {AVDT_CCB_SND_START_CMD,     AVDT_CCB_SND_CMD,           AVDT_CCB_OPEN_ST},
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_SUSPEND_REQ_EVT */    {AVDT_CCB_SND_SUSPEND_CMD,   AVDT_CCB_SND_CMD,           AVDT_CCB_OPEN_ST},
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DISCOVER_RSP_EVT */   {AVDT_CCB_SND_DISCOVER_RSP,  AVDT_CCB_SND_CMD,           AVDT_CCB_OPEN_ST},
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_GETCAP_RSP_EVT */     {AVDT_CCB_SND_GETCAP_RSP,    AVDT_CCB_SND_CMD,           AVDT_CCB_OPEN_ST},
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_START_RSP_EVT */      {AVDT_CCB_SND_START_RSP,     AVDT_CCB_SND_CMD,           AVDT_CCB_OPEN_ST},
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_SUSPEND_RSP_EVT */    {AVDT_CCB_SND_SUSPEND_RSP,   AVDT_CCB_SND_CMD,           AVDT_CCB_OPEN_ST},
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_CONNECT_REQ_EVT */    {AVDT_CCB_SET_CONN,          AVDT_CCB_LL_OPENED,         AVDT_CCB_OPEN_ST},
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DISCONNECT_REQ_EVT */ {AVDT_CCB_SET_DISCONN,       AVDT_CCB_DO_DISCONN,        AVDT_CCB_CLOSING_ST},
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_DISCOVER_CMD_EVT */   {AVDT_CCB_HDL_DISCOVER_CMD,  AVDT_CCB_IGNORE,            AVDT_CCB_OPEN_ST},
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_GETCAP_CMD_EVT */     {AVDT_CCB_HDL_GETCAP_CMD,    AVDT_CCB_IGNORE,            AVDT_CCB_OPEN_ST},
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_START_CMD_EVT */      {AVDT_CCB_HDL_START_CMD,     AVDT_CCB_IGNORE,            AVDT_CCB_OPEN_ST},
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_SUSPEND_CMD_EVT */    {AVDT_CCB_HDL_SUSPEND_CMD,   AVDT_CCB_IGNORE,            AVDT_CCB_OPEN_ST},
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_DISCOVER_RSP_EVT */   {AVDT_CCB_CHK_CLOSE,         AVDT_CCB_HDL_DISCOVER_RSP,  AVDT_CCB_OPEN_ST},
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_GETCAP_RSP_EVT */     {AVDT_CCB_CHK_CLOSE,         AVDT_CCB_HDL_GETCAP_RSP,    AVDT_CCB_OPEN_ST},
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_START_RSP_EVT */      {AVDT_CCB_HDL_START_RSP,     AVDT_CCB_IGNORE,            AVDT_CCB_OPEN_ST},
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_SUSPEND_RSP_EVT */    {AVDT_CCB_HDL_SUSPEND_RSP,   AVDT_CCB_IGNORE,            AVDT_CCB_OPEN_ST},
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RCVRSP_EVT */             {AVDT_CCB_FREE_CMD,          AVDT_CCB_SND_CMD,           AVDT_CCB_OPEN_ST},
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SENDMSG_EVT */            {AVDT_CCB_SND_MSG,           AVDT_CCB_IGNORE,            AVDT_CCB_OPEN_ST},
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RET_TOUT_EVT */           {AVDT_CCB_RET_CMD,           AVDT_CCB_IGNORE,            AVDT_CCB_OPEN_ST},
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RSP_TOUT_EVT */           {AVDT_CCB_CMD_FAIL,          AVDT_CCB_SND_CMD,           AVDT_CCB_OPEN_ST},
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* IDLE_TOUT_EVT */          {AVDT_CCB_CLEAR_CMDS,        AVDT_CCB_CHAN_CLOSE,        AVDT_CCB_CLOSING_ST},
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UL_OPEN_EVT */            {AVDT_CCB_CHK_TIMER,         AVDT_CCB_IGNORE,            AVDT_CCB_OPEN_ST},
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UL_CLOSE_EVT */           {AVDT_CCB_CHK_CLOSE,         AVDT_CCB_IGNORE,            AVDT_CCB_OPEN_ST},
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* LL_OPEN_EVT */            {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_OPEN_ST},
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* LL_CLOSE_EVT */           {AVDT_CCB_LL_CLOSED,         AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* LL_CONG_EVT */            {AVDT_CCB_CONG_STATE,        AVDT_CCB_SND_MSG,           AVDT_CCB_OPEN_ST}
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for closing state */
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 avdt_ccb_st_closing[][AVDT_CCB_NUM_COLS] = {
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event                      Action 1                    Action 2                    Next state */
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DISCOVER_REQ_EVT */   {AVDT_CCB_SET_RECONN,        AVDT_CCB_SND_DISCOVER_CMD,  AVDT_CCB_CLOSING_ST},
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_GETCAP_REQ_EVT */     {AVDT_CCB_SET_RECONN,        AVDT_CCB_SND_GETCAP_CMD,    AVDT_CCB_CLOSING_ST},
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_START_REQ_EVT */      {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_SUSPEND_REQ_EVT */    {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DISCOVER_RSP_EVT */   {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_GETCAP_RSP_EVT */     {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_START_RSP_EVT */      {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_SUSPEND_RSP_EVT */    {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_CONNECT_REQ_EVT */    {AVDT_CCB_SET_RECONN,        AVDT_CCB_SET_CONN,          AVDT_CCB_CLOSING_ST},
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DISCONNECT_REQ_EVT */ {AVDT_CCB_CLR_RECONN,        AVDT_CCB_SET_DISCONN,       AVDT_CCB_CLOSING_ST},
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_DISCOVER_CMD_EVT */   {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_GETCAP_CMD_EVT */     {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_START_CMD_EVT */      {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_SUSPEND_CMD_EVT */    {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_DISCOVER_RSP_EVT */   {AVDT_CCB_HDL_DISCOVER_RSP,  AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_GETCAP_RSP_EVT */     {AVDT_CCB_HDL_GETCAP_RSP,    AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_START_RSP_EVT */      {AVDT_CCB_HDL_START_RSP,     AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* MSG_SUSPEND_RSP_EVT */    {AVDT_CCB_HDL_SUSPEND_RSP,   AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RCVRSP_EVT */             {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SENDMSG_EVT */            {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RET_TOUT_EVT */           {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RSP_TOUT_EVT */           {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* IDLE_TOUT_EVT */          {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UL_OPEN_EVT */            {AVDT_CCB_SET_RECONN,        AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* UL_CLOSE_EVT */           {AVDT_CCB_CLR_RECONN,        AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* LL_OPEN_EVT */            {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST},
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* LL_CLOSE_EVT */           {AVDT_CCB_CHK_RECONN,        AVDT_CCB_IGNORE,            AVDT_CCB_IDLE_ST},
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* LL_CONG_EVT */            {AVDT_CCB_IGNORE,            AVDT_CCB_IGNORE,            AVDT_CCB_CLOSING_ST}
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* type for state table */
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef const UINT8 (*tAVDT_CCB_ST_TBL)[AVDT_CCB_NUM_COLS];
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table */
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tAVDT_CCB_ST_TBL avdt_ccb_st_tbl[] = {
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_st_idle,
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_st_opening,
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_st_open,
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_ccb_st_closing
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         avdt_ccb_init
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Initialize channel control block module.
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing.
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_init(void)
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(&avdt_cb.ccb[0], 0, sizeof(tAVDT_CCB) * AVDT_NUM_LINKS);
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    avdt_cb.p_ccb_act = (tAVDT_CCB_ACTION *) avdt_ccb_action;
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         avdt_ccb_event
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      State machine event handling function for ccb
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Nothing.
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_event(tAVDT_CCB *p_ccb, UINT8 event, tAVDT_CCB_EVT *p_data)
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tAVDT_CCB_ST_TBL    state_table;
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               action;
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int                 i;
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if AVDT_DEBUG == TRUE
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    AVDT_TRACE_EVENT3("CCB ccb=%d event=%s state=%s", avdt_ccb_to_idx(p_ccb), avdt_ccb_evt_str[event], avdt_ccb_st_str[p_ccb->state]);
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTTRC_AVDT_CCB_EVENT(event, p_ccb->state);
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* look up the state table for the current state */
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    state_table = avdt_ccb_st_tbl[p_ccb->state];
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* set next state */
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_ccb->state != state_table[event][AVDT_CCB_NEXT_STATE])
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTTRC_AVDT_CCB_STATE(state_table[event][AVDT_CCB_NEXT_STATE]);
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_ccb->state = state_table[event][AVDT_CCB_NEXT_STATE];
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* execute action functions */
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < AVDT_CCB_ACTIONS; i++)
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((action = state_table[event][i]) != AVDT_CCB_IGNORE)
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTTRC_AVDT_CCB_ACTION(action);
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (*avdt_cb.p_ccb_act[action])(p_ccb, p_data);
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         avdt_ccb_by_bd
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This lookup function finds the ccb for a BD address.
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          pointer to the ccb, or NULL if none found.
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttAVDT_CCB *avdt_ccb_by_bd(BD_ADDR bd_addr)
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tAVDT_CCB   *p_ccb = &avdt_cb.ccb[0];
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int         i;
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < AVDT_NUM_LINKS; i++, p_ccb++)
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* if allocated ccb has matching ccb */
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_ccb->allocated && (!memcmp(p_ccb->peer_addr, bd_addr, BD_ADDR_LEN)))
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (i == AVDT_NUM_LINKS)
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* if no ccb found */
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_ccb = NULL;
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        AVDT_TRACE_DEBUG6("No ccb for addr %02x-%02x-%02x-%02x-%02x-%02x",
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          bd_addr[0], bd_addr[1], bd_addr[2], bd_addr[3], bd_addr[4], bd_addr[5]);
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_ccb;
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         avdt_ccb_alloc
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Allocate a channel control block.
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          pointer to the ccb, or NULL if none could be allocated.
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttAVDT_CCB *avdt_ccb_alloc(BD_ADDR bd_addr)
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tAVDT_CCB   *p_ccb = &avdt_cb.ccb[0];
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int         i;
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0; i < AVDT_NUM_LINKS; i++, p_ccb++)
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!p_ccb->allocated)
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_ccb->allocated = TRUE;
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_ccb->peer_addr, bd_addr, BD_ADDR_LEN);
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            GKI_init_q(&p_ccb->cmd_q);
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            GKI_init_q(&p_ccb->rsp_q);
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_ccb->timer_entry.param = (UINT32) p_ccb;
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            AVDT_TRACE_DEBUG1("avdt_ccb_alloc %d", i);
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (i == AVDT_NUM_LINKS)
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* out of ccbs */
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_ccb = NULL;
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        AVDT_TRACE_WARNING0("Out of ccbs");
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_ccb;
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         avdt_ccb_dealloc
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Deallocate a stream control block.
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void.
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid avdt_ccb_dealloc(tAVDT_CCB *p_ccb, tAVDT_CCB_EVT *p_data)
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    AVDT_TRACE_DEBUG1("avdt_ccb_dealloc %d", avdt_ccb_to_idx(p_ccb));
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_stop_timer(&p_ccb->timer_entry);
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_ccb, 0, sizeof(tAVDT_CCB));
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         avdt_ccb_to_idx
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Given a pointer to an ccb, return its index.
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          Index of ccb.
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 avdt_ccb_to_idx(tAVDT_CCB *p_ccb)
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* use array arithmetic to determine index */
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (UINT8) (p_ccb - avdt_cb.ccb);
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         avdt_ccb_by_idx
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Return ccb pointer based on ccb index.
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          pointer to the ccb, or NULL if none found.
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttAVDT_CCB *avdt_ccb_by_idx(UINT8 idx)
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tAVDT_CCB   *p_ccb;
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* verify index */
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (idx < AVDT_NUM_LINKS)
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_ccb = &avdt_cb.ccb[idx];
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_ccb = NULL;
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        AVDT_TRACE_WARNING1("No ccb for idx %d", idx);
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_ccb;
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
465