You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2015/12/24 00:34:33 UTC

[4/6] incubator-mynewt-larva git commit: Change function type for ATT callbacks.

Change function type for ATT callbacks.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/commit/936b9e83
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/tree/936b9e83
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/diff/936b9e83

Branch: refs/heads/master
Commit: 936b9e83adcf34f1359f688e0fda0f3dabf71f91
Parents: e949b8a
Author: Christopher Collins <cc...@gmail.com>
Authored: Wed Dec 23 14:00:33 2015 -0800
Committer: Christopher Collins <cc...@gmail.com>
Committed: Wed Dec 23 15:33:49 2015 -0800

----------------------------------------------------------------------
 net/nimble/host/include/host/ble_att.h      | 25 ++----
 net/nimble/host/include/host/ble_gatt.h     |  4 +-
 net/nimble/host/src/ble_att_priv.h          | 11 +++
 net/nimble/host/src/ble_att_svr.c           | 71 +++++++++--------
 net/nimble/host/src/ble_gatts.c             | 18 ++++-
 net/nimble/host/src/test/ble_att_svr_test.c | 97 +++++++++++++-----------
 project/hostctlrtest/src/main.c             | 44 +++++------
 7 files changed, 147 insertions(+), 123 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/936b9e83/net/nimble/host/include/host/ble_att.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/include/host/ble_att.h b/net/nimble/host/include/host/ble_att.h
index e4c8112..6522f0d 100644
--- a/net/nimble/host/include/host/ble_att.h
+++ b/net/nimble/host/include/host/ble_att.h
@@ -58,16 +58,16 @@
 
 #define BLE_ATT_ATTR_MAX_LEN                512
 
-union ble_att_svr_handle_arg {
+union ble_att_svr_access_ctxt {
     struct {
         void *attr_data;
         int attr_len;
-    } aha_read;
+    } ahc_read;
 
     struct {
         void *attr_data;
         int attr_len;
-    } aha_write;
+    } ahc_write;
 };
 
 #define HA_FLAG_PERM_READ                   (1 << 0)
@@ -77,8 +77,6 @@ union ble_att_svr_handle_arg {
 #define HA_FLAG_AUTHENTICATION_REQ          (1 << 4)
 #define HA_FLAG_AUTHORIZATION_REQ           (1 << 5)
 
-struct ble_att_svr_entry;
-
 /**
  * Handles a host attribute request.
  *
@@ -91,21 +89,12 @@ struct ble_att_svr_entry;
  *                              One of the BLE_ATT_ERR_[...] codes on
  *                                  failure.
  */
-typedef int ble_att_svr_handle_func(struct ble_att_svr_entry *entry,
+typedef int ble_att_svr_access_fn(uint16_t handle_id, uint8_t *uuid128,
                                     uint8_t op,
-                                    union ble_att_svr_handle_arg *arg);
-
-struct ble_att_svr_entry {
-    STAILQ_ENTRY(ble_att_svr_entry) ha_next;
-
-    uint8_t ha_uuid[16];
-    uint8_t ha_flags;
-    uint8_t ha_pad1;
-    uint16_t ha_handle_id;
-    ble_att_svr_handle_func *ha_fn;
-};
+                                    union ble_att_svr_access_ctxt *ctxt,
+                                    void *arg);
 
 int ble_att_svr_register(uint8_t *uuid, uint8_t flags, uint16_t *handle_id,
-                         ble_att_svr_handle_func *fn);
+                         ble_att_svr_access_fn *cb, void *cb_arg);
 
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/936b9e83/net/nimble/host/include/host/ble_gatt.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/include/host/ble_gatt.h b/net/nimble/host/include/host/ble_gatt.h
index cbb0338..665b138 100644
--- a/net/nimble/host/include/host/ble_gatt.h
+++ b/net/nimble/host/include/host/ble_gatt.h
@@ -74,13 +74,13 @@ int ble_gatt_init(void);
 /*** @server. */
 struct ble_gatt_desc_def {
     uint8_t *uuid128;
-    ble_att_svr_handle_func *access_cb;
+    ble_att_svr_access_fn *access_cb;
 };
 
 struct ble_gatt_char_def {
     uint8_t properties;
     uint8_t *uuid128;
-    ble_att_svr_handle_func *access_cb;
+    ble_att_svr_access_fn *access_cb;
 };
 
 #define BLE_GATT_SVC_TYPE_END       0

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/936b9e83/net/nimble/host/src/ble_att_priv.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_att_priv.h b/net/nimble/host/src/ble_att_priv.h
index 94a73aa..9de76ad 100644
--- a/net/nimble/host/src/ble_att_priv.h
+++ b/net/nimble/host/src/ble_att_priv.h
@@ -49,6 +49,17 @@ struct ble_att_svr_conn {
     uint32_t basc_prep_write_rx_time;
 };
 
