This is an automated email from the ASF dual-hosted git repository. naraj pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
commit f7ebfaf95b44013c8ab938edbab2bf98bebc7d8b Author: Krzysztof Kopyściński <[email protected]> AuthorDate: Wed Sep 22 14:34:05 2021 +0200 apps/bttester: handle GAP Pairing Complete event Send event when peer fails pairing procedure with reason code. This is required by SM/CEN/KDU/BI-02-C. --- apps/bttester/src/bttester.h | 7 +++++++ apps/bttester/src/gap.c | 35 ++++++++++++++++++++++++++++++++++- nimble/host/src/ble_sm.c | 1 - 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/apps/bttester/src/bttester.h b/apps/bttester/src/bttester.h index 7bcd789c..4aa34b3c 100644 --- a/apps/bttester/src/bttester.h +++ b/apps/bttester/src/bttester.h @@ -418,6 +418,13 @@ struct gap_bond_lost_ev { uint8_t address[6]; } __packed; +#define GAP_EV_SEC_PAIRING_FAILED 0x8c +struct gap_sec_pairing_failed_ev { + uint8_t address_type; + uint8_t address[6]; + uint8_t reason; +} __packed; + /* GATT Service */ /* commands */ #define GATT_READ_SUPPORTED_COMMANDS 0x01 diff --git a/apps/bttester/src/gap.c b/apps/bttester/src/gap.c index e2136093..24ef4ab3 100644 --- a/apps/bttester/src/gap.c +++ b/apps/bttester/src/gap.c @@ -980,6 +980,31 @@ static void le_identity_resolved(uint16_t conn_handle) CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev)); } +static void le_pairing_failed(uint16_t conn_handle, int reason) +{ + struct ble_gap_conn_desc desc; + struct gap_sec_pairing_failed_ev ev; + int rc; + + SYS_LOG_DBG(""); + + rc = ble_gap_conn_find(conn_handle, &desc); + if (rc) { + return; + } + + peer_id_addr = desc.peer_id_addr; + peer_ota_addr = desc.peer_ota_addr; + + ev.address_type = desc.peer_ota_addr.type; + memcpy(ev.address, desc.peer_ota_addr.val, sizeof(ev.address)); + + ev.reason = reason; + + tester_send(BTP_SERVICE_ID_GAP, GAP_EV_SEC_PAIRING_FAILED, + CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev)); +} + static void le_conn_param_update(struct ble_gap_conn_desc *desc) { struct gap_conn_param_update_ev ev; @@ -1262,7 +1287,15 @@ static int gap_event_cb(struct ble_gap_event *event, void *arg) event->conn_update_req.peer_params->supervision_timeout == REJECT_SUPERVISION_TIMEOUT) { return EINVAL; } - + case BLE_GAP_EVENT_PARING_COMPLETE: + console_printf("received pairing complete: " + "conn_handle=%d status=%d\n", + event->pairing_complete.conn_handle, + event->pairing_complete.status); + if (event->pairing_complete.status != BLE_SM_ERR_SUCCESS) { + le_pairing_failed(event->pairing_complete.conn_handle, event->pairing_complete.status); + } + break; default: break; } diff --git a/nimble/host/src/ble_sm.c b/nimble/host/src/ble_sm.c index 71b9f769..5188effe 100644 --- a/nimble/host/src/ble_sm.c +++ b/nimble/host/src/ble_sm.c @@ -2059,7 +2059,6 @@ ble_sm_key_exch_success(struct ble_sm_proc *proc, struct ble_sm_result *res) res->app_status = 0; res->enc_cb = 1; res->bonded = bonded; - res->sm_err = BLE_SM_ERR_SUCCESS; }
