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 #ifndef ANDROID_INCLUDE_BT_GATT_SERVER_H
     18 #define ANDROID_INCLUDE_BT_GATT_SERVER_H
     19 
     20 #include <stdint.h>
     21 #include <vector>
     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   uint8_t value[BTGATT_MAX_ATTR_LEN];
     30   uint16_t handle;
     31   uint16_t offset;
     32   uint16_t len;
     33   uint8_t auth_req;
     34 } btgatt_value_t;
     35 
     36 /** GATT remote read request response type */
     37 typedef union {
     38   btgatt_value_t attr_value;
     39   uint16_t handle;
     40 } btgatt_response_t;
     41 
     42 /** BT-GATT Server callback structure. */
     43 
     44 /** Callback invoked in response to register_server */
     45 typedef void (*register_server_callback)(int status, int server_if,
     46                                          const bluetooth::Uuid& app_uuid);
     47 
     48 /** Callback indicating that a remote device has connected or been disconnected
     49  */
     50 typedef void (*connection_callback)(int conn_id, int server_if, int connected,
     51                                     const RawAddress& bda);
     52 
     53 /** Callback invoked in response to create_service */
     54 typedef void (*service_added_callback)(
     55     int status, int server_if, std::vector<btgatt_db_element_t> service);
     56 
     57 /** Callback invoked in response to stop_service */
     58 typedef void (*service_stopped_callback)(int status, int server_if,
     59                                          int srvc_handle);
     60 
     61 /** Callback triggered when a service has been deleted */
     62 typedef void (*service_deleted_callback)(int status, int server_if,
     63                                          int srvc_handle);
     64 
     65 /**
     66  * Callback invoked when a remote device has requested to read a characteristic
     67  * or descriptor. The application must respond by calling send_response
     68  */
     69 typedef void (*request_read_callback)(int conn_id, int trans_id,
     70                                       const RawAddress& bda, int attr_handle,
     71                                       int offset, bool is_long);
     72 
     73 /**
     74  * Callback invoked when a remote device has requested to write to a
     75  * characteristic or descriptor.
     76  */
     77 typedef void (*request_write_callback)(int conn_id, int trans_id,
     78                                        const RawAddress& bda, int attr_handle,
     79                                        int offset, bool need_rsp, bool is_prep,
     80                                        std::vector<uint8_t> value);
     81 
     82 /** Callback invoked when a previously prepared write is to be executed */
     83 typedef void (*request_exec_write_callback)(int conn_id, int trans_id,
     84                                             const RawAddress& bda,
     85                                             int exec_write);
     86 
     87 /**
     88  * Callback triggered in response to send_response if the remote device
     89  * sends a confirmation.
     90  */
     91 typedef void (*response_confirmation_callback)(int status, int handle);
     92 
     93 /**
     94  * Callback confirming that a notification or indication has been sent
     95  * to a remote device.
     96  */
     97 typedef void (*indication_sent_callback)(int conn_id, int status);
     98 
     99 /**
    100  * Callback notifying an application that a remote device connection is
    101  * currently congested and cannot receive any more data. An application should
    102  * avoid sending more data until a further callback is received indicating the
    103  * congestion status has been cleared.
    104  */
    105 typedef void (*congestion_callback)(int conn_id, bool congested);
    106 
    107 /** Callback invoked when the MTU for a given connection changes */
    108 typedef void (*mtu_changed_callback)(int conn_id, int mtu);
    109 
    110 /** Callback invoked when the PHY for a given connection changes */
    111 typedef void (*phy_updated_callback)(int conn_id, uint8_t tx_phy,
    112                                      uint8_t rx_phy, uint8_t status);
    113 
    114 /** Callback invoked when the connection parameters for a given connection
    115  * changes */
    116 typedef void (*conn_updated_callback)(int conn_id, uint16_t interval,
    117                                       uint16_t latency, uint16_t timeout,
    118                                       uint8_t status);
    119 typedef struct {
    120   register_server_callback register_server_cb;
    121   connection_callback connection_cb;
    122   service_added_callback service_added_cb;
    123   service_stopped_callback service_stopped_cb;
    124   service_deleted_callback service_deleted_cb;
    125   request_read_callback request_read_characteristic_cb;
    126   request_read_callback request_read_descriptor_cb;
    127   request_write_callback request_write_characteristic_cb;
    128   request_write_callback request_write_descriptor_cb;
    129   request_exec_write_callback request_exec_write_cb;
    130   response_confirmation_callback response_confirmation_cb;
    131   indication_sent_callback indication_sent_cb;
    132   congestion_callback congestion_cb;
    133   mtu_changed_callback mtu_changed_cb;
    134   phy_updated_callback phy_updated_cb;
    135   conn_updated_callback conn_updated_cb;
    136 } btgatt_server_callbacks_t;
    137 
    138 /** Represents the standard BT-GATT server interface. */
    139 typedef struct {
    140   /** Registers a GATT server application with the stack */
    141   bt_status_t (*register_server)(const bluetooth::Uuid& uuid);
    142 
    143   /** Unregister a server application from the stack */
    144   bt_status_t (*unregister_server)(int server_if);
    145 
    146   /** Create a connection to a remote peripheral */
    147   bt_status_t (*connect)(int server_if, const RawAddress& bd_addr,
    148                          bool is_direct, int transport);
    149 
    150   /** Disconnect an established connection or cancel a pending one */
    151   bt_status_t (*disconnect)(int server_if, const RawAddress& bd_addr,
    152                             int conn_id);
    153 
    154   /** Create a new service */
    155   bt_status_t (*add_service)(int server_if,
    156                              std::vector<btgatt_db_element_t> service);
    157 
    158   /** Stops a local service */
    159   bt_status_t (*stop_service)(int server_if, int service_handle);
    160 
    161   /** Delete a local service */
    162   bt_status_t (*delete_service)(int server_if, int service_handle);
    163 
    164   /** Send value indication to a remote device */
    165   bt_status_t (*send_indication)(int server_if, int attribute_handle,
    166                                  int conn_id, int confirm,
    167                                  std::vector<uint8_t> value);
    168 
    169   /** Send a response to a read/write operation */
    170   bt_status_t (*send_response)(int conn_id, int trans_id, int status,
    171                                const btgatt_response_t& response);
    172 
    173   bt_status_t (*set_preferred_phy)(const RawAddress& bd_addr, uint8_t tx_phy,
    174                                    uint8_t rx_phy, uint16_t phy_options);
    175 
    176   bt_status_t (*read_phy)(
    177       const RawAddress& bd_addr,
    178       base::Callback<void(uint8_t tx_phy, uint8_t rx_phy, uint8_t status)> cb);
    179 
    180 } btgatt_server_interface_t;
    181 
    182 __END_DECLS
    183 
    184 #endif /* ANDROID_INCLUDE_BT_GATT_CLIENT_H */
    185