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 2018/11/21 22:47:35 UTC
[mynewt-nimble] 03/06: Mynewt: Stop the host on system shutdown
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
commit 4eec25a1c2862e9b96a73c144824df86f4936c94
Author: Christopher Collins <cc...@apache.org>
AuthorDate: Wed Oct 3 17:57:15 2018 -0700
Mynewt: Stop the host on system shutdown
This is Mynewt-only feature. When the system is shutting down, the host
stops.
---
nimble/host/include/host/ble_hs.h | 11 +++++++
nimble/host/pkg.yml | 3 ++
nimble/host/src/ble_hs_shutdown.c | 69 +++++++++++++++++++++++++++++++++++++++
nimble/host/syscfg.yml | 7 ++++
4 files changed, 90 insertions(+)
diff --git a/nimble/host/include/host/ble_hs.h b/nimble/host/include/host/ble_hs.h
index ba874b1..6719a6f 100644
--- a/nimble/host/include/host/ble_hs.h
+++ b/nimble/host/include/host/ble_hs.h
@@ -364,6 +364,17 @@ void ble_hs_evq_set(struct ble_npl_eventq *evq);
*/
void ble_hs_init(void);
+/**
+ * @brief Called when the system is shutting down. Stops the BLE host.
+ *
+ * @param reason The reason for the shutdown. One of the
+ * HAL_RESET_[...] codes or an
+ * implementation-defined value.
+ *
+ * @return SYSDOWN_IN_PROGRESS.
+ */
+int ble_hs_shutdown(int reason);
+
#ifdef __cplusplus
}
#endif
diff --git a/nimble/host/pkg.yml b/nimble/host/pkg.yml
index d91454e..7c8c021 100644
--- a/nimble/host/pkg.yml
+++ b/nimble/host/pkg.yml
@@ -50,3 +50,6 @@ pkg.req_apis:
pkg.init:
ble_hs_init: 200
+
+pkg.down.BLE_HS_STOP_ON_SHUTDOWN:
+ ble_hs_shutdown: 200
diff --git a/nimble/host/src/ble_hs_shutdown.c b/nimble/host/src/ble_hs_shutdown.c
new file mode 100644
index 0000000..f29d4a6
--- /dev/null
+++ b/nimble/host/src/ble_hs_shutdown.c
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#if MYNEWT
+
+#include "os/mynewt.h"
+#include "ble_hs_priv.h"
+
+static struct ble_hs_stop_listener ble_hs_shutdown_stop_listener;
+
+/**
+ * Called when the host stop procedure has completed.
+ */
+static void
+ble_hs_shutdown_stop_cb(int status, void *arg)
+{
+ SYSDOWN_ASSERT_ACTIVE();
+
+ /* Indicate to sysdown that the host is fully shut down. */
+ sysdown_release();
+}
+
+int
+ble_hs_shutdown(int reason)
+{
+ int rc;
+
+ /* Ensure this function only gets called by sysdown. */
+ SYSDOWN_ASSERT_ACTIVE();
+
+ /* Initiate a host stop procedure. */
+ rc = ble_hs_stop(&ble_hs_shutdown_stop_listener, ble_hs_shutdown_stop_cb,
+ NULL);
+ switch (rc) {
+ case 0:
+ /* Stop initiated. Wait for result to be reported asynchronously. */
+ return SYSDOWN_IN_PROGRESS;
+
+ case BLE_HS_EBUSY:
+ /* Already stopping. Wait for result to be reported asynchronously. */
+ return SYSDOWN_IN_PROGRESS;
+
+ case BLE_HS_EALREADY:
+ /* Already stopped. Shutdown complete. */
+ return SYSDOWN_COMPLETE;
+
+ default:
+ BLE_HS_LOG(ERROR, "ble_hs_shutdown: failed to stop host; rc=%d\n", rc);
+ return SYSDOWN_COMPLETE;
+ }
+}
+
+#endif
diff --git a/nimble/host/syscfg.yml b/nimble/host/syscfg.yml
index 90a61c1..d16d93f 100644
--- a/nimble/host/syscfg.yml
+++ b/nimble/host/syscfg.yml
@@ -422,5 +422,12 @@ syscfg.defs:
a necessary workaround when interfacing with some controllers.
value: 0
+ BLE_HS_STOP_ON_SHUTDOWN:
+ description: >
+ Stops the Bluetooth host when the system shuts down. Stopping
+ entails aborting all GAP procedures and terminating open
+ connections.
+ value: 1
+
syscfg.vals.BLE_MESH:
BLE_SM_SC: 1