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;
 }