summaryrefslogtreecommitdiff
path: root/drivers/nble
diff options
context:
space:
mode:
authorAndrei Emeltchenko <andrei.emeltchenko@intel.com>2016-02-17 11:33:36 +0200
committerAndrei Emeltchenko <andrei.emeltchenko@intel.com>2016-02-17 17:10:05 +0200
commitdc9ff5872b04085791d2aa6b7ec50f0984e03ee0 (patch)
tree6eac01000f6bee036e7d5bb41b35754a7ce7f4db /drivers/nble
parenta72d967d338af41bca90da7d5046de9e89d6ab96 (diff)
drivers/nble: Implement bt_conn_disconnect()
Implement bt_conn_disconnect() API function. Change-Id: I08979d35400cf947d7ec646bad72f625141f95e0 Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Diffstat (limited to 'drivers/nble')
-rw-r--r--drivers/nble/conn.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/drivers/nble/conn.c b/drivers/nble/conn.c
index c8e4cbdc5..688e3f253 100644
--- a/drivers/nble/conn.c
+++ b/drivers/nble/conn.c
@@ -132,7 +132,40 @@ int bt_conn_le_param_update(struct bt_conn *conn,
int bt_conn_disconnect(struct bt_conn *conn, uint8_t reason)
{
- return -ENOSYS;
+ struct nble_gap_disconnect_req_params req;
+
+ switch (conn->state) {
+ case BT_CONN_CONNECT:
+ /* TODO: Cancel connecting */
+ return 0;
+ case BT_CONN_CONNECTED:
+ break;
+ case BT_CONN_DISCONNECT:
+ BT_ERR("Disconnecting already");
+ return -EBUSY;
+ default:
+ return -ENOTCONN;
+ }
+
+ /* Handle disconnect */
+ req.conn_handle = conn->handle;
+ req.reason = reason;
+
+ conn->state = BT_CONN_DISCONNECT;
+
+ nble_gap_disconnect_req(&req, conn);
+
+ return 0;
+}
+
+void on_nble_gap_disconnect_rsp(const struct nble_response *rsp)
+{
+ if (rsp->status) {
+ BT_ERR("Disconnect failed, status %d", rsp->status);
+ return;
+ }
+
+ BT_DBG("conn %p", rsp->user_data);
}
static inline bool bt_le_conn_params_valid(uint16_t min, uint16_t max,