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 2016/07/14 18:29:36 UTC

[4/5] incubator-mynewt-core git commit: BLE Host - Move opcode into gatt access ctxt.

BLE Host - Move opcode into gatt access ctxt.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/147a5632
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/147a5632
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/147a5632

Branch: refs/heads/develop
Commit: 147a56321108440ddb6077415248964b057b0780
Parents: 9420c87
Author: Christopher Collins <cc...@apache.org>
Authored: Thu Jul 14 11:07:33 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Thu Jul 14 11:29:06 2016 -0700

----------------------------------------------------------------------
 apps/bleprph/src/gatt_svr.c                     | 58 ++++++++++---------
 apps/bletiny/src/gatt_svr.c                     | 61 ++++++++++----------
 net/nimble/host/include/host/ble_gatt.h         | 13 ++++-
 net/nimble/host/src/ble_gatts.c                 | 18 +++---
 .../host/src/test/ble_gatts_notify_test.c       |  6 +-
 net/nimble/host/src/test/ble_gatts_read_test.c  | 12 ++--
 net/nimble/host/src/test/ble_gatts_reg_test.c   |  2 +-
 7 files changed, 88 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/147a5632/apps/bleprph/src/gatt_svr.c
----------------------------------------------------------------------
diff --git a/apps/bleprph/src/gatt_svr.c b/apps/bleprph/src/gatt_svr.c
index 595a0d9..c2c40bd 100644
--- a/apps/bleprph/src/gatt_svr.c
+++ b/apps/bleprph/src/gatt_svr.c
@@ -55,20 +55,20 @@ const uint8_t gatt_svr_chr_sec_test_static_uuid[16] = {
 static uint8_t gatt_svr_sec_test_static_val;
 
 static int
-gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
+gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle,
                         struct ble_gatt_access_ctxt *ctxt, void *arg);
 static int
