Home | History | Annotate | Download | only in support
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2014 Google, Inc.
      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 #include "base.h"
     20 #include "btcore/include/bdaddr.h"
     21 #include "support/callbacks.h"
     22 #include "support/gatt.h"
     23 
     24 const btgatt_interface_t *gatt_interface;
     25 static bt_bdaddr_t remote_bd_addr;
     26 static int gatt_client_interface;
     27 static int gatt_server_interface;
     28 static int gatt_service_handle;
     29 static int gatt_included_service_handle;
     30 static int gatt_characteristic_handle;
     31 static int gatt_descriptor_handle;
     32 static int gatt_connection_id;
     33 static int gatt_status;
     34 
     35 bool gatt_init() {
     36   gatt_interface = bt_interface->get_profile_interface(BT_PROFILE_GATT_ID);
     37   return gatt_interface->init(callbacks_get_gatt_struct()) == BT_STATUS_SUCCESS;
     38 }
     39 
     40 int gatt_get_connection_id() {
     41   return gatt_connection_id;
     42 }
     43 
     44 int gatt_get_client_interface() {
     45   return gatt_client_interface;
     46 }
     47 
     48 int gatt_get_server_interface() {
     49   return gatt_server_interface;
     50 }
     51 
     52 int gatt_get_service_handle() {
     53   return gatt_service_handle;
     54 }
     55 
     56 int gatt_get_included_service_handle() {
     57   return gatt_included_service_handle;
     58 }
     59 
     60 int gatt_get_characteristic_handle() {
     61   return gatt_characteristic_handle;
     62 }
     63 
     64 int gatt_get_descriptor_handle() {
     65   return gatt_descriptor_handle;
     66 }
     67 
     68 int gatt_get_status() {
     69   return gatt_status;
     70 }
     71 
     72 // GATT client callbacks
     73 void btgattc_register_app_cb(int status, int clientIf, bt_uuid_t *app_uuid) {
     74   gatt_status = status;
     75   gatt_client_interface = clientIf;
     76   CALLBACK_RET();
     77 }
     78 
     79 void btgattc_scan_result_cb(bt_bdaddr_t* bda, int rssi, uint8_t* adv_data) {
     80   CALLBACK_RET();
     81 }
     82 
     83 void btgattc_open_cb(int conn_id, int status, int clientIf, bt_bdaddr_t* bda) {
     84   CALLBACK_RET();
     85 }
     86 
     87 void btgattc_close_cb(int conn_id, int status, int clientIf, bt_bdaddr_t* bda) {
     88   CALLBACK_RET();
     89 }
     90 
     91 void btgattc_search_complete_cb(int conn_id, int status) {
     92   CALLBACK_RET();
     93 }
     94 
     95 void btgattc_search_result_cb(int conn_id, btgatt_srvc_id_t *srvc_id) {
     96   CALLBACK_RET();
     97 }
     98 
     99 void btgattc_get_characteristic_cb(int conn_id, int status, btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id, int char_prop) {
    100   CALLBACK_RET();
    101 }
    102 
    103 void btgattc_get_descriptor_cb(int conn_id, int status, btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id, btgatt_gatt_id_t *descr_id) {
    104   CALLBACK_RET();
    105 }
    106 
    107 void btgattc_get_included_service_cb(int conn_id, int status, btgatt_srvc_id_t *srvc_id, btgatt_srvc_id_t *incl_srvc_id) {
    108   CALLBACK_RET();
    109 }
    110 
    111 void btgattc_register_for_notification_cb(int conn_id, int registered, int status, btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id) {
    112   CALLBACK_RET();
    113 }
    114 
    115 void btgattc_notify_cb(int conn_id, btgatt_notify_params_t *p_data) {
    116   CALLBACK_RET();
    117 }
    118 
    119 void btgattc_read_characteristic_cb(int conn_id, int status, btgatt_read_params_t *p_data) {
    120   CALLBACK_RET();
    121 }
    122 
    123 void btgattc_write_characteristic_cb(int conn_id, int status, btgatt_write_params_t *p_data) {
    124   CALLBACK_RET();
    125 }
    126 
    127 void btgattc_execute_write_cb(int conn_id, int status) {
    128   CALLBACK_RET();
    129 }
    130 
    131 void btgattc_read_descriptor_cb(int conn_id, int status, btgatt_read_params_t *p_data) {
    132   CALLBACK_RET();
    133 }
    134 
    135 void btgattc_write_descriptor_cb(int conn_id, int status, btgatt_write_params_t *p_data) {
    136   CALLBACK_RET();
    137 }
    138 
    139 void btgattc_remote_rssi_cb(int client_if,bt_bdaddr_t* bda, int rssi, int status) {
    140   CALLBACK_RET();
    141 }
    142 
    143 void btgattc_advertise_cb(int status, int client_if) {
    144   gatt_status = status;
    145   gatt_client_interface = client_if;
    146   CALLBACK_RET();
    147 }
    148 
    149 // GATT server callbacks
    150 void btgatts_register_app_cb(int status, int server_if, bt_uuid_t *uuid) {
    151   gatt_status = status;
    152   gatt_server_interface = server_if;
    153   CALLBACK_RET();
    154 }
    155 
    156 void btgatts_connection_cb(int conn_id, int server_if, int connected, bt_bdaddr_t *bda) {
    157   gatt_connection_id = conn_id;
    158   for (int i = 0; i < 6; ++i) {
    159     remote_bd_addr.address[i] = bda->address[i];
    160   }
    161   CALLBACK_RET();
    162 }
    163 
    164 void btgatts_service_added_cb(int status, int server_if, btgatt_srvc_id_t *srvc_id, int srvc_handle) {
    165   gatt_status = status;
    166   gatt_server_interface = server_if;
    167   gatt_service_handle = srvc_handle;
    168   CALLBACK_RET();
    169 }
    170 
    171 void btgatts_included_service_added_cb(int status, int server_if, int srvc_handle, int incl_srvc_handle) {
    172   gatt_status = status;
    173   gatt_server_interface = server_if;
    174   gatt_service_handle = srvc_handle;
    175   gatt_included_service_handle = incl_srvc_handle;
    176   CALLBACK_RET();
    177 }
    178 
    179 void btgatts_characteristic_added_cb(int status, int server_if, bt_uuid_t *char_id, int srvc_handle, int char_handle) {
    180   gatt_status = status;
    181   gatt_server_interface = server_if;
    182   gatt_service_handle = srvc_handle;
    183   gatt_characteristic_handle = char_handle;
    184   CALLBACK_RET();
    185 }
    186 
    187 void btgatts_descriptor_added_cb(int status, int server_if, bt_uuid_t *descr_id, int srvc_handle, int descr_handle) {
    188   gatt_status = status;
    189   gatt_server_interface = server_if;
    190   gatt_service_handle = srvc_handle;
    191   gatt_descriptor_handle = descr_handle;
    192   CALLBACK_RET();
    193 }
    194 
    195 void btgatts_service_started_cb(int status, int server_if, int srvc_handle) {
    196   gatt_status = status;
    197   gatt_server_interface = server_if;
    198   gatt_service_handle = srvc_handle;
    199   CALLBACK_RET();
    200 }
    201 
    202 void btgatts_service_stopped_cb(int status, int server_if, int srvc_handle) {
    203   gatt_status = status;
    204   gatt_server_interface = server_if;
    205   gatt_service_handle = srvc_handle;
    206   CALLBACK_RET();
    207 }
    208 
    209 void btgatts_service_deleted_cb(int status, int server_if, int srvc_handle) {
    210   gatt_status = status;
    211   gatt_server_interface = server_if;
    212   gatt_service_handle = srvc_handle;
    213   CALLBACK_RET();
    214 }
    215 
    216 void btgatts_request_read_cb(int conn_id, int trans_id, bt_bdaddr_t *bda, int attr_handle, int offset, bool is_long) {
    217   CALLBACK_RET();
    218 }
    219 
    220 void btgatts_request_write_cb(int conn_id, int trans_id, bt_bdaddr_t *bda, int attr_handle, int offset, int length, bool need_rsp, bool is_prep, uint8_t* value) {
    221   CALLBACK_RET();
    222 }
    223 
    224 void btgatts_request_exec_write_cb(int conn_id, int trans_id, bt_bdaddr_t *bda, int exec_write) {
    225   CALLBACK_RET();
    226 }
    227 
    228 void btgatts_response_confirmation_cb(int status, int handle) {
    229   CALLBACK_RET();
    230 }