fix adv and scan types

pull/8738/head
paul-szczepanek-arm 2018-11-09 10:48:18 +00:00 committed by Vincent Coubard
parent 5d077e6dbc
commit 60fb78795b
8 changed files with 55 additions and 46 deletions

View File

@ -143,7 +143,7 @@ enum advertising_type_t {
/** /**
* Device is connectable and expects connection from a specific peer. * Device is connectable and expects connection from a specific peer.
* * (3.75 ms or smaller Advertising Interval)
* @see Vol 3, Part C, Section 9.3.3 and Vol 6, Part B, Section 2.3.1.2. * @see Vol 3, Part C, Section 9.3.3 and Vol 6, Part B, Section 2.3.1.2.
*/ */
ADV_CONNECTABLE_DIRECTED, ADV_CONNECTABLE_DIRECTED,
@ -160,7 +160,12 @@ enum advertising_type_t {
* *
* @see Vol 3, Part C, Section 9.3.2 and Vol 6, Part B, Section 2.3.1.3. * @see Vol 3, Part C, Section 9.3.2 and Vol 6, Part B, Section 2.3.1.3.
*/ */
ADV_NON_CONNECTABLE_UNDIRECTED ADV_NON_CONNECTABLE_UNDIRECTED,
/**
* Device is connectable and expects connection from a specific peer (sent at long user set intervals).
*/
ADV_CONNECTABLE_DIRECTED_LOW_DUTY
}; };
struct advertising_data_status_t : SafeEnum<advertising_data_status_t, uint8_t >{ struct advertising_data_status_t : SafeEnum<advertising_data_status_t, uint8_t >{
@ -204,6 +209,9 @@ struct advertising_event_t {
case ADV_NON_CONNECTABLE_UNDIRECTED: case ADV_NON_CONNECTABLE_UNDIRECTED:
value = 0x20; value = 0x20;
break; break;
case ADV_CONNECTABLE_DIRECTED_LOW_DUTY:
value = 0x2D;
break;
} }
} }

View File

@ -1284,15 +1284,14 @@ public:
/* scanning */ /* scanning */
ble_error_t setScanParameters( ble_error_t setScanParameters(
const GapScanningParams* params = NULL, const GapScanningParams* params
const GapScanningParams* params = NULL,
const GapScanningParams* params = NULL
) { ) {
return startRadioScan(params); /* Requesting action from porter(s): override this API if this capability is supported. */
return BLE_ERROR_NOT_IMPLEMENTED;
}; };
ble_error_t startScan( ble_error_t startScan(
ble::scanning_filter_duplicates_t filtering = SCAN_FILTER_DUPLICATES_DISABLED, ble::scanning_filter_duplicates_t filtering = ble::SCAN_FILTER_DUPLICATES_DISABLED,
uint32_t duration = 0, uint32_t duration = 0,
uint32_t period = 0 uint32_t period = 0
) { ) {

View File

@ -722,7 +722,7 @@ public:
uint16_t appearance = GENERIC_TAG; uint16_t appearance = GENERIC_TAG;
const uint8_t *field = findField(AdvertisingData::APPEARANCE); const uint8_t *field = findField(AdvertisingData::APPEARANCE);
if (field) { if (field) {
memcpy((uint8_t*)appearance, field, 2); memcpy((uint8_t*)&appearance, field, 2);
} }
return appearance; return appearance;
} }

View File

