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.
Diff: source/BlueNRGGap.cpp
- Revision:
- 181:749071129d2e
- Parent:
- 160:174387d53809
- Child:
- 186:7e3a549b9678
diff -r 174387d53809 -r 749071129d2e source/BlueNRGGap.cpp
--- a/source/BlueNRGGap.cpp Thu Oct 29 13:35:32 2015 +0100
+++ b/source/BlueNRGGap.cpp Thu Oct 29 15:59:17 2015 +0100
@@ -977,11 +977,32 @@
return &_scanningParams;
}
-static void radioScanning()
+static void radioScanning(void)
{
+ ble_error_t ret;
+
GapScanningParams* scanningParams = BlueNRGGap::getInstance().getScanningParams();
- BlueNRGGap::getInstance().startRadioScan(*scanningParams);
+ ret = BlueNRGGap::getInstance().startRadioScan(*scanningParams);
+
+ // On error, reschedule myself
+ // NOTE: this workaround causes a potential risk for an endless loop!!!
+ if(ret != BLE_ERROR_NONE) {
+ minar::Scheduler::postCallback(radioScanning).delay(minar::milliseconds(100));
+ }
+}
+
+static void makeConnection(void)
+{
+ ble_error_t ret;
+
+ ret = BlueNRGGap::getInstance().createConnection();
+
+ // On error, reschedule myself
+ // NOTE: this workaround causes a potential risk for an endless loop!!!
+ if(ret != BLE_ERROR_NONE) {
+ minar::Scheduler::postCallback(makeConnection).delay(minar::milliseconds(100));
+ }
}
// ANDREA
@@ -1035,11 +1056,9 @@
_scanning = false;
if(_connecting) {
- makeConnection();
+ minar::Scheduler::postCallback(makeConnection).delay(minar::milliseconds(100));
} else {
- PRINTF("re-startRadioScan\n\r");
- //startRadioScan(_scanningParams);
- minar::Scheduler::postCallback(radioScanning);
+ minar::Scheduler::postCallback(radioScanning).delay(minar::milliseconds(100));
}
break;
@@ -1063,18 +1082,14 @@
PRINTF("BTLE re-init\n\r");
}
- while((ret = aci_gap_start_general_discovery_proc(scanningParams.getInterval(),
+ ret = aci_gap_start_general_discovery_proc(scanningParams.getInterval(),
scanningParams.getWindow(),
addr_type,
- 1) // 1 to filter duplicates
- ) == ERR_COMMAND_DISALLOWED) {
- PRINTF("betzw: wait a bit ...\n\r");
+ 1); // 1 to filter duplicates
// FIXME: We need to wait for a while before starting discovery proc
// due to BlueNRG process queue handling
// NOTE: this workaround causes a potential risk for an endless loop!!!
- Clock_Wait(100);
- }
if (ret != BLE_STATUS_SUCCESS) {
printf("Start Discovery Procedure failed (0x%02X)\n\r", ret);
@@ -1147,7 +1162,7 @@
*countP = sizeof(permittedTxValues) / sizeof(int8_t);
}
-ble_error_t BlueNRGGap::makeConnection ()
+ble_error_t BlueNRGGap::createConnection ()
{
tBleStatus ret;
@@ -1157,22 +1172,13 @@
Scan_Interval, Scan_Window, Peer_Address_Type, Peer_Address, Own_Address_Type, Conn_Interval_Min,
Conn_Interval_Max, Conn_Latency, Supervision_Timeout, Conn_Len_Min, Conn_Len_Max
*/
- while((ret = aci_gap_create_connection(SCAN_P,
- SCAN_L,
- PUBLIC_ADDR,
- (unsigned char*)_peerAddr,
- PUBLIC_ADDR,
- CONN_P1, CONN_P2, 0,
- SUPERV_TIMEOUT, CONN_L1 , CONN_L2)
- ) == ERR_COMMAND_DISALLOWED) {
- PRINTF("wait a bit ...\n\r");
-
- // FIXME: We need to wait for a while before creating a connection
- // due to BlueNRG process queue handling
- // NOTE: this workaround causes a potential risk for an endless loop!!!
- Clock_Wait(100);
- }
-
+ ret = aci_gap_create_connection(SCAN_P,
+ SCAN_L,
+ PUBLIC_ADDR,
+ (unsigned char*)_peerAddr,
+ PUBLIC_ADDR,
+ CONN_P1, CONN_P2, 0,
+ SUPERV_TIMEOUT, CONN_L1 , CONN_L2);
if (ret != BLE_STATUS_SUCCESS){
printf("Error while starting connection (ret=0x%02X).\n\r", ret);
@@ -1193,18 +1199,18 @@
(void)connectionParams;
(void)scanParams;
- // Save the peer address
+ // Save the peer address
for(int i=0; i<BDADDR_SIZE; i++) {
_peerAddr[i] = peerAddr[i];
}
- _connecting = true;
+ _connecting = true;
if(_scanning) {
stopScan();
} else {
- //PRINTF("Calling makeConnection from connect()\n\r");
- return makeConnection();
+ PRINTF("Scheduling makeConnection from connect()\n\r");
+ minar::Scheduler::postCallback(makeConnection).delay(minar::milliseconds(100));
}
return BLE_ERROR_NONE;