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