1 /******************************************************************************
2  *
3  *  Copyright (C) 2004-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  This is the implementation of the API for PAN subsystem of BTA,
22  *  Broadcom's Bluetooth application layer for mobile phones.
23  *
24  ******************************************************************************/
25 #include <string.h>
26 
27 #include "bt_target.h"
28 
29 #include "bt_common.h"
30 #include "bt_utils.h"
31 #include "bta_api.h"
32 #include "bta_pan_api.h"
33 #include "bta_pan_int.h"
34 #include "bta_sys.h"
35 #include "osi/include/osi.h"
36 #include "pan_api.h"
37 
38 #if (BTA_PAN_INCLUDED == TRUE)
39 
40 static const tBTA_SYS_REG bta_pan_reg = {bta_pan_hdl_event, BTA_PanDisable};
41 
42 /*******************************************************************************
43  *
44  * Function         BTA_PanEnable
45  *
46  * Description      Enable PAN service.  This function must be
47  *                  called before any other functions in the PAN API are called.
48  *                  When the enable operation is complete the callback function
49  *                  will be called with a BTA_PAN_ENABLE_EVT.
50  *
51  * Returns          void
52  *
53  ******************************************************************************/
BTA_PanEnable(tBTA_PAN_CBACK p_cback)54 void BTA_PanEnable(tBTA_PAN_CBACK p_cback) {
55   tBTA_PAN_API_ENABLE* p_buf =
56       (tBTA_PAN_API_ENABLE*)osi_malloc(sizeof(tBTA_PAN_API_ENABLE));
57 
58   /* register with BTA system manager */
59   bta_sys_register(BTA_ID_PAN, &bta_pan_reg);
60 
61   p_buf->hdr.event = BTA_PAN_API_ENABLE_EVT;
62   p_buf->p_cback = p_cback;
63 
64   bta_sys_sendmsg(p_buf);
65 }
66 
67 /*******************************************************************************
68  *
69  * Function         BTA_PanDisable
70  *
71  * Description      Disables PAN service.
72  *
73  *
74  * Returns          void
75  *
76  ******************************************************************************/
BTA_PanDisable(void)77 void BTA_PanDisable(void) {
78   BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR));
79 
80   bta_sys_deregister(BTA_ID_PAN);
81   p_buf->event = BTA_PAN_API_DISABLE_EVT;
82 
83   bta_sys_sendmsg(p_buf);
84 }
85 
86 /*******************************************************************************
87  *
88  * Function         BTA_PanSetRole
89  *
90  * Description      Sets PAN roles. When the enable operation is complete
91  *                  the callback function will be called with a
92  *                  BTA_PAN_SET_ROLE_EVT.
93  *
94  * Returns          void
95  *
96  ******************************************************************************/
BTA_PanSetRole(tBTA_PAN_ROLE role,tBTA_PAN_ROLE_INFO * p_user_info,tBTA_PAN_ROLE_INFO * p_gn_info,tBTA_PAN_ROLE_INFO * p_nap_info)97 void BTA_PanSetRole(tBTA_PAN_ROLE role, tBTA_PAN_ROLE_INFO* p_user_info,
98                     tBTA_PAN_ROLE_INFO* p_gn_info,
99                     tBTA_PAN_ROLE_INFO* p_nap_info) {
100   tBTA_PAN_API_SET_ROLE* p_buf =
101       (tBTA_PAN_API_SET_ROLE*)osi_calloc(sizeof(tBTA_PAN_API_SET_ROLE));
102 
103   p_buf->hdr.event = BTA_PAN_API_SET_ROLE_EVT;
104   p_buf->role = role;
105 
106   if (p_user_info && (role & BTA_PAN_ROLE_PANU)) {
107     if (p_user_info->p_srv_name)
108       strlcpy(p_buf->user_name, p_user_info->p_srv_name, BTA_SERVICE_NAME_LEN);
109 
110     p_buf->user_app_id = p_user_info->app_id;
111     p_buf->user_sec_mask = p_user_info->sec_mask;
112   }
113 
114   if (p_gn_info && (role & BTA_PAN_ROLE_GN)) {
115     if (p_gn_info->p_srv_name)
116       strlcpy(p_buf->gn_name, p_gn_info->p_srv_name, BTA_SERVICE_NAME_LEN);
117 
118     p_buf->gn_app_id = p_gn_info->app_id;
119     p_buf->gn_sec_mask = p_gn_info->sec_mask;
120   }
121 
122   if (p_nap_info && (role & BTA_PAN_ROLE_NAP)) {
123     if (p_nap_info->p_srv_name)
124       strlcpy(p_buf->nap_name, p_nap_info->p_srv_name, BTA_SERVICE_NAME_LEN);
125 
126     p_buf->nap_app_id = p_nap_info->app_id;
127     p_buf->nap_sec_mask = p_nap_info->sec_mask;
128   }
129 
130   bta_sys_sendmsg(p_buf);
131 }
132 
133 /*******************************************************************************
134  *
135  * Function         BTA_PanOpen
136  *
137  * Description      Opens a connection to a peer device.
138  *                  When connection is open callback function is called
139  *                  with a BTA_PAN_OPEN_EVT.
140  *
141  *
142  * Returns          void
143  *
144  ******************************************************************************/
BTA_PanOpen(BD_ADDR bd_addr,tBTA_PAN_ROLE local_role,tBTA_PAN_ROLE peer_role)145 void BTA_PanOpen(BD_ADDR bd_addr, tBTA_PAN_ROLE local_role,
146                  tBTA_PAN_ROLE peer_role) {
147   tBTA_PAN_API_OPEN* p_buf =
148       (tBTA_PAN_API_OPEN*)osi_malloc(sizeof(tBTA_PAN_API_OPEN));
149 
150   p_buf->hdr.event = BTA_PAN_API_OPEN_EVT;
151   p_buf->local_role = local_role;
152   p_buf->peer_role = peer_role;
153   bdcpy(p_buf->bd_addr, bd_addr);
154 
155   bta_sys_sendmsg(p_buf);
156 }
157 
158 /*******************************************************************************
159  *
160  * Function         BTA_PanClose
161  *
162  * Description      Close a PAN  connection to a peer device.
163  *
164  *
165  * Returns          void
166  *
167  ******************************************************************************/
BTA_PanClose(uint16_t handle)168 void BTA_PanClose(uint16_t handle) {
169   BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR));
170 
171   p_buf->event = BTA_PAN_API_CLOSE_EVT;
172   p_buf->layer_specific = handle;
173 
174   bta_sys_sendmsg(p_buf);
175 }
176 #else
177 
BTA_PanEnable(UNUSED_ATTR tBTA_PAN_CBACK p_cback)178 void BTA_PanEnable(UNUSED_ATTR tBTA_PAN_CBACK p_cback) {}
179 
BTA_PanDisable(void)180 void BTA_PanDisable(void) {}
181 
BTA_PanSetRole(UNUSED_ATTR tBTA_PAN_ROLE role,UNUSED_ATTR tBTA_PAN_ROLE_INFO * p_user_info,UNUSED_ATTR tBTA_PAN_ROLE_INFO * p_gn_info,UNUSED_ATTR tBTA_PAN_ROLE_INFO * p_nap_info)182 void BTA_PanSetRole(UNUSED_ATTR tBTA_PAN_ROLE role,
183                     UNUSED_ATTR tBTA_PAN_ROLE_INFO* p_user_info,
184                     UNUSED_ATTR tBTA_PAN_ROLE_INFO* p_gn_info,
185                     UNUSED_ATTR tBTA_PAN_ROLE_INFO* p_nap_info) {}
186 
BTA_PanOpen(UNUSED_ATTR BD_ADDR bd_addr,UNUSED_ATTR tBTA_PAN_ROLE local_role,UNUSED_ATTR tBTA_PAN_ROLE peer_role)187 void BTA_PanOpen(UNUSED_ATTR BD_ADDR bd_addr,
188                  UNUSED_ATTR tBTA_PAN_ROLE local_role,
189                  UNUSED_ATTR tBTA_PAN_ROLE peer_role) {}
190 
BTA_PanClose(UNUSED_ATTR uint16_t handle)191 void BTA_PanClose(UNUSED_ATTR uint16_t handle) {}
192 
193 #endif /* BTA_PAN_INCLUDED */
194