Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion src/NimBLEClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1210,7 +1210,16 @@ int NimBLEClient::handleGapEvent(struct ble_gap_event* event, void* arg) {
break;
}

if (event->passkey.params.action == BLE_SM_IOACT_NUMCMP) {
if (event->passkey.params.action == BLE_SM_IOACT_DISP) {
struct ble_sm_io pkey = {0, 0};
pkey.action = event->passkey.params.action;
pkey.passkey = NimBLEDevice::getSecurityPasskey();
if (pkey.passkey == 123456) {
pkey.passkey = pClient->m_pClientCallbacks->onPassKeyDisplay(peerInfo);
}
rc = ble_sm_inject_io(event->passkey.conn_handle, &pkey);
NIMBLE_LOGD(LOG_TAG, "BLE_SM_IOACT_DISP; ble_sm_inject_io result: %d", rc);
} else if (event->passkey.params.action == BLE_SM_IOACT_NUMCMP) {
NIMBLE_LOGD(LOG_TAG, "Passkey on device's display: %" PRIu32, event->passkey.params.numcmp);
pClient->m_pClientCallbacks->onConfirmPasskey(peerInfo, event->passkey.params.numcmp);
} else if (event->passkey.params.action == BLE_SM_IOACT_OOB) {
Expand Down Expand Up @@ -1314,6 +1323,11 @@ void NimBLEClientCallbacks::onPassKeyEntry(NimBLEConnInfo& connInfo) {
NimBLEDevice::injectPassKey(connInfo, 123456);
} // onPassKeyEntry

uint32_t NimBLEClientCallbacks::onPassKeyDisplay(NimBLEConnInfo& connInfo) {
NIMBLE_LOGD(CB_TAG, "onPassKeyDisplay: default");
return NimBLEDevice::getSecurityPasskey();
} // onPassKeyDisplay

void NimBLEClientCallbacks::onAuthenticationComplete(NimBLEConnInfo& connInfo) {
NIMBLE_LOGD(CB_TAG, "onAuthenticationComplete: default");
} // onAuthenticationComplete
Expand Down
7 changes: 7 additions & 0 deletions src/NimBLEClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,13 @@ class NimBLEClientCallbacks {
*/
virtual void onPassKeyEntry(NimBLEConnInfo& connInfo);

/**
* @brief Called when using passkey entry pairing and the passkey should be displayed.
* @param [in] connInfo A reference to a NimBLEConnInfo instance containing the peer info.
* @return The passkey to display to the user. The peer device must enter this passkey to complete the pairing.
*/
virtual uint32_t onPassKeyDisplay(NimBLEConnInfo& connInfo);

/**
* @brief Called when the pairing procedure is complete.
* @param [in] connInfo A reference to a NimBLEConnInfo instance containing the peer info.\n
Expand Down
14 changes: 14 additions & 0 deletions src/NimBLEServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -684,6 +684,15 @@ int NimBLEServer::handleGapEvent(ble_gap_event* event, void* arg) {
// }
// rc = ble_sm_inject_io(event->passkey.conn_handle, &pkey);
// NIMBLE_LOGD(LOG_TAG, "BLE_SM_IOACT_OOB; ble_sm_inject_io result: %d", rc);
} else if (event->passkey.params.action == BLE_SM_IOACT_INPUT) {
NIMBLE_LOGD(LOG_TAG, "Enter the passkey");

rc = ble_gap_conn_find(event->passkey.conn_handle, &peerInfo.m_desc);
if (rc != 0) {
return BLE_ATT_ERR_INVALID_HANDLE;
}

pServer->m_pServerCallbacks->onPassKeyEntry(peerInfo);
} else if (event->passkey.params.action == BLE_SM_IOACT_NONE) {
NIMBLE_LOGD(LOG_TAG, "No passkey action required");
}
Expand Down Expand Up @@ -1119,6 +1128,11 @@ uint32_t NimBLEServerCallbacks::onPassKeyDisplay() {
return 123456;
} // onPassKeyDisplay

void NimBLEServerCallbacks::onPassKeyEntry(NimBLEConnInfo& connInfo) {
NIMBLE_LOGD("NimBLEServerCallbacks", "onPassKeyEntry: default: 123456");
NimBLEDevice::injectPassKey(connInfo, 123456);
} // onPassKeyEntry

void NimBLEServerCallbacks::onConfirmPassKey(NimBLEConnInfo& connInfo, uint32_t pin) {
NIMBLE_LOGD("NimBLEServerCallbacks", "onConfirmPasskey: default: true");
NimBLEDevice::injectConfirmPasskey(connInfo, true);
Expand Down
9 changes: 9 additions & 0 deletions src/NimBLEServer.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,15 @@ class NimBLEServerCallbacks {
*/
virtual uint32_t onPassKeyDisplay();

/**
* @brief Called when using passkey entry pairing and the peer requires the passkey to be entered.
* @param [in] connInfo A reference to a NimBLEConnInfo instance with information
* about the peer connection parameters.
* @details The application should call NimBLEDevice::injectPassKey with the passkey
* displayed on the peer device to complete the pairing process.
*/
virtual void onPassKeyEntry(NimBLEConnInfo& connInfo);

/**
* @brief Called when using numeric comparision for pairing.
* @param [in] connInfo A reference to a NimBLEConnInfo instance with information
Expand Down
Loading