Repository: incubator-mynewt-core
Updated Branches:
  refs/heads/develop 2767d7918 -> eea7f7ce9


bletiny: Fix for characteristic discovery

This patch fixes scenario when remote device has empty service in his
database. Without that patch bletiny keep searching for characteristics
in same service in infinite loop.


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

Branch: refs/heads/develop
Commit: ac040c9ef6f5baeae426f6a654e61e01ad3a474f
Parents: 3f4a64d
Author: Łukasz Rymanowski <[email protected]>
Authored: Fri Mar 10 15:49:47 2017 +0100
Committer: Łukasz Rymanowski <[email protected]>
Committed: Tue Mar 14 15:23:59 2017 +0100

----------------------------------------------------------------------
 apps/bletiny/src/bletiny.h | 2 +-
 apps/bletiny/src/main.c    | 7 ++++++-
 2 files changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ac040c9e/apps/bletiny/src/bletiny.h
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/bletiny.h b/apps/bletiny/src/bletiny.h
index cdaff14..495aadb 100644
--- a/apps/bletiny/src/bletiny.h
+++ b/apps/bletiny/src/bletiny.h
@@ -72,7 +72,7 @@ SLIST_HEAD(bletiny_chr_list, bletiny_chr);
 struct bletiny_svc {
     SLIST_ENTRY(bletiny_svc) next;
     struct ble_gatt_svc svc;
-
+    bool char_disc_sent;
     struct bletiny_chr_list chrs;
 };
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ac040c9e/apps/bletiny/src/main.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/main.c b/apps/bletiny/src/main.c
index c0177c0..9c5448c 100755
--- a/apps/bletiny/src/main.c
+++ b/apps/bletiny/src/main.c
@@ -726,7 +726,12 @@ bletiny_disc_full_chrs(uint16_t conn_handle)
     }
 
     SLIST_FOREACH(svc, &conn->svcs, next) {
-        if (!svc_is_empty(svc) && SLIST_EMPTY(&svc->chrs)) {
+        if (!svc_is_empty(svc) && !svc->char_disc_sent) {
+            /* Since it might happen that service does not have characteristics
+             * for some reason, lets keep track on services for which we send
+             * characteristic discovery
+             */
+            svc->char_disc_sent = true;
             rc = bletiny_disc_all_chrs(conn_handle, svc->svc.start_handle,
                                        svc->svc.end_handle);
             if (rc != 0) {

Reply via email to