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_CLIENT_H
     19 #define ANDROID_INCLUDE_BT_GATT_CLIENT_H
     20 
     21 #include <stdint.h>
     22 #include "bt_gatt_types.h"
     23 
     24 __BEGIN_DECLS
     25 
     26 /**
     27  * Buffer sizes for maximum attribute length and maximum read/write
     28  * operation buffer size.
     29  */
     30 #define BTGATT_MAX_ATTR_LEN 600
     31 
     32 /** Buffer type for unformatted reads/writes */
     33 typedef struct
     34 {
     35     uint8_t             value[BTGATT_MAX_ATTR_LEN];
     36     uint16_t            len;
     37 } btgatt_unformatted_value_t;
     38 
     39 /** Parameters for GATT read operations */
     40 typedef struct
     41 {
     42     btgatt_srvc_id_t    srvc_id;
     43     btgatt_char_id_t    char_id;
     44     bt_uuid_t           descr_id;
     45     btgatt_unformatted_value_t value;
     46     uint16_t            value_type;
     47     uint8_t             status;
     48 } btgatt_read_params_t;
     49 
     50 /** Parameters for GATT write operations */
     51 typedef struct
     52 {
     53     btgatt_srvc_id_t    srvc_id;
     54     btgatt_char_id_t    char_id;
     55     bt_uuid_t           descr_id;
     56     uint8_t             status;
     57 } btgatt_write_params_t;
     58 
     59 /** Attribute change notification parameters */
     60 typedef struct
     61 {
     62     uint8_t             value[BTGATT_MAX_ATTR_LEN];
     63     bt_bdaddr_t         bda;
     64     btgatt_srvc_id_t    srvc_id;
     65     btgatt_char_id_t    char_id;
     66     uint16_t            len;
     67     uint8_t             is_notify;
     68 } btgatt_notify_params_t;
     69 
     70 typedef struct
     71 {
     72     bt_bdaddr_t        *bda1;
     73     bt_uuid_t          *uuid1;
     74     uint16_t            u1;
     75     uint16_t            u2;
     76     uint16_t            u3;
     77     uint16_t            u4;
     78     uint16_t            u5;
     79 } btgatt_test_params_t;
     80 
     81 /** BT-GATT Client callback structure. */
     82 
     83 /** Callback invoked in response to register_client */
     84 typedef void (*register_client_callback)(int status, int client_if,
     85                 bt_uuid_t *app_uuid);
     86 
     87 /** Callback for scan results */
     88 typedef void (*scan_result_callback)(bt_bdaddr_t* bda, int rssi, uint8_t* adv_data);
     89 
     90 /** GATT open callback invoked in response to open */
     91 typedef void (*connect_callback)(int conn_id, int status, int client_if, bt_bdaddr_t* bda);
     92 
     93 /** Callback invoked in response to close */
     94 typedef void (*disconnect_callback)(int conn_id, int status,
     95                 int client_if, bt_bdaddr_t* bda);
     96 
     97 /**
     98  * Invoked in response to search_service when the GATT service search
     99  * has been completed.
    100  */
    101 typedef void (*search_complete_callback)(int conn_id, int status);
    102 
    103 /** Reports GATT services on a remote device */
    104 typedef void (*search_result_callback)( int conn_id, btgatt_srvc_id_t *srvc_id);
    105 
    106 /** GATT characteristic enumeration result callback */
    107 typedef void (*get_characteristic_callback)(int conn_id, int status,
    108                 btgatt_srvc_id_t *srvc_id, btgatt_char_id_t *char_id,
    109                 int char_prop);
    110 
    111 /** GATT descriptor enumeration result callback */
    112 typedef void (*get_descriptor_callback)(int conn_id, int status,
    113                 btgatt_srvc_id_t *srvc_id, btgatt_char_id_t *char_id,
    114                 bt_uuid_t *descr_id);
    115 
    116 /** GATT included service enumeration result callback */
    117 typedef void (*get_included_service_callback)(int conn_id, int status,
    118                 btgatt_srvc_id_t *srvc_id, btgatt_srvc_id_t *incl_srvc_id);
    119 
    120 /** Callback invoked in response to [de]register_for_notification */
    121 typedef void (*register_for_notification_callback)(int conn_id,
    122                 int registered, int status, btgatt_srvc_id_t *srvc_id,
    123                 btgatt_char_id_t *char_id);
    124 
    125 /**
    126  * Remote device notification callback, invoked when a remote device sends
    127  * a notification or indication that a client has registered for.
    128  */
    129 typedef void (*notify_callback)(int conn_id, btgatt_notify_params_t *p_data);
    130 
    131 /** Reports result of a GATT read operation */
    132 typedef void (*read_characteristic_callback)(int conn_id, int status,
    133                 btgatt_read_params_t *p_data);
    134 
    135 /** GATT write characteristic operation callback */
    136 typedef void (*write_characteristic_callback)(int conn_id, int status,
    137                 btgatt_write_params_t *p_data);
    138 
    139 /** GATT execute prepared write callback */
    140 typedef void (*execute_write_callback)(int conn_id, int status);
    141 
    142 /** Callback invoked in response to read_descriptor */
    143 typedef void (*read_descriptor_callback)(int conn_id, int status,
    144                 btgatt_read_params_t *p_data);
    145 
    146 /** Callback invoked in response to write_descriptor */
    147 typedef void (*write_descriptor_callback)(int conn_id, int status,
    148                 btgatt_write_params_t *p_data);
    149 
    150 /** Callback triggered in response to read_remote_rssi */
    151 typedef void (*read_remote_rssi_callback)(int client_if, bt_bdaddr_t* bda,
    152                                           int rssi, int status);
    153 
    154 typedef struct {
    155     register_client_callback            register_client_cb;
    156     scan_result_callback                scan_result_cb;
    157     connect_callback                    open_cb;
    158     disconnect_callback                 close_cb;
    159     search_complete_callback            search_complete_cb;
    160     search_result_callback              search_result_cb;
    161     get_characteristic_callback         get_characteristic_cb;
    162     get_descriptor_callback             get_descriptor_cb;
    163     get_included_service_callback       get_included_service_cb;
    164     register_for_notification_callback  register_for_notification_cb;
    165     notify_callback                     notify_cb;
    166     read_characteristic_callback        read_characteristic_cb;
    167     write_characteristic_callback       write_characteristic_cb;
    168     read_descriptor_callback            read_descriptor_cb;
    169     write_descriptor_callback           write_descriptor_cb;
    170     execute_write_callback              execute_write_cb;
    171     read_remote_rssi_callback           read_remote_rssi_cb;
    172 } btgatt_client_callbacks_t;
    173 
    174 /** Represents the standard BT-GATT client interface. */
    175 
    176 typedef struct {
    177     /** Registers a GATT client application with the stack */
    178     bt_status_t (*register_client)( bt_uuid_t *uuid );
    179 
    180     /** Unregister a client application from the stack */
    181     bt_status_t (*unregister_client)(int client_if );
    182 
    183     /** Start or stop LE device scanning */
    184     bt_status_t (*scan)( int client_if, bool start );
    185 
    186     /** Create a connection to a remote LE or dual-mode device */
    187     bt_status_t (*connect)( int client_if, const bt_bdaddr_t *bd_addr,
    188                          bool is_direct );
    189 
    190     /** Disconnect a remote device or cancel a pending connection */
    191     bt_status_t (*disconnect)( int client_if, const bt_bdaddr_t *bd_addr,
    192                     int conn_id);
    193 
    194     /** Clear the attribute cache for a given device */
    195     bt_status_t (*refresh)( int client_if, const bt_bdaddr_t *bd_addr );
    196 
    197     /**
    198      * Enumerate all GATT services on a connected device.
    199      * Optionally, the results can be filtered for a given UUID.
    200      */
    201     bt_status_t (*search_service)(int conn_id, bt_uuid_t *filter_uuid );
    202 
    203     /**
    204      * Enumerate included services for a given service.
    205      * Set start_incl_srvc_id to NULL to get the first included service.
    206      */
    207     bt_status_t (*get_included_service)( int conn_id, btgatt_srvc_id_t *srvc_id,
    208                                          btgatt_srvc_id_t *start_incl_srvc_id);
    209 
    210     /**
    211      * Enumerate characteristics for a given service.
    212      * Set start_char_id to NULL to get the first characteristic.
    213      */
    214     bt_status_t (*get_characteristic)( int conn_id,
    215                     btgatt_srvc_id_t *srvc_id, btgatt_char_id_t *start_char_id);
    216 
    217     /**
    218      * Enumerate descriptors for a given characteristic.
    219      * Set start_descr_id to NULL to get the first descriptor.
    220      */
    221     bt_status_t (*get_descriptor)( int conn_id,
    222                     btgatt_srvc_id_t *srvc_id, btgatt_char_id_t *char_id,
    223                     bt_uuid_t *start_descr_id);
    224 
    225     /** Read a characteristic on a remote device */
    226     bt_status_t (*read_characteristic)( int conn_id,
    227                     btgatt_srvc_id_t *srvc_id, btgatt_char_id_t *char_id,
    228                     int auth_req );
    229 
    230     /** Write a remote characteristic */
    231     bt_status_t (*write_characteristic)(int conn_id,
    232                     btgatt_srvc_id_t *srvc_id, btgatt_char_id_t *char_id,
    233                     int write_type, int len, int auth_req,
    234                     char* p_value);
    235 
    236     /** Read the descriptor for a given characteristic */
    237     bt_status_t (*read_descriptor)(int conn_id,
    238                     btgatt_srvc_id_t *srvc_id, btgatt_char_id_t *char_id,
    239                     bt_uuid_t *descr_id, int auth_req);
    240 
    241     /** Write a remote descriptor for a given characteristic */
    242     bt_status_t (*write_descriptor)( int conn_id,
    243                     btgatt_srvc_id_t *srvc_id, btgatt_char_id_t *char_id,
    244                     bt_uuid_t *descr_id, int write_type, int len,
    245                     int auth_req, char* p_value);
    246 
    247     /** Execute a prepared write operation */
    248     bt_status_t (*execute_write)(int conn_id, int execute);
    249 
    250     /**
    251      * Register to receive notifications or indications for a given
    252      * characteristic
    253      */
    254     bt_status_t (*register_for_notification)( int client_if,
    255                     const bt_bdaddr_t *bd_addr, btgatt_srvc_id_t *srvc_id,
    256                     btgatt_char_id_t *char_id);
    257 
    258     /** Deregister a previous request for notifications/indications */
    259     bt_status_t (*deregister_for_notification)( int client_if,
    260                     const bt_bdaddr_t *bd_addr, btgatt_srvc_id_t *srvc_id,
    261                     btgatt_char_id_t *char_id);
    262 
    263     /** Request RSSI for a given remote device */
    264     bt_status_t (*read_remote_rssi)( int client_if, const bt_bdaddr_t *bd_addr);
    265 
    266     /** Determine the type of the remote device (LE, BR/EDR, Dual-mode) */
    267     int (*get_device_type)( const bt_bdaddr_t *bd_addr );
    268 
    269     /** Test mode interface */
    270     bt_status_t (*test_command)( int command, btgatt_test_params_t* params);
    271 } btgatt_client_interface_t;
    272 
    273 __END_DECLS
    274 
    275 #endif /* ANDROID_INCLUDE_BT_GATT_CLIENT_H */
    276