+struct ble_att_svr_entry {
+    STAILQ_ENTRY(ble_att_svr_entry) ha_next;
+
+    uint8_t ha_uuid[16];
+    uint8_t ha_flags;
+    uint8_t ha_pad1;
+    uint16_t ha_handle_id;
+    ble_att_svr_access_fn *ha_cb;
+    void *ha_cb_arg;
+};
+
 /**
  * Called from ble_att_svr_walk().  Called on each entry in the 
  * ble_att_svr_list.

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/936b9e83/net/nimble/host/src/ble_att_svr.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_att_svr.c b/net/nimble/host/src/ble_att_svr.c
index eb301eb..17393f8 100644
--- a/net/nimble/host/src/ble_att_svr.c
+++ b/net/nimble/host/src/ble_att_svr.c
@@ -131,7 +131,7 @@ ble_att_svr_next_id(void)
  */
 int
 ble_att_svr_register(uint8_t *uuid, uint8_t flags, uint16_t *handle_id,
-                     ble_att_svr_handle_func *fn)
+                     ble_att_svr_access_fn *cb, void *cb_arg)
 {
     struct ble_att_svr_entry *entry;
 
@@ -143,7 +143,8 @@ ble_att_svr_register(uint8_t *uuid, uint8_t flags, uint16_t *handle_id,
     memcpy(&entry->ha_uuid, uuid, sizeof entry->ha_uuid);
     entry->ha_flags = flags;
     entry->ha_handle_id = ble_att_svr_next_id();
-    entry->ha_fn = fn;
+    entry->ha_cb = cb;
+    entry->ha_cb_arg = cb_arg;
 
     ble_att_svr_list_lock();
     STAILQ_INSERT_TAIL(&ble_att_svr_list, entry, ha_next);
@@ -751,7 +752,7 @@ ble_att_svr_fill_type_value(struct ble_att_find_type_value_req *req,
                             struct os_mbuf *rxom, struct os_mbuf *txom,
                             uint16_t mtu)
 {
-    union ble_att_svr_handle_arg arg;
+    union ble_att_svr_access_ctxt arg;
     struct ble_att_svr_entry *ha;
     uint16_t uuid16;
     uint16_t first;
@@ -783,15 +784,16 @@ ble_att_svr_fill_type_value(struct ble_att_find_type_value_req *req,
              */
             uuid16 = ble_hs_uuid_16bit(ha->ha_uuid);
             if (uuid16 == req->bavq_attr_type) {
-                rc = ha->ha_fn(ha, BLE_ATT_OP_READ_REQ, &arg);
+                rc = ha->ha_cb(ha->ha_handle_id, ha->ha_uuid,
+                               BLE_ATT_OP_READ_REQ, &arg, ha->ha_cb_arg);
                 if (rc != 0) {
                     rc = BLE_HS_EAPP;
                     goto done;
                 }
                 rc = os_mbuf_memcmp(rxom,
                                     BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ,
-                                    arg.aha_read.attr_data,
-                                    arg.aha_read.attr_len);
+                                    arg.ahc_read.attr_data,
+                                    arg.ahc_read.attr_len);
                 if (rc == 0) {
                     match = 1;
                 }
@@ -955,7 +957,7 @@ ble_att_svr_tx_read_type_rsp(struct ble_hs_conn *conn,
                              uint16_t *err_handle)
 {
     struct ble_att_read_type_rsp rsp;
-    union ble_att_svr_handle_arg arg;
+    union ble_att_svr_access_ctxt arg;
     struct ble_att_svr_entry *entry;
     struct os_mbuf *txom;
     uint8_t *dptr;
@@ -1007,17 +1009,18 @@ ble_att_svr_tx_read_type_rsp(struct ble_hs_conn *conn,
         if (entry->ha_handle_id >= req->batq_start_handle &&
             entry->ha_handle_id <= req->batq_end_handle) {
 
-            rc = entry->ha_fn(entry, BLE_ATT_OP_READ_REQ, &arg);
+            rc = entry->ha_cb(entry->ha_handle_id, entry->ha_uuid,
+                              BLE_ATT_OP_READ_REQ, &arg, entry->ha_cb_arg);
             if (rc != 0) {
                 *att_err = BLE_ATT_ERR_UNLIKELY;
                 *err_handle = entry->ha_handle_id;
                 goto done;
             }
 
-            if (arg.aha_read.attr_len > ble_l2cap_chan_mtu(chan) - 4) {
+            if (arg.ahc_read.attr_len > ble_l2cap_chan_mtu(chan) - 4) {
                 attr_len = ble_l2cap_chan_mtu(chan) - 4;
             } else {
-                attr_len = arg.aha_read.attr_len;
+                attr_len = arg.ahc_read.attr_len;
             }
 
             if (prev_attr_len == 0) {
@@ -1040,7 +1043,7 @@ ble_att_svr_tx_read_type_rsp(struct ble_hs_conn *conn,
             }
 
             htole16(dptr + 0, entry->ha_handle_id);
-            memcpy(dptr + 2, arg.aha_read.attr_data, attr_len);
+            memcpy(dptr + 2, arg.ahc_read.attr_data, attr_len);
         }
     }
 
@@ -1190,7 +1193,7 @@ int
 ble_att_svr_rx_read(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
                     struct os_mbuf **rxom)
 {
-    union ble_att_svr_handle_arg arg;
+    union ble_att_svr_access_ctxt arg;
     struct ble_att_svr_entry *entry;
     struct ble_att_read_req req;
     uint16_t err_handle;
@@ -1222,14 +1225,15 @@ ble_att_svr_rx_read(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
         goto err;
     }
 
-    if (entry->ha_fn == NULL) {
+    if (entry->ha_cb == NULL) {
         att_err = BLE_ATT_ERR_UNLIKELY;
         err_handle = req.barq_handle;
         rc = BLE_HS_ENOTSUP;
         goto err;
     }
 
-    rc = entry->ha_fn(entry, BLE_ATT_OP_READ_REQ, &arg);
+    rc = entry->ha_cb(entry->ha_handle_id, entry->ha_uuid,
+                      BLE_ATT_OP_READ_REQ, &arg, entry->ha_cb_arg);
     if (rc != 0) {
         att_err = BLE_ATT_ERR_UNLIKELY;
         err_handle = req.barq_handle;
@@ -1237,8 +1241,8 @@ ble_att_svr_rx_read(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
         goto err;
     }
 
-    rc = ble_att_svr_tx_read_rsp(conn, chan, arg.aha_read.attr_data,
-                                 arg.aha_read.attr_len, &att_err);
+    rc = ble_att_svr_tx_read_rsp(conn, chan, arg.ahc_read.attr_data,
+                                 arg.ahc_read.attr_len, &att_err);
     if (rc != 0) {
         err_handle = req.barq_handle;
         goto err;
@@ -1267,22 +1271,23 @@ static int
 ble_att_svr_service_uuid(struct ble_att_svr_entry *entry, uint16_t *uuid16,
                          uint8_t *uuid128)
 {
-    union ble_att_svr_handle_arg arg;
+    union ble_att_svr_access_ctxt arg;
     int rc;
 
-    rc = entry->ha_fn(entry, BLE_ATT_OP_READ_REQ, &arg);
+    rc = entry->ha_cb(entry->ha_handle_id, entry->ha_uuid,
+                      BLE_ATT_OP_READ_REQ, &arg, entry->ha_cb_arg);
     if (rc != 0) {
         return rc;
     }
 
-    switch (arg.aha_read.attr_len) {
+    switch (arg.ahc_read.attr_len) {
     case 16:
         *uuid16 = 0;
-        memcpy(uuid128, arg.aha_read.attr_data, 16);
+        memcpy(uuid128, arg.ahc_read.attr_data, 16);
         return 0;
 
     case 2:
-        *uuid16 = le16toh(arg.aha_read.attr_data);
+        *uuid16 = le16toh(arg.ahc_read.attr_data);
         if (*uuid16 == 0) {
             return BLE_HS_EINVAL;
         }
@@ -1605,7 +1610,7 @@ int
 ble_att_svr_rx_write(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
                      struct os_mbuf **rxom)
 {
-    union ble_att_svr_handle_arg arg;
+    union ble_att_svr_access_ctxt arg;
     struct ble_att_svr_entry *entry;
     struct ble_att_write_req req;
     uint16_t err_handle;
@@ -1634,18 +1639,19 @@ ble_att_svr_rx_write(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
         goto err;
     }
 
-    if (entry->ha_fn == NULL) {
+    if (entry->ha_cb == NULL) {
         att_err = BLE_ATT_ERR_UNLIKELY;
         err_handle = req.bawq_handle;
         rc = BLE_HS_ENOTSUP;
         goto err;
     }
 
-    arg.aha_write.attr_data = ble_att_svr_flat_buf;
-    arg.aha_write.attr_len = OS_MBUF_PKTLEN(*rxom);
-    os_mbuf_copydata(*rxom, 0, arg.aha_write.attr_len,
-                     arg.aha_write.attr_data);
-    att_err = entry->ha_fn(entry, BLE_ATT_OP_WRITE_REQ, &arg);
+    arg.ahc_write.attr_data = ble_att_svr_flat_buf;
+    arg.ahc_write.attr_len = OS_MBUF_PKTLEN(*rxom);
+    os_mbuf_copydata(*rxom, 0, arg.ahc_write.attr_len,
+                     arg.ahc_write.attr_data);
+    att_err = entry->ha_cb(entry->ha_handle_id, entry->ha_uuid,
+                           BLE_ATT_OP_WRITE_REQ, &arg, entry->ha_cb_arg);
     if (att_err != 0) {
         err_handle = req.bawq_handle;
         rc = BLE_HS_EAPP;
@@ -1773,7 +1779,7 @@ ble_att_svr_prep_validate(struct ble_att_svr_conn *basc, uint16_t *err_handle)
 static int
 ble_att_svr_prep_write(struct ble_att_svr_conn *basc, uint16_t *err_handle)
 {
-    union ble_att_svr_handle_arg arg;
+    union ble_att_svr_access_ctxt arg;
     struct ble_att_prep_entry *entry;
     struct ble_att_prep_entry *next;
     struct ble_att_svr_entry *attr;
@@ -1809,9 +1815,10 @@ ble_att_svr_prep_write(struct ble_att_svr_conn *basc, uint16_t *err_handle)
                 return BLE_ATT_ERR_INVALID_HANDLE;
             }
 
-            arg.aha_write.attr_data = ble_att_svr_flat_buf;
-            arg.aha_write.attr_len = buf_off;
-            rc = attr->ha_fn(attr, BLE_ATT_OP_WRITE_REQ, &arg);
+            arg.ahc_write.attr_data = ble_att_svr_flat_buf;
+            arg.ahc_write.attr_len = buf_off;
+            rc = attr->ha_cb(attr->ha_handle_id, attr->ha_uuid,
+                             BLE_ATT_OP_WRITE_REQ, &arg, attr->ha_cb_arg);
             if (rc != 0) {
                 *err_handle = entry->bape_handle;
                 return BLE_ATT_ERR_UNLIKELY;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/936b9e83/net/nimble/host/src/ble_gatts.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_gatts.c b/net/nimble/host/src/ble_gatts.c
index 8dbc435..7740610 100644
--- a/net/nimble/host/src/ble_gatts.c
+++ b/net/nimble/host/src/ble_gatts.c
@@ -15,6 +15,7 @@
  */
 
 #include <stddef.h>
+#include <assert.h>
 #include "ble_hs_priv.h"
 #include "ble_gatt_priv.h"
 
@@ -30,9 +31,17 @@ static struct ble_gatts_svc_entry
 static int ble_gatts_num_svc_entries;
 
 static int
-ble_gatts_svc_access(struct ble_att_svr_entry *entry, uint8_t op,
-                     union ble_att_svr_handle_arg *arg)
+ble_gatts_svc_access(uint16_t handle_id, uint8_t *uuid128, uint8_t op,
+                     union ble_att_svr_access_ctxt *ctxt, void *arg)
 {
+    const struct ble_gatt_svc_def *svc;
+
+    assert(op == BLE_ATT_OP_READ_REQ);
+
+    svc = arg;
+    ctxt->ahc_read.attr_data = svc->uuid128;
+    ctxt->ahc_read.attr_len = 16;
+
     return 0;
 }
 
@@ -70,8 +79,11 @@ ble_gatts_register_service(const struct ble_gatt_svc_def *svc,
         return BLE_HS_EAGAIN;
     }
 
+    /* Register service definition attribute (cast away const on callback
+     * arg).
+     */
     rc = ble_att_svr_register(svc->uuid128, HA_FLAG_PERM_READ, out_handle,
-                              ble_gatts_svc_access);
+                              ble_gatts_svc_access, (void *)svc);
     if (rc != 0) {
         return rc;
     }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/936b9e83/net/nimble/host/src/test/ble_att_svr_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_att_svr_test.c b/net/nimble/host/src/test/ble_att_svr_test.c
index 0854641..45720fe 100644
--- a/net/nimble/host/src/test/ble_att_svr_test.c
+++ b/net/nimble/host/src/test/ble_att_svr_test.c
@@ -57,14 +57,15 @@ ble_att_svr_test_misc_init(struct ble_hs_conn **conn,
 }
 
 static int
-ble_att_svr_test_misc_attr_fn_r_1(struct ble_att_svr_entry *entry,
-                                     uint8_t op,
-                                     union ble_att_svr_handle_arg *arg)
+ble_att_svr_test_misc_attr_fn_r_1(uint16_t handle_id, uint8_t *uuid128,
+                                  uint8_t op,
+                                  union ble_att_svr_access_ctxt *ctxt,
+                                  void *arg)
 {
     switch (op) {
     case BLE_ATT_OP_READ_REQ:
-        arg->aha_read.attr_data = ble_att_svr_test_attr_r_1;
-        arg->aha_read.attr_len = ble_att_svr_test_attr_r_1_len;
+        ctxt->ahc_read.attr_data = ble_att_svr_test_attr_r_1;
+        ctxt->ahc_read.attr_len = ble_att_svr_test_attr_r_1_len;
         return 0;
 
     default:
@@ -73,13 +74,15 @@ ble_att_svr_test_misc_attr_fn_r_1(struct ble_att_svr_entry *entry,
 }
 
 static int
-ble_att_svr_test_misc_attr_fn_r_2(struct ble_att_svr_entry *entry, uint8_t op,
-                                  union ble_att_svr_handle_arg *arg)
+ble_att_svr_test_misc_attr_fn_r_2(uint16_t handle_id, uint8_t *uuid128,
+                                  uint8_t op,
+                                  union ble_att_svr_access_ctxt *ctxt,
+                                  void *arg)
 {
     switch (op) {
     case BLE_ATT_OP_READ_REQ:
-        arg->aha_read.attr_data = ble_att_svr_test_attr_r_2;
-        arg->aha_read.attr_len = ble_att_svr_test_attr_r_2_len;
+        ctxt->ahc_read.attr_data = ble_att_svr_test_attr_r_2;
+        ctxt->ahc_read.attr_len = ble_att_svr_test_attr_r_2_len;
         return 0;
 
     default:
@@ -88,9 +91,10 @@ ble_att_svr_test_misc_attr_fn_r_2(struct ble_att_svr_entry *entry, uint8_t op,
 }
 
 static int
-ble_att_svr_test_misc_attr_fn_r_group(struct ble_att_svr_entry *entry,
+ble_att_svr_test_misc_attr_fn_r_group(uint16_t handle_id, uint8_t *uuid128,
                                       uint8_t op,
-                                      union ble_att_svr_handle_arg *arg)
+                                      union ble_att_svr_access_ctxt *ctxt,
+                                      void *arg)
 {
     /* Service 0x1122 from 1 to 5 */
     /* Service 0x2233 from 6 to 10 */
@@ -124,13 +128,13 @@ ble_att_svr_test_misc_attr_fn_r_group(struct ble_att_svr_entry *entry,
         return -1;
     }
 
-    TEST_ASSERT_FATAL(entry->ha_handle_id >= 1 && entry->ha_handle_id <= 22);
+    TEST_ASSERT_FATAL(handle_id >= 1 && handle_id <= 22);
 
-    arg->aha_read.attr_data = vals + entry->ha_handle_id;
-    if (memcmp(arg->aha_read.attr_data + 2, zeros, 14) == 0) {
-        arg->aha_read.attr_len = 2;
+    ctxt->ahc_read.attr_data = vals + handle_id;
+    if (memcmp(ctxt->ahc_read.attr_data + 2, zeros, 14) == 0) {
+        ctxt->ahc_read.attr_len = 2;
     } else {
-        arg->aha_read.attr_len = 16;
+        ctxt->ahc_read.attr_len = 16;
     }
 
     return 0;
@@ -139,12 +143,12 @@ ble_att_svr_test_misc_attr_fn_r_group(struct ble_att_svr_entry *entry,
 static void
 ble_att_svr_test_misc_register_uuid128(uint8_t *uuid128, uint8_t flags,
                                        uint16_t expected_handle,
-                                       ble_att_svr_handle_func *fn)
+                                       ble_att_svr_access_fn *fn)
 {
     uint16_t handle;
     int rc;
 
-    rc = ble_att_svr_register(uuid128, flags, &handle, fn);
+    rc = ble_att_svr_register(uuid128, flags, &handle, fn, NULL);
     TEST_ASSERT_FATAL(rc == 0);
     TEST_ASSERT_FATAL(handle == expected_handle);
 }
@@ -152,7 +156,7 @@ ble_att_svr_test_misc_register_uuid128(uint8_t *uuid128, uint8_t flags,
 static void
 ble_att_svr_test_misc_register_uuid16(uint16_t uuid16, uint8_t flags,
                                       uint16_t expected_handle,
-                                      ble_att_svr_handle_func *fn)
+                                      ble_att_svr_access_fn *fn)
 {
     uint8_t uuid128[16];
     int rc;
@@ -217,14 +221,16 @@ ble_att_svr_test_misc_register_group_attrs(void)
 }
 
 static int
-ble_att_svr_test_misc_attr_fn_w_1(struct ble_att_svr_entry *entry, uint8_t op,
-                                  union ble_att_svr_handle_arg *arg)
+ble_att_svr_test_misc_attr_fn_w_1(uint16_t handle_id, uint8_t *uuid128,
+                                  uint8_t op,
+                                  union ble_att_svr_access_ctxt *ctxt,
+                                  void *arg)
 {
     switch (op) {
     case BLE_ATT_OP_WRITE_REQ:
-        memcpy(ble_att_svr_test_attr_w_1, arg->aha_write.attr_data,
-               arg->aha_write.attr_len);
-        ble_att_svr_test_attr_w_1_len = arg->aha_write.attr_len;
+        memcpy(ble_att_svr_test_attr_w_1, ctxt->ahc_write.attr_data,
+               ctxt->ahc_write.attr_len);
+        ble_att_svr_test_attr_w_1_len = ctxt->ahc_write.attr_len;
         return 0;
 
     default:
@@ -233,14 +239,16 @@ ble_att_svr_test_misc_attr_fn_w_1(struct ble_att_svr_entry *entry, uint8_t op,
 }
 
 static int
-ble_att_svr_test_misc_attr_fn_w_2(struct ble_att_svr_entry *entry, uint8_t op,
-                                  union ble_att_svr_handle_arg *arg)
+ble_att_svr_test_misc_attr_fn_w_2(uint16_t handle_id, uint8_t *uuid128,
+                                  uint8_t op,
+                                  union ble_att_svr_access_ctxt *ctxt,
+                                  void *arg)
 {
     switch (op) {
     case BLE_ATT_OP_WRITE_REQ:
-        memcpy(ble_att_svr_test_attr_w_2, arg->aha_write.attr_data,
-               arg->aha_write.attr_len);
-        ble_att_svr_test_attr_w_2_len = arg->aha_write.attr_len;
+        memcpy(ble_att_svr_test_attr_w_2, ctxt->ahc_write.attr_data,
+               ctxt->ahc_write.attr_len);
+        ble_att_svr_test_attr_w_2_len = ctxt->ahc_write.attr_len;
         return 0;
 
     default:
@@ -705,7 +713,7 @@ TEST_CASE(ble_att_svr_test_read)
     ble_att_svr_test_attr_r_1 = (uint8_t[]){0,1,2,3,4,5,6,7};
     ble_att_svr_test_attr_r_1_len = 8;
     rc = ble_att_svr_register(uuid, 0, &req.barq_handle,
-                                 ble_att_svr_test_misc_attr_fn_r_1);
+                              ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
     rc = ble_att_read_req_write(buf, sizeof buf, &req);
@@ -727,9 +735,8 @@ TEST_CASE(ble_att_svr_test_read)
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
-    ble_att_svr_test_misc_verify_tx_read_rsp(chan,
-                                                ble_att_svr_test_attr_r_1,
-                                                BLE_ATT_MTU_DFLT - 1);
+    ble_att_svr_test_misc_verify_tx_read_rsp(chan, ble_att_svr_test_attr_r_1,
+                                             BLE_ATT_MTU_DFLT - 1);
 }
 
 TEST_CASE(ble_att_svr_test_write)
@@ -756,7 +763,7 @@ TEST_CASE(ble_att_svr_test_write)
 
     /*** Successful write. */
     rc = ble_att_svr_register(uuid, 0, &req.bawq_handle,
-                                 ble_att_svr_test_misc_attr_fn_w_1);
+                              ble_att_svr_test_misc_attr_fn_w_1, NULL);
     TEST_ASSERT(rc == 0);
 
     rc = ble_att_write_req_write(buf, sizeof buf, &req);
@@ -831,7 +838,7 @@ TEST_CASE(ble_att_svr_test_find_info)
 
     /*** Range too late. */
     rc = ble_att_svr_register(uuid1, 0, &handle1,
-                                 ble_att_svr_test_misc_attr_fn_r_1);
+                              ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
     req.bafq_start_handle = 200;
@@ -863,9 +870,8 @@ TEST_CASE(ble_att_svr_test_find_info)
         } }));
 
     /*** Two 128-bit entries. */
-    rc = ble_att_svr_register(uuid2, 0,
-                                 &handle2,
-                                 ble_att_svr_test_misc_attr_fn_r_1);
+    rc = ble_att_svr_register(uuid2, 0, &handle2,
+                              ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
     req.bafq_start_handle = handle1;
@@ -888,9 +894,8 @@ TEST_CASE(ble_att_svr_test_find_info)
         } }));
 
     /*** Two 128-bit entries; 16-bit entry doesn't get sent. */
-    rc = ble_att_svr_register(uuid3, 0,
-                                 &handle3,
-                                 ble_att_svr_test_misc_attr_fn_r_1);
+    rc = ble_att_svr_register(uuid3, 0, &handle3,
+                              ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
     req.bafq_start_handle = handle1;
@@ -1008,7 +1013,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
 
     /*** Range too late. */
     rc = ble_att_svr_register(uuid1, 0, &handle1,
-                                 ble_att_svr_test_misc_attr_fn_r_1);
+                              ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
     req.bavq_start_handle = 200;
@@ -1042,7 +1047,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
 
     /*** One entry, two attributes. */
     rc = ble_att_svr_register(uuid1, 0, &handle2,
-                                 ble_att_svr_test_misc_attr_fn_r_1);
+                              ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
     req.bavq_start_handle = handle1;
@@ -1063,11 +1068,11 @@ TEST_CASE(ble_att_svr_test_find_type_value)
 
     /*** Entry 1: two attributes; entry 2: one attribute. */
     rc = ble_att_svr_register(uuid2, 0, &handle3,
-                                 ble_att_svr_test_misc_attr_fn_r_2);
+                              ble_att_svr_test_misc_attr_fn_r_2, NULL);
     TEST_ASSERT(rc == 0);
 
     rc = ble_att_svr_register(uuid1, 0, &handle4,
-                                 ble_att_svr_test_misc_attr_fn_r_1);
+                              ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
     req.bavq_start_handle = 0x0001;
@@ -1114,7 +1119,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
 
     /*** Ensure attribute with wrong type is not included. */
     rc = ble_att_svr_register(uuid3, 0, &handle5,
-                              ble_att_svr_test_misc_attr_fn_r_1);
+                              ble_att_svr_test_misc_attr_fn_r_1, NULL);
 
     req.bavq_start_handle = 0x0001;
     req.bavq_end_handle = 0xffff;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/936b9e83/project/hostctlrtest/src/main.c
----------------------------------------------------------------------
diff --git a/project/hostctlrtest/src/main.c b/project/hostctlrtest/src/main.c
index ff9ddf2..be88129 100755
--- a/project/hostctlrtest/src/main.c
+++ b/project/hostctlrtest/src/main.c
@@ -203,19 +203,19 @@ static uint16_t hostctlrtest_char2_handle;
 static uint16_t hostctlrtest_data2_handle;
 
 static int
-hostctlrtest_attr_cb(struct ble_att_svr_entry *entry, uint8_t op,
-                     union ble_att_svr_handle_arg *arg)
+hostctlrtest_attr_cb(uint16_t handle_id, uint8_t *uuid128, uint8_t op,
+                     union ble_att_svr_handle_ctxt *ctxt, void *arg)
 {
     static uint8_t buf[128];
 
     assert(op == BLE_ATT_OP_READ_REQ);
 
-    if (entry->ha_handle_id == hostctlrtest_service_handle) {
+    if (handle_id == hostctlrtest_service_handle) {
         console_printf("reading service declaration");
         htole16(buf, 0x1234);
-        arg->aha_read.attr_data = buf;
-        arg->aha_read.attr_len = 2;
-    } else if (entry->ha_handle_id == hostctlrtest_char1_handle) {
+        ctxt->ahc_read.attr_data = buf;
+        ctxt->ahc_read.attr_len = 2;
+    } else if (handle_id == hostctlrtest_char1_handle) {
         console_printf("reading characteristic1 declaration");
 
         /* Properties. */
@@ -227,14 +227,14 @@ hostctlrtest_attr_cb(struct ble_att_svr_entry *entry, uint8_t op,
         /* UUID. */
         htole16(buf + 3, 0x5656);
 
-        arg->aha_read.attr_data = buf;
-        arg->aha_read.attr_len = 5;
-    } else if (entry->ha_handle_id == hostctlrtest_data1_handle) {
+        ctxt->ahc_read.attr_data = buf;
+        ctxt->ahc_read.attr_len = 5;
+    } else if (handle_id == hostctlrtest_data1_handle) {
         console_printf("reading characteristic1 value");
         memcpy(buf, "char1", 5);
-        arg->aha_read.attr_data = buf;
-        arg->aha_read.attr_len = 5;
-    } else if (entry->ha_handle_id == hostctlrtest_char2_handle) {
+        ctxt->ahc_read.attr_data = buf;
+        ctxt->ahc_read.attr_len = 5;
+    } else if (handle_id == hostctlrtest_char2_handle) {
         console_printf("reading characteristic2 declaration");
 
         /* Properties. */
@@ -246,13 +246,13 @@ hostctlrtest_attr_cb(struct ble_att_svr_entry *entry, uint8_t op,
         /* UUID. */
         htole16(buf + 3, 0x6767);
 
-        arg->aha_read.attr_data = buf;
-        arg->aha_read.attr_len = 5;
-    } else if (entry->ha_handle_id == hostctlrtest_data2_handle) {
+        ctxt->ahc_read.attr_data = buf;
+        ctxt->ahc_read.attr_len = 5;
+    } else if (handle_id == hostctlrtest_data2_handle) {
         console_printf("reading characteristic2 value");
         memcpy(buf, "char2", 5);
-        arg->aha_read.attr_data = buf;
-        arg->aha_read.attr_len = 5;
+        ctxt->ahc_read.attr_data = buf;
+        ctxt->ahc_read.attr_len = 5;
     } else {
         assert(0);
     }
@@ -270,33 +270,33 @@ hostctlrtest_register_attrs(void)
     rc = ble_hs_uuid_from_16bit(BLE_ATT_UUID_PRIMARY_SERVICE, uuid128);
     assert(rc == 0);
     rc = ble_att_svr_register(uuid128, 0, &hostctlrtest_service_handle,
-                              hostctlrtest_attr_cb);
+                              hostctlrtest_attr_cb, NULL);
     assert(rc == 0);
 
     /* Characteristic 1 (UUID=0x5656).*/
     rc = ble_hs_uuid_from_16bit(BLE_ATT_UUID_CHARACTERISTIC, uuid128);
     assert(rc == 0);
     rc = ble_att_svr_register(uuid128, 0, &hostctlrtest_char1_handle,
-                              hostctlrtest_attr_cb);
+                              hostctlrtest_attr_cb, NULL);
     assert(rc == 0);
 
     rc = ble_hs_uuid_from_16bit(0x5656, uuid128);
     assert(rc == 0);
     rc = ble_att_svr_register(uuid128, 0, &hostctlrtest_data1_handle,
-                              hostctlrtest_attr_cb);
+                              hostctlrtest_attr_cb, NULL);
     assert(rc == 0);
 
     /* Characteristic 2 (UUID=0x6767).*/
     rc = ble_hs_uuid_from_16bit(BLE_ATT_UUID_CHARACTERISTIC, uuid128);
     assert(rc == 0);
     rc = ble_att_svr_register(uuid128, 0, &hostctlrtest_char2_handle,
-                              hostctlrtest_attr_cb);
+                              hostctlrtest_attr_cb, NULL);
     assert(rc == 0);
 
     rc = ble_hs_uuid_from_16bit(0x6767, uuid128);
     assert(rc == 0);
     rc = ble_att_svr_register(uuid128, 0, &hostctlrtest_data2_handle,
-                              hostctlrtest_attr_cb);
+                              hostctlrtest_attr_cb, NULL);
     assert(rc == 0);
 }
 #endif