10#include <QtCore/qloggingcategory.h>
11#include <QtCore/qdebug.h>
12#include <QtCore/qendian.h>
13#include <QtCore/qlist.h>
27 [nsUuid getUUIDBytes:uuidData];
29 std::copy(uuidData, uuidData + 16, qtUuidData.
data);
53 AdvertisementData(NSDictionary *AdvertisementData);
64 if (
value && [
value isKindOfClass:[NSString
class]])
71 if (
value && [
value isKindOfClass:[NSArray
class]]) {
72 NSArray *uuids =
static_cast<NSArray *
>(
value);
73 for (CBUUID *cbUuid
in uuids)
77 NSDictionary *advdict = [
advertisementData objectForKey:CBAdvertisementDataServiceDataKey];
79 [advdict enumerateKeysAndObjectsUsingBlock:^(CBUUID *
key, NSData *
val, BOOL *) {
85 if (
value && [
value isKindOfClass:[NSData
class]]) {
97@interface DarwinBTLEDeviceInquiry (PrivateAPI)
114-(
id)initWithNotifier:(LECBManagerNotifier *)aNotifier
129 [manager setDelegate:nil];
130 [elapsedTimer cancelTimer];
141 [manager setDelegate:nil];
149 [manager setDelegate:nil];
156- (
void)startWithTimeout:(
int)timeout
161 manager.reset([[CBCentralManager alloc] initWithDelegate:
self queue:leQueue],
165- (
void)centralManagerDidUpdateState:(CBCentralManager *)central
167#pragma clang diagnostic push
168#pragma clang diagnostic ignored "-Wunguarded-availability-new"
180 const auto state = central.state;
181 if (
state == CBManagerStatePoweredOn) {
186 [elapsedTimer cancelTimer];
188 [elapsedTimer startWithTimeout:inquiryTimeoutMS step:timeStepMS];
195 [manager scanForPeripheralsWithServices:nil
196 options:@{CBCentralManagerScanOptionAllowDuplicatesKey : @YES}];
198 [manager scanForPeripheralsWithServices:nil options:nil];
201 }
else if (
state == CBManagerStateUnsupported) {
212 [manager setDelegate:nil];
213 }
else if (
state == CBManagerStateUnauthorized) {
218 [manager setDelegate:nil];
219 }
else if (
state == CBManagerStatePoweredOff) {
227 [elapsedTimer cancelTimer];
229 [elapsedTimer startWithTimeout:powerOffTimeoutMS step:300];
235 [elapsedTimer cancelTimer];
237 [manager setDelegate:nil];
257#pragma clang diagnostic pop
267#pragma clang diagnostic push
268#pragma clang diagnostic ignored "-Wunguarded-availability-new"
272 if (
state == CBManagerStatePoweredOn)
276#pragma clang diagnostic pop
291 [manager setDelegate:nil];
292 [elapsedTimer cancelTimer];
297- (
void)centralManager:(CBCentralManager *)central
298 didDiscoverPeripheral:(CBPeripheral *)peripheral
299 advertisementData:(NSDictionary *)advertisementData
300 RSSI:(NSNumber *)RSSI
316 qCWarning(QT_BT_DARWIN) <<
"peripheral without NSUUID";
323 qCWarning(QT_BT_DARWIN) <<
"no way to address peripheral, QBluetoothUuid is null";
335 newDeviceInfo.setRssi([RSSI shortValue]);
337 if (qtAdvData.serviceUuids.size())
338 newDeviceInfo.setServiceUuids(qtAdvData.serviceUuids);
340 const QList<quint16> keysManufacturer = qtAdvData.manufacturerData.keys();
342 newDeviceInfo.setManufacturerData(
key, qtAdvData.manufacturerData.
value(
key));
346 newDeviceInfo.setServiceData(
key, qtAdvData.serviceData.
value(
key));
QBluetoothUuid deviceUuid
CBPeripheral * peripheral
DarwinBluetooth::LECBManagerNotifier * notifier
ObjCScopedPointer< CBCentralManager > manager
LEInquiryState internalState
QList< QBluetoothDeviceInfo > devices
ObjCScopedPointer< NSMutableDictionary > advertisementData
void deviceDiscovered(QBluetoothDeviceInfo deviceInfo)
void CBManagerError(QBluetoothDeviceDiscoveryAgent::Error error)
@ MissingPermissionsError
@ LowEnergyCoreConfiguration
iterator insert(const Key &key, const T &value)
Inserts a new item with the key and a value of value.
QNetworkReply * get(const QNetworkRequest &request)
Posts a request to obtain the contents of the target request and returns a new QNetworkReply object o...
static bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *member)
\threadsafe
void deleteLater()
\threadsafe
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool isNull() const noexcept
Returns true if this is the null UUID {00000000-0000-0000-0000-000000000000}; otherwise returns false...
const int defaultLEScanTimeoutMS
const int powerOffTimeoutMS
QBluetoothUuid qt_uuid(NSUUID *nsUuid)
dispatch_queue_t qt_LE_queue()
Combined button and popup list for selecting options.
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
#define qCWarning(category,...)
GLbitfield GLuint64 timeout
[4]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
Q_CORE_EXPORT int qEnvironmentVariableIntValue(const char *varName, bool *ok=nullptr) noexcept
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)
QT_END_NAMESPACE typedef QT_PREPEND_NAMESPACE(quintptr) WId
QNetworkAccessManager manager
QHash< QBluetoothUuid, QByteArray > serviceData
AdvertisementData(NSDictionary *AdvertisementData)
QHash< quint16, QByteArray > manufacturerData
QList< QBluetoothUuid > serviceUuids