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 26 #include "bt_target.h" 27 28 #include "bta_api.h" 29 #include "bta_sys.h" 30 #include "pan_api.h" 31 #include "gki.h" 32 #include "bta_pan_api.h" 33 #include "bta_pan_int.h" 34 #include "bd.h" 35 #include <string.h> 36 #include "bt_utils.h" 37 38 #if defined(BTA_PAN_INCLUDED) && (BTA_PAN_INCLUDED == TRUE) 39 40 static const tBTA_SYS_REG bta_pan_reg = 41 { 42 bta_pan_hdl_event, 43 BTA_PanDisable 44 }; 45 46 /******************************************************************************* 47 ** 48 ** Function BTA_PanEnable 49 ** 50 ** Description Enable PAN service. This function must be 51 ** called before any other functions in the PAN API are called. 52 ** When the enable operation is complete the callback function 53 ** will be called with a BTA_PAN_ENABLE_EVT. 54 ** 55 ** Returns void 56 ** 57 *******************************************************************************/ 58 void BTA_PanEnable(tBTA_PAN_CBACK p_cback) 59 { 60 tBTA_PAN_API_ENABLE *p_buf; 61 62 /* register with BTA system manager */ 63 bta_sys_register(BTA_ID_PAN, &bta_pan_reg); 64 65 if ((p_buf = (tBTA_PAN_API_ENABLE *) GKI_getbuf(sizeof(tBTA_PAN_API_ENABLE))) != NULL) 66 { 67 p_buf->hdr.event = BTA_PAN_API_ENABLE_EVT; 68 p_buf->p_cback = p_cback; 69 70 bta_sys_sendmsg(p_buf); 71 } 72 } 73 74 75 76 /******************************************************************************* 77 ** 78 ** Function BTA_PanDisable 79 ** 80 ** Description Disables PAN service. 81 ** 82 ** 83 ** Returns void 84 ** 85 *******************************************************************************/ 86 void BTA_PanDisable(void) 87 { 88 BT_HDR *p_buf; 89 90 bta_sys_deregister(BTA_ID_PAN); 91 if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL) 92 { 93 p_buf->event = BTA_PAN_API_DISABLE_EVT; 94 bta_sys_sendmsg(p_buf); 95 } 96 } 97 98 /******************************************************************************* 99 ** 100 ** Function BTA_PanSetRole 101 ** 102 ** Description Sets PAN roles. When the enable operation is complete 103 ** the callback function will be called with a BTA_PAN_SET_ROLE_EVT. 104 ** 105 ** Returns void 106 ** 107 *******************************************************************************/ 108 void BTA_PanSetRole(tBTA_PAN_ROLE role, tBTA_PAN_ROLE_INFO *p_user_info, tBTA_PAN_ROLE_INFO *p_gn_info, 109 tBTA_PAN_ROLE_INFO *p_nap_info) 110 { 111 112 tBTA_PAN_API_SET_ROLE *p_buf; 113 114 if ((p_buf = (tBTA_PAN_API_SET_ROLE *) GKI_getbuf(sizeof(tBTA_PAN_API_SET_ROLE))) != NULL) 115 { 116 p_buf->hdr.event = BTA_PAN_API_SET_ROLE_EVT; 117 p_buf->role = role; 118 119 if(p_user_info && (role & BTA_PAN_ROLE_PANU)) 120 { 121 if(p_user_info->p_srv_name) 122 BCM_STRNCPY_S(p_buf->user_name, sizeof(p_buf->user_name), p_user_info->p_srv_name, BTA_SERVICE_NAME_LEN); 123 else 124 p_buf->user_name[0] = 0; 125 126 p_buf->user_name[BTA_SERVICE_NAME_LEN] = 0; 127 p_buf->user_app_id = p_user_info->app_id; 128 p_buf->user_sec_mask = p_user_info->sec_mask; 129 } 130 131 if(p_gn_info && (role & BTA_PAN_ROLE_GN)) 132 { 133 if(p_gn_info->p_srv_name) 134 BCM_STRNCPY_S(p_buf->gn_name, sizeof(p_buf->gn_name), p_gn_info->p_srv_name, BTA_SERVICE_NAME_LEN); 135 else 136 p_buf->gn_name[0] = 0; 137 138 p_buf->gn_name[BTA_SERVICE_NAME_LEN] = 0; 139 p_buf->gn_app_id = p_gn_info->app_id; 140 p_buf->gn_sec_mask = p_gn_info->sec_mask; 141 142 } 143 144 if(p_nap_info && (role & BTA_PAN_ROLE_NAP)) 145 { 146 if(p_nap_info->p_srv_name) 147 BCM_STRNCPY_S(p_buf->nap_name, sizeof(p_buf->nap_name), p_nap_info->p_srv_name, BTA_SERVICE_NAME_LEN); 148 else 149 p_buf->nap_name[0] = 0; 150 151 p_buf->nap_name[BTA_SERVICE_NAME_LEN] = 0; 152 p_buf->nap_app_id = p_nap_info->app_id; 153 p_buf->nap_sec_mask = p_nap_info->sec_mask; 154 155 } 156 157 bta_sys_sendmsg(p_buf); 158 } 159 160 161 162 } 163 164 /******************************************************************************* 165 ** 166 ** Function BTA_PanOpen 167 ** 168 ** Description Opens a connection to a peer device. 169 ** When connection is open callback function is called 170 ** with a BTA_PAN_OPEN_EVT. 171 ** 172 ** 173 ** Returns void 174 ** 175 *******************************************************************************/ 176 BTA_API void BTA_PanOpen(BD_ADDR bd_addr, tBTA_PAN_ROLE local_role, tBTA_PAN_ROLE peer_role) 177 { 178 179 tBTA_PAN_API_OPEN *p_buf; 180 181 if ((p_buf = (tBTA_PAN_API_OPEN *) GKI_getbuf(sizeof(tBTA_PAN_API_OPEN))) != NULL) 182 { 183 p_buf->hdr.event = BTA_PAN_API_OPEN_EVT; 184 p_buf->local_role = local_role; 185 p_buf->peer_role = peer_role; 186 bdcpy(p_buf->bd_addr, bd_addr); 187 bta_sys_sendmsg(p_buf); 188 } 189 190 } 191 192 /******************************************************************************* 193 ** 194 ** Function BTA_PanClose 195 ** 196 ** Description Close a PAN connection to a peer device. 197 ** 198 ** 199 ** Returns void 200 ** 201 *******************************************************************************/ 202 BTA_API void BTA_PanClose(UINT16 handle) 203 { 204 BT_HDR *p_buf; 205 206 if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL) 207 { 208 p_buf->event = BTA_PAN_API_CLOSE_EVT; 209 p_buf->layer_specific = handle; 210 bta_sys_sendmsg(p_buf); 211 } 212 } 213 #else 214 215 void BTA_PanEnable(tBTA_PAN_CBACK p_cback) 216 { 217 UNUSED(p_cback); 218 } 219 220 void BTA_PanDisable(void) 221 { 222 } 223 224 void BTA_PanSetRole(tBTA_PAN_ROLE role, tBTA_PAN_ROLE_INFO *p_user_info, tBTA_PAN_ROLE_INFO *p_gn_info, 225 tBTA_PAN_ROLE_INFO *p_nap_info) 226 { 227 UNUSED(role); 228 UNUSED(p_user_info); 229 UNUSED(p_gn_info); 230 UNUSED(p_nap_info); 231 } 232 233 void BTA_PanOpen(BD_ADDR bd_addr, tBTA_PAN_ROLE local_role, tBTA_PAN_ROLE peer_role) 234 { 235 UNUSED(bd_addr); 236 UNUSED(local_role); 237 UNUSED(peer_role); 238 } 239 240 void BTA_PanClose(UINT16 handle) 241 { 242 UNUSED(handle); 243 } 244 245 #endif /* BTA_PAN_INCLUDED */ 246