Skip to content

Commit 70e5a14

Browse files
committed
BLE: Generic Gap - fix address management.
1 parent c8747aa commit 70e5a14

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

features/FEATURE_BLE/ble/generic/GenericGap.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,6 @@ class GenericGap : public ::Gap {
282282
pal::Gap &_pal_gap;
283283
pal::GenericAccessService &_gap_service;
284284
BLEProtocol::AddressType_t _address_type;
285-
pal::address_t _address;
286285
pal::initiator_policy_t _initiator_policy_mode;
287286
pal::scanning_filter_policy_t _scanning_filter_policy;
288287
pal::advertising_filter_policy_t _advertising_filter_policy;

features/FEATURE_BLE/source/generic/GenericGap.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,6 @@ GenericGap::GenericGap(
376376
_pal_gap(pal_gap),
377377
_gap_service(generic_access_service),
378378
_address_type(BLEProtocol::AddressType::PUBLIC),
379-
_address(),
380379
_initiator_policy_mode(pal::initiator_policy_t::NO_FILTER),
381380
_scanning_filter_policy(pal::scanning_filter_policy_t::NO_FILTER),
382381
_advertising_filter_policy(pal::advertising_filter_policy_t::NO_FILTER),
@@ -416,7 +415,6 @@ ble_error_t GenericGap::setAddress(
416415
}
417416

418417
_address_type = type;
419-
_address = pal::address_t(address, true);
420418
return BLE_ERROR_NONE;
421419
}
422420

@@ -439,7 +437,14 @@ ble_error_t GenericGap::getAddress(
439437
BLEProtocol::AddressBytes_t address
440438
) {
441439
*type = _address_type;
442-
memcpy(address, _address.data(), _address.size());
440+
pal::address_t address_value;
441+
if (_address_type == BLEProtocol::AddressType::PUBLIC) {
442+
address_value = _pal_gap.get_device_address();
443+
} else {
444+
address_value = _pal_gap.get_random_address();
445+
}
446+
447+
memcpy(address, address_value.data(), address_value.size());
443448
return BLE_ERROR_NONE;
444449
}
445450

@@ -990,14 +995,20 @@ void GenericGap::on_connection_complete(const pal::GapConnectionCompleteEvent& e
990995
e.connection_latency,
991996
e.supervision_timeout
992997
};
998+
pal::address_t address;
999+
if (_address_type == BLEProtocol::AddressType::PUBLIC) {
1000+
address = _pal_gap.get_device_address();
1001+
} else {
1002+
address = _pal_gap.get_random_address();
1003+
}
9931004

9941005
processConnectionEvent(
9951006
e.connection_handle,
9961007
e.role.value() == e.role.MASTER ? ::Gap::CENTRAL : ::Gap::PERIPHERAL,
9971008
(BLEProtocol::AddressType_t) e.peer_address_type.value(),
9981009
e.peer_address.data(),
9991010
_address_type,
1000-
_address.data(),
1011+
address.data(),
10011012
&connection_params
10021013
);
10031014
} else {

features/FEATURE_BLE/targets/TARGET_CORDIO/CordioPalGap.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class Gap : public ::ble::pal::Gap {
3232
}
3333

3434
virtual ble_error_t set_random_address(const address_t& address) {
35+
device_random_address = address;
3536
DmDevSetRandAddr(const_cast<uint8_t*>(address.data()));
3637
return BLE_ERROR_NONE;
3738
}

0 commit comments

Comments
 (0)