Skip to content

Commit 10ed826

Browse files
authored
Merge pull request adafruit#632 from ArturA-MS/pairing_auth_req_etc
Added support for passkey-entry and made some usability improvements
2 parents 1429db9 + a4d35c8 commit 10ed826

File tree

4 files changed

+44
-1
lines changed

4 files changed

+44
-1
lines changed

libraries/Bluefruit52Lib/src/BLESecurity.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,18 @@ static void _passkey_display_cabllack_dfr(BLESecurity::pair_passkey_cb_t func, u
7676
}
7777
}
7878

79+
static void _passkey_request_callback_dfr(BLESecurity::pair_passkey_req_cb_t func, uint16_t conn_hdl)
80+
{
81+
uint8_t passkey[6];
82+
func(conn_hdl, passkey);
83+
sd_ble_gap_auth_key_reply(conn_hdl, BLE_GAP_AUTH_KEY_TYPE_PASSKEY, passkey);
84+
}
85+
7986
BLESecurity::BLESecurity(void)
8087
{
8188
_sec_param = _sec_param_default;
8289
_passkey_cb = NULL;
90+
_passkey_req_cb = NULL;
8391
_complete_cb = NULL;
8492
_secured_cb = NULL;
8593
}
@@ -207,6 +215,12 @@ bool BLESecurity::setPairPasskeyCallback(pair_passkey_cb_t fp)
207215
return true;
208216
}
209217

218+
void BLESecurity::setPairPasskeyRequestCallback(pair_passkey_req_cb_t fp)
219+
{
220+
_passkey_req_cb = fp;
221+
_sec_param.mitm = 1;
222+
}
223+
210224
void BLESecurity::setPairCompleteCallback(pair_complete_cb_t fp)
211225
{
212226
_complete_cb = fp;
@@ -308,6 +322,16 @@ void BLESecurity::_eventHandler(ble_evt_t* evt)
308322
}
309323
break;
310324

325+
case BLE_GAP_EVT_AUTH_KEY_REQUEST:
326+
{
327+
LOG_LV2("PAIR", "Passkey requested");
328+
if (_passkey_req_cb)
329+
{
330+
ada_callback(NULL, 0, _passkey_request_callback_dfr, _passkey_req_cb, conn_hdl);
331+
}
332+
}
333+
break;
334+
311335
#ifdef NRF_CRYPTOCELL
312336
case BLE_GAP_EVT_LESC_DHKEY_REQUEST:
313337
{

libraries/Bluefruit52Lib/src/BLESecurity.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@
3535
class BLESecurity
3636
{
3737
public:
38-
typedef bool (*pair_passkey_cb_t ) (uint16_t conn_hdl, uint8_t const passkey[6], bool match_request);
38+
typedef bool (*pair_passkey_cb_t) (uint16_t conn_hdl, uint8_t const passkey[6], bool match_request);
39+
typedef void (*pair_passkey_req_cb_t) (uint16_t conn_hdl, uint8_t passkey[6]);
3940
typedef void (*pair_complete_cb_t) (uint16_t conn_hdl, uint8_t auth_status);
4041
typedef void (*secured_conn_cb_t) (uint16_t conn_hdl);
4142

@@ -57,6 +58,7 @@ class BLESecurity
5758

5859
//------------- Callbacks -------------//
5960
bool setPairPasskeyCallback(pair_passkey_cb_t fp);
61+
void setPairPasskeyRequestCallback(pair_passkey_req_cb_t fp);
6062
void setPairCompleteCallback(pair_complete_cb_t fp);
6163
void setSecuredCallback(secured_conn_cb_t fp);
6264

@@ -82,6 +84,7 @@ class BLESecurity
8284
bond_keys_t _bond_keys; // Shared keys with bonded device during securing connection, size ~ 80 bytes
8385

8486
pair_passkey_cb_t _passkey_cb;
87+
pair_passkey_req_cb_t _passkey_req_cb;
8588
pair_complete_cb_t _complete_cb;
8689
secured_conn_cb_t _secured_cb;
8790
};

libraries/Bluefruit52Lib/src/bluefruit.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,21 @@ bool AdafruitBluefruit::connected(uint16_t conn_hdl)
607607
return conn && conn->connected();
608608
}
609609

610+
uint8_t AdafruitBluefruit::getConnectedHandles(uint16_t* hdl_list, uint8_t max_count)
611+
{
612+
uint8_t count = 0;
613+
for (uint16_t hdl = 0; (hdl < BLE_MAX_CONNECTION) && (count < max_count); ++hdl)
614+
{
615+
if (this->connected(hdl))
616+
{
617+
hdl_list[count] = hdl;
618+
count++;
619+
}
620+
}
621+
622+
return count;
623+
}
624+
610625
bool AdafruitBluefruit::disconnect(uint16_t conn_hdl)
611626
{
612627
BLEConnection* conn = this->Connection(conn_hdl);

libraries/Bluefruit52Lib/src/bluefruit.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ class AdafruitBluefruit
164164
uint8_t connected (void); // Number of connected
165165
bool connected (uint16_t conn_hdl);
166166

167+
uint8_t getConnectedHandles(uint16_t* hdl_list, uint8_t max_count);
167168
uint16_t connHandle (void);
168169

169170
// Alias to BLEConnection API()

0 commit comments

Comments
 (0)