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:33 UTC
[1/5] incubator-mynewt-core git commit: BLE Host - Fix
filter-duplicates in GAP discovery.
Repository: incubator-mynewt-core
Updated Branches:
refs/heads/develop e6602f6c2 -> 78d4bed28
BLE Host - Fix filter-duplicates in GAP discovery.
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/fb3eae7c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/fb3eae7c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/fb3eae7c
Branch: refs/heads/develop
Commit: fb3eae7c221abfa86bb4d43acfd391652bdaaa4a
Parents: e6602f6
Author: Christopher Collins <cc...@apache.org>
Authored: Wed Jul 13 15:40:12 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Wed Jul 13 15:40:12 2016 -0700
----------------------------------------------------------------------
net/nimble/host/src/ble_gap.c | 33 ++++++++++-----------------------
1 file changed, 10 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/fb3eae7c/net/nimble/host/src/ble_gap.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_gap.c b/net/nimble/host/src/ble_gap.c
index 941c350..6c91956 100644
--- a/net/nimble/host/src/ble_gap.c
+++ b/net/nimble/host/src/ble_gap.c
@@ -140,9 +140,9 @@ static bssnz_t struct {
unsigned adv_auto_flags:1;
} ble_gap_slave;
-static int ble_gap_disc_disable_tx(void);
static int ble_gap_adv_enable_tx(int enable);
static int ble_gap_conn_cancel_tx(void);
+static int ble_gap_disc_enable_tx(int enable, int filter_duplicates);
struct ble_gap_snapshot {
struct ble_gap_conn_desc *desc;
@@ -223,9 +223,10 @@ static void
ble_gap_log_disc(uint8_t own_addr_type, int32_t duration_ms,
const struct ble_gap_disc_params *disc_params)
{
- BLE_HS_LOG(INFO, "own_addr_type=%d filter_policy=%d passive=%d limited=%d",
+ BLE_HS_LOG(INFO, "own_addr_type=%d filter_policy=%d passive=%d limited=%d "
+ "filter_duplicates=%d ",
own_addr_type, disc_params->filter_policy, disc_params->passive,
- disc_params->limited);
+ disc_params->limited, disc_params->filter_duplicates);
ble_gap_log_duration(duration_ms);
}
@@ -1082,7 +1083,7 @@ ble_gap_master_heartbeat(void)
case BLE_GAP_OP_M_DISC:
/* When a discovery procedure times out, it is not a failure. */
- rc = ble_gap_disc_disable_tx();
+ rc = ble_gap_disc_enable_tx(0, 0);
if (rc != 0) {
/* Failed to stop discovery; try again in 100 ms. */
return BLE_GAP_CANCEL_RETRY_RATE;
@@ -1848,27 +1849,13 @@ ble_gap_adv_active(void)
*****************************************************************************/
static int
-ble_gap_disc_disable_tx(void)
+ble_gap_disc_enable_tx(int enable, int filter_duplicates)
{
uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_SCAN_ENABLE_LEN];
int rc;
- host_hci_cmd_build_le_set_scan_enable(0, 0, buf, sizeof buf);
- rc = ble_hci_cmd_tx_empty_ack(buf);
- if (rc != 0) {
- return rc;
- }
-
- return 0;
-}
-
-static int
-ble_gap_disc_tx_enable(void)
-{
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_SCAN_ENABLE_LEN];
- int rc;
-
- host_hci_cmd_build_le_set_scan_enable(1, 0, buf, sizeof buf);
+ host_hci_cmd_build_le_set_scan_enable(!!enable, !!filter_duplicates,
+ buf, sizeof buf);
rc = ble_hci_cmd_tx_empty_ack(buf);
if (rc != 0) {
return rc;
@@ -1933,7 +1920,7 @@ ble_gap_disc_cancel(void)
goto done;
}
- rc = ble_gap_disc_disable_tx();
+ rc = ble_gap_disc_enable_tx(0, 0);
if (rc != 0) {
goto done;
}
@@ -2077,7 +2064,7 @@ ble_gap_disc(uint8_t own_addr_type, int32_t duration_ms,
goto done;
}
- rc = ble_gap_disc_tx_enable();
+ rc = ble_gap_disc_enable_tx(1, params.filter_duplicates);
if (rc != 0) {
goto done;
}
[3/5] incubator-mynewt-core git commit: BLE Host - scan: svc data
fields had 0 length.
Posted by cc...@apache.org.
BLE Host - scan: svc data fields had 0 length.
When parsing an advertising report, the host code forgot to fill in the
length of each service data field.
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/9420c875
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/9420c875
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/9420c875
Branch: refs/heads/develop
Commit: 9420c875e184a2f5511c21aa609e1011d107d22f
Parents: d38f158
Author: Christopher Collins <cc...@apache.org>
Authored: Wed Jul 13 17:13:46 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Wed Jul 13 17:13:46 2016 -0700
----------------------------------------------------------------------
net/nimble/host/src/ble_hs_adv.c | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9420c875/net/nimble/host/src/ble_hs_adv.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_adv.c b/net/nimble/host/src/ble_hs_adv.c
index 8a7ed50..74dd393 100644
--- a/net/nimble/host/src/ble_hs_adv.c
+++ b/net/nimble/host/src/ble_hs_adv.c
@@ -480,6 +480,7 @@ ble_hs_adv_parse_one_field(struct ble_hs_adv_fields *adv_fields,
return BLE_HS_EBADDATA;
}
adv_fields->svc_data_uuid16 = data;
+ adv_fields->svc_data_uuid16_len = data_len;
break;
case BLE_HS_ADV_TYPE_PUBLIC_TGT_ADDR:
@@ -527,6 +528,7 @@ ble_hs_adv_parse_one_field(struct ble_hs_adv_fields *adv_fields,
return BLE_HS_EBADDATA;
}
adv_fields->svc_data_uuid32 = data;
+ adv_fields->svc_data_uuid32_len = data_len;
break;
case BLE_HS_ADV_TYPE_SVC_DATA_UUID128:
@@ -534,6 +536,7 @@ ble_hs_adv_parse_one_field(struct ble_hs_adv_fields *adv_fields,
return BLE_HS_EBADDATA;
}
adv_fields->svc_data_uuid128 = data;
+ adv_fields->svc_data_uuid128_len = data_len;
break;
case BLE_HS_ADV_TYPE_URI:
[5/5] incubator-mynewt-core git commit: BLE Host - Move opcode into
gatt register ctxt.
Posted by cc...@apache.org.
BLE Host - Move opcode into gatt register 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/78d4bed2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/78d4bed2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/78d4bed2
Branch: refs/heads/develop
Commit: 78d4bed28f006931e2a20e921d8b0a8ac61fb2dd
Parents: 147a563
Author: Christopher Collins <cc...@apache.org>
Authored: Thu Jul 14 11:28:53 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Thu Jul 14 11:29:06 2016 -0700
----------------------------------------------------------------------
apps/bleprph/src/gatt_svr.c | 4 +-
apps/bletiny/src/gatt_svr.c | 4 +-
net/nimble/host/include/host/ble_gatt.h | 131 ++++++++++---------
net/nimble/host/src/ble_gatts.c | 15 ++-
.../host/src/test/ble_gatts_notify_test.c | 8 +-
net/nimble/host/src/test/ble_gatts_read_test.c | 8 +-
net/nimble/host/src/test/ble_gatts_reg_test.c | 7 +-
7 files changed, 94 insertions(+), 83 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/78d4bed2/apps/bleprph/src/gatt_svr.c
----------------------------------------------------------------------
diff --git a/apps/bleprph/src/gatt_svr.c b/apps/bleprph/src/gatt_svr.c
index c2c40bd..346bb88 100644
--- a/apps/bleprph/src/gatt_svr.c
+++ b/apps/bleprph/src/gatt_svr.c
@@ -424,11 +424,11 @@ gatt_svr_uuid_to_s(const void *uuid128, char *dst)
}
static void
-gatt_svr_register_cb(uint8_t op, union ble_gatt_register_ctxt *ctxt, void *arg)
+gatt_svr_register_cb(struct ble_gatt_register_ctxt *ctxt, void *arg)
{
char buf[40];
- switch (op) {
+ switch (ctxt->op) {
case BLE_GATT_REGISTER_OP_SVC:
BLEPRPH_LOG(DEBUG, "registered service %s with handle=%d\n",
gatt_svr_uuid_to_s(ctxt->svc.svc_def->uuid128, buf),
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/78d4bed2/apps/bletiny/src/gatt_svr.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/gatt_svr.c b/apps/bletiny/src/gatt_svr.c
index ceb4522..a89673e 100644
--- a/apps/bletiny/src/gatt_svr.c
+++ b/apps/bletiny/src/gatt_svr.c
@@ -419,11 +419,11 @@ gatt_svr_uuid_to_s(const void *uuid128, char *dst)
}
static void
-gatt_svr_register_cb(uint8_t op, union ble_gatt_register_ctxt *ctxt, void *arg)
+gatt_svr_register_cb(struct ble_gatt_register_ctxt *ctxt, void *arg)
{
char buf[40];
- switch (op) {
+ switch (ctxt->op) {
case BLE_GATT_REGISTER_OP_SVC:
BLETINY_LOG(DEBUG, "registered service %s with handle=%d\n",
gatt_svr_uuid_to_s(ctxt->svc.svc_def->uuid128, buf),
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/78d4bed2/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 c855a9b..5e798e7 100644
--- a/net/nimble/host/include/host/ble_gatt.h
+++ b/net/nimble/host/include/host/ble_gatt.h
@@ -313,63 +313,77 @@ struct ble_gatt_dsc_def {
* Context passed to the registration callback; represents the GATT service,
* characteristic, or descriptor being registered.
*/
-union ble_gatt_register_ctxt {
- /** Service; valid if op == BLE_GATT_REGISTER_OP_SVC. */
- struct {
- /** The ATT handle of the service definition attribute. */
- uint16_t handle;
-
- /**
- * The service definition representing the service being
- * registered.
- */
- const struct ble_gatt_svc_def *svc_def;
- } svc;
-
- /** Characteristic; valid if op == BLE_GATT_REGISTER_OP_CHR. */
- struct {
- /** The ATT handle of the characteristic definition attribute. */
- uint16_t def_handle;
-
- /** The ATT handle of the characteristic value attribute. */
- uint16_t val_handle;
-
- /**
- * The characteristic definition representing the characteristic being
- * registered.
- */
- const struct ble_gatt_chr_def *chr_def;
-
- /**
- * The service definition corresponding to the characteristic's parent
- * service.
- */
- const struct ble_gatt_svc_def *svc_def;
- } chr;
-
- /** Descriptor; valid if op == BLE_GATT_REGISTER_OP_DSC. */
- struct {
- /** The ATT handle of the descriptor definition attribute. */
- uint16_t handle;
-
- /**
- * The descriptor definition corresponding to the descriptor being
- * registered.
- */
- const struct ble_gatt_dsc_def *dsc_def;
-
- /**
- * The characteristic definition corresponding to the descriptor's
- * parent characteristic.
- */
- const struct ble_gatt_chr_def *chr_def;
+struct ble_gatt_register_ctxt {
+ /**
+ * Indicates the gatt registration operation just performed. This is
+ * equal to one of the following values:
+ * o BLE_GATT_REGISTER_OP_SVC
+ * o BLE_GATT_REGISTER_OP_CHR
+ * o BLE_GATT_REGISTER_OP_DSC
+ */
+ uint8_t op;
- /**
- * The service definition corresponding to the descriptor's grandparent
- * service
- */
- const struct ble_gatt_svc_def *svc_def;
- } dsc;
+ /**
+ * The value of the op field determines which field in this union is valid.
+ */
+ union {
+ /** Service; valid if op == BLE_GATT_REGISTER_OP_SVC. */
+ struct {
+ /** The ATT handle of the service definition attribute. */
+ uint16_t handle;
+
+ /**
+ * The service definition representing the service being
+ * registered.
+ */
+ const struct ble_gatt_svc_def *svc_def;
+ } svc;
+
+ /** Characteristic; valid if op == BLE_GATT_REGISTER_OP_CHR. */
+ struct {
+ /** The ATT handle of the characteristic definition attribute. */
+ uint16_t def_handle;
+
+ /** The ATT handle of the characteristic value attribute. */
+ uint16_t val_handle;
+
+ /**
+ * The characteristic definition representing the characteristic
+ * being registered.
+ */
+ const struct ble_gatt_chr_def *chr_def;
+
+ /**
+ * The service definition corresponding to the characteristic's
+ * parent service.
+ */
+ const struct ble_gatt_svc_def *svc_def;
+ } chr;
+
+ /** Descriptor; valid if op == BLE_GATT_REGISTER_OP_DSC. */
+ struct {
+ /** The ATT handle of the descriptor definition attribute. */
+ uint16_t handle;
+
+ /**
+ * The descriptor definition corresponding to the descriptor being
+ * registered.
+ */
+ const struct ble_gatt_dsc_def *dsc_def;
+
+ /**
+ * The characteristic definition corresponding to the descriptor's
+ * parent characteristic.
+ */
+ const struct ble_gatt_chr_def *chr_def;
+
+ /**
+ * The service definition corresponding to the descriptor's
+ * grandparent service
+ */
+ const struct ble_gatt_svc_def *svc_def;
+ } dsc;
+ };
};
/**
@@ -400,9 +414,8 @@ struct ble_gatt_resources {
uint16_t attrs;
};
-union ble_gatt_register_ctxt;
-typedef void ble_gatt_register_fn(uint8_t op,
- union ble_gatt_register_ctxt *ctxt,
+struct ble_gatt_register_ctxt;
+typedef void ble_gatt_register_fn(struct ble_gatt_register_ctxt *ctxt,
void *arg);
int ble_gatts_register_svcs(const struct ble_gatt_svc_def *svcs,
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/78d4bed2/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 0aff98a..b2ead0d 100644
--- a/net/nimble/host/src/ble_gatts.c
+++ b/net/nimble/host/src/ble_gatts.c
@@ -463,7 +463,7 @@ ble_gatts_register_dsc(const struct ble_gatt_svc_def *svc,
uint16_t chr_def_handle,
ble_gatt_register_fn *register_cb, void *cb_arg)
{
- union ble_gatt_register_ctxt register_ctxt;
+ struct ble_gatt_register_ctxt register_ctxt;
uint16_t dsc_handle;
int rc;
@@ -478,11 +478,12 @@ ble_gatts_register_dsc(const struct ble_gatt_svc_def *svc,
}
if (register_cb != NULL) {
+ register_ctxt.op = BLE_GATT_REGISTER_OP_DSC;
register_ctxt.dsc.handle = dsc_handle;
register_ctxt.dsc.svc_def = svc;
register_ctxt.dsc.chr_def = chr;
register_ctxt.dsc.dsc_def = dsc;
- register_cb(BLE_GATT_REGISTER_OP_DSC, ®ister_ctxt, cb_arg);
+ register_cb(®ister_ctxt, cb_arg);
}
STATS_INC(ble_gatts_stats, dscs);
@@ -678,7 +679,7 @@ ble_gatts_register_chr(const struct ble_gatt_svc_def *svc,
const struct ble_gatt_chr_def *chr,
ble_gatt_register_fn *register_cb, void *cb_arg)
{
- union ble_gatt_register_ctxt register_ctxt;
+ struct ble_gatt_register_ctxt register_ctxt;
struct ble_gatt_dsc_def *dsc;
uint16_t def_handle;
uint16_t val_handle;
@@ -723,11 +724,12 @@ ble_gatts_register_chr(const struct ble_gatt_svc_def *svc,
}
if (register_cb != NULL) {
+ register_ctxt.op = BLE_GATT_REGISTER_OP_CHR;
register_ctxt.chr.def_handle = def_handle;
register_ctxt.chr.val_handle = val_handle;
register_ctxt.chr.svc_def = svc;
register_ctxt.chr.chr_def = chr;
- register_cb(BLE_GATT_REGISTER_OP_CHR, ®ister_ctxt, cb_arg);
+ register_cb(®ister_ctxt, cb_arg);
}
if (ble_gatts_chr_clt_cfg_allowed(chr) != 0) {
@@ -793,7 +795,7 @@ ble_gatts_register_svc(const struct ble_gatt_svc_def *svc,
ble_gatt_register_fn *register_cb, void *cb_arg)
{
const struct ble_gatt_chr_def *chr;
- union ble_gatt_register_ctxt register_ctxt;
+ struct ble_gatt_register_ctxt register_ctxt;
uint16_t uuid16;
int idx;
int rc;
@@ -823,9 +825,10 @@ ble_gatts_register_svc(const struct ble_gatt_svc_def *svc,
}
if (register_cb != NULL) {
+ register_ctxt.op = BLE_GATT_REGISTER_OP_SVC;
register_ctxt.svc.handle = *out_handle;
register_ctxt.svc.svc_def = svc;
- register_cb(BLE_GATT_REGISTER_OP_SVC, ®ister_ctxt, cb_arg);
+ register_cb(®ister_ctxt, cb_arg);
}
/* Register each include. */
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/78d4bed2/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 5a7b86d..0542121 100644
--- a/net/nimble/host/src/test/ble_gatts_notify_test.c
+++ b/net/nimble/host/src/test/ble_gatts_notify_test.c
@@ -37,8 +37,7 @@ ble_gatts_notify_test_misc_access(uint16_t conn_handle,
struct ble_gatt_access_ctxt *ctxt,
void *arg);
static void
-ble_gatts_notify_test_misc_reg_cb(uint8_t op,
- union ble_gatt_register_ctxt *ctxt,
+ble_gatts_notify_test_misc_reg_cb(struct ble_gatt_register_ctxt *ctxt,
void *arg);
static const struct ble_gatt_svc_def ble_gatts_notify_test_svcs[] = { {
@@ -207,13 +206,12 @@ ble_gatts_restore_bonding(uint16_t conn_handle)
}
static void
-ble_gatts_notify_test_misc_reg_cb(uint8_t op,
- union ble_gatt_register_ctxt *ctxt,
+ble_gatts_notify_test_misc_reg_cb(struct ble_gatt_register_ctxt *ctxt,
void *arg)
{
uint16_t uuid16;
- if (op == BLE_GATT_REGISTER_OP_CHR) {
+ if (ctxt->op == BLE_GATT_REGISTER_OP_CHR) {
uuid16 = ble_uuid_128_to_16(ctxt->chr.chr_def->uuid128);
switch (uuid16) {
case BLE_GATTS_NOTIFY_TEST_CHR_1_UUID:
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/78d4bed2/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 71794cd..92c86f4 100644
--- a/net/nimble/host/src/test/ble_gatts_read_test.c
+++ b/net/nimble/host/src/test/ble_gatts_read_test.c
@@ -41,8 +41,7 @@ ble_gatts_read_test_util_access_2(uint16_t conn_handle,
struct ble_gatt_access_ctxt *ctxt,
void *arg);
static void
-ble_gatts_read_test_misc_reg_cb(uint8_t op,
- union ble_gatt_register_ctxt *ctxt,
+ble_gatts_read_test_misc_reg_cb(struct ble_gatt_register_ctxt *ctxt,
void *arg);
static const struct ble_gatt_svc_def ble_gatts_read_test_svcs[] = { {
@@ -98,13 +97,12 @@ ble_gatts_read_test_misc_init(uint16_t *out_conn_handle)
}
static void
-ble_gatts_read_test_misc_reg_cb(uint8_t op,
- union ble_gatt_register_ctxt *ctxt,
+ble_gatts_read_test_misc_reg_cb(struct ble_gatt_register_ctxt *ctxt,
void *arg)
{
uint16_t uuid16;
- if (op == BLE_GATT_REGISTER_OP_CHR) {
+ if (ctxt->op == BLE_GATT_REGISTER_OP_CHR) {
uuid16 = ble_uuid_128_to_16(ctxt->chr.chr_def->uuid128);
switch (uuid16) {
case BLE_GATTS_READ_TEST_CHR_1_UUID:
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/78d4bed2/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 8732b5e..f15dfef 100644
--- a/net/nimble/host/src/test/ble_gatts_reg_test.c
+++ b/net/nimble/host/src/test/ble_gatts_reg_test.c
@@ -51,8 +51,7 @@ ble_gatts_reg_test_init(void)
}
static void
-ble_gatts_reg_test_misc_reg_cb(uint8_t op, union ble_gatt_register_ctxt *ctxt,
- void *arg)
+ble_gatts_reg_test_misc_reg_cb(struct ble_gatt_register_ctxt *ctxt, void *arg)
{
struct ble_gatts_reg_test_entry *entry;
@@ -62,8 +61,8 @@ ble_gatts_reg_test_misc_reg_cb(uint8_t op, union ble_gatt_register_ctxt *ctxt,
entry = ble_gatts_reg_test_entries + ble_gatts_reg_test_num_entries++;
memset(entry, 0, sizeof *entry);
- entry->op = op;
- switch (op) {
+ entry->op = ctxt->op;
+ switch (ctxt->op) {
case BLE_GATT_REGISTER_OP_SVC:
memcpy(entry->uuid128, ctxt->svc.svc_def->uuid128, 16);
entry->handle = ctxt->svc.handle;
[2/5] incubator-mynewt-core git commit: MYNEWT-350 BLE Host - Fn to
calc GATT server rsrcs
Posted by cc...@apache.org.
MYNEWT-350 BLE Host - Fn to calc GATT server rsrcs
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/d38f1583
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/d38f1583
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/d38f1583
Branch: refs/heads/develop
Commit: d38f1583659428a7d1cb4c53b98de877d68da634
Parents: fb3eae7
Author: Christopher Collins <cc...@apache.org>
Authored: Wed Jul 13 16:49:46 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Wed Jul 13 16:49:46 2016 -0700
----------------------------------------------------------------------
net/nimble/host/include/host/ble_gatt.h | 30 ++++++++
net/nimble/host/src/ble_gatts.c | 109 +++++++++++++++++++++++++++
2 files changed, 139 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d38f1583/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 2697f71..6a710f8 100644
--- a/net/nimble/host/include/host/ble_gatt.h
+++ b/net/nimble/host/include/host/ble_gatt.h
@@ -363,6 +363,34 @@ union ble_gatt_register_ctxt {
} dsc;
};
+/**
+ * Contains counts of resources required by the GATT server. The contents of
+ * this struct are generally used to populate a configuration struct before
+ * the host is initialized.
+ */
+struct ble_gatt_resources {
+ /** Number of services. */
+ uint16_t svcs;
+
+ /** Number of included services. */
+ uint16_t incs;
+
+ /** Number of characteristics. */
+ uint16_t chrs;
+
+ /** Number of descriptors. */
+ uint16_t dscs;
+
+ /**
+ * Number of client characteristic configuration descriptors. Each of
+ * these also contributes to the total descriptor count.
+ */
+ uint16_t cccds;
+
+ /** Total number of ATT attributes. */
+ uint16_t attrs;
+};
+
union ble_gatt_register_ctxt;
typedef void ble_gatt_register_fn(uint8_t op,
union ble_gatt_register_ctxt *ctxt,
@@ -371,6 +399,8 @@ typedef void ble_gatt_register_fn(uint8_t op,
int ble_gatts_register_svcs(const struct ble_gatt_svc_def *svcs,
ble_gatt_register_fn *register_cb,
void *cb_arg);
+int ble_gatts_count_resources(const struct ble_gatt_svc_def *svcs,
+ struct ble_gatt_resources *res);
void ble_gatts_chr_updated(uint16_t chr_def_handle);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d38f1583/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 3b6b0b6..3219c38 100644
--- a/net/nimble/host/src/ble_gatts.c
+++ b/net/nimble/host/src/ble_gatts.c
@@ -1604,6 +1604,115 @@ ble_gatts_find_dsc(const void *svc_uuid128, const void *chr_uuid128,
}
}
+/**
+ * Accumulates counts of each resource type required by the specified service
+ * definition array. This function is generally used to calculate some host
+ * configuration values prior to initialization. This function adds the counts
+ * to the appropriate fields in the supplied ble_gatt_resources object without
+ * clearing them first, so it can be called repeatedly with different inputs to
+ * calculate totals. Be sure to zero the resource struct prior to the first
+ * call to this function.
+ *
+ * @param svcs The service array containing the resource
+ * definitions to be counted.
+ * @param res The resource counts are accumulated in this
+ * struct.
+ *
+ * @return 0 on success;
+ * BLE_HS_EINVAL if the svcs array contains an
+ * invalid resource definition.
+ */
+int
+ble_gatts_count_resources(const struct ble_gatt_svc_def *svcs,
+ struct ble_gatt_resources *res)
+{
+ const struct ble_gatt_svc_def *svc;
+ const struct ble_gatt_chr_def *chr;
+ int s;
+ int i;
+ int c;
+ int d;
+
+ for (s = 0; svcs[s].type != BLE_GATT_SVC_TYPE_END; s++) {
+ svc = svcs + s;
+
+ if (!ble_gatts_svc_is_sane(svc)) {
+ BLE_HS_DBG_ASSERT(0);
+ return BLE_HS_EINVAL;
+ }
+
+ /* Each service requires:
+ * o 1 service
+ * o 1 attribute
+ */
+ res->svcs++;
+ res->attrs++;
+
+ if (svc->includes != NULL) {
+ for (i = 0; svc->includes[i] != NULL; i++) {
+ /* Each include requires:
+ * o 1 include
+ * o 1 attribute
+ */
+ res->incs++;
+ res->attrs++;
+ }
+ }
+
+ if (svc->characteristics != NULL) {
+ for (c = 0; svc->characteristics[c].uuid128 != NULL; c++) {
+ chr = svc->characteristics + c;
+
+ if (!ble_gatts_chr_is_sane(chr)) {
+ BLE_HS_DBG_ASSERT(0);
+ return BLE_HS_EINVAL;
+ }
+
+ /* Each characteristic requires:
+ * o 1 characteristic
+ * o 2 attributes
+ */
+ res->chrs++;
+ res->attrs += 2;
+
+ /* If the characteristic permits notifications or indications,
+ * it has a CCCD.
+ */
+ if (chr->flags & BLE_GATT_CHR_F_NOTIFY ||
+ chr->flags & BLE_GATT_CHR_F_INDICATE) {
+
+ /* Each CCCD requires:
+ * o 1 descriptor
+ * o 1 CCCD
+ * o 1 attribute
+ */
+ res->dscs++;
+ res->cccds++;
+ res->attrs++;
+ }
+
+ if (chr->descriptors != NULL) {
+ for (d = 0; chr->descriptors[d].uuid128 != NULL; d++) {
+ if (!ble_gatts_dsc_is_sane(chr->descriptors + d)) {
+ BLE_HS_DBG_ASSERT(0);
+ return BLE_HS_EINVAL;
+ }
+
+ /* Each descriptor requires:
+ * o 1 descriptor
+ * o 1 attribute
+ */
+ res->dscs++;
+ res->attrs++;
+ }
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
static void
ble_gatts_free_mem(void)
{
[4/5] incubator-mynewt-core git commit: BLE Host - Move opcode into
gatt access ctxt.
Posted by cc...@apache.org.
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)
{