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;