Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed-os-example-ble-Advertising
Diff: source/BlueNRGGap.cpp
- Revision:
- 232:aead10288880
- Parent:
- 229:9981f62cdb1a
- Child:
- 234:3f6bba52b307
diff -r a0d2544b38cd -r aead10288880 source/BlueNRGGap.cpp
--- a/source/BlueNRGGap.cpp Fri May 20 16:59:24 2016 +0200
+++ b/source/BlueNRGGap.cpp Fri May 20 17:00:21 2016 +0200
@@ -50,8 +50,6 @@
const uint8_t *scan_response_payload = NULL;
uint8_t scan_rsp_length = 0;
-uint32_t advtInterval = BLUENRG_GAP_ADV_INTERVAL_MAX;
-
/*
* Utility to process GAP specific events (e.g., Advertising timeout)
*/
@@ -255,8 +253,7 @@
case GapAdvertisingData::ADVERTISING_INTERVAL: /**< Advertising Interval */
{
PRINTF("Advertising type: ADVERTISING_INTERVAL\n\r");
- advtInterval = (uint16_t)(*loadPtr.getUnitAtIndex(index).getDataPtr());
- PRINTF("advtInterval=%d\n\r", (int)advtInterval);
+ //uint32_t advInt = (uint32_t)(*loadPtr.getUnitAtIndex(index).getDataPtr());
break;
}
case GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA: /**< Manufacturer Specific Data */
@@ -457,13 +454,14 @@
hci_le_set_scan_resp_data(0, NULL);
}
- advtInterval = params.getIntervalInADVUnits();
- PRINTF("advtInterval=%ld advType=%d\n\r", advtInterval, params.getAdvertisingType());
+ //advInterval = params.getIntervalInADVUnits();
+ setAdvParameters();
+ PRINTF("advInterval=%d advType=%d\n\r", advInterval, params.getAdvertisingType());
/* Setting discoverable mode */
ret = aci_gap_set_discoverable(params.getAdvertisingType(), // AdvType
- advtInterval, // AdvIntervMin
- advtInterval, // AdvIntervMax
+ advInterval, // AdvIntervMin
+ advInterval, // AdvIntervMax
addr_type, // OwnAddrType
advFilterPolicy, // AdvFilterPolicy
local_name_length, // LocalNameLen
@@ -1269,6 +1267,25 @@
/**************************************************************************/
/*!
+ @brief Set advertising parameters according to the current state
+ Parameters value is set taking into account guidelines of the BlueNRG
+ time slots allocation
+*/
+/**************************************************************************/
+void BlueNRGGap::setAdvParameters(void)
+{
+ uint32_t advIntMS;
+
+ if(state.connected == 1) {
+ advIntMS = (conn_min_interval*1.25)-GUARD_INT;
+ advInterval = _advParams.MSEC_TO_ADVERTISEMENT_DURATION_UNITS(advIntMS);
+ } else {
+ advInterval = _advParams.getIntervalInADVUnits();
+ }
+}
+
+/**************************************************************************/
+/*!
@brief Set connection parameters according to the current state (ADV and/or SCAN)
Parameters value is set taking into account guidelines of the BlueNRG
time slots allocation
@@ -1278,18 +1295,22 @@
{
if (state.advertising == 1) {
- if (_scanningParams.getInterval() < _advParams.getInterval()) {
- scanInterval = _advParams.getIntervalInADVUnits();
- scanWindow = _advParams.getIntervalInADVUnits();
+ if (_scanningParams.getInterval() < advInterval) {
+ PRINTF("state.adv=1 scanInterval<advInterval\r\n");
+ scanInterval = advInterval;
+ scanWindow = advInterval;
} else {
+ PRINTF("state.adv=1 scanInterval>=advInterval\r\n");
scanInterval = _scanningParams.getInterval();
scanWindow = _scanningParams.getWindow();
}
- conn_min_interval = (_advParams.getInterval()+GUARD_INT)/1.25;
- conn_max_interval = (_advParams.getInterval()+GUARD_INT)/1.25;
+ conn_min_interval = (_advParams.ADVERTISEMENT_DURATION_UNITS_TO_MS(advInterval)+GUARD_INT)/1.25;
+ conn_max_interval = (_advParams.ADVERTISEMENT_DURATION_UNITS_TO_MS(advInterval)+GUARD_INT)/1.25;
} else {
+ PRINTF("state.adv = 0\r\n");
+
scanInterval = _scanningParams.getInterval();
scanWindow = _scanningParams.getWindow();
conn_min_interval = SCAN_DURATION_UNITS_TO_MSEC(scanInterval)/1.25;