-gatt_svr_chr_access_gatt(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
+gatt_svr_chr_access_gatt(uint16_t conn_handle, uint16_t attr_handle,
                          struct ble_gatt_access_ctxt *ctxt, void *arg);
 static int
 gatt_svr_chr_access_alert(uint16_t conn_handle, uint16_t attr_handle,
-                          uint8_t op, struct ble_gatt_access_ctxt *ctxt,
+                          struct ble_gatt_access_ctxt *ctxt,
                           void *arg);
 
 static int
 gatt_svr_chr_access_sec_test(uint16_t conn_handle, uint16_t attr_handle,
-                                uint8_t op, struct ble_gatt_access_ctxt *ctxt,
-                                void *arg);
+                             struct ble_gatt_access_ctxt *ctxt,
+                             void *arg);
 
 static const struct ble_gatt_svc_def gatt_svr_svcs[] = {
     {
@@ -193,7 +193,7 @@ gatt_svr_chr_write(uint8_t op, struct ble_gatt_access_ctxt *ctxt,
 }
 
 static int
-gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
+gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle,
                         struct ble_gatt_access_ctxt *ctxt, void *arg)
 {
     uint16_t uuid16;
@@ -203,25 +203,25 @@ gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
 
     switch (uuid16) {
     case BLE_GAP_CHR_UUID16_DEVICE_NAME:
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
         ctxt->att->read.data = bleprph_device_name;
         ctxt->att->read.len = strlen(bleprph_device_name);
         break;
 
     case BLE_GAP_CHR_UUID16_APPEARANCE:
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
         ctxt->att->read.data = &bleprph_appearance;
         ctxt->att->read.len = sizeof bleprph_appearance;
         break;
 
     case BLE_GAP_CHR_UUID16_PERIPH_PRIV_FLAG:
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
         ctxt->att->read.data = &bleprph_privacy_flag;
         ctxt->att->read.len = sizeof bleprph_privacy_flag;
         break;
 
     case BLE_GAP_CHR_UUID16_RECONNECT_ADDR:
-        assert(op == BLE_GATT_ACCESS_OP_WRITE_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR);
         if (ctxt->att->write.len != sizeof bleprph_reconnect_addr) {
             return BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN;
         }
@@ -230,7 +230,7 @@ gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
         break;
 
     case BLE_GAP_CHR_UUID16_PERIPH_PREF_CONN_PARAMS:
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
         ctxt->att->read.data = &bleprph_pref_conn_params;
         ctxt->att->read.len = sizeof bleprph_pref_conn_params;
         break;
@@ -244,7 +244,7 @@ gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
 }
 
 static int
-gatt_svr_chr_access_gatt(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
+gatt_svr_chr_access_gatt(uint16_t conn_handle, uint16_t attr_handle,
                          struct ble_gatt_access_ctxt *ctxt, void *arg)
 {
     uint16_t uuid16;
@@ -254,13 +254,13 @@ gatt_svr_chr_access_gatt(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
 
     switch (uuid16) {
     case BLE_GATT_CHR_SERVICE_CHANGED_UUID16:
-        if (op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
+        if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
             if (ctxt->att->write.len != sizeof bleprph_gatt_service_changed) {
                 return BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN;
             }
             memcpy(bleprph_gatt_service_changed, ctxt->att->write.data,
                    sizeof bleprph_gatt_service_changed);
-        } else if (op == BLE_GATT_ACCESS_OP_READ_CHR) {
+        } else if (ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR) {
             ctxt->att->read.data = &bleprph_gatt_service_changed;
             ctxt->att->read.len = sizeof bleprph_gatt_service_changed;
         }
@@ -285,7 +285,7 @@ static uint16_t gatt_svr_alert_not_ctrl_pt;
 
 static int
 gatt_svr_chr_access_alert(uint16_t conn_handle, uint16_t attr_handle,
-                          uint8_t op, struct ble_gatt_access_ctxt *ctxt,
+                          struct ble_gatt_access_ctxt *ctxt,
                           void *arg)
 {
     uint16_t uuid16;
@@ -296,32 +296,34 @@ gatt_svr_chr_access_alert(uint16_t conn_handle, uint16_t attr_handle,
 
     switch (uuid16) {
     case GATT_SVR_CHR_SUP_NEW_ALERT_CAT_UUID:
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
         ctxt->att->read.data = &gatt_svr_new_alert_cat;
         ctxt->att->read.len = sizeof gatt_svr_new_alert_cat;
         return 0;
 
     case GATT_SVR_CHR_NEW_ALERT:
-        if (op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
-            rc = gatt_svr_chr_write(op, ctxt, 0, sizeof gatt_svr_new_alert_val,
+        if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
+            rc = gatt_svr_chr_write(ctxt->op, ctxt, 0,
+                                    sizeof gatt_svr_new_alert_val,
                                     gatt_svr_new_alert_val,
                                     &gatt_svr_new_alert_val_len);
             return rc;
-        } else if (op == BLE_GATT_ACCESS_OP_READ_CHR) {
+        } else if (ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR) {
             ctxt->att->read.data = (void *)&gatt_svr_new_alert_val;
             ctxt->att->read.len = sizeof gatt_svr_new_alert_val;
             return 0;
         }
 
     case GATT_SVR_CHR_SUP_UNR_ALERT_CAT_UUID:
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
         ctxt->att->read.data = &gatt_svr_unr_alert_cat;
         ctxt->att->read.len = sizeof gatt_svr_unr_alert_cat;
         return 0;
 
     case GATT_SVR_CHR_UNR_ALERT_STAT_UUID:
-        if (op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
-            rc = gatt_svr_chr_write(op, ctxt, 2, 2, &gatt_svr_unr_alert_stat,
+        if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
+            rc = gatt_svr_chr_write(ctxt->op, ctxt, 2, 2,
+                                    &gatt_svr_unr_alert_stat,
                                     NULL);
         } else {
             ctxt->att->read.data = &gatt_svr_unr_alert_stat;
@@ -331,8 +333,8 @@ gatt_svr_chr_access_alert(uint16_t conn_handle, uint16_t attr_handle,
         return rc;
 
     case GATT_SVR_CHR_ALERT_NOT_CTRL_PT:
-        if (op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
-            rc = gatt_svr_chr_write(op, ctxt, 2, 2,
+        if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
+            rc = gatt_svr_chr_write(ctxt->op, ctxt, 2, 2,
                                     &gatt_svr_alert_not_ctrl_pt, NULL);
         } else {
             rc = BLE_ATT_ERR_UNLIKELY;
@@ -347,7 +349,7 @@ gatt_svr_chr_access_alert(uint16_t conn_handle, uint16_t attr_handle,
 
 static int
 gatt_svr_chr_access_sec_test(uint16_t conn_handle, uint16_t attr_handle,
-                             uint8_t op, struct ble_gatt_access_ctxt *ctxt,
+                             struct ble_gatt_access_ctxt *ctxt,
                              void *arg)
 {
     const void *uuid128;
@@ -361,7 +363,7 @@ gatt_svr_chr_access_sec_test(uint16_t conn_handle, uint16_t attr_handle,
      */
 
     if (memcmp(uuid128, gatt_svr_chr_sec_test_rand_uuid, 16) == 0) {
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
 
         /* Respond with a 32-bit random number.  Use the stack-provided buffer
          * to hold the response data.
@@ -373,14 +375,14 @@ gatt_svr_chr_access_sec_test(uint16_t conn_handle, uint16_t attr_handle,
     }
 
     if (memcmp(uuid128, gatt_svr_chr_sec_test_static_uuid, 16) == 0) {
-        switch (op) {
+        switch (ctxt->op) {
         case BLE_GATT_ACCESS_OP_READ_CHR:
             ctxt->att->read.data = &gatt_svr_sec_test_static_val;
             ctxt->att->read.len = sizeof gatt_svr_sec_test_static_val;
             return 0;
 
         case BLE_GATT_ACCESS_OP_WRITE_CHR:
-            rc = gatt_svr_chr_write(op, ctxt,
+            rc = gatt_svr_chr_write(ctxt->op, ctxt,
                                     sizeof gatt_svr_sec_test_static_val,
                                     sizeof gatt_svr_sec_test_static_val,
                                     &gatt_svr_sec_test_static_val, NULL);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/147a5632/apps/bletiny/src/gatt_svr.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/gatt_svr.c b/apps/bletiny/src/gatt_svr.c
index 0b20f8e..ceb4522 100644
--- a/apps/bletiny/src/gatt_svr.c
+++ b/apps/bletiny/src/gatt_svr.c
@@ -55,20 +55,17 @@ const uint8_t gatt_svr_chr_sec_test_static_uuid[16] = {
 static uint8_t gatt_svr_sec_test_static_val;
 
 static int
-gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
+gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle,
                         struct ble_gatt_access_ctxt *ctxt, void *arg);
 static int
-gatt_svr_chr_access_gatt(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
+gatt_svr_chr_access_gatt(uint16_t conn_handle, uint16_t attr_handle,
                          struct ble_gatt_access_ctxt *ctxt, void *arg);
 static int
 gatt_svr_chr_access_alert(uint16_t conn_handle, uint16_t attr_handle,
-                          uint8_t op, struct ble_gatt_access_ctxt *ctxt,
-                          void *arg);
-
+                          struct ble_gatt_access_ctxt *ctxt, void *arg);
 static int
 gatt_svr_chr_access_sec_test(uint16_t conn_handle, uint16_t attr_handle,
-                                uint8_t op, struct ble_gatt_access_ctxt *ctxt,
-                                void *arg);
+                             struct ble_gatt_access_ctxt *ctxt, void *arg);
 
 static const struct ble_gatt_svc_def gatt_svr_svcs[] = {
     {
@@ -193,7 +190,7 @@ gatt_svr_chr_write(uint8_t op, struct ble_gatt_access_ctxt *ctxt,
 }
 
 static int
-gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
+gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle,
                         struct ble_gatt_access_ctxt *ctxt, void *arg)
 {
     uint16_t uuid16;
@@ -203,25 +200,25 @@ gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
 
     switch (uuid16) {
     case BLE_GAP_CHR_UUID16_DEVICE_NAME:
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
         ctxt->att->read.data = bletiny_device_name;
         ctxt->att->read.len = strlen(bletiny_device_name);
         break;
 
     case BLE_GAP_CHR_UUID16_APPEARANCE:
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
         ctxt->att->read.data = &bletiny_appearance;
         ctxt->att->read.len = sizeof bletiny_appearance;
         break;
 
     case BLE_GAP_CHR_UUID16_PERIPH_PRIV_FLAG:
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
         ctxt->att->read.data = &bletiny_privacy_flag;
         ctxt->att->read.len = sizeof bletiny_privacy_flag;
         break;
 
     case BLE_GAP_CHR_UUID16_RECONNECT_ADDR:
-        assert(op == BLE_GATT_ACCESS_OP_WRITE_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR);
         if (ctxt->att->write.len != sizeof bletiny_reconnect_addr) {
             return BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN;
         }
@@ -230,7 +227,7 @@ gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
         break;
 
     case BLE_GAP_CHR_UUID16_PERIPH_PREF_CONN_PARAMS:
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
         ctxt->att->read.data = &bletiny_pref_conn_params;
         ctxt->att->read.len = sizeof bletiny_pref_conn_params;
         break;
@@ -244,7 +241,7 @@ gatt_svr_chr_access_gap(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
 }
 
 static int
-gatt_svr_chr_access_gatt(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
+gatt_svr_chr_access_gatt(uint16_t conn_handle, uint16_t attr_handle,
                          struct ble_gatt_access_ctxt *ctxt, void *arg)
 {
     uint16_t uuid16;
@@ -254,13 +251,13 @@ gatt_svr_chr_access_gatt(uint16_t conn_handle, uint16_t attr_handle, uint8_t op,
 
     switch (uuid16) {
     case BLE_GATT_CHR_SERVICE_CHANGED_UUID16:
-        if (op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
+        if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
             if (ctxt->att->write.len != sizeof bletiny_gatt_service_changed) {
                 return BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN;
             }
             memcpy(bletiny_gatt_service_changed, ctxt->att->write.data,
                    sizeof bletiny_gatt_service_changed);
-        } else if (op == BLE_GATT_ACCESS_OP_READ_CHR) {
+        } else if (ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR) {
             ctxt->att->read.data = &bletiny_gatt_service_changed;
             ctxt->att->read.len = sizeof bletiny_gatt_service_changed;
         }
@@ -285,8 +282,7 @@ static uint16_t gatt_svr_alert_not_ctrl_pt;
 
 static int
 gatt_svr_chr_access_alert(uint16_t conn_handle, uint16_t attr_handle,
-                          uint8_t op, struct ble_gatt_access_ctxt *ctxt,
-                          void *arg)
+                          struct ble_gatt_access_ctxt *ctxt, void *arg)
 {
     uint16_t uuid16;
     int rc;
@@ -296,32 +292,34 @@ gatt_svr_chr_access_alert(uint16_t conn_handle, uint16_t attr_handle,
 
     switch (uuid16) {
     case GATT_SVR_CHR_SUP_NEW_ALERT_CAT_UUID:
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
         ctxt->att->read.data = &gatt_svr_new_alert_cat;
         ctxt->att->read.len = sizeof gatt_svr_new_alert_cat;
         return 0;
 
     case GATT_SVR_CHR_NEW_ALERT:
-        if (op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
-            rc = gatt_svr_chr_write(op, ctxt, 0, sizeof gatt_svr_new_alert_val,
+        if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
+            rc = gatt_svr_chr_write(ctxt->op, ctxt, 0,
+                                    sizeof gatt_svr_new_alert_val,
                                     gatt_svr_new_alert_val,
                                     &gatt_svr_new_alert_val_len);
             return rc;
-        } else if (op == BLE_GATT_ACCESS_OP_READ_CHR) {
+        } else if (ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR) {
             ctxt->att->read.data = (void *)&gatt_svr_new_alert_val;
             ctxt->att->read.len = sizeof gatt_svr_new_alert_val;
             return 0;
         }
 
     case GATT_SVR_CHR_SUP_UNR_ALERT_CAT_UUID:
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
         ctxt->att->read.data = &gatt_svr_unr_alert_cat;
         ctxt->att->read.len = sizeof gatt_svr_unr_alert_cat;
         return 0;
 
     case GATT_SVR_CHR_UNR_ALERT_STAT_UUID:
-        if (op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
-            rc = gatt_svr_chr_write(op, ctxt, 2, 2, &gatt_svr_unr_alert_stat,
+        if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
+            rc = gatt_svr_chr_write(ctxt->op, ctxt, 2, 2,
+                                    &gatt_svr_unr_alert_stat,
                                     NULL);
         } else {
             ctxt->att->read.data = &gatt_svr_unr_alert_stat;
@@ -331,8 +329,8 @@ gatt_svr_chr_access_alert(uint16_t conn_handle, uint16_t attr_handle,
         return rc;
 
     case GATT_SVR_CHR_ALERT_NOT_CTRL_PT:
-        if (op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
-            rc = gatt_svr_chr_write(op, ctxt, 2, 2,
+        if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
+            rc = gatt_svr_chr_write(ctxt->op, ctxt, 2, 2,
                                     &gatt_svr_alert_not_ctrl_pt, NULL);
         } else {
             rc = BLE_ATT_ERR_UNLIKELY;
@@ -347,8 +345,7 @@ gatt_svr_chr_access_alert(uint16_t conn_handle, uint16_t attr_handle,
 
 static int
 gatt_svr_chr_access_sec_test(uint16_t conn_handle, uint16_t attr_handle,
-                             uint8_t op, struct ble_gatt_access_ctxt *ctxt,
-                             void *arg)
+                             struct ble_gatt_access_ctxt *ctxt, void *arg)
 {
     const void *uuid128;
     int rand_num;
@@ -361,7 +358,7 @@ gatt_svr_chr_access_sec_test(uint16_t conn_handle, uint16_t attr_handle,
      */
 
     if (memcmp(uuid128, gatt_svr_chr_sec_test_rand_uuid, 16) == 0) {
-        assert(op == BLE_GATT_ACCESS_OP_READ_CHR);
+        assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
 
         /* Respond with a 32-bit random number.  Use the stack-provided buffer
          * to hold the response data.
@@ -373,14 +370,14 @@ gatt_svr_chr_access_sec_test(uint16_t conn_handle, uint16_t attr_handle,
     }
 
     if (memcmp(uuid128, gatt_svr_chr_sec_test_static_uuid, 16) == 0) {
-        switch (op) {
+        switch (ctxt->op) {
         case BLE_GATT_ACCESS_OP_READ_CHR:
             ctxt->att->read.data = &gatt_svr_sec_test_static_val;
             ctxt->att->read.len = sizeof gatt_svr_sec_test_static_val;
             return 0;
 
         case BLE_GATT_ACCESS_OP_WRITE_CHR:
-            rc = gatt_svr_chr_write(op, ctxt,
+            rc = gatt_svr_chr_write(ctxt->op, ctxt,
                                     sizeof gatt_svr_sec_test_static_val,
                                     sizeof gatt_svr_sec_test_static_val,
                                     &gatt_svr_sec_test_static_val, NULL);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/147a5632/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 6a710f8..c855a9b 100644
--- a/net/nimble/host/include/host/ble_gatt.h
+++ b/net/nimble/host/include/host/ble_gatt.h
@@ -183,8 +183,7 @@ int ble_gattc_init(void);
 
 struct ble_gatt_access_ctxt;
 typedef int ble_gatt_access_fn(uint16_t conn_handle, uint16_t attr_handle,
-                               uint8_t op, struct ble_gatt_access_ctxt *ctxt,
-                               void *arg);
+                               struct ble_gatt_access_ctxt *ctxt, void *arg);
 
 typedef uint16_t ble_gatt_chr_flags;
 
@@ -257,6 +256,16 @@ struct ble_gatt_svc_def {
  */
 struct ble_gatt_access_ctxt {
     /**
+     * Indicates the gatt operation being performed.  This is equal to one of
+     * the following values:
+     *     o  BLE_GATT_ACCESS_OP_READ_CHR
+     *     o  BLE_GATT_ACCESS_OP_WRITE_CHR
+     *     o  BLE_GATT_ACCESS_OP_READ_DSC
+     *     o  BLE_GATT_ACCESS_OP_WRITE_DSC
+     */
+    uint8_t op;
+
+    /**
      * The GATT operation being performed dictates which field in this union is
      * valid.  If a characteristic is being accessed, the chr field is valid.
      * Otherwise, a descriptor is being accessed, in which case the dsc field

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/147a5632/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 3219c38..0aff98a 100644
--- a/net/nimble/host/src/ble_gatts.c
+++ b/net/nimble/host/src/ble_gatts.c
@@ -293,24 +293,23 @@ ble_gatts_chr_val_access(uint16_t conn_handle, uint16_t attr_handle,
 {
     const struct ble_gatt_chr_def *chr_def;
     struct ble_gatt_access_ctxt gatt_ctxt;
-    uint8_t gatt_op;
     int rc;
 
     chr_def = arg;
     BLE_HS_DBG_ASSERT(chr_def != NULL && chr_def->access_cb != NULL);
 
-    gatt_op = ble_gatts_chr_op(att_op);
-    ble_gatts_chr_inc_val_stat(gatt_op);
+    gatt_ctxt.op = ble_gatts_chr_op(att_op);
+    ble_gatts_chr_inc_val_stat(gatt_ctxt.op);
 
     gatt_ctxt.chr = chr_def;
     gatt_ctxt.att = att_ctxt;
-    rc = chr_def->access_cb(conn_handle, attr_handle, gatt_op, &gatt_ctxt,
+    rc = chr_def->access_cb(conn_handle, attr_handle, &gatt_ctxt,
                             chr_def->arg);
     if (rc != 0) {
         return rc;
     }
 
-    if (gatt_op == BLE_GATT_ACCESS_OP_WRITE_CHR &&
+    if (gatt_ctxt.op == BLE_GATT_ACCESS_OP_WRITE_CHR &&
         ble_gatts_chr_clt_cfg_allowed(chr_def)) {
 
         ble_gatts_chr_updated(attr_handle - 1);
@@ -412,14 +411,13 @@ ble_gatts_dsc_access(uint16_t conn_handle, uint16_t attr_handle,
 {
     struct ble_gatt_access_ctxt gatt_ctxt;
     const struct ble_gatt_dsc_def *dsc_def;
-    uint8_t gatt_op;
     int rc;
 
     dsc_def = arg;
     BLE_HS_DBG_ASSERT(dsc_def != NULL && dsc_def->access_cb != NULL);
 
-    gatt_op = ble_gatts_dsc_op(att_op);
-    switch (gatt_op) {
+    gatt_ctxt.op = ble_gatts_dsc_op(att_op);
+    switch (gatt_ctxt.op) {
     case BLE_GATT_ACCESS_OP_READ_DSC:
         break;
 
@@ -431,11 +429,11 @@ ble_gatts_dsc_access(uint16_t conn_handle, uint16_t attr_handle,
         return BLE_HS_EUNKNOWN;
     }
 
-    ble_gatts_dsc_inc_stat(gatt_op);
+    ble_gatts_dsc_inc_stat(gatt_ctxt.op);
 
     gatt_ctxt.dsc = dsc_def;
     gatt_ctxt.att = att_ctxt;
-    rc = dsc_def->access_cb(conn_handle, attr_handle, gatt_op, &gatt_ctxt,
+    rc = dsc_def->access_cb(conn_handle, attr_handle, &gatt_ctxt,
                             dsc_def->arg);
     if (rc != 0) {
         return rc;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/147a5632/net/nimble/host/src/test/ble_gatts_notify_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_gatts_notify_test.c b/net/nimble/host/src/test/ble_gatts_notify_test.c
index 28d2120..5a7b86d 100644
--- a/net/nimble/host/src/test/ble_gatts_notify_test.c
+++ b/net/nimble/host/src/test/ble_gatts_notify_test.c
@@ -33,7 +33,7 @@ static uint8_t ble_gatts_notify_test_peer_addr[6] = {2,3,4,5,6,7};
 
 static int
 ble_gatts_notify_test_misc_access(uint16_t conn_handle,
-                                  uint16_t attr_handle, uint8_t op,
+                                  uint16_t attr_handle, 
                                   struct ble_gatt_access_ctxt *ctxt,
                                   void *arg);
 static void
@@ -233,11 +233,11 @@ ble_gatts_notify_test_misc_reg_cb(uint8_t op,
 
 static int
 ble_gatts_notify_test_misc_access(uint16_t conn_handle,
-                                  uint16_t attr_handle, uint8_t op,
+                                  uint16_t attr_handle,
                                   struct ble_gatt_access_ctxt *ctxt,
                                   void *arg)
 {
-    TEST_ASSERT_FATAL(op == BLE_GATT_ACCESS_OP_READ_CHR);
+    TEST_ASSERT_FATAL(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
     TEST_ASSERT(conn_handle == 0xffff);
 
     if (attr_handle == ble_gatts_notify_test_chr_1_def_handle + 1) {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/147a5632/net/nimble/host/src/test/ble_gatts_read_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_gatts_read_test.c b/net/nimble/host/src/test/ble_gatts_read_test.c
index 401ddd8..71794cd 100644
--- a/net/nimble/host/src/test/ble_gatts_read_test.c
+++ b/net/nimble/host/src/test/ble_gatts_read_test.c
@@ -31,13 +31,13 @@ static uint8_t ble_gatts_read_test_peer_addr[6] = {2,3,4,5,6,7};
 
 static int
 ble_gatts_read_test_util_access_1(uint16_t conn_handle,
-                                  uint16_t attr_handle, uint8_t op,
+                                  uint16_t attr_handle,
                                   struct ble_gatt_access_ctxt *ctxt,
                                   void *arg);
 
 static int
 ble_gatts_read_test_util_access_2(uint16_t conn_handle,
-                                  uint16_t attr_handle, uint8_t op,
+                                  uint16_t attr_handle,
                                   struct ble_gatt_access_ctxt *ctxt,
                                   void *arg);
 static void
@@ -126,11 +126,11 @@ ble_gatts_read_test_misc_reg_cb(uint8_t op,
 
 static int
 ble_gatts_read_test_util_access_1(uint16_t conn_handle,
-                                  uint16_t attr_handle, uint8_t op,
+                                  uint16_t attr_handle,
                                   struct ble_gatt_access_ctxt *ctxt,
                                   void *arg)
 {
-    TEST_ASSERT_FATAL(op == BLE_GATT_ACCESS_OP_READ_CHR);
+    TEST_ASSERT_FATAL(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
     TEST_ASSERT_FATAL(attr_handle == ble_gatts_read_test_chr_1_val_handle);
 
     TEST_ASSERT(ctxt->chr ==
@@ -143,11 +143,11 @@ ble_gatts_read_test_util_access_1(uint16_t conn_handle,
 
 static int
 ble_gatts_read_test_util_access_2(uint16_t conn_handle,
-                                  uint16_t attr_handle, uint8_t op,
+                                  uint16_t attr_handle,
                                   struct ble_gatt_access_ctxt *ctxt,
                                   void *arg)
 {
-    TEST_ASSERT_FATAL(op == BLE_GATT_ACCESS_OP_READ_CHR);
+    TEST_ASSERT_FATAL(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR);
     TEST_ASSERT_FATAL(attr_handle == ble_gatts_read_test_chr_2_def_handle + 1);
 
     TEST_ASSERT(ctxt->chr ==

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/147a5632/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 ff96f74..8732b5e 100644
--- a/net/nimble/host/src/test/ble_gatts_reg_test.c
+++ b/net/nimble/host/src/test/ble_gatts_reg_test.c
@@ -291,7 +291,7 @@ ble_gatts_reg_test_misc_verify_entry(uint8_t op, const uint8_t *uuid128)
 
 static int
 ble_gatts_reg_test_misc_dummy_access(uint16_t conn_handle,
-                                     uint16_t attr_handle, uint8_t op,
+                                     uint16_t attr_handle,
                                      struct ble_gatt_access_ctxt *ctxt,
                                      void *arg)
 {