This is an automated email from the ASF dual-hosted git repository.

ccollins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git


The following commit(s) were added to refs/heads/master by this push:
     new 29ef0b0  nimble/host: Allow auto-start to be disabled
29ef0b0 is described below

commit 29ef0b0b99156140f45b623afd72fd3e927d3a02
Author: Christopher Collins <ccoll...@apache.org>
AuthorDate: Fri Nov 2 12:44:22 2018 -0700

    nimble/host: Allow auto-start to be disabled
    
    Before commit: the host always starts during system initialization.
    
    After commit: a Mynewt syscfg setting (`BLE_HS_AUTO_START`) was added.
    When this setting is disabled, the host does not start automatically.
    Instead, the application starts the host using the new
    `ble_hs_sched_start()` function.
    
    `BLE_HS_AUTO_START` is enabled by default.
---
 nimble/host/include/host/ble_hs.h              | 12 ++++++++++++
 nimble/host/src/ble_hs.c                       | 16 +++++++++++++++-
 nimble/host/syscfg.yml                         |  6 ++++++
 porting/examples/linux/include/syscfg/syscfg.h |  4 ++++
 porting/nimble/include/syscfg/syscfg.h         |  4 ++++
 porting/npl/riot/include/syscfg/syscfg.h       |  4 ++++
 6 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/nimble/host/include/host/ble_hs.h 
b/nimble/host/include/host/ble_hs.h
index 896d1d0..192fdef 100644
--- a/nimble/host/include/host/ble_hs.h
+++ b/nimble/host/include/host/ble_hs.h
@@ -312,6 +312,18 @@ int ble_hs_synced(void);
 int ble_hs_start(void);
 
 /**
+ * Enqueues a host start event to the default event queue.  The actual host
+ * startup is performed in the host parent task, but using the default queue
+ * here ensures the event won't run until the end of main() when this is
+ * called during system initialization.  This allows the application to
+ * configure the host package in the meantime.
+ *
+ * If auto-start is disabled, the application should use this function to start
+ * the BLE stack.
+ */
+void ble_hs_sched_start(void);
+
+/**
  * Causes the host to reset the NimBLE stack as soon as possible.  The
  * application is notified when the reset occurs via the host reset callback.
  *
diff --git a/nimble/host/src/ble_hs.c b/nimble/host/src/ble_hs.c
index 917781f..1718c98 100644
--- a/nimble/host/src/ble_hs.c
+++ b/nimble/host/src/ble_hs.c
@@ -455,6 +455,17 @@ ble_hs_timer_resched(void)
      */
     ble_hs_timer_reset(0);
 }
+ 
+void
+ble_hs_sched_start(void)
+{
+#ifdef MYNEWT
+    ble_npl_eventq_put((struct ble_npl_eventq *)os_eventq_dflt_get(),
+                       &ble_hs_ev_start);
+#else
+    ble_npl_eventq_put(nimble_port_get_dflt_eventq(), &ble_hs_ev_start);
+#endif
+}
 
 static void
 ble_hs_event_rx_hci_ev(struct ble_npl_event *ev)
@@ -698,11 +709,14 @@ ble_hs_init(void)
      * queue ensures the event won't run until the end of main().  This allows
      * the application to configure this package in the meantime.
      */
+#if MYNEWT_VAL(BLE_HS_AUTO_START)
 #ifdef MYNEWT
-    ble_npl_eventq_put((struct ble_npl_eventq *)os_eventq_dflt_get(), 
&ble_hs_ev_start);
+    ble_npl_eventq_put((struct ble_npl_eventq *)os_eventq_dflt_get(),
+                       &ble_hs_ev_start);
 #else
     ble_npl_eventq_put(nimble_port_get_dflt_eventq(), &ble_hs_ev_start);
 #endif
+#endif
 
 #if BLE_MONITOR
     ble_monitor_new_index(0, (uint8_t[6]){ }, "nimble0");
diff --git a/nimble/host/syscfg.yml b/nimble/host/syscfg.yml
index 7cd8e61..90a61c1 100644
--- a/nimble/host/syscfg.yml
+++ b/nimble/host/syscfg.yml
@@ -21,6 +21,12 @@ syscfg.defs:
         description: 'Indicates that a BLE host is present.'
         value: 1
 
+    BLE_HS_AUTO_START:
+        description: >
+                Causes the BLE host to automatically start during system
+                initialization.
+        value: 1
+
     # Debug settings.
     BLE_HS_DEBUG:
         description: 'Enables extra runtime assertions.'
diff --git a/porting/examples/linux/include/syscfg/syscfg.h 
b/porting/examples/linux/include/syscfg/syscfg.h
index da4dd52..244aad8 100644
--- a/porting/examples/linux/include/syscfg/syscfg.h
+++ b/porting/examples/linux/include/syscfg/syscfg.h
@@ -585,6 +585,10 @@
 #define MYNEWT_VAL_BLE_HOST (1)
 #endif
 
+#ifndef MYNEWT_VAL_BLE_HS_AUTO_START
+#define MYNEWT_VAL_BLE_HS_AUTO_START (1)
+#endif
+
 #ifndef MYNEWT_VAL_BLE_HS_DEBUG
 #define MYNEWT_VAL_BLE_HS_DEBUG (0)
 #endif
diff --git a/porting/nimble/include/syscfg/syscfg.h 
b/porting/nimble/include/syscfg/syscfg.h
index 8d58db9..c9b3755 100644
--- a/porting/nimble/include/syscfg/syscfg.h
+++ b/porting/nimble/include/syscfg/syscfg.h
@@ -570,6 +570,10 @@
 #define MYNEWT_VAL_BLE_HOST (1)
 #endif
 
+#ifndef MYNEWT_VAL_BLE_HS_AUTO_START
+#define MYNEWT_VAL_BLE_HS_AUTO_START (1)
+#endif
+
 #ifndef MYNEWT_VAL_BLE_HS_DEBUG
 #define MYNEWT_VAL_BLE_HS_DEBUG (0)
 #endif
diff --git a/porting/npl/riot/include/syscfg/syscfg.h 
b/porting/npl/riot/include/syscfg/syscfg.h
index 11985c3..070f059 100644
--- a/porting/npl/riot/include/syscfg/syscfg.h
+++ b/porting/npl/riot/include/syscfg/syscfg.h
@@ -777,6 +777,10 @@
 #define MYNEWT_VAL_BLE_HS_DEBUG (0)
 #endif
 
+#ifndef MYNEWT_VAL_BLE_HS_AUTO_START
+#define MYNEWT_VAL_BLE_HS_AUTO_START (1)
+#endif
+
 #ifndef MYNEWT_VAL_BLE_HS_FLOW_CTRL
 #define MYNEWT_VAL_BLE_HS_FLOW_CTRL (0)
 #endif

Reply via email to