bta_pan_main.c revision e8c3d75b75493911ebf0f99c83676359657178f7
15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2004-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 file contains the PAN main functions and state machine. 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h" 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined(BTA_PAN_INCLUDED) && (BTA_PAN_INCLUDED == TRUE) 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_sys.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "pan_api.h" 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_pan_api.h" 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_pan_int.h" 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h" 375cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "utl.h" 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Constants and types 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state machine action enumeration list */ 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_PAN_API_CLOSE, 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_PAN_TX_PATH, 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_PAN_RX_PATH, 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_PAN_TX_FLOW, 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_PAN_WRITE_BUF, 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_PAN_CONN_OPEN, 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_PAN_CONN_CLOSE, 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_PAN_FREE_BUF, 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_PAN_IGNORE 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* type for action functions */ 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*tBTA_PAN_ACTION)(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* action function list */ 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTA_PAN_ACTION bta_pan_action[] = 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_api_close, 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_tx_path, 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_rx_path, 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_tx_flow, 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_write_buf, 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_conn_open, 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_conn_close, 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_free_buf, 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table information */ 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_PAN_ACTIONS 1 /* number of actions */ 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_PAN_NEXT_STATE 1 /* position of next state */ 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_PAN_NUM_COLS 2 /* number of columns in state tables */ 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state machine states */ 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_PAN_IDLE_ST, 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_PAN_OPEN_ST, 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_PAN_CLOSING_ST 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for listen state */ 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_pan_st_idle[][BTA_PAN_NUM_COLS] = 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* API_CLOSE */ {BTA_PAN_API_CLOSE, BTA_PAN_IDLE_ST}, 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_TX_READY */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_RX_READY */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_TX_FLOW */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_RX_WRITE */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_RX_WRITEBUF */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* PAN_CONN_OPEN */ {BTA_PAN_CONN_OPEN, BTA_PAN_OPEN_ST}, 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* PAN_CONN_CLOSE */ {BTA_PAN_CONN_OPEN, BTA_PAN_IDLE_ST}, 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* FLOW_ENABLE */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BNEP_DATA */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST} 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for open state */ 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_pan_st_open[][BTA_PAN_NUM_COLS] = 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* API_CLOSE */ {BTA_PAN_API_CLOSE, BTA_PAN_OPEN_ST}, 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_TX_READY */ {BTA_PAN_TX_PATH, BTA_PAN_OPEN_ST}, 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_RX_READY */ {BTA_PAN_RX_PATH, BTA_PAN_OPEN_ST}, 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_TX_FLOW */ {BTA_PAN_TX_FLOW, BTA_PAN_OPEN_ST}, 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_RX_WRITE */ {BTA_PAN_IGNORE, BTA_PAN_OPEN_ST}, 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_RX_WRITEBUF */ {BTA_PAN_WRITE_BUF, BTA_PAN_OPEN_ST}, 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* PAN_CONN_OPEN */ {BTA_PAN_IGNORE, BTA_PAN_OPEN_ST}, 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* PAN_CONN_CLOSE */ {BTA_PAN_CONN_CLOSE, BTA_PAN_IDLE_ST}, 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* FLOW_ENABLE */ {BTA_PAN_RX_PATH, BTA_PAN_OPEN_ST}, 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BNEP_DATA */ {BTA_PAN_TX_PATH, BTA_PAN_OPEN_ST} 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for closing state */ 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_pan_st_closing[][BTA_PAN_NUM_COLS] = 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* API_CLOSE */ {BTA_PAN_IGNORE, BTA_PAN_CLOSING_ST}, 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_TX_READY */ {BTA_PAN_TX_PATH, BTA_PAN_CLOSING_ST}, 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_RX_READY */ {BTA_PAN_RX_PATH, BTA_PAN_CLOSING_ST}, 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_TX_FLOW */ {BTA_PAN_TX_FLOW, BTA_PAN_CLOSING_ST}, 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_RX_WRITE */ {BTA_PAN_IGNORE, BTA_PAN_CLOSING_ST}, 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* CI_RX_WRITEBUF */ {BTA_PAN_FREE_BUF, BTA_PAN_CLOSING_ST}, 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* PAN_CONN_OPEN */ {BTA_PAN_IGNORE, BTA_PAN_CLOSING_ST}, 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* PAN_CONN_CLOSE */ {BTA_PAN_CONN_CLOSE, BTA_PAN_IDLE_ST}, 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* FLOW_ENABLE */ {BTA_PAN_RX_PATH, BTA_PAN_CLOSING_ST}, 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BNEP_DATA */ {BTA_PAN_TX_PATH, BTA_PAN_CLOSING_ST} 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* type for state table */ 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef const UINT8 (*tBTA_PAN_ST_TBL)[BTA_PAN_NUM_COLS]; 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table */ 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTA_PAN_ST_TBL bta_pan_st_tbl[] = { 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_st_idle, 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_st_open, 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_st_closing 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Global data 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* PAN control block */ 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_DYNAMIC_MEMORY == FALSE 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_PAN_CB bta_pan_cb; 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_pan_scb_alloc 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Allocate a PAN server control block. 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pointer to the scb, or NULL if none could be allocated. 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_PAN_SCB *bta_pan_scb_alloc(void) 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_PAN_SCB *p_scb = &bta_pan_cb.scb[0]; 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < BTA_PAN_NUM_CONN; i++, p_scb++) 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_scb->in_use) 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb->in_use = TRUE; 183e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_pan_scb_alloc %d", i); 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (i == BTA_PAN_NUM_CONN) 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* out of scbs */ 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb = NULL; 192e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("Out of scbs"); 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_scb; 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_pan_sm_execute 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description State machine event handling function for PAN 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_pan_sm_execute(tBTA_PAN_SCB *p_scb, UINT16 event, tBTA_PAN_DATA *p_data) 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_PAN_ST_TBL state_table; 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 action; 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 213e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_EVENT("PAN scb=%d event=0x%x state=%d", bta_pan_scb_to_idx(p_scb), event, p_scb->state); 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* look up the state table for the current state */ 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project state_table = bta_pan_st_tbl[p_scb->state]; 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event &= 0x00FF; 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set next state */ 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb->state = state_table[event][BTA_PAN_NEXT_STATE]; 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* execute action functions */ 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < BTA_PAN_ACTIONS; i++) 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((action = state_table[event][i]) != BTA_PAN_IGNORE) 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*bta_pan_action[action])(p_scb, p_data); 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_pan_api_enable 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Handle an API enable event. 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_pan_api_enable(tBTA_PAN_DATA *p_data) 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize control block */ 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&bta_pan_cb, 0, sizeof(bta_pan_cb)); 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* store callback function */ 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_cb.p_cback = p_data->api_enable.p_cback; 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_enable(p_data); 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_pan_api_disable 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Handle an API disable event. 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_pan_api_disable(tBTA_PAN_DATA *p_data) 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2695cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_data); 2705cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_disable(); 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_pan_api_open 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Handle an API listen event. 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_pan_api_open(tBTA_PAN_DATA *p_data) 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_PAN_SCB *p_scb; 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_PAN_OPEN data; 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* allocate an scb */ 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb = bta_pan_scb_alloc()) != NULL) 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_open(p_scb, p_data); 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(data.bd_addr, p_data->api_open.bd_addr); 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data.status = BTA_PAN_FAIL; 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_cb.p_cback(BTA_PAN_OPEN_EVT, (tBTA_PAN *)&data); 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_pan_scb_dealloc 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Deallocate a link control block. 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_pan_scb_dealloc(tBTA_PAN_SCB *p_scb) 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 315e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_pan_scb_dealloc %d", bta_pan_scb_to_idx(p_scb)); 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_scb, 0, sizeof(tBTA_PAN_SCB)); 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_pan_scb_to_idx 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Given a pointer to an scb, return its index. 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Index of scb. 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 bta_pan_scb_to_idx(tBTA_PAN_SCB *p_scb) 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ((UINT8) (p_scb - bta_pan_cb.scb)) + 1; 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_pan_scb_by_handle 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Find scb associated with handle. 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Pointer to scb or NULL if not found. 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_PAN_SCB *bta_pan_scb_by_handle(UINT16 handle) 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_PAN_SCB *p_scb = &bta_pan_cb.scb[0]; 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i; 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < BTA_PAN_NUM_CONN; i++, p_scb++) 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_scb->handle == handle) 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_scb;; 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 361e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("No scb for handle %d", handle); 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return NULL; 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_pan_hdl_event 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Data gateway main event handling function. 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN bta_pan_hdl_event(BT_HDR *p_msg) 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_PAN_SCB *p_scb; 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN freebuf = TRUE; 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_msg->event) 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* handle enable event */ 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_PAN_API_ENABLE_EVT: 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_api_enable((tBTA_PAN_DATA *) p_msg); 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* handle disable event */ 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_PAN_API_DISABLE_EVT: 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_api_disable((tBTA_PAN_DATA *) p_msg); 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* handle set role event */ 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_PAN_API_SET_ROLE_EVT: 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_set_role((tBTA_PAN_DATA *) p_msg); 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* handle open event */ 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_PAN_API_OPEN_EVT: 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_api_open((tBTA_PAN_DATA *) p_msg); 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* events that require buffer not be released */ 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_PAN_CI_RX_WRITEBUF_EVT: 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project freebuf = FALSE; 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb = bta_pan_scb_by_handle(p_msg->layer_specific)) != NULL) 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_sm_execute(p_scb, p_msg->event, (tBTA_PAN_DATA *) p_msg); 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* all other events */ 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb = bta_pan_scb_by_handle(p_msg->layer_specific)) != NULL) 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_pan_sm_execute(p_scb, p_msg->event, (tBTA_PAN_DATA *) p_msg); 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return freebuf; 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_PAN_INCLUDED */ 425