Home | History | Annotate | Download | only in hardware
      1 /*
      2  * Copyright (C) 2013 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 
     18 #ifndef ANDROID_INCLUDE_BT_GATT_SERVER_H
     19 #define ANDROID_INCLUDE_BT_GATT_SERVER_H
     20 
     21 #include <stdint.h>
     22 
     23 #include "bt_gatt_types.h"
     24 
     25 __BEGIN_DECLS
     26 
     27 /** GATT value type used in response to remote read requests */
     28 typedef struct
     29 {
     30     uint8_t           value[BTGATT_MAX_ATTR_LEN];
     31     uint16_t          handle;
     32     uint16_t          offset;
     33     uint16_t          len;
     34     uint8_t           auth_req;
     35 } btgatt_value_t;
     36 
     37 /** GATT remote read request response type */
     38 typedef union
     39 {
     40     btgatt_value_t attr_value;
     41     uint16_t            handle;
     42 } btgatt_response_t;
     43 
     44 /** BT-GATT Server callback structure. */
     45 
     46 /** Callback invoked in response to register_server */
     47 typedef void (*register_server_callback)(int status, int server_if,
     48                 bt_uuid_t *app_uuid);
     49 
     50 /** Callback indicating that a remote device has connected or been disconnected */
     51 typedef void (*connection_callback)(int conn_id, int server_if, int connected,
     52                                     bt_bdaddr_t *bda);
     53 
     54 /** Callback invoked in response to create_service */
     55 typedef void (*service_added_callback)(int status, int server_if,
     56                 btgatt_srvc_id_t *srvc_id, int srvc_handle);
     57 
     58 /** Callback indicating that an included service has been added to a service */
     59 typedef void (*included_service_added_callback)(int status, int server_if,
     60                 int srvc_handle, int incl_srvc_handle);
     61 
     62 /** Callback invoked when a characteristic has been added to a service */
     63 typedef void (*characteristic_added_callback)(int status, int server_if,
     64                 bt_uuid_t *uuid, int srvc_handle, int char_handle);
     65 
     66 /** Callback invoked when a descriptor has been added to a characteristic */
     67 typedef void (*descriptor_added_callback)(int status, int server_if,
     68                 bt_uuid_t *uuid, int srvc_handle, int descr_handle);
     69 
     70 /** Callback invoked in response to start_service */
     71 typedef void (*service_started_callback)(int status, int server_if,
     72                                          int srvc_handle);
     73 
     74 /** Callback invoked in response to stop_service */
     75 typedef void (*service_stopped_callback)(int status, int server_if,
     76                                          int srvc_handle);
     77 
     78 /** Callback triggered when a service has been deleted */
     79 typedef void (*service_deleted_callback)(int status, int server_if,
     80                                          int srvc_handle);
     81 
     82 /**
     83  * Callback invoked when a remote device has requested to read a characteristic
     84  * or descriptor. The application must respond by calling send_response
     85  */
     86 typedef void (*request_read_callback)(int conn_id, int trans_id, bt_bdaddr_t *bda,
     87                                       int attr_handle, int offset, bool is_long);
     88 
     89 /**
     90  * Callback invoked when a remote device has requested to write to a
     91  * characteristic or descriptor.
     92  */
     93 typedef void (*request_write_callback)(int conn_id, int trans_id, bt_bdaddr_t *bda,
     94                                        int attr_handle, int offset, int length,
     95                                        bool need_rsp, bool is_prep, uint8_t* value);
     96 
     97 /** Callback invoked when a previously prepared write is to be executed */
     98 typedef void (*request_exec_write_callback)(int conn_id, int trans_id,
     99                                             bt_bdaddr_t *bda, int exec_write);
    100 
    101 /**
    102  * Callback triggered in response to send_response if the remote device
    103  * sends a confirmation.
    104  */
    105 typedef void (*response_confirmation_callback)(int status, int handle);
    106 
    107 /**
    108  * Callback confirming that a notification or indication has been sent
    109  * to a remote device.
    110  */
    111 typedef void (*indication_sent_callback)(int conn_id, int status);
    112 
    113 /**
    114  * Callback notifying an application that a remote device connection is currently congested
    115  * and cannot receive any more data. An application should avoid sending more data until
    116  * a further callback is received indicating the congestion status has been cleared.
    117  */
    118 typedef void (*congestion_callback)(int conn_id, bool congested);
    119 
    120 /** Callback invoked when the MTU for a given connection changes */
    121 typedef void (*mtu_changed_callback)(int conn_id, int mtu);
    122 
    123 typedef struct {
    124     register_server_callback        register_server_cb;
    125     connection_callback             connection_cb;
    126     service_added_callback          service_added_cb;
    127     included_service_added_callback included_service_added_cb;
    128     characteristic_added_callback   characteristic_added_cb;
    129     descriptor_added_callback       descriptor_added_cb;
    130     service_started_callback        service_started_cb;
    131     service_stopped_callback        service_stopped_cb;
    132     service_deleted_callback        service_deleted_cb;
    133     request_read_callback           request_read_cb;
    134     request_write_callback          request_write_cb;
    135     request_exec_write_callback     request_exec_write_cb;
    136     response_confirmation_callback  response_confirmation_cb;
    137     indication_sent_callback        indication_sent_cb;
    138     congestion_callback             congestion_cb;
    139     mtu_changed_callback            mtu_changed_cb;
    140 } btgatt_server_callbacks_t;
    141 
    142 /** Represents the standard BT-GATT server interface. */
    143 typedef struct {
    144     /** Registers a GATT server application with the stack */
    145     bt_status_t (*register_server)( bt_uuid_t *uuid );
    146 
    147     /** Unregister a server application from the stack */
    148     bt_status_t (*unregister_server)(int server_if );
    149 
    150     /** Create a connection to a remote peripheral */
    151     bt_status_t (*connect)(int server_if, const bt_bdaddr_t *bd_addr,
    152                             bool is_direct, int transport);
    153 
    154     /** Disconnect an established connection or cancel a pending one */
    155     bt_status_t (*disconnect)(int server_if, const bt_bdaddr_t *bd_addr,
    156                     int conn_id );
    157 
    158     /** Create a new service */
    159     bt_status_t (*add_service)( int server_if, btgatt_srvc_id_t *srvc_id, int num_handles);
    160 
    161     /** Assign an included service to it's parent service */
    162     bt_status_t (*add_included_service)( int server_if, int service_handle, int included_handle);
    163 
    164     /** Add a characteristic to a service */
    165     bt_status_t (*add_characteristic)( int server_if,
    166                     int service_handle, bt_uuid_t *uuid,
    167                     int properties, int permissions);
    168 
    169     /** Add a descriptor to a given service */
    170     bt_status_t (*add_descriptor)(int server_if, int service_handle,
    171                                   bt_uuid_t *uuid, int permissions);
    172 
    173     /** Starts a local service */
    174     bt_status_t (*start_service)(int server_if, int service_handle,
    175                                  int transport);
    176 
    177     /** Stops a local service */
    178     bt_status_t (*stop_service)(int server_if, int service_handle);
    179 
    180     /** Delete a local service */
    181     bt_status_t (*delete_service)(int server_if, int service_handle);
    182 
    183     /** Send value indication to a remote device */
    184     bt_status_t (*send_indication)(int server_if, int attribute_handle,
    185                                    int conn_id, int len, int confirm,
    186                                    char* p_value);
    187 
    188     /** Send a response to a read/write operation */
    189     bt_status_t (*send_response)(int conn_id, int trans_id,
    190                                  int status, btgatt_response_t *response);
    191 
    192 } btgatt_server_interface_t;
    193 
    194 __END_DECLS
    195 
    196 #endif /* ANDROID_INCLUDE_BT_GATT_CLIENT_H */
    197