diff options
author | Andrei Emeltchenko <andrei.emeltchenko@intel.com> | 2016-02-17 11:33:36 +0200 |
---|---|---|
committer | Andrei Emeltchenko <andrei.emeltchenko@intel.com> | 2016-02-17 17:10:05 +0200 |
commit | dc9ff5872b04085791d2aa6b7ec50f0984e03ee0 (patch) | |
tree | 6eac01000f6bee036e7d5bb41b35754a7ce7f4db /drivers/nble | |
parent | a72d967d338af41bca90da7d5046de9e89d6ab96 (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.c | 35 |
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, |