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/29 03:36:30 UTC

[1/4] incubator-mynewt-larva git commit: Pass connection handle in ATT/GATT callbacks.

Repository: incubator-mynewt-larva
Updated Branches:
  refs/heads/master d67865a8f -> 6bdedf854


Pass connection handle in ATT/GATT callbacks.

This is required for connection-specific descriptors (e.g., Client
Characteristic Configuration).


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/2f6105c5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/tree/2f6105c5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/diff/2f6105c5

Branch: refs/heads/master
Commit: 2f6105c5a153ad8ae71201d539da8209f26262e4
Parents: d67865a
Author: Christopher Collins <cc...@gmail.com>
Authored: Mon Dec 28 17:44:42 2015 -0800
Committer: Christopher Collins <cc...@gmail.com>
Committed: Mon Dec 28 17:44:42 2015 -0800

----------------------------------------------------------------------
 net/nimble/host/include/host/ble_att.h        |  4 +--
 net/nimble/host/include/host/ble_gatt.h       |  5 ++--
 net/nimble/host/src/ble_att_svr.c             | 29 +++++++++++----------
 net/nimble/host/src/ble_gatts.c               | 30 ++++++++++++----------
 net/nimble/host/src/test/ble_att_svr_test.c   | 23 +++++++++--------
 net/nimble/host/src/test/ble_gatts_reg_test.c |  3 ++-
 project/prphtest/src/main.c                   |  4 +--
 7 files changed, 53 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/2f6105c5/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 ac5ba61..b732aa8 100644
