From 42876422b2216cdf447380ab5229357db3ededed Mon Sep 17 00:00:00 2001 From: Szymon Janc Date: Thu, 31 Oct 2013 11:23:33 +0100 Subject: [PATCH] android: Add support for handling remove bond command Bond state change is send when command complete for unpair device is received and status was success. --- android/adapter.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/android/adapter.c b/android/adapter.c index 60c62f49c..a3f9aa62a 100644 --- a/android/adapter.c +++ b/android/adapter.c @@ -751,6 +751,34 @@ static bool cancel_bond(void *buf, uint16_t len) NULL) > 0; } +static void unpair_device_complete(uint8_t status, uint16_t length, + const void *param, void *user_data) +{ + const struct mgmt_rp_unpair_device *rp = param; + + DBG("status %u", status); + + if (status != MGMT_STATUS_SUCCESS) + return; + + send_bond_state_change(&rp->addr.bdaddr, HAL_STATUS_SUCCESS, + HAL_BOND_STATE_NONE); +} + +static bool remove_bond(void *buf, uint16_t len) +{ + struct hal_cmd_remove_bond *cmd = buf; + struct mgmt_cp_unpair_device cp; + + cp.disconnect = 1; + cp.addr.type = BDADDR_BREDR; + android2bdaddr(cmd->bdaddr, &cp.addr.bdaddr); + + return mgmt_send(adapter->mgmt, MGMT_OP_UNPAIR_DEVICE, + adapter->index, sizeof(cp), &cp, + unpair_device_complete, NULL, NULL) > 0; +} + static uint8_t pin_reply(void *buf, uint16_t len) { struct hal_cmd_pin_reply *cmd = buf; @@ -929,6 +957,11 @@ void bt_adapter_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf, goto error; break; + case HAL_OP_REMOVE_BOND: + if (!remove_bond(buf, len)) + goto error; + + break; case HAL_OP_PIN_REPLY: status = pin_reply(buf, len); if (status != HAL_STATUS_SUCCESS) -- 2.11.0