You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by na...@apache.org on 2022/08/25 13:17:59 UTC
[mynewt-nimble] 02/02: apps/bttester: handle GAP Pairing Complete event
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 <kr...@codecoup.pl>
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;
}