15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35b790feeeb211c42bf78ca3ae9c26aa30e516765Jakub Pawlowski * Copyright 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 is the implementation of the API for PAN subsystem of BTA, 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Broadcom's Bluetooth application layer for mobile phones. 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 25f355ef5a4d7fb667fc57a0dfb60f738d870e252eMyles Watson#include <string.h> 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h" 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h" 30cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "bt_utils.h" 31cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "bta_api.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_pan_api.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_pan_int.h" 34cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "bta_sys.h" 35d7ffd64accbd50a27289a388856e56244ccbb5daMyles Watson#include "osi/include/osi.h" 36cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "pan_api.h" 373576c564b33c20b5e2e90fdd3bca7ce24392ca50Mike J. Chen 38e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssen#if (BTA_PAN_INCLUDED == TRUE) 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic const tBTA_SYS_REG bta_pan_reg = {bta_pan_hdl_event, BTA_PanDisable}; 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_PanEnable 458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Enable PAN service. This function must be 478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * called before any other functions in the PAN API are called. 488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * When the enable operation is complete the callback function 498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * will be called with a BTA_PAN_ENABLE_EVT. 508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 54cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_PanEnable(tBTA_PAN_CBACK p_cback) { 55cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_PAN_API_ENABLE* p_buf = 56cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_PAN_API_ENABLE*)osi_malloc(sizeof(tBTA_PAN_API_ENABLE)); 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 58cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* register with BTA system manager */ 59cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_register(BTA_ID_PAN, &bta_pan_reg); 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 61cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_PAN_API_ENABLE_EVT; 62cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_cback = p_cback; 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 64cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_PanDisable 708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Disables PAN service. 728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 77cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_PanDisable(void) { 78cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 80cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_deregister(BTA_ID_PAN); 81cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->event = BTA_PAN_API_DISABLE_EVT; 82717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 83cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_PanSetRole 898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Sets PAN roles. When the enable operation is complete 91cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * the callback function will be called with a 921baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * BTA_PAN_SET_ROLE_EVT. 938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 97cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_PanSetRole(tBTA_PAN_ROLE role, tBTA_PAN_ROLE_INFO* p_user_info, 98cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_PAN_ROLE_INFO* p_gn_info, 99cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_PAN_ROLE_INFO* p_nap_info) { 100cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_PAN_API_SET_ROLE* p_buf = 101cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_PAN_API_SET_ROLE*)osi_calloc(sizeof(tBTA_PAN_API_SET_ROLE)); 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 103cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_PAN_API_SET_ROLE_EVT; 104cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->role = role; 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 106cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_user_info && (role & BTA_PAN_ROLE_PANU)) { 107cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_user_info->p_srv_name) 108cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson strlcpy(p_buf->user_name, p_user_info->p_srv_name, BTA_SERVICE_NAME_LEN); 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 110cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->user_app_id = p_user_info->app_id; 111cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->user_sec_mask = p_user_info->sec_mask; 112cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 114cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_gn_info && (role & BTA_PAN_ROLE_GN)) { 115cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_gn_info->p_srv_name) 116cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson strlcpy(p_buf->gn_name, p_gn_info->p_srv_name, BTA_SERVICE_NAME_LEN); 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 118cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->gn_app_id = p_gn_info->app_id; 119cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->gn_sec_mask = p_gn_info->sec_mask; 120cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 122cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_nap_info && (role & BTA_PAN_ROLE_NAP)) { 123cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_nap_info->p_srv_name) 124cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson strlcpy(p_buf->nap_name, p_nap_info->p_srv_name, BTA_SERVICE_NAME_LEN); 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 126cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->nap_app_id = p_nap_info->app_id; 127cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->nap_sec_mask = p_nap_info->sec_mask; 128cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 130cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_PanOpen 1368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Opens a connection to a peer device. 1388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * When connection is open callback function is called 1398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * with a BTA_PAN_OPEN_EVT. 1408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 145a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskivoid BTA_PanOpen(const RawAddress& bd_addr, tBTA_PAN_ROLE local_role, 146cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_PAN_ROLE peer_role) { 147cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_PAN_API_OPEN* p_buf = 148cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_PAN_API_OPEN*)osi_malloc(sizeof(tBTA_PAN_API_OPEN)); 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 150cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_PAN_API_OPEN_EVT; 151cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->local_role = local_role; 152cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->peer_role = peer_role; 153a83ac12406eaa90e5f1f8a699b8b17e4440e2687Jakub Pawlowski p_buf->bd_addr = bd_addr; 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 155cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1598af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1608af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_PanClose 1618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1628af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Close a PAN connection to a peer device. 1638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 168cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_PanClose(uint16_t handle) { 169cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 171cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->event = BTA_PAN_API_CLOSE_EVT; 172cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->layer_specific = handle; 173717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 174cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1763576c564b33c20b5e2e90fdd3bca7ce24392ca50Mike J. Chen#else 1773576c564b33c20b5e2e90fdd3bca7ce24392ca50Mike J. Chen 178cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_PanEnable(UNUSED_ATTR tBTA_PAN_CBACK p_cback) {} 1793576c564b33c20b5e2e90fdd3bca7ce24392ca50Mike J. Chen 180cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_PanDisable(void) {} 1813576c564b33c20b5e2e90fdd3bca7ce24392ca50Mike J. Chen 182cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_PanSetRole(UNUSED_ATTR tBTA_PAN_ROLE role, 183cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson UNUSED_ATTR tBTA_PAN_ROLE_INFO* p_user_info, 184cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson UNUSED_ATTR tBTA_PAN_ROLE_INFO* p_gn_info, 185cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson UNUSED_ATTR tBTA_PAN_ROLE_INFO* p_nap_info) {} 1863576c564b33c20b5e2e90fdd3bca7ce24392ca50Mike J. Chen 187a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskivoid BTA_PanOpen(UNUSED_ATTR const RawAddress& bd_addr, 188cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson UNUSED_ATTR tBTA_PAN_ROLE local_role, 189cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson UNUSED_ATTR tBTA_PAN_ROLE peer_role) {} 1903576c564b33c20b5e2e90fdd3bca7ce24392ca50Mike J. Chen 191cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_PanClose(UNUSED_ATTR uint16_t handle) {} 1923576c564b33c20b5e2e90fdd3bca7ce24392ca50Mike J. Chen 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_PAN_INCLUDED */ 194