OSDN Git Service

LE: Add notification sent and congestion callbacks (1/4)
authorAndre Eisenbach <andre@broadcom.com>
Fri, 28 Mar 2014 21:53:33 +0000 (14:53 -0700)
committerAndre Eisenbach <eisenbach@google.com>
Wed, 25 Jun 2014 21:00:30 +0000 (14:00 -0700)
This change introduces two new callbacks for applications to better
handle LE notification flow control and transport congestion. The
notification callback is invoked when the remote platform confirms an
indication or when a local notification has been passed to the
controller. No new notifications should be sent until a callback is
received.

Congestion callbacks are triggered when a GATT operation cannot be sent
to the local Bluetooth controller. Repeatedly calling
writeCharacteristic() for example will eventually trigger a congestion
callback. Applications cannot send additional data until a further
callback is received, indicating that the congestion has cleared up.

Change-Id: I613cbf968770921f853a407888bb8308849039f3

include/hardware/bt_gatt_client.h
include/hardware/bt_gatt_server.h

index d650671..d20c2e8 100644 (file)
@@ -174,6 +174,13 @@ typedef void (*multi_adv_data_callback)(int client_if, int status);
 /** Callback invoked when multi-adv disable operation has completed */
 typedef void (*multi_adv_disable_callback)(int client_if, int status);
 
+/**
+ * Callback notifying an application that a remote device connection is currently congested
+ * and cannot receive any more data. An application should avoid sending more data until
+ * a further callback is received indicating the congestion status has been cleared.
+ */
+typedef void (*congestion_callback)(int conn_id, bool congested);
+
 typedef struct {
     register_client_callback            register_client_cb;
     scan_result_callback                scan_result_cb;
@@ -199,6 +206,7 @@ typedef struct {
     multi_adv_update_callback           multi_adv_update_cb;
     multi_adv_data_callback             multi_adv_data_cb;
     multi_adv_disable_callback          multi_adv_disable_cb;
+    congestion_callback                 congestion_cb;
 } btgatt_client_callbacks_t;
 
 /** Represents the standard BT-GATT client interface. */
index 32f8ef6..2b1de27 100644 (file)
@@ -104,6 +104,19 @@ typedef void (*request_exec_write_callback)(int conn_id, int trans_id,
  */
 typedef void (*response_confirmation_callback)(int status, int handle);
 
+/**
+ * Callback confirming that a notification or indication has been sent
+ * to a remote device.
+ */
+typedef void (*indication_sent_callback)(int conn_id, int status);
+
+/**
+ * Callback notifying an application that a remote device connection is currently congested
+ * and cannot receive any more data. An application should avoid sending more data until
+ * a further callback is received indicating the congestion status has been cleared.
+ */
+typedef void (*congestion_callback)(int conn_id, bool congested);
+
 typedef struct {
     register_server_callback        register_server_cb;
     connection_callback             connection_cb;
@@ -118,6 +131,8 @@ typedef struct {
     request_write_callback          request_write_cb;
     request_exec_write_callback     request_exec_write_cb;
     response_confirmation_callback  response_confirmation_cb;
+    indication_sent_callback        indication_sent_cb;
+    congestion_callback             congestion_cb;
 } btgatt_server_callbacks_t;
 
 /** Represents the standard BT-GATT server interface. */