summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimur Pocheptsov <timur.pocheptsov@theqtcompany.com>2015-10-28 17:47:36 +0100
committerSimon Hausmann <simon.hausmann@theqtcompany.com>2015-10-29 15:21:51 +0000
commita7617f963c1d375fb7ac7d5c17f450acdb2796b8 (patch)
tree131b8ecfd605c035e092b7be530c470c7bcaf782
parente6600461432790ac2f1111df734951ff472e8161 (diff)
downloadqtconnectivity-a7617f963c1d375fb7ac7d5c17f450acdb2796b8.tar.gz
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>
-rw-r--r--src/bluetooth/osx/osxbtledeviceinquiry.mm73
-rw-r--r--src/bluetooth/osx/osxbtledeviceinquiry_p.h12
2 files changed, 43 insertions, 42 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
diff --git a/src/bluetooth/osx/osxbtledeviceinquiry_p.h b/src/bluetooth/osx/osxbtledeviceinquiry_p.h
index ca70bcc1..cb86cd14 100644
--- a/src/bluetooth/osx/osxbtledeviceinquiry_p.h
+++ b/src/bluetooth/osx/osxbtledeviceinquiry_p.h
@@ -86,6 +86,13 @@ public:
QT_END_NAMESPACE
// Bluetooth Low Energy scan for iOS and OS X.
+// Strong enum would be quite handy ...
+enum LEScanPhase
+{
+ noActivity,
+ startingScan,
+ activeScan
+};
@interface QT_MANGLE_NAMESPACE(OSXBTLEDeviceInquiry) : NSObject
{// Protocols are adopted in the mm file.
@@ -95,11 +102,8 @@ QT_END_NAMESPACE
NSMutableDictionary *peripherals; // Found devices.
CBCentralManager *manager;
- // pending - waiting for a status update first.
- bool pendingStart;
+ LEScanPhase scanPhase;
bool cancelled;
- // scan actually started.
- bool isActive;
QTime startTime;
}