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