--- a/net/nimble/host/include/host/ble_att.h
+++ b/net/nimble/host/include/host/ble_att.h
@@ -87,8 +87,8 @@ union ble_att_svr_access_ctxt {
  *                              One of the BLE_ATT_ERR_[...] codes on
  *                                  failure.
  */
-typedef int ble_att_svr_access_fn(uint16_t handle_id, uint8_t *uuid128,
-                                  uint8_t op,
+typedef int ble_att_svr_access_fn(uint16_t conn_handle, uint16_t attr_handle,
+                                  uint8_t *uuid128, uint8_t op,
                                   union ble_att_svr_access_ctxt *ctxt,
                                   void *arg);
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/2f6105c5/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 7c7a232..bba625b 100644
--- a/net/nimble/host/include/host/ble_gatt.h
+++ b/net/nimble/host/include/host/ble_gatt.h
@@ -89,8 +89,9 @@ int ble_gatt_init(void);
 /* XXX: Notify, listen. */
 
 union ble_gatt_access_ctxt;
-typedef int ble_gatt_access_fn(uint16_t handle_id, uint8_t op,
-                               union ble_gatt_access_ctxt *ctxt, void *arg);
+typedef int ble_gatt_access_fn(uint16_t conn_handle, uint16_t attr_handle,
+                               uint8_t op, union ble_gatt_access_ctxt *ctxt,
+                               void *arg);
 
 struct ble_gatt_chr_def {
     uint8_t *uuid128;   /* NULL if no more characteristics. */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/2f6105c5/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 d596a91..d7a6900 100644
--- a/net/nimble/host/src/ble_att_svr.c
+++ b/net/nimble/host/src/ble_att_svr.c
@@ -810,7 +810,7 @@ ble_att_svr_fill_type_value(struct ble_att_find_type_value_req *req,
              */
             uuid16 = ble_uuid_128_to_16(ha->ha_uuid);
             if (uuid16 == req->bavq_attr_type) {
-                rc = ha->ha_cb(ha->ha_handle_id, ha->ha_uuid,
+                rc = ha->ha_cb(0, ha->ha_handle_id, ha->ha_uuid,
                                BLE_ATT_ACCESS_OP_READ, &arg, ha->ha_cb_arg);
                 if (rc != 0) {
                     rc = BLE_HS_EAPP;
@@ -1035,8 +1035,9 @@ ble_att_svr_tx_read_type_rsp(struct ble_hs_conn *conn,
         }
 
         if (entry->ha_handle_id >= req->batq_start_handle) {
-            rc = entry->ha_cb(entry->ha_handle_id, entry->ha_uuid,
-                              BLE_ATT_ACCESS_OP_READ, &arg, entry->ha_cb_arg);
+            rc = entry->ha_cb(conn->bhc_handle, entry->ha_handle_id,
+                              entry->ha_uuid, BLE_ATT_ACCESS_OP_READ, &arg,
+                              entry->ha_cb_arg);
             if (rc != 0) {
                 *att_err = BLE_ATT_ERR_UNLIKELY;
                 *err_handle = entry->ha_handle_id;
@@ -1268,7 +1269,7 @@ ble_att_svr_rx_read(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
         goto err;
     }
 
-    rc = entry->ha_cb(entry->ha_handle_id, entry->ha_uuid,
+    rc = entry->ha_cb(conn->bhc_handle, entry->ha_handle_id, entry->ha_uuid,
                       BLE_ATT_ACCESS_OP_READ, &arg, entry->ha_cb_arg);
     if (rc != 0) {
         att_err = BLE_ATT_ERR_UNLIKELY;
@@ -1310,7 +1311,7 @@ ble_att_svr_service_uuid(struct ble_att_svr_entry *entry, uint16_t *uuid16,
     union ble_att_svr_access_ctxt arg;
     int rc;
 
-    rc = entry->ha_cb(entry->ha_handle_id, entry->ha_uuid,
+    rc = entry->ha_cb(0, entry->ha_handle_id, entry->ha_uuid,
                       BLE_ATT_ACCESS_OP_READ, &arg, entry->ha_cb_arg);
     if (rc != 0) {
         return rc;
@@ -1686,8 +1687,9 @@ ble_att_svr_rx_write(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
     arg.rw.attr_len = OS_MBUF_PKTLEN(*rxom);
     os_mbuf_copydata(*rxom, 0, arg.rw.attr_len,
                      arg.rw.attr_data);
-    att_err = entry->ha_cb(entry->ha_handle_id, entry->ha_uuid,
-                           BLE_ATT_ACCESS_OP_WRITE, &arg, entry->ha_cb_arg);
+    att_err = entry->ha_cb(conn->bhc_handle, entry->ha_handle_id,
+                           entry->ha_uuid, BLE_ATT_ACCESS_OP_WRITE, &arg,
+                           entry->ha_cb_arg);
     if (att_err != 0) {
         err_handle = req.bawq_handle;
         rc = BLE_HS_EAPP;
@@ -1813,7 +1815,7 @@ ble_att_svr_prep_validate(struct ble_att_svr_conn *basc, uint16_t *err_handle)
  * @return                      0 on success; ATT error code on failure.
  */
 static int
-ble_att_svr_prep_write(struct ble_att_svr_conn *basc, uint16_t *err_handle)
+ble_att_svr_prep_write(struct ble_hs_conn *conn, uint16_t *err_handle)
 {
     union ble_att_svr_access_ctxt arg;
     struct ble_att_prep_entry *entry;
@@ -1825,14 +1827,14 @@ ble_att_svr_prep_write(struct ble_att_svr_conn *basc, uint16_t *err_handle)
     *err_handle = 0; /* Silence unnecessary warning. */
 
     /* First, validate the contents of the prepare queue. */
-    rc = ble_att_svr_prep_validate(basc, err_handle);
+    rc = ble_att_svr_prep_validate(&conn->bhc_att_svr, err_handle);
     if (rc != 0) {
         return rc;
     }
 
     /* Contents are valid; perform the writes. */
     buf_off = 0;
-    entry = SLIST_FIRST(&basc->basc_prep_list);
+    entry = SLIST_FIRST(&conn->bhc_att_svr.basc_prep_list);
     while (entry != NULL) {
         next = SLIST_NEXT(entry, bape_next);
 
@@ -1853,8 +1855,9 @@ ble_att_svr_prep_write(struct ble_att_svr_conn *basc, uint16_t *err_handle)
 
             arg.rw.attr_data = ble_att_svr_flat_buf;
             arg.rw.attr_len = buf_off;
-            rc = attr->ha_cb(attr->ha_handle_id, attr->ha_uuid,
-                             BLE_ATT_ACCESS_OP_WRITE, &arg, attr->ha_cb_arg);
+            rc = attr->ha_cb(conn->bhc_handle, attr->ha_handle_id,
+                             attr->ha_uuid, BLE_ATT_ACCESS_OP_WRITE, &arg,
+                             attr->ha_cb_arg);
             if (rc != 0) {
                 *err_handle = entry->bape_handle;
                 return BLE_ATT_ERR_UNLIKELY;
@@ -2050,7 +2053,7 @@ ble_att_svr_rx_exec_write(struct ble_hs_conn *conn,
 
     if (req.baeq_flags & BLE_ATT_EXEC_WRITE_F_CONFIRM) {
         /* Perform attribute writes. */
-        att_err = ble_att_svr_prep_write(&conn->bhc_att_svr, &err_handle);
+        att_err = ble_att_svr_prep_write(conn, &err_handle);
     } else {
         att_err = 0;
         err_handle = 0;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/2f6105c5/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 8c8916c..23d720a 100644
--- a/net/nimble/host/src/ble_gatts.c
+++ b/net/nimble/host/src/ble_gatts.c
@@ -39,7 +39,8 @@ static struct ble_gatts_svc_entry
 static int ble_gatts_num_svc_entries;
 
 static int
-ble_gatts_svc_access(uint16_t handle_id, uint8_t *uuid128, uint8_t op,
+ble_gatts_svc_access(uint16_t conn_handle, uint16_t attr_handle,
+                     uint8_t *uuid128, uint8_t op,
                      union ble_att_svr_access_ctxt *ctxt, void *arg)
 {
     const struct ble_gatt_svc_def *svc;
@@ -54,8 +55,9 @@ ble_gatts_svc_access(uint16_t handle_id, uint8_t *uuid128, uint8_t op,
 }
 
 static int
-ble_gatts_inc_access(uint16_t handle_id, uint8_t *uuid128, uint8_t op,
-                         union ble_att_svr_access_ctxt *ctxt, void *arg)
+ble_gatts_inc_access(uint16_t conn_handle, uint16_t attr_handle,
+                     uint8_t *uuid128, uint8_t op,
+                     union ble_att_svr_access_ctxt *ctxt, void *arg)
 {
     static uint8_t buf[BLE_GATTS_INCLUDE_SZ];
 
@@ -83,7 +85,8 @@ ble_gatts_inc_access(uint16_t handle_id, uint8_t *uuid128, uint8_t op,
 }
 
 static int
-ble_gatts_chr_def_access(uint16_t handle_id, uint8_t *uuid128, uint8_t op,
+ble_gatts_chr_def_access(uint16_t conn_handle, uint16_t attr_handle,
+                         uint8_t *uuid128, uint8_t op,
                          union ble_att_svr_access_ctxt *ctxt, void *arg)
 {
     static uint8_t buf[BLE_GATTS_CHR_MAX_SZ];
@@ -97,7 +100,7 @@ ble_gatts_chr_def_access(uint16_t handle_id, uint8_t *uuid128, uint8_t op,
     buf[0] = chr->properties;
 
     /* The value attribute is always immediately after the declaration. */
-    htole16(buf + 1, handle_id + 1);
+    htole16(buf + 1, attr_handle + 1);
 
     uuid16 = ble_uuid_128_to_16(chr->uuid128);
     if (uuid16 != 0) {
@@ -145,7 +148,8 @@ ble_gatts_chr_op(uint8_t att_op)
 }
 
 static int
-ble_gatts_chr_val_access(uint16_t handle_id, uint8_t *uuid128, uint8_t att_op,
+ble_gatts_chr_val_access(uint16_t conn_handle, uint16_t attr_handle,
+                         uint8_t *uuid128, uint8_t att_op,
                          union ble_att_svr_access_ctxt *att_ctxt, void *arg)
 {
     const struct ble_gatt_chr_def *chr;
@@ -161,7 +165,8 @@ ble_gatts_chr_val_access(uint16_t handle_id, uint8_t *uuid128, uint8_t att_op,
     gatt_ctxt.chr_access.data = att_ctxt->rw.attr_data;
     gatt_ctxt.chr_access.len = att_ctxt->rw.attr_len;
 
-    rc = chr->access_cb(handle_id, gatt_op, &gatt_ctxt, chr->arg);
+    rc = chr->access_cb(conn_handle, attr_handle, gatt_op, &gatt_ctxt,
+                        chr->arg);
     if (rc != 0) {
         return rc;
     }
@@ -242,7 +247,8 @@ ble_gatts_dsc_op(uint8_t att_op)
 }
 
 static int
-ble_gatts_dsc_access(uint16_t handle_id, uint8_t *uuid128, uint8_t att_op,
+ble_gatts_dsc_access(uint16_t conn_handle, uint16_t attr_handle,
+                     uint8_t *uuid128, uint8_t att_op,
                      union ble_att_svr_access_ctxt *att_ctxt, void *arg)
 {
     const struct ble_gatt_dsc_def *dsc;
@@ -258,18 +264,14 @@ ble_gatts_dsc_access(uint16_t handle_id, uint8_t *uuid128, uint8_t att_op,
     gatt_ctxt.dsc_access.data = att_ctxt->rw.attr_data;
     gatt_ctxt.dsc_access.len = att_ctxt->rw.attr_len;
 
-    rc = dsc->access_cb(handle_id, gatt_op, &gatt_ctxt, dsc->arg);
+    rc = dsc->access_cb(conn_handle, attr_handle, gatt_op, &gatt_ctxt,
+                        dsc->arg);
     if (rc != 0) {
         return rc;
     }
 
     att_ctxt->rw.attr_len = gatt_ctxt.dsc_access.len;
 
-    rc = dsc->access_cb(handle_id, gatt_op, &gatt_ctxt, dsc->arg);
-    if (rc != 0) {
-        return rc;
-    }
-
     return 0;
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/2f6105c5/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 efcbe75..ee14e54 100644
--- a/net/nimble/host/src/test/ble_att_svr_test.c
+++ b/net/nimble/host/src/test/ble_att_svr_test.c
@@ -57,8 +57,8 @@ ble_att_svr_test_misc_init(struct ble_hs_conn **conn,
 }
 
 static int
-ble_att_svr_test_misc_attr_fn_r_1(uint16_t handle_id, uint8_t *uuid128,
-                                  uint8_t op,
+ble_att_svr_test_misc_attr_fn_r_1(uint16_t conn_handle, uint16_t attr_handle,
+                                  uint8_t *uuid128, uint8_t op,
                                   union ble_att_svr_access_ctxt *ctxt,
                                   void *arg)
 {
@@ -74,8 +74,8 @@ ble_att_svr_test_misc_attr_fn_r_1(uint16_t handle_id, uint8_t *uuid128,
 }
 
 static int
-ble_att_svr_test_misc_attr_fn_r_2(uint16_t handle_id, uint8_t *uuid128,
-                                  uint8_t op,
+ble_att_svr_test_misc_attr_fn_r_2(uint16_t conn_handle, uint16_t attr_handle,
+                                  uint8_t *uuid128, uint8_t op,
                                   union ble_att_svr_access_ctxt *ctxt,
                                   void *arg)
 {
@@ -91,7 +91,8 @@ ble_att_svr_test_misc_attr_fn_r_2(uint16_t handle_id, uint8_t *uuid128,
 }
 
 static int
-ble_att_svr_test_misc_attr_fn_r_group(uint16_t handle_id, uint8_t *uuid128,
+ble_att_svr_test_misc_attr_fn_r_group(uint16_t conn_handle,
+                                      uint16_t attr_handle, uint8_t *uuid128,
                                       uint8_t op,
                                       union ble_att_svr_access_ctxt *ctxt,
                                       void *arg)
@@ -128,9 +129,9 @@ ble_att_svr_test_misc_attr_fn_r_group(uint16_t handle_id, uint8_t *uuid128,
         return -1;
     }
 
-    TEST_ASSERT_FATAL(handle_id >= 1 && handle_id <= 22);
+    TEST_ASSERT_FATAL(attr_handle >= 1 && attr_handle <= 22);
 
-    ctxt->rw.attr_data = vals + handle_id;
+    ctxt->rw.attr_data = vals + attr_handle;
     if (memcmp(ctxt->rw.attr_data + 2, zeros, 14) == 0) {
         ctxt->rw.attr_len = 2;
     } else {
@@ -221,8 +222,8 @@ ble_att_svr_test_misc_register_group_attrs(void)
 }
 
 static int
-ble_att_svr_test_misc_attr_fn_w_1(uint16_t handle_id, uint8_t *uuid128,
-                                  uint8_t op,
+ble_att_svr_test_misc_attr_fn_w_1(uint16_t conn_handle, uint16_t attr_handle,
+                                  uint8_t *uuid128, uint8_t op,
                                   union ble_att_svr_access_ctxt *ctxt,
                                   void *arg)
 {
@@ -239,8 +240,8 @@ ble_att_svr_test_misc_attr_fn_w_1(uint16_t handle_id, uint8_t *uuid128,
 }
 
 static int
-ble_att_svr_test_misc_attr_fn_w_2(uint16_t handle_id, uint8_t *uuid128,
-                                  uint8_t op,
+ble_att_svr_test_misc_attr_fn_w_2(uint16_t conn_handle, uint16_t attr_handle,
+                                  uint8_t *uuid128, uint8_t op,
                                   union ble_att_svr_access_ctxt *ctxt,
                                   void *arg)
 {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/2f6105c5/net/nimble/host/src/test/ble_gatts_reg_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_gatts_reg_test.c b/net/nimble/host/src/test/ble_gatts_reg_test.c
index 4e7e09f..d6a6ae0 100644
--- a/net/nimble/host/src/test/ble_gatts_reg_test.c
+++ b/net/nimble/host/src/test/ble_gatts_reg_test.c
@@ -91,7 +91,8 @@ ble_gatts_reg_test_misc_verify_entry(uint8_t op, uint8_t *uuid128)
 }
 
 static int
-ble_gatts_reg_test_misc_dummy_access(uint16_t handle_id, uint8_t op,
+ble_gatts_reg_test_misc_dummy_access(uint16_t conn_handle,
+                                     uint16_t attr_handle, uint8_t op,
                                      union ble_gatt_access_ctxt *ctxt,
                                      void *arg)
 {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/2f6105c5/project/prphtest/src/main.c
----------------------------------------------------------------------
diff --git a/project/prphtest/src/main.c b/project/prphtest/src/main.c
index 7aeec49..4e80f4e 100755
--- a/project/prphtest/src/main.c
+++ b/project/prphtest/src/main.c
@@ -77,7 +77,7 @@ void
 bletest_inc_adv_pkt_num(void) { }
 
 static int
-prphtest_gatt_cb(uint16_t handle_id, uint8_t op,
+prphtest_gatt_cb(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
                  union ble_gatt_access_ctxt *ctxt, void *arg);
 
 #define PRPHTEST_SVC1_UUID      0x1234
@@ -120,7 +120,7 @@ static const struct ble_gatt_svc_def prphtest_svcs[] = { {
 }, };
 
 static int
-prphtest_gatt_cb(uint16_t handle_id, uint8_t op,
+prphtest_gatt_cb(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
                  union ble_gatt_access_ctxt *ctxt, void *arg)
 {
     static uint8_t buf[128];


[2/4] incubator-mynewt-larva git commit: Remove obsolete ATT callback union.

Posted by cc...@apache.org.
Remove obsolete ATT callback union.


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/1b16fdde
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/tree/1b16fdde
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/diff/1b16fdde

Branch: refs/heads/master
Commit: 1b16fdde78353b203ed8acbb5040c8f1b6e6e916
Parents: 2f6105c
Author: Christopher Collins <cc...@gmail.com>
Authored: Mon Dec 28 18:02:43 2015 -0800
Committer: Christopher Collins <cc...@gmail.com>
Committed: Mon Dec 28 18:02:43 2015 -0800

----------------------------------------------------------------------
 net/nimble/host/include/host/ble_att.h      | 10 ++---
 net/nimble/host/src/ble_att_svr.c           | 47 ++++++++++++------------
 net/nimble/host/src/ble_gatts.c             | 38 +++++++++----------
 net/nimble/host/src/test/ble_att_svr_test.c | 36 +++++++++---------
 4 files changed, 63 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/1b16fdde/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 b732aa8..0652c46 100644
--- a/net/nimble/host/include/host/ble_att.h
+++ b/net/nimble/host/include/host/ble_att.h
@@ -58,11 +58,9 @@
 
 #define BLE_ATT_ATTR_MAX_LEN                512
 
-union ble_att_svr_access_ctxt {
-    struct {
-        void *attr_data;
-        int attr_len;
-    } rw;
+struct ble_att_svr_access_ctxt {
+    void *attr_data;
+    int attr_len;
 };
 
 #define HA_FLAG_PERM_READ                   (1 << 0)
@@ -89,7 +87,7 @@ union ble_att_svr_access_ctxt {
  */
 typedef int ble_att_svr_access_fn(uint16_t conn_handle, uint16_t attr_handle,
                                   uint8_t *uuid128, uint8_t op,
-                                  union ble_att_svr_access_ctxt *ctxt,
+                                  struct ble_att_svr_access_ctxt *ctxt,
                                   void *arg);
 
 int ble_att_svr_register(uint8_t *uuid, uint8_t flags, uint16_t *handle_id,

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/1b16fdde/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 d7a6900..4bbcbec 100644
--- a/net/nimble/host/src/ble_att_svr.c
+++ b/net/nimble/host/src/ble_att_svr.c
@@ -778,7 +778,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_access_ctxt arg;
+    struct ble_att_svr_access_ctxt arg;
     struct ble_att_svr_entry *ha;
     uint16_t uuid16;
     uint16_t first;
@@ -818,8 +818,8 @@ ble_att_svr_fill_type_value(struct ble_att_find_type_value_req *req,
                 }
                 rc = os_mbuf_memcmp(rxom,
                                     BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ,
-                                    arg.rw.attr_data,
-                                    arg.rw.attr_len);
+                                    arg.attr_data,
+                                    arg.attr_len);
                 if (rc == 0) {
                     match = 1;
                 }
@@ -983,7 +983,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_access_ctxt arg;
+    struct ble_att_svr_access_ctxt arg;
     struct ble_att_svr_entry *entry;
     struct os_mbuf *txom;
     uint8_t *dptr;
@@ -1044,10 +1044,10 @@ ble_att_svr_tx_read_type_rsp(struct ble_hs_conn *conn,
                 goto done;
             }
 
-            if (arg.rw.attr_len > ble_l2cap_chan_mtu(chan) - 4) {
+            if (arg.attr_len > ble_l2cap_chan_mtu(chan) - 4) {
                 attr_len = ble_l2cap_chan_mtu(chan) - 4;
             } else {
-                attr_len = arg.rw.attr_len;
+                attr_len = arg.attr_len;
             }
 
             if (prev_attr_len == 0) {
@@ -1070,7 +1070,7 @@ ble_att_svr_tx_read_type_rsp(struct ble_hs_conn *conn,
             }
 
             htole16(dptr + 0, entry->ha_handle_id);
-            memcpy(dptr + 2, arg.rw.attr_data, attr_len);
+            memcpy(dptr + 2, arg.attr_data, attr_len);
             entry_written = 1;
         }
     }
@@ -1230,7 +1230,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_access_ctxt arg;
+    struct ble_att_svr_access_ctxt arg;
     struct ble_att_svr_entry *entry;
     struct ble_att_read_req req;
     uint16_t err_handle;
@@ -1278,8 +1278,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.rw.attr_data,
-                                 arg.rw.attr_len, &att_err);
+    rc = ble_att_svr_tx_read_rsp(conn, chan, arg.attr_data,
+                                 arg.attr_len, &att_err);
     if (rc != 0) {
         err_handle = req.barq_handle;
         goto err;
@@ -1308,7 +1308,7 @@ static int
 ble_att_svr_service_uuid(struct ble_att_svr_entry *entry, uint16_t *uuid16,
                          uint8_t *uuid128)
 {
-    union ble_att_svr_access_ctxt arg;
+    struct ble_att_svr_access_ctxt arg;
     int rc;
 
     rc = entry->ha_cb(0, entry->ha_handle_id, entry->ha_uuid,
@@ -1317,14 +1317,14 @@ ble_att_svr_service_uuid(struct ble_att_svr_entry *entry, uint16_t *uuid16,
         return rc;
     }
 
-    switch (arg.rw.attr_len) {
+    switch (arg.attr_len) {
     case 16:
         *uuid16 = 0;
-        memcpy(uuid128, arg.rw.attr_data, 16);
+        memcpy(uuid128, arg.attr_data, 16);
         return 0;
 
     case 2:
-        *uuid16 = le16toh(arg.rw.attr_data);
+        *uuid16 = le16toh(arg.attr_data);
         if (*uuid16 == 0) {
             return BLE_HS_EINVAL;
         }
@@ -1647,7 +1647,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_access_ctxt arg;
+    struct ble_att_svr_access_ctxt arg;
     struct ble_att_svr_entry *entry;
     struct ble_att_write_req req;
     uint16_t err_handle;
@@ -1683,10 +1683,9 @@ ble_att_svr_rx_write(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
         goto err;
     }
 
-    arg.rw.attr_data = ble_att_svr_flat_buf;
-    arg.rw.attr_len = OS_MBUF_PKTLEN(*rxom);
-    os_mbuf_copydata(*rxom, 0, arg.rw.attr_len,
-                     arg.rw.attr_data);
+    arg.attr_data = ble_att_svr_flat_buf;
+    arg.attr_len = OS_MBUF_PKTLEN(*rxom);
+    os_mbuf_copydata(*rxom, 0, arg.attr_len, arg.attr_data);
     att_err = entry->ha_cb(conn->bhc_handle, entry->ha_handle_id,
                            entry->ha_uuid, BLE_ATT_ACCESS_OP_WRITE, &arg,
                            entry->ha_cb_arg);
@@ -1705,8 +1704,8 @@ ble_att_svr_rx_write(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
     return 0;
 
 err:
-    ble_att_svr_tx_error_rsp(conn, chan, BLE_ATT_OP_WRITE_REQ,
-                             err_handle, att_err);
+    ble_att_svr_tx_error_rsp(conn, chan, BLE_ATT_OP_WRITE_REQ, err_handle,
+                             att_err);
     return rc;
 }
 
@@ -1817,7 +1816,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_hs_conn *conn, uint16_t *err_handle)
 {
-    union ble_att_svr_access_ctxt arg;
+    struct ble_att_svr_access_ctxt arg;
     struct ble_att_prep_entry *entry;
     struct ble_att_prep_entry *next;
     struct ble_att_svr_entry *attr;
@@ -1853,8 +1852,8 @@ ble_att_svr_prep_write(struct ble_hs_conn *conn, uint16_t *err_handle)
                 return BLE_ATT_ERR_INVALID_HANDLE;
             }
 
-            arg.rw.attr_data = ble_att_svr_flat_buf;
-            arg.rw.attr_len = buf_off;
+            arg.attr_data = ble_att_svr_flat_buf;
+            arg.attr_len = buf_off;
             rc = attr->ha_cb(conn->bhc_handle, attr->ha_handle_id,
                              attr->ha_uuid, BLE_ATT_ACCESS_OP_WRITE, &arg,
                              attr->ha_cb_arg);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/1b16fdde/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 23d720a..0ea515d 100644
--- a/net/nimble/host/src/ble_gatts.c
+++ b/net/nimble/host/src/ble_gatts.c
@@ -41,15 +41,15 @@ static int ble_gatts_num_svc_entries;
 static int
 ble_gatts_svc_access(uint16_t conn_handle, uint16_t attr_handle,
                      uint8_t *uuid128, uint8_t op,
-                     union ble_att_svr_access_ctxt *ctxt, void *arg)
+                     struct ble_att_svr_access_ctxt *ctxt, void *arg)
 {
     const struct ble_gatt_svc_def *svc;
 
     assert(op == BLE_ATT_ACCESS_OP_READ);
 
     svc = arg;
-    ctxt->rw.attr_data = svc->uuid128;
-    ctxt->rw.attr_len = 16;
+    ctxt->attr_data = svc->uuid128;
+    ctxt->attr_len = 16;
 
     return 0;
 }
@@ -57,7 +57,7 @@ ble_gatts_svc_access(uint16_t conn_handle, uint16_t attr_handle,
 static int
 ble_gatts_inc_access(uint16_t conn_handle, uint16_t attr_handle,
                      uint8_t *uuid128, uint8_t op,
-                     union ble_att_svr_access_ctxt *ctxt, void *arg)
+                     struct ble_att_svr_access_ctxt *ctxt, void *arg)
 {
     static uint8_t buf[BLE_GATTS_INCLUDE_SZ];
 
@@ -75,11 +75,11 @@ ble_gatts_inc_access(uint16_t conn_handle, uint16_t attr_handle,
     uuid16 = ble_uuid_128_to_16(entry->svc->uuid128);
     if (uuid16 != 0) {
         htole16(buf + 4, uuid16);
-        ctxt->rw.attr_len = 6;
+        ctxt->attr_len = 6;
     } else {
-        ctxt->rw.attr_len = 4;
+        ctxt->attr_len = 4;
     }
-    ctxt->rw.attr_data = buf;
+    ctxt->attr_data = buf;
 
     return 0;
 }
@@ -87,7 +87,7 @@ ble_gatts_inc_access(uint16_t conn_handle, uint16_t attr_handle,
 static int
 ble_gatts_chr_def_access(uint16_t conn_handle, uint16_t attr_handle,
                          uint8_t *uuid128, uint8_t op,
-                         union ble_att_svr_access_ctxt *ctxt, void *arg)
+                         struct ble_att_svr_access_ctxt *ctxt, void *arg)
 {
     static uint8_t buf[BLE_GATTS_CHR_MAX_SZ];
     const struct ble_gatt_chr_def *chr;
@@ -105,12 +105,12 @@ ble_gatts_chr_def_access(uint16_t conn_handle, uint16_t attr_handle,
     uuid16 = ble_uuid_128_to_16(chr->uuid128);
     if (uuid16 != 0) {
         htole16(buf + 3, uuid16);
-        ctxt->rw.attr_len = 5;
+        ctxt->attr_len = 5;
     } else {
         memcpy(buf + 3, chr->uuid128, 16);
-        ctxt->rw.attr_len = 19;
+        ctxt->attr_len = 19;
     }
-    ctxt->rw.attr_data = buf;
+    ctxt->attr_data = buf;
 
     return 0;
 }
@@ -150,7 +150,7 @@ ble_gatts_chr_op(uint8_t att_op)
 static int
 ble_gatts_chr_val_access(uint16_t conn_handle, uint16_t attr_handle,
                          uint8_t *uuid128, uint8_t att_op,
-                         union ble_att_svr_access_ctxt *att_ctxt, void *arg)
+                         struct ble_att_svr_access_ctxt *att_ctxt, void *arg)
 {
     const struct ble_gatt_chr_def *chr;
     union ble_gatt_access_ctxt gatt_ctxt;
@@ -162,8 +162,8 @@ ble_gatts_chr_val_access(uint16_t conn_handle, uint16_t attr_handle,
 
     gatt_op = ble_gatts_chr_op(att_op);
     gatt_ctxt.chr_access.chr = chr;
-    gatt_ctxt.chr_access.data = att_ctxt->rw.attr_data;
-    gatt_ctxt.chr_access.len = att_ctxt->rw.attr_len;
+    gatt_ctxt.chr_access.data = att_ctxt->attr_data;
+    gatt_ctxt.chr_access.len = att_ctxt->attr_len;
 
     rc = chr->access_cb(conn_handle, attr_handle, gatt_op, &gatt_ctxt,
                         chr->arg);
@@ -171,7 +171,7 @@ ble_gatts_chr_val_access(uint16_t conn_handle, uint16_t attr_handle,
         return rc;
     }
 
-    att_ctxt->rw.attr_len = gatt_ctxt.chr_access.len;
+    att_ctxt->attr_len = gatt_ctxt.chr_access.len;
 
     return 0;
 }
@@ -249,7 +249,7 @@ ble_gatts_dsc_op(uint8_t att_op)
 static int
 ble_gatts_dsc_access(uint16_t conn_handle, uint16_t attr_handle,
                      uint8_t *uuid128, uint8_t att_op,
-                     union ble_att_svr_access_ctxt *att_ctxt, void *arg)
+                     struct ble_att_svr_access_ctxt *att_ctxt, void *arg)
 {
     const struct ble_gatt_dsc_def *dsc;
     union ble_gatt_access_ctxt gatt_ctxt;
@@ -261,8 +261,8 @@ ble_gatts_dsc_access(uint16_t conn_handle, uint16_t attr_handle,
 
     gatt_op = ble_gatts_dsc_op(att_op);
     gatt_ctxt.dsc_access.dsc = dsc;
-    gatt_ctxt.dsc_access.data = att_ctxt->rw.attr_data;
-    gatt_ctxt.dsc_access.len = att_ctxt->rw.attr_len;
+    gatt_ctxt.dsc_access.data = att_ctxt->attr_data;
+    gatt_ctxt.dsc_access.len = att_ctxt->attr_len;
 
     rc = dsc->access_cb(conn_handle, attr_handle, gatt_op, &gatt_ctxt,
                         dsc->arg);
@@ -270,7 +270,7 @@ ble_gatts_dsc_access(uint16_t conn_handle, uint16_t attr_handle,
         return rc;
     }
 
-    att_ctxt->rw.attr_len = gatt_ctxt.dsc_access.len;
+    att_ctxt->attr_len = gatt_ctxt.dsc_access.len;
 
     return 0;
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/1b16fdde/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 ee14e54..7b1493b 100644
--- a/net/nimble/host/src/test/ble_att_svr_test.c
+++ b/net/nimble/host/src/test/ble_att_svr_test.c
@@ -59,13 +59,13 @@ ble_att_svr_test_misc_init(struct ble_hs_conn **conn,
 static int
 ble_att_svr_test_misc_attr_fn_r_1(uint16_t conn_handle, uint16_t attr_handle,
                                   uint8_t *uuid128, uint8_t op,
-                                  union ble_att_svr_access_ctxt *ctxt,
+                                  struct ble_att_svr_access_ctxt *ctxt,
                                   void *arg)
 {
     switch (op) {
     case BLE_ATT_ACCESS_OP_READ:
-        ctxt->rw.attr_data = ble_att_svr_test_attr_r_1;
-        ctxt->rw.attr_len = ble_att_svr_test_attr_r_1_len;
+        ctxt->attr_data = ble_att_svr_test_attr_r_1;
+        ctxt->attr_len = ble_att_svr_test_attr_r_1_len;
         return 0;
 
     default:
@@ -76,13 +76,13 @@ ble_att_svr_test_misc_attr_fn_r_1(uint16_t conn_handle, uint16_t attr_handle,
 static int
 ble_att_svr_test_misc_attr_fn_r_2(uint16_t conn_handle, uint16_t attr_handle,
                                   uint8_t *uuid128, uint8_t op,
-                                  union ble_att_svr_access_ctxt *ctxt,
+                                  struct ble_att_svr_access_ctxt *ctxt,
                                   void *arg)
 {
     switch (op) {
     case BLE_ATT_ACCESS_OP_READ:
-        ctxt->rw.attr_data = ble_att_svr_test_attr_r_2;
-        ctxt->rw.attr_len = ble_att_svr_test_attr_r_2_len;
+        ctxt->attr_data = ble_att_svr_test_attr_r_2;
+        ctxt->attr_len = ble_att_svr_test_attr_r_2_len;
         return 0;
 
     default:
@@ -94,7 +94,7 @@ static int
 ble_att_svr_test_misc_attr_fn_r_group(uint16_t conn_handle,
                                       uint16_t attr_handle, uint8_t *uuid128,
                                       uint8_t op,
-                                      union ble_att_svr_access_ctxt *ctxt,
+                                      struct ble_att_svr_access_ctxt *ctxt,
                                       void *arg)
 {
     /* Service 0x1122 from 1 to 5 */
@@ -131,11 +131,11 @@ ble_att_svr_test_misc_attr_fn_r_group(uint16_t conn_handle,
 
     TEST_ASSERT_FATAL(attr_handle >= 1 && attr_handle <= 22);
 
-    ctxt->rw.attr_data = vals + attr_handle;
-    if (memcmp(ctxt->rw.attr_data + 2, zeros, 14) == 0) {
-        ctxt->rw.attr_len = 2;
+    ctxt->attr_data = vals + attr_handle;
+    if (memcmp(ctxt->attr_data + 2, zeros, 14) == 0) {
+        ctxt->attr_len = 2;
     } else {
-        ctxt->rw.attr_len = 16;
+        ctxt->attr_len = 16;
     }
 
     return 0;
@@ -224,14 +224,13 @@ ble_att_svr_test_misc_register_group_attrs(void)
 static int
 ble_att_svr_test_misc_attr_fn_w_1(uint16_t conn_handle, uint16_t attr_handle,
                                   uint8_t *uuid128, uint8_t op,
-                                  union ble_att_svr_access_ctxt *ctxt,
+                                  struct ble_att_svr_access_ctxt *ctxt,
                                   void *arg)
 {
     switch (op) {
     case BLE_ATT_ACCESS_OP_WRITE:
-        memcpy(ble_att_svr_test_attr_w_1, ctxt->rw.attr_data,
-               ctxt->rw.attr_len);
-        ble_att_svr_test_attr_w_1_len = ctxt->rw.attr_len;
+        memcpy(ble_att_svr_test_attr_w_1, ctxt->attr_data, ctxt->attr_len);
+        ble_att_svr_test_attr_w_1_len = ctxt->attr_len;
         return 0;
 
     default:
@@ -242,14 +241,13 @@ ble_att_svr_test_misc_attr_fn_w_1(uint16_t conn_handle, uint16_t attr_handle,
 static int
 ble_att_svr_test_misc_attr_fn_w_2(uint16_t conn_handle, uint16_t attr_handle,
                                   uint8_t *uuid128, uint8_t op,
-                                  union ble_att_svr_access_ctxt *ctxt,
+                                  struct ble_att_svr_access_ctxt *ctxt,
                                   void *arg)
 {
     switch (op) {
     case BLE_ATT_ACCESS_OP_WRITE:
-        memcpy(ble_att_svr_test_attr_w_2, ctxt->rw.attr_data,
-               ctxt->rw.attr_len);
-        ble_att_svr_test_attr_w_2_len = ctxt->rw.attr_len;
+        memcpy(ble_att_svr_test_attr_w_2, ctxt->attr_data, ctxt->attr_len);
+        ble_att_svr_test_attr_w_2_len = ctxt->attr_len;
         return 0;
 
     default:


[4/4] incubator-mynewt-larva git commit: ATT permissions.

Posted by cc...@apache.org.
ATT permissions.


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/6bdedf85
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/tree/6bdedf85
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/diff/6bdedf85

Branch: refs/heads/master
Commit: 6bdedf85473b8422cd5d157d8c505238bcdbe9ad
Parents: 8b5da2c
Author: Christopher Collins <cc...@gmail.com>
Authored: Mon Dec 28 18:35:46 2015 -0800
Committer: Christopher Collins <cc...@gmail.com>
Committed: Mon Dec 28 18:35:46 2015 -0800

----------------------------------------------------------------------
 net/nimble/host/include/host/ble_att.h      |  11 +-
 net/nimble/host/src/ble_att_svr.c           | 173 +++++++++++++++--------
 net/nimble/host/src/test/ble_att_svr_test.c |  40 +++---
 3 files changed, 144 insertions(+), 80 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/6bdedf85/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 0652c46..a0d36e3 100644
--- a/net/nimble/host/include/host/ble_att.h
+++ b/net/nimble/host/include/host/ble_att.h
@@ -25,6 +25,8 @@
 #define BLE_ATT_UUID_CHARACTERISTIC         0x2803
 
 #define BLE_ATT_ERR_INVALID_HANDLE          0x01
+#define BLE_ATT_ERR_READ_NOT_PERMITTED      0x02
+#define BLE_ATT_ERR_WRITE_NOT_PERMITTED     0x03
 #define BLE_ATT_ERR_INVALID_PDU             0x04
 #define BLE_ATT_ERR_REQ_NOT_SUPPORTED       0x06
 #define BLE_ATT_ERR_INVALID_OFFSET          0x07
@@ -65,10 +67,11 @@ struct ble_att_svr_access_ctxt {
 
 #define HA_FLAG_PERM_READ                   (1 << 0)
 #define HA_FLAG_PERM_WRITE                  (1 << 1)
-#define HA_FLAG_PERM_RW                     (1 << 2)
-#define HA_FLAG_ENC_REQ                     (1 << 3)
-#define HA_FLAG_AUTHENTICATION_REQ          (1 << 4)
-#define HA_FLAG_AUTHORIZATION_REQ           (1 << 5)
+#define HA_FLAG_ENC_REQ                     (1 << 2)
+#define HA_FLAG_AUTHENTICATION_REQ          (1 << 3)
+#define HA_FLAG_AUTHORIZATION_REQ           (1 << 4)
+
+#define HA_FLAG_PERM_RW             (HA_FLAG_PERM_READ | HA_FLAG_PERM_WRITE)
 
 #define BLE_ATT_ACCESS_OP_READ              1
 #define BLE_ATT_ACCESS_OP_WRITE             2

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/6bdedf85/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 4bbcbec..ad4a295 100644
--- a/net/nimble/host/src/ble_att_svr.c
+++ b/net/nimble/host/src/ble_att_svr.c
@@ -309,6 +309,88 @@ ble_att_svr_find_by_uuid(uint8_t *uuid,
 }
 
 static int
+ble_att_svr_read(struct ble_hs_conn *conn, struct ble_att_svr_entry *entry,
+                 struct ble_att_svr_access_ctxt *ctxt, uint8_t *out_att_err)
+{
+    uint16_t conn_handle;
+    uint8_t att_err;
+    int rc;
+
+    if (!(entry->ha_flags & HA_FLAG_PERM_READ)) {
+        att_err = BLE_ATT_ERR_READ_NOT_PERMITTED;
+        rc = BLE_HS_ENOTSUP;
+        goto err;
+    }
+
+    /* XXX: Check security. */
+
+    if (conn == NULL) {
+        conn_handle = 0xffff; /* XXX */
+    } else {
+        conn_handle = conn->bhc_handle;
+    }
+
+    assert(entry->ha_cb != NULL);
+    rc = entry->ha_cb(conn_handle, entry->ha_handle_id,
+                      entry->ha_uuid, BLE_ATT_ACCESS_OP_READ, ctxt,
+                      entry->ha_cb_arg);
+    if (rc != 0) {
+        att_err = rc;
+        rc = BLE_HS_EAPP;
+        goto err;
+    }
+
+    return 0;
+
+err:
+    if (out_att_err != NULL) {
+        *out_att_err = att_err;
+    }
+    return rc;
+}
+
+static int
+ble_att_svr_write(struct ble_hs_conn *conn, struct ble_att_svr_entry *entry,
+                  struct ble_att_svr_access_ctxt *ctxt, uint8_t *out_att_err)
+{
+    uint16_t conn_handle;
+    uint8_t att_err;
+    int rc;
+
+    if (!(entry->ha_flags & HA_FLAG_PERM_WRITE)) {
+        att_err = BLE_ATT_ERR_WRITE_NOT_PERMITTED;
+        rc = BLE_HS_ENOTSUP;
+        goto err;
+    }
+
+    /* XXX: Check security. */
+
+    if (conn == NULL) {
+        conn_handle = 0xffff; /* XXX */
+    } else {
+        conn_handle = conn->bhc_handle;
+    }
+
+    assert(entry->ha_cb != NULL);
+    rc = entry->ha_cb(conn_handle, entry->ha_handle_id,
+                      entry->ha_uuid, BLE_ATT_ACCESS_OP_WRITE, ctxt,
+                      entry->ha_cb_arg);
+    if (rc != 0) {
+        att_err = rc;
+        rc = BLE_HS_EAPP;
+        goto err;
+    }
+
+    return 0;
+
+err:
+    if (out_att_err != NULL) {
+        *out_att_err = att_err;
+    }
+    return rc;
+}
+
+static int
 ble_att_svr_tx_error_rsp(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
                          uint8_t req_op, uint16_t handle, uint8_t error_code)
 {
@@ -669,7 +751,8 @@ err:
  */
 static int
 ble_att_svr_fill_type_value_no_match(struct os_mbuf *om, uint16_t *first,
-                                     uint16_t *prev, int mtu)
+                                     uint16_t *prev, int mtu,
+                                     uint8_t *out_att_err)
 {
     uint16_t u16;
     int rsp_sz;
@@ -689,6 +772,7 @@ ble_att_svr_fill_type_value_no_match(struct os_mbuf *om, uint16_t *first,
     htole16(&u16, u16);
     rc = os_mbuf_append(om, &u16, 2);
     if (rc != 0) {
+        *out_att_err = BLE_ATT_ERR_INSUFFICIENT_RES;
         return BLE_HS_ENOMEM;
     }
 
@@ -696,6 +780,7 @@ ble_att_svr_fill_type_value_no_match(struct os_mbuf *om, uint16_t *first,
     htole16(&u16, u16);
     rc = os_mbuf_append(om, &u16, 2);
     if (rc != 0) {
+        *out_att_err = BLE_ATT_ERR_INSUFFICIENT_RES;
         return BLE_HS_ENOMEM;
     }
 
@@ -728,7 +813,7 @@ ble_att_svr_fill_type_value_no_match(struct os_mbuf *om, uint16_t *first,
 static int
 ble_att_svr_fill_type_value_match(struct os_mbuf *om, uint16_t *first,
                                   uint16_t *prev, uint16_t handle_id,
-                                  int mtu)
+                                  int mtu, uint8_t *out_att_err)
 {
     int rc;
 
@@ -751,7 +836,8 @@ ble_att_svr_fill_type_value_match(struct os_mbuf *om, uint16_t *first,
      * previous group to the response, and remember this ID as the start of the
      * next group.
      */
-    rc = ble_att_svr_fill_type_value_no_match(om, first, prev, mtu);
+    rc = ble_att_svr_fill_type_value_no_match(om, first, prev, mtu,
+                                              out_att_err);
     *first = handle_id;
     *prev = handle_id;
     return rc;
@@ -774,11 +860,12 @@ ble_att_svr_fill_type_value_match(struct os_mbuf *om, uint16_t *first,
  *                              BLE_HS_EAPP on other error.
  */
 static int
-ble_att_svr_fill_type_value(struct ble_att_find_type_value_req *req,
+ble_att_svr_fill_type_value(struct ble_hs_conn *conn,
+                            struct ble_att_find_type_value_req *req,
                             struct os_mbuf *rxom, struct os_mbuf *txom,
-                            uint16_t mtu)
+                            uint16_t mtu, uint8_t *out_att_err)
 {
-    struct ble_att_svr_access_ctxt arg;
+    struct ble_att_svr_access_ctxt ctxt;
     struct ble_att_svr_entry *ha;
     uint16_t uuid16;
     uint16_t first;
@@ -810,16 +897,14 @@ ble_att_svr_fill_type_value(struct ble_att_find_type_value_req *req,
              */
             uuid16 = ble_uuid_128_to_16(ha->ha_uuid);
             if (uuid16 == req->bavq_attr_type) {
-                rc = ha->ha_cb(0, ha->ha_handle_id, ha->ha_uuid,
-                               BLE_ATT_ACCESS_OP_READ, &arg, ha->ha_cb_arg);
+                rc = ble_att_svr_read(conn, ha, &ctxt, out_att_err);
                 if (rc != 0) {
-                    rc = BLE_HS_EAPP;
                     goto done;
                 }
                 rc = os_mbuf_memcmp(rxom,
                                     BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ,
-                                    arg.attr_data,
-                                    arg.attr_len);
+                                    ctxt.attr_data,
+                                    ctxt.attr_len);
                 if (rc == 0) {
                     match = 1;
                 }
@@ -828,17 +913,17 @@ ble_att_svr_fill_type_value(struct ble_att_find_type_value_req *req,
 
         if (match) {
             rc = ble_att_svr_fill_type_value_match(txom, &first, &prev,
-                                                   ha->ha_handle_id, mtu);
+                                                   ha->ha_handle_id, mtu,
+                                                   out_att_err);
         } else {
             rc = ble_att_svr_fill_type_value_no_match(txom, &first, &prev,
-                                                      mtu);
+                                                      mtu, out_att_err);
         }
 
         if (rc == 0) {
             goto done;
         }
         if (rc != BLE_HS_EAGAIN) {
-            rc = BLE_HS_EAPP;
             goto done;
         }
     }
@@ -846,11 +931,10 @@ ble_att_svr_fill_type_value(struct ble_att_find_type_value_req *req,
     /* Process one last non-matching ID in case a group was in progress when
      * the end of the attribute list was reached.
      */
-    rc = ble_att_svr_fill_type_value_no_match(txom, &first, &prev, mtu);
+    rc = ble_att_svr_fill_type_value_no_match(txom, &first, &prev, mtu,
+                                              out_att_err);
     if (rc == BLE_HS_EAGAIN) {
         rc = 0;
-    } else if (rc != 0) {
-        rc = BLE_HS_EAPP;
     }
 
 done:
@@ -859,6 +943,7 @@ done:
     any_entries = OS_MBUF_PKTHDR(txom)->omp_len >
                   BLE_ATT_FIND_TYPE_VALUE_RSP_BASE_SZ;
     if (rc == 0 && !any_entries) {
+        *out_att_err = BLE_ATT_ERR_ATTR_NOT_FOUND;
         return BLE_HS_ENOENT;
     } else {
         return rc;
@@ -870,7 +955,7 @@ ble_att_svr_tx_find_type_value(struct ble_hs_conn *conn,
                                struct ble_l2cap_chan *chan,
                                struct ble_att_find_type_value_req *req,
                                struct os_mbuf *rxom,
-                               uint8_t *att_err)
+                               uint8_t *out_att_err)
 {
     struct os_mbuf *txom;
     uint8_t *buf;
@@ -878,7 +963,7 @@ ble_att_svr_tx_find_type_value(struct ble_hs_conn *conn,
 
     txom = ble_att_get_pkthdr();
     if (txom == NULL) {
-        *att_err = BLE_ATT_ERR_INSUFFICIENT_RES;
+        *out_att_err = BLE_ATT_ERR_INSUFFICIENT_RES;
         rc = BLE_HS_ENOMEM;
         goto err;
     }
@@ -886,37 +971,23 @@ ble_att_svr_tx_find_type_value(struct ble_hs_conn *conn,
     /* Write the response base at the start of the buffer. */
     buf = os_mbuf_extend(txom, BLE_ATT_FIND_TYPE_VALUE_RSP_BASE_SZ);
     if (buf == NULL) {
-        *att_err = BLE_ATT_ERR_INSUFFICIENT_RES;
+        *out_att_err = BLE_ATT_ERR_INSUFFICIENT_RES;
         rc = BLE_HS_ENOMEM;
         goto err;
     }
     buf[0] = BLE_ATT_OP_FIND_TYPE_VALUE_RSP;
 
     /* Write the variable length Information Data field. */
-    rc = ble_att_svr_fill_type_value(req, rxom, txom,
-                                     ble_l2cap_chan_mtu(chan));
-    switch (rc) {
-    case 0:
-        break;
-
-    case BLE_HS_ENOENT:
-        *att_err = BLE_ATT_ERR_ATTR_NOT_FOUND;
-        goto err;
-
-    case BLE_HS_EAPP:
-        *att_err = BLE_ATT_ERR_UNLIKELY;
-        goto err;
-
-    default:
-        assert(0);
-        *att_err = BLE_ATT_ERR_UNLIKELY;
+    rc = ble_att_svr_fill_type_value(conn, req, rxom, txom,
+                                     ble_l2cap_chan_mtu(chan), out_att_err);
+    if (rc != 0) {
         goto err;
     }
 
     rc = ble_l2cap_tx(conn, chan, txom);
     txom = NULL;
     if (rc != 0) {
-        *att_err = BLE_ATT_ERR_UNLIKELY;
+        *out_att_err = BLE_ATT_ERR_UNLIKELY;
         goto err;
     }
 
@@ -1035,11 +1106,8 @@ ble_att_svr_tx_read_type_rsp(struct ble_hs_conn *conn,
         }
 
         if (entry->ha_handle_id >= req->batq_start_handle) {
-            rc = entry->ha_cb(conn->bhc_handle, entry->ha_handle_id,
-                              entry->ha_uuid, BLE_ATT_ACCESS_OP_READ, &arg,
-                              entry->ha_cb_arg);
+            rc = ble_att_svr_read(conn, entry, &arg, att_err);
             if (rc != 0) {
-                *att_err = BLE_ATT_ERR_UNLIKELY;
                 *err_handle = entry->ha_handle_id;
                 goto done;
             }
@@ -1269,10 +1337,8 @@ ble_att_svr_rx_read(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
         goto err;
     }
 
-    rc = entry->ha_cb(conn->bhc_handle, entry->ha_handle_id, entry->ha_uuid,
-                      BLE_ATT_ACCESS_OP_READ, &arg, entry->ha_cb_arg);
+    rc = ble_att_svr_read(conn, entry, &arg, &att_err);
     if (rc != 0) {
-        att_err = BLE_ATT_ERR_UNLIKELY;
         err_handle = req.barq_handle;
         rc = BLE_HS_ENOTSUP;
         goto err;
@@ -1311,8 +1377,7 @@ ble_att_svr_service_uuid(struct ble_att_svr_entry *entry, uint16_t *uuid16,
     struct ble_att_svr_access_ctxt arg;
     int rc;
 
-    rc = entry->ha_cb(0, entry->ha_handle_id, entry->ha_uuid,
-                      BLE_ATT_ACCESS_OP_READ, &arg, entry->ha_cb_arg);
+    rc = ble_att_svr_read(NULL, entry, &arg, NULL);
     if (rc != 0) {
         return rc;
     }
@@ -1686,12 +1751,9 @@ ble_att_svr_rx_write(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
     arg.attr_data = ble_att_svr_flat_buf;
     arg.attr_len = OS_MBUF_PKTLEN(*rxom);
     os_mbuf_copydata(*rxom, 0, arg.attr_len, arg.attr_data);
-    att_err = entry->ha_cb(conn->bhc_handle, entry->ha_handle_id,
-                           entry->ha_uuid, BLE_ATT_ACCESS_OP_WRITE, &arg,
-                           entry->ha_cb_arg);
-    if (att_err != 0) {
+    rc = ble_att_svr_write(conn, entry, &arg, &att_err);
+    if (rc != 0) {
         err_handle = req.bawq_handle;
-        rc = BLE_HS_EAPP;
         goto err;
     }
 
@@ -1820,6 +1882,7 @@ ble_att_svr_prep_write(struct ble_hs_conn *conn, uint16_t *err_handle)
     struct ble_att_prep_entry *entry;
     struct ble_att_prep_entry *next;
     struct ble_att_svr_entry *attr;
+    uint8_t att_err;
     int buf_off;
     int rc;
 
@@ -1854,12 +1917,10 @@ ble_att_svr_prep_write(struct ble_hs_conn *conn, uint16_t *err_handle)
 
             arg.attr_data = ble_att_svr_flat_buf;
             arg.attr_len = buf_off;
-            rc = attr->ha_cb(conn->bhc_handle, attr->ha_handle_id,
-                             attr->ha_uuid, BLE_ATT_ACCESS_OP_WRITE, &arg,
-                             attr->ha_cb_arg);
+            rc = ble_att_svr_write(conn, attr, &arg, &att_err);
             if (rc != 0) {
                 *err_handle = entry->bape_handle;
-                return BLE_ATT_ERR_UNLIKELY;
+                return att_err;
             }
 
             buf_off = 0;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/6bdedf85/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 7b1493b..c39837e 100644
--- a/net/nimble/host/src/test/ble_att_svr_test.c
+++ b/net/nimble/host/src/test/ble_att_svr_test.c
@@ -180,42 +180,42 @@ ble_att_svr_test_misc_register_group_attrs(void)
 
     /* Service 0x1122 from 1 to 5 */
     ble_att_svr_test_misc_register_uuid16(
-        BLE_ATT_UUID_PRIMARY_SERVICE, 0, 1,
+        BLE_ATT_UUID_PRIMARY_SERVICE, HA_FLAG_PERM_RW, 1,
         ble_att_svr_test_misc_attr_fn_r_group);
     for (i = 2; i <= 5; i++) {
         if ((i - 2) % 2 == 0) {
             ble_att_svr_test_misc_register_uuid16(
-                BLE_ATT_UUID_CHARACTERISTIC, 0, i,
+                BLE_ATT_UUID_CHARACTERISTIC, HA_FLAG_PERM_RW, i,
                 ble_att_svr_test_misc_attr_fn_r_group);
         } else {
             ble_att_svr_test_misc_register_uuid16(
-                i, 0, i,
+                i, HA_FLAG_PERM_RW, i,
                 ble_att_svr_test_misc_attr_fn_r_group);
         }
     }
 
     /* Service 0x2233 from 6 to 10 */
     ble_att_svr_test_misc_register_uuid16(
-        BLE_ATT_UUID_PRIMARY_SERVICE, 0, 6,
+        BLE_ATT_UUID_PRIMARY_SERVICE, HA_FLAG_PERM_RW, 6,
         ble_att_svr_test_misc_attr_fn_r_group);
     for (i = 7; i <= 10; i++) {
         ble_att_svr_test_misc_register_uuid16(
-            BLE_ATT_UUID_INCLUDE, 0, i,
+            BLE_ATT_UUID_INCLUDE, HA_FLAG_PERM_RW, i,
             ble_att_svr_test_misc_attr_fn_r_group);
     }
 
     /* Service 1,2,3...16 from 11 to 19 */
     ble_att_svr_test_misc_register_uuid16(
-        BLE_ATT_UUID_PRIMARY_SERVICE, 0, 11,
+        BLE_ATT_UUID_PRIMARY_SERVICE, HA_FLAG_PERM_RW, 11,
         ble_att_svr_test_misc_attr_fn_r_group);
     for (i = 12; i <= 19; i++) {
         if ((i - 12) % 2 == 0) {
             ble_att_svr_test_misc_register_uuid16(
-                BLE_ATT_UUID_CHARACTERISTIC, 0, i,
+                BLE_ATT_UUID_CHARACTERISTIC, HA_FLAG_PERM_RW, i,
                 ble_att_svr_test_misc_attr_fn_r_group);
         } else {
             ble_att_svr_test_misc_register_uuid16(
-                i, 0, i,
+                i, HA_FLAG_PERM_RW, i,
                 ble_att_svr_test_misc_attr_fn_r_group);
         }
     }
@@ -760,7 +760,7 @@ TEST_CASE(ble_att_svr_test_read)
     /*** Successful 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,
+    rc = ble_att_svr_register(uuid, HA_FLAG_PERM_RW, &req.barq_handle,
                               ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
@@ -810,7 +810,7 @@ TEST_CASE(ble_att_svr_test_write)
         chan, BLE_ATT_OP_WRITE_REQ, 0, BLE_ATT_ERR_INVALID_HANDLE);
 
     /*** Successful write. */
-    rc = ble_att_svr_register(uuid, 0, &req.bawq_handle,
+    rc = ble_att_svr_register(uuid, HA_FLAG_PERM_RW, &req.bawq_handle,
                               ble_att_svr_test_misc_attr_fn_w_1, NULL);
     TEST_ASSERT(rc == 0);
 
@@ -885,7 +885,7 @@ TEST_CASE(ble_att_svr_test_find_info)
         chan, BLE_ATT_OP_FIND_INFO_REQ, 200, BLE_ATT_ERR_ATTR_NOT_FOUND);
 
     /*** Range too late. */
-    rc = ble_att_svr_register(uuid1, 0, &handle1,
+    rc = ble_att_svr_register(uuid1, HA_FLAG_PERM_RW, &handle1,
                               ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
@@ -918,7 +918,7 @@ TEST_CASE(ble_att_svr_test_find_info)
         } }));
 
     /*** Two 128-bit entries. */
-    rc = ble_att_svr_register(uuid2, 0, &handle2,
+    rc = ble_att_svr_register(uuid2, HA_FLAG_PERM_RW, &handle2,
                               ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
@@ -942,7 +942,7 @@ 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,
+    rc = ble_att_svr_register(uuid3, HA_FLAG_PERM_RW, &handle3,
                               ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
@@ -1060,7 +1060,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
         BLE_ATT_ERR_ATTR_NOT_FOUND);
 
     /*** Range too late. */
-    rc = ble_att_svr_register(uuid1, 0, &handle1,
+    rc = ble_att_svr_register(uuid1, HA_FLAG_PERM_RW, &handle1,
                               ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
@@ -1094,7 +1094,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
         } }));
 
     /*** One entry, two attributes. */
-    rc = ble_att_svr_register(uuid1, 0, &handle2,
+    rc = ble_att_svr_register(uuid1, HA_FLAG_PERM_RW, &handle2,
                               ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
@@ -1115,11 +1115,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,
+    rc = ble_att_svr_register(uuid2, HA_FLAG_PERM_RW, &handle3,
                               ble_att_svr_test_misc_attr_fn_r_2, NULL);
     TEST_ASSERT(rc == 0);
 
-    rc = ble_att_svr_register(uuid1, 0, &handle4,
+    rc = ble_att_svr_register(uuid1, HA_FLAG_PERM_RW, &handle4,
                               ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
@@ -1166,7 +1166,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,
+    rc = ble_att_svr_register(uuid3, HA_FLAG_PERM_RW, &handle5,
                               ble_att_svr_test_misc_attr_fn_r_1, NULL);
 
     req.bavq_start_handle = 0x0001;
@@ -1563,9 +1563,9 @@ TEST_CASE(ble_att_svr_test_prep_write)
     }
 
     /* Register two attributes. */
-    ble_att_svr_test_misc_register_uuid16(0x1234, 0, 1,
+    ble_att_svr_test_misc_register_uuid16(0x1234, HA_FLAG_PERM_RW, 1,
                                           ble_att_svr_test_misc_attr_fn_w_1);
-    ble_att_svr_test_misc_register_uuid16(0x8989, 0, 2,
+    ble_att_svr_test_misc_register_uuid16(0x8989, HA_FLAG_PERM_RW, 2,
                                           ble_att_svr_test_misc_attr_fn_w_2);
 
     /* Increase the MTU to 200 bytes to allow testing of long requests and


[3/4] incubator-mynewt-larva git commit: Print "init" message at very start in host projs.

Posted by cc...@apache.org.
Print "init" message at very start in host projs.


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/8b5da2c5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/tree/8b5da2c5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/diff/8b5da2c5

Branch: refs/heads/master
Commit: 8b5da2c56fb9454be9988ab76e0d2a01fd761407
Parents: 1b16fdd
Author: Christopher Collins <cc...@gmail.com>
Authored: Mon Dec 28 18:03:19 2015 -0800
Committer: Christopher Collins <cc...@gmail.com>
Committed: Mon Dec 28 18:03:19 2015 -0800

----------------------------------------------------------------------
 project/centtest/src/main.c | 3 +--
 project/prphtest/src/main.c | 8 +++-----
 2 files changed, 4 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/8b5da2c5/project/centtest/src/main.c
----------------------------------------------------------------------
diff --git a/project/centtest/src/main.c b/project/centtest/src/main.c
index 3020ddb..42d247f 100755
--- a/project/centtest/src/main.c
+++ b/project/centtest/src/main.c
@@ -226,7 +226,7 @@ centtest_task_handler(void *arg)
     int rc;
 
     /* We are initialized */
-    console_printf("Starting BLE test task\n");
+    console_printf("INITIATOR\n");
 
     /* Initialize eventq */
     os_eventq_init(&g_centtest_evq);
@@ -237,7 +237,6 @@ centtest_task_handler(void *arg)
     
     ble_gap_conn_set_cb(centtest_on_connect, NULL);
 
-    console_printf("INITIATOR\n");
     //rc = ble_gap_conn_disc(20000, BLE_GAP_DISC_MODE_GEN);
     rc = ble_gap_conn_direct_connect(BLE_HCI_ADV_PEER_ADDR_PUBLIC,
                                      centtest_slv_addr);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/8b5da2c5/project/prphtest/src/main.c
----------------------------------------------------------------------
diff --git a/project/prphtest/src/main.c b/project/prphtest/src/main.c
index 4e80f4e..1c2f1a7 100755
--- a/project/prphtest/src/main.c
+++ b/project/prphtest/src/main.c
@@ -222,12 +222,13 @@ prphtest_on_connect(struct ble_gap_conn_event *event, void *arg)
 void
 prphtest_task_handler(void *arg)
 {
-    struct os_event *ev;
+    struct ble_hs_adv_fields fields;
     struct os_callout_func *cf;
+    struct os_event *ev;
     int rc;
 
     /* We are initialized */
-    console_printf("Starting BLE test task\n");
+    console_printf("ADVERTISER\n");
 
     /* Initialize eventq */
     os_eventq_init(&g_prphtest_evq);
@@ -238,10 +239,7 @@ prphtest_task_handler(void *arg)
     
     ble_gap_conn_set_cb(prphtest_on_connect, NULL);
 
-    struct ble_hs_adv_fields fields;
-
     prphtest_register_attrs();
-    console_printf("ADVERTISER\n");
 
     fields.name = (uint8_t *)"nimble";
     fields.name_len = 6;