15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2003-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 GATT server 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_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE) 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_gatts_int.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* type for service building action functions */ 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*tBTA_GATTS_SRVC_ACT)(tBTA_GATTS_SRVC_CB *p_rcb, tBTA_GATTS_DATA *p_data); 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* service building action function list */ 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTA_GATTS_SRVC_ACT bta_gatts_srvc_build_act[] = 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_add_include_srvc, 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_add_char, 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_add_char_descr, 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_delete_service, 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_start_service, 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_stop_service, 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* GATTS control block */ 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_DYNAMIC_MEMORY == FALSE 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATTS_CB bta_gatts_cb; 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gatts_hdl_event 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTA GATT server main event handling function. 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN bta_gatts_hdl_event(BT_HDR *p_msg) 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTS_CB *p_cb = &bta_gatts_cb; 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTS_SRVC_CB *p_srvc_cb = NULL; 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_msg->event) 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 70e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach case BTA_GATTS_API_DISABLE_EVT: 71e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach bta_gatts_api_disable(p_cb); 72e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach break; 73e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_REG_EVT: 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_register(p_cb, (tBTA_GATTS_DATA *) p_msg); 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_INT_START_IF_EVT: 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_start_if(p_cb, (tBTA_GATTS_DATA *) p_msg); 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_DEREG_EVT: 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_deregister(p_cb, (tBTA_GATTS_DATA *) p_msg); 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_CREATE_SRVC_EVT: 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_create_srvc(p_cb, (tBTA_GATTS_DATA *) p_msg); 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_INDICATION_EVT: 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_indicate_handle(p_cb,(tBTA_GATTS_DATA *) p_msg); 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_OPEN_EVT: 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_open(p_cb,(tBTA_GATTS_DATA *) p_msg); 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_CANCEL_OPEN_EVT: 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_cancel_open(p_cb,(tBTA_GATTS_DATA *) p_msg); 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_CLOSE_EVT: 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_close(p_cb,(tBTA_GATTS_DATA *) p_msg); 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_RSP_EVT: 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_send_rsp(p_cb,(tBTA_GATTS_DATA *) p_msg); 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1105c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach case BTA_GATTS_API_LISTEN_EVT: 1115c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach bta_gatts_listen(p_cb,(tBTA_GATTS_DATA *) p_msg); 1125c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach break; 1135c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach 1145c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_ADD_INCL_SRVC_EVT: 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_ADD_CHAR_EVT: 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_ADD_DESCR_EVT: 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_DEL_SRVC_EVT: 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_START_SRVC_EVT: 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTS_API_STOP_SRVC_EVT: 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_srvc_cb = bta_gatts_find_srvc_cb_by_srvc_id(p_cb, 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ((tBTA_GATTS_DATA *)p_msg)->api_add_incl_srvc.hdr.layer_specific); 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_srvc_cb != NULL) 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gatts_srvc_build_act[p_msg->event - BTA_GATTS_API_ADD_INCL_SRVC_EVT](p_srvc_cb, (tBTA_GATTS_DATA *) p_msg); 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 131e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("service not created"); 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_GATT_INCLUDED */ 144