diff options
author | Timur Pocheptsov <timur.pocheptsov@theqtcompany.com> | 2015-10-28 17:47:36 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2015-10-29 15:21:51 +0000 |
commit | a7617f963c1d375fb7ac7d5c17f450acdb2796b8 (patch) | |
tree | 131b8ecfd605c035e092b7be530c470c7bcaf782 /src/bluetooth/osx/osxbtledeviceinquiry.mm | |
parent | e6600461432790ac2f1111df734951ff472e8161 (diff) |
CoreBluetooth - simplify osxbledeviceinquiry's code.
Replace pendingStart and isActive + all places they have to be modified
with scanPhase and enum {startingScan, activeScan, noActivity}.
Change-Id: I29edff3b99fc877d0d52a5974aa64c9ff2faa584
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'src/bluetooth/osx/osxbtledeviceinquiry.mm')
-rw-r--r-- | src/bluetooth/osx/osxbtledeviceinquiry.mm | 73 |
1 files changed, 35 insertions, 38 deletions
diff --git a/src/bluetooth/osx/osxbtledeviceinquiry.mm b/src/bluetooth/osx/osxbtledeviceinquiry.mm index 86ef651e..28bfd1bc 100644 --- a/src/bluetooth/osx/osxbtledeviceinquiry.mm +++ b/src/bluetooth/osx/osxbtledeviceinquiry.mm @@ -131,9 +131,8 @@ using namespace QT_NAMESPACE; delegate = aDelegate; peripherals = [[NSMutableDictionary alloc] init]; manager = nil; - pendingStart = false; + scanPhase = noActivity; cancelled = false; - isActive = false; } return self; @@ -145,7 +144,7 @@ using namespace QT_NAMESPACE; if (manager) { [manager setDelegate:nil]; - if (isActive) + if (scanPhase == activeScan) [manager stopScan]; [manager release]; } @@ -159,13 +158,12 @@ using namespace QT_NAMESPACE; // Scan's timeout. Q_ASSERT_X(delegate, Q_FUNC_INFO, "invalid delegate (null)"); Q_ASSERT_X(manager, Q_FUNC_INFO, "invalid central (nil)"); - Q_ASSERT_X(!pendingStart, Q_FUNC_INFO, "invalid state"); + Q_ASSERT_X(scanPhase == activeScan, Q_FUNC_INFO, "invalid state"); Q_ASSERT_X(!cancelled, Q_FUNC_INFO, "invalid state"); - Q_ASSERT_X(isActive, Q_FUNC_INFO, "invalid state"); [manager setDelegate:nil]; [manager stopScan]; - isActive = false; + scanPhase = noActivity; delegate->LEdeviceInquiryFinished(); } @@ -173,20 +171,20 @@ using namespace QT_NAMESPACE; - (void)handlePoweredOffAfterDelay { // If we are here, this means: - // we received 'PoweredOff' while pendingStart == true + // we received 'PoweredOff' while scanPhase == startingScan // and no 'PoweredOn' after this. Q_ASSERT_X(delegate, Q_FUNC_INFO, "invalid delegate (null)"); - Q_ASSERT_X(pendingStart, Q_FUNC_INFO, "invalid state"); + Q_ASSERT_X(scanPhase == startingScan, Q_FUNC_INFO, "invalid state"); - pendingStart = false; + scanPhase = noActivity; if (cancelled) { // Timeout happened before // the second status update, but after 'stop'. delegate->LEdeviceInquiryFinished(); } else { - // Timeout and not 'stop' between 'start' - // and 'DidUpdateStatus': + // Timeout and no 'stop' between 'start' + // and 'centralManagerDidUpdateStatus': delegate->LEnotSupported(); } } @@ -211,7 +209,7 @@ using namespace QT_NAMESPACE; } startTime = QTime(); - pendingStart = true; + scanPhase = startingScan; manager = [CBCentralManager alloc]; manager = [manager initWithDelegate:self queue:nil]; if (!manager) { @@ -228,26 +226,25 @@ using namespace QT_NAMESPACE; const CBCentralManagerState state = central.state; - if (pendingStart && (state == CBCentralManagerStatePoweredOn - || state == CBCentralManagerStateUnsupported - || state == CBCentralManagerStateUnauthorized - || state == CBCentralManagerStatePoweredOff)) { + if (scanPhase == startingScan && (state == CBCentralManagerStatePoweredOn + || state == CBCentralManagerStateUnsupported + || state == CBCentralManagerStateUnauthorized + || state == CBCentralManagerStatePoweredOff)) { // We probably had 'PoweredOff' before, // cancel the previous handlePoweredOffAfterDelay. [NSObject cancelPreviousPerformRequestsWithTarget:self]; } if (cancelled) { - Q_ASSERT_X(!isActive, Q_FUNC_INFO, "isActive is true"); - pendingStart = false; + Q_ASSERT_X(scanPhase != activeScan, Q_FUNC_INFO, "in 'activeScan' phase"); + scanPhase = noActivity; delegate->LEdeviceInquiryFinished(); return; } if (state == CBCentralManagerStatePoweredOn) { - if (pendingStart) { - pendingStart = false; - isActive = true; + if (scanPhase == startingScan) { + scanPhase = activeScan; #ifndef Q_OS_OSX const NSTimeInterval timeout([QT_MANGLE_NAMESPACE(OSXBTLEDeviceInquiry) inquiryLength] / 1000); Q_ASSERT_X(timeout > 0., Q_FUNC_INFO, "invalid scan timeout"); @@ -257,19 +254,19 @@ using namespace QT_NAMESPACE; [manager scanForPeripheralsWithServices:nil options:nil]; } // Else we ignore. } else if (state == CBCentralManagerStateUnsupported || state == CBCentralManagerStateUnauthorized) { - if (pendingStart) { - pendingStart = false; + if (scanPhase == startingScan) { + scanPhase = noActivity; delegate->LEnotSupported(); - } else if (isActive) { + } else if (scanPhase == activeScan) { // Cancel stopScan: [NSObject cancelPreviousPerformRequestsWithTarget:self]; - isActive = false; + scanPhase = noActivity; [manager stopScan]; delegate->LEdeviceInquiryError(QBluetoothDeviceDiscoveryAgent::PoweredOffError); } } else if (state == CBCentralManagerStatePoweredOff) { - if (pendingStart) { + if (scanPhase == startingScan) { #ifndef Q_OS_OSX // On iOS a user can see at this point an alert asking to enable // Bluetooth in the "Settings" app. If a user does, @@ -277,13 +274,13 @@ using namespace QT_NAMESPACE; [self performSelector:@selector(handlePoweredOffAfterDelay) withObject:nil afterDelay:30.]; return; #endif - pendingStart = false; + scanPhase = noActivity; delegate->LEnotSupported(); - } else if (isActive) { + } else if (scanPhase == activeScan) { // Cancel stopScan: [NSObject cancelPreviousPerformRequestsWithTarget:self]; - isActive = false; + scanPhase = noActivity; [manager stopScan]; delegate->LEdeviceInquiryError(QBluetoothDeviceDiscoveryAgent::PoweredOffError); } // Else we ignore. @@ -302,23 +299,23 @@ using namespace QT_NAMESPACE; - (void)stop { - if (!pendingStart) { - // pendingStart == true means either no selector at all, - // or handlePoweredOffAfter delay and we do not want to cancel it yet, - // waiting for DidUpdateState or handlePoweredOffAfter, whoever + if (scanPhase != startingScan) { + // startingScan means either no selector at all, + // or handlePoweredOffAfterDelay and we do not want to cancel it yet, + // waiting for DidUpdateState or handlePoweredOffAfterDelay, whoever // fires first ... [NSObject cancelPreviousPerformRequestsWithTarget:self]; } - if (pendingStart || cancelled) { + if (scanPhase == startingScan || cancelled) { // We have to wait for a status update or handlePoweredOffAfterDelay. cancelled = true; return; } - if (isActive) { + if (scanPhase == activeScan) { [manager stopScan]; - isActive = false; + scanPhase = noActivity; delegate->LEdeviceInquiryFinished(); } } @@ -331,7 +328,7 @@ using namespace QT_NAMESPACE; using namespace OSXBluetooth; - if (!isActive) + if (scanPhase != activeScan) return; Q_ASSERT_X(delegate, Q_FUNC_INFO, "invalid delegate (null)"); @@ -376,7 +373,7 @@ using namespace QT_NAMESPACE; - (bool)isActive { - return pendingStart || isActive; + return scanPhase == startingScan || scanPhase == activeScan; } - (const QTime&)startTime |