@ -271,21 +271,24 @@ public:
the local IRK from the resolving list. If the resolving list the local IRK from the resolving list. If the resolving list
contains no matching entry, use previously set random address. */ contains no matching entry, use previously set random address. */
}; };
own_address_type_t(type value) : ble::SafeEnum<own_address_type_t, uint8_t>(value) { }
}; };
struct peer_address_type_t : ble::SafeEnum<peer_address_type_t, uint8_t> { struct peer_address_type_t : ble::SafeEnum<peer_address_type_t, uint8_t> {
enum type { enum type {
PUBLIC = 0, /**< Public Device Address or Public Identity Address. */ PUBLIC = 0, /**< Public Device Address or Public Identity Address. */
RANDOM /**< Random Device Address or Random (static) Identity Address. */ RANDOM /**< Random Device Address or Random (static) Identity Address. */
}; };
peer_address_type_t(type value) : ble::SafeEnum<peer_address_type_t, uint8_t>(value) { }
}; };
public: public:
GapExtendedAdvertisingParams() : GapExtendedAdvertisingParams() :
_advType(ble::advertising_event_t().connectable(true).scannable_advertising(true)), _advType(ble::ADV_CONNECTABLE_UNDIRECTED),
_minInterval(0), _minInterval(0),
_maxInterval(0), _maxInterval(0),
_peerAddressType(), _peerAddressType(peer_address_type_t::PUBLIC),
_ownAddressType(), _ownAddressType(own_address_type_t::PUBLIC),
_policy(ble::ADV_POLICY_IGNORE_WHITELIST), _policy(ble::ADV_POLICY_IGNORE_WHITELIST),
_primaryPhy(ble::phy_t::LE_1M), _primaryPhy(ble::phy_t::LE_1M),
_secondaryPhy(ble::phy_t::LE_1M), _secondaryPhy(ble::phy_t::LE_1M),
@ -296,7 +299,9 @@ public:
_channel38(1), _channel38(1),
_channel39(1), _channel39(1),
_anonymous(0), _anonymous(0),
_notifyOnScan(1) { } _notifyOnScan(1),
_legacyPDU(0),
_includeHeaderTxPower(0) { }
/** /**
* Update the advertising type. * Update the advertising type.
@ -314,7 +319,7 @@ public:
* *
* @return Advertising type. * @return Advertising type.
*/ */
ble::advertising_event_t getType() const { ble::advertising_type_t getType() const {
return _advType; return _advType;
} }
@ -372,7 +377,6 @@ public:
_channel39 = channel39; _channel39 = channel39;
} }
//TODO new type in params
own_address_type_t getOwnAddressType() const { own_address_type_t getOwnAddressType() const {
return _ownAddressType; return _ownAddressType;
} }
@ -463,6 +467,26 @@ public:
return _notifyOnScan; return _notifyOnScan;
} }
void setUseLegacyPDU(
bool enable = true
) {
_legacyPDU = enable;
}
bool getUseLegacyPDU() const {
return _legacyPDU;
}
void includeTxPowerInHeader(
bool enable = true
) {
_includeHeaderTxPower = enable;
}
bool getTxPowerInHeader() const {
return _includeHeaderTxPower;
}
/* helper get functions */ /* helper get functions */
uint32_t getMinPrimaryInterval() const { uint32_t getMinPrimaryInterval() const {
@ -502,11 +526,11 @@ public:
} }
private: private:
ble::advertising_event_t _advType; ble::advertising_type_t _advType;
uint32_t _minInterval; uint32_t _minInterval;
uint32_t _maxInterval; uint32_t _maxInterval;
peer_address_type_t _peerAddressType; peer_address_type_t _peerAddressType;
BLEProtocol::AddressType_t _ownAddressType; own_address_type_t _ownAddressType;
ble::advertising_policy_mode_t _policy; ble::advertising_policy_mode_t _policy;
ble::phy_t _primaryPhy; ble::phy_t _primaryPhy;
ble::phy_t _secondaryPhy; ble::phy_t _secondaryPhy;
@ -518,6 +542,8 @@ private:
uint8_t _channel39:1; uint8_t _channel39:1;
uint8_t _anonymous:1; uint8_t _anonymous:1;
uint8_t _notifyOnScan:1; uint8_t _notifyOnScan:1;
uint8_t _legacyPDU:1;
uint8_t _includeHeaderTxPower:1;
}; };
/** /**

View File

@ -206,26 +206,6 @@ public:
return _activeScanning; return _activeScanning;
} }
/**
*
* @param phy LE_2m is illegal
*/
void setScanningPhy(ble::phy_t phy) {
_phy = phy;
}
ble::phy_t getScanningPhy() {
return _phy;
}
ble::scanning_policy_mode_t getScanningPolicy() {
return _mode;
}
void setScanningPolicy(ble::scanning_policy_mode_t mode) {
_mode = mode;
}
private: private:
/** /**
* Scan interval in units of 625us (between 2.5ms and 10.24s). * Scan interval in units of 625us (between 2.5ms and 10.24s).

View File

@ -651,6 +651,7 @@ struct advertising_event_properties_t {
scannable = true; scannable = true;
break; break;
case ADV_CONNECTABLE_DIRECTED: case ADV_CONNECTABLE_DIRECTED:
case ADV_CONNECTABLE_DIRECTED_LOW_DUTY:
connectable = true; connectable = true;
directed = true; directed = true;
break; break;

View File

@ -21,9 +21,7 @@ GapScanningParams::GapScanningParams(uint16_t interval, uint16_t window, uint16_
_interval(MSEC_TO_SCAN_DURATION_UNITS(interval)), _interval(MSEC_TO_SCAN_DURATION_UNITS(interval)),
_window(MSEC_TO_SCAN_DURATION_UNITS(window)), _window(MSEC_TO_SCAN_DURATION_UNITS(window)),
_timeout(timeout), _timeout(timeout),
_activeScanning(activeScanning), _activeScanning(activeScanning) {
_phy(ble::phy_t::LE_1M),
_mode(ble::SCAN_POLICY_IGNORE_WHITELIST) {
/* stay within limits */ /* stay within limits */
if (_interval < SCAN_INTERVAL_MIN) { if (_interval < SCAN_INTERVAL_MIN) {
_interval = SCAN_INTERVAL_MIN; _interval = SCAN_INTERVAL_MIN;

View File

@ -1633,7 +1633,7 @@ ble_error_t GenericGap::setAdvertisingParams(AdvHandle_t handle, const GapAdvert
address_t dummy_peer_address; address_t dummy_peer_address;
pal::advertising_event_properties_t event_properties(adv_type); pal::advertising_event_properties_t event_properties((pal::advertising_type_t::type)adv_type);
return _pal_gap.set_extended_advertising_parameters( return _pal_gap.set_extended_advertising_parameters(
Gap::LEGACY_ADVERTISING_HANDLE, Gap::LEGACY_ADVERTISING_HANDLE,
@ -1660,8 +1660,7 @@ ble_error_t GenericGap::setAdvertisingParams(AdvHandle_t handle, const GapExtend
} }
pal::advertising_channel_map_t channel_map(params->getChannel37(), params->getChannel38(), params->getChannel39()); pal::advertising_channel_map_t channel_map(params->getChannel37(), params->getChannel38(), params->getChannel39());
pal::advertising_event_properties_t event_properties;//TODO pal::advertising_event_properties_t event_properties((pal::advertising_type_t::type)params->getType());
//params->getAdvertisingType()
return _pal_gap.set_extended_advertising_parameters( return _pal_gap.set_extended_advertising_parameters(
handle, handle,
@ -1669,10 +1668,8 @@ ble_error_t GenericGap::setAdvertisingParams(AdvHandle_t handle, const GapExtend
(pal::advertising_interval_t)params->getMinPrimaryInterval(), (pal::advertising_interval_t)params->getMinPrimaryInterval(),
(pal::advertising_interval_t)params->getMaxPrimaryInterval(), (pal::advertising_interval_t)params->getMaxPrimaryInterval(),
channel_map, channel_map,
params->getOwnAddressType(), (pal::own_address_type_t::type)params->getOwnAddressType().value(),
pal::own_address_type_t::PUBLIC_ADDRESS, (pal::advertising_peer_address_type_t::type)params->getPeerAddressType().value(),
params->getPeerAddressType(),
pal::advertising_peer_address_type_t::PUBLIC_ADDRESS,
params->getPeerAddress(), params->getPeerAddress(),
(pal::advertising_filter_policy_t::type) params->getPolicyMode(), (pal::advertising_filter_policy_t::type) params->getPolicyMode(),
(pal::advertising_power_t) params->getTxPower(), (pal::advertising_power_t) params->getTxPower(),