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