bool DeviceListing::isAnImmediateAlertDevice(bt_remote_device_t *remoteDevice) { qDebug() << "XXXX DeviceListing::isAnImmediateAlertDevice() - entering"; bool foundImmediateAlert = false; if (!remoteDevice) { qDebug() << "XXXX DeviceListing::isAnImmediateAlertDevice() - no devices - exiting"; return foundImmediateAlert; } const int deviceType = bt_rdev_get_type(remoteDevice); if ((deviceType == BT_DEVICE_TYPE_LE_PUBLIC) || (deviceType == BT_DEVICE_TYPE_LE_PRIVATE)) { char **servicesArray = bt_rdev_get_services_gatt(remoteDevice); if (servicesArray) { for (int i = 0; servicesArray[i]; i++) { if (strcasecmp(servicesArray[i], IMMEDIATE_ALERT_SERVICE_UUID.toAscii().constData()) == 0) { foundImmediateAlert = true; break; } } bt_rdev_free_services(servicesArray); } } return foundImmediateAlert; }
bool DeviceListing::isAHeartRateMonitor(bt_remote_device_t * remoteDevice) { qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - entering"; bool foundMonitor = false; if (!remoteDevice) { qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - no devices - exiting"; return foundMonitor; } qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - checking device type"; const int deviceType = bt_rdev_get_type(remoteDevice); qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - deviceType=" << deviceType; if ((deviceType == BT_DEVICE_TYPE_LE_PUBLIC) || (deviceType == BT_DEVICE_TYPE_LE_PRIVATE)) { qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - BT_DEVICE_TYPE_LE_PUBLIC or BT_DEVICE_TYPE_LE_PRIVATE"; char **servicesArray = bt_rdev_get_services_gatt(remoteDevice); qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - checking services"; if (servicesArray) { qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - found services"; for (int i = 0; servicesArray[i]; i++) { qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - Checking type = " << servicesArray[i]; if (strcasecmp(servicesArray[i], HR_SERVICE_UUID.toAscii().constData()) == 0) { qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - HR service found"; foundMonitor = true; break; } else { qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - not an HR service"; } } qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - freeing buffer"; bt_rdev_free_services(servicesArray); } else { qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - no services found"; } } else { qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - not BT_DEVICE_TYPE_LE_PUBLIC nor BT_DEVICE_TYPE_LE_PRIVATE"; } qDebug() << "YYYY DeviceListing::isAHeartRateMonitor() - returning " << foundMonitor; return foundMonitor; }
bool DeviceListing::hasDeviceInformationService(bt_remote_device_t * remoteDevice) { qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - entering"; bool found_service=false; if (!remoteDevice) { qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - no devices - exiting"; return found_service; } qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - checking device type"; const int deviceType = bt_rdev_get_type(remoteDevice); qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - deviceType=" << deviceType; if ((deviceType == BT_DEVICE_TYPE_LE_PUBLIC) || (deviceType == BT_DEVICE_TYPE_LE_PRIVATE)) { qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - BT_DEVICE_TYPE_LE_PUBLIC or BT_DEVICE_TYPE_LE_PRIVATE"; char **servicesArray = bt_rdev_get_services_gatt(remoteDevice); qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - checking services"; if (servicesArray) { qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - found services"; for (int i = 0; servicesArray[i]; i++) { qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - Checking type = " << servicesArray[i]; if (strcasecmp(servicesArray[i], DEVICE_INFORMATION_SERVICE_UUID.toAscii().constData()) == 0) { qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - device information service found"; found_service = true;; } } qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - freeing buffer"; bt_rdev_free_services(servicesArray); } else { qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - no services found"; } } else { qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - not BT_DEVICE_TYPE_LE_PUBLIC nor BT_DEVICE_TYPE_LE_PRIVATE"; } qDebug() << "YYYY DeviceListing::hasDeviceInformationService() - returning false"; return found_service; }
//! [1] void RemoteDeviceInfo::update(const QString &deviceAddress) { bt_remote_device_t *remote_device = bt_rdev_get_device(deviceAddress.toAscii()); if (!remote_device) return; bool ok = false; char buffer[128]; const int bufferSize = sizeof(buffer); const QString unknown = tr("Unknown"); const QString notAvailable = tr("N/A"); // Display all known basic device information. ok = (bt_rdev_get_friendly_name(remote_device, buffer, bufferSize) == 0); m_name = (ok ? QString::fromLatin1(buffer) : unknown); m_address = deviceAddress; const int deviceClass = bt_rdev_get_device_class(remote_device, BT_COD_DEVICECLASS); if (deviceClass >= 0) { m_deviceClass.sprintf("0x%x", deviceClass); } else { m_deviceClass = unknown; } const int deviceType = bt_rdev_get_type(remote_device); m_deviceType = ((deviceType == BT_DEVICE_TYPE_LE_PUBLIC || deviceType == BT_DEVICE_TYPE_LE_PRIVATE) ? tr("Low energy") : tr("Regular")); m_encrypted = ((bt_rdev_is_encrypted(remote_device) >= 0) ? tr("true") : tr("false")); bool paired = false; ok = (bt_rdev_is_paired(remote_device, &paired) == 0); m_paired = (ok ? (paired ? tr("true") : tr("false")) : unknown); m_trusted = (bt_rdev_is_trusted(remote_device) ? tr("true") : tr("false")); int rssi = 0; ok = (bt_rdev_get_rssi(remote_device, &rssi) == 0); m_rssi = (ok ? QString::number(rssi) : unknown); // Display all known low energy parameters. uint16_t min_conn_ivl, max_conn_ivl, latency, super_tmo, appearance; ok = (bt_rdev_get_le_conn_params(remote_device, &min_conn_ivl, &max_conn_ivl, &latency, &super_tmo) == 0); m_minimumConnectionInterval = (ok ? QString::number(min_conn_ivl) : notAvailable); m_maximumConnectionInterval = (ok ? QString::number(max_conn_ivl) : notAvailable); m_latency = (ok ? QString::number(latency) : notAvailable); m_supervisoryTimeout = (ok ? QString::number(super_tmo) : notAvailable); uint8_t flags, connectable; ok = (bt_rdev_get_le_info(remote_device, &appearance, &flags, &connectable) == 0); m_appearance = (ok ? QString::number(appearance) : notAvailable); m_flags = (ok ? QString::number(flags) : notAvailable); m_connectable = (ok ? QString::number(connectable) : notAvailable); // clear model m_model->clear(); // Display any found regular Bluetooth services. // get more info here: http://www.bluetooth.org/en-us/specification/assigned-numbers-overview/service-discovery char **services_array = bt_rdev_get_services(remote_device); if (services_array) { for (int i = 0; services_array[i]; i++) { QVariantMap map; const QString uuid = QString::fromLatin1(services_array[i]); map["uuid"] = uuid; map["address"] = m_address; if (uuid.startsWith("0x0001")) map["serviceType"] = tr("SDP"); else if (uuid.startsWith("0x0003")) map["serviceType"] = tr("RFCOMM"); else if (uuid.startsWith("0x0008")) map["serviceType"] = tr("OBEX"); else if (uuid.startsWith("0x000c")) map["serviceType"] = tr("HTTP"); else if (uuid.startsWith("0x0100")) map["serviceType"] = tr("L2CAP"); else if (uuid.startsWith("0x000f")) map["serviceType"] = tr("BNEP"); else if (uuid.startsWith("0x1000")) map["serviceType"] = tr("Service Discovery"); else if (uuid.startsWith("0x1001")) map["serviceType"] = tr("Browse Group Descriptor"); else if (uuid.startsWith("0x1002")) map["serviceType"] = tr("Public Browse Group"); else if (uuid.startsWith("0x1101")) map["serviceType"] = tr("Serial Port"); else if (uuid.startsWith("0x1102")) map["serviceType"] = tr("Public Browse Group"); else if (uuid.startsWith("0x1105")) map["serviceType"] = tr("OBEX Object Push"); else if (uuid.startsWith("0x1106")) map["serviceType"] = tr("OBEX File Transfer"); else if (uuid.startsWith("0x1115")) map["serviceType"] = tr("Personal Area Networking"); else if (uuid.startsWith("0x1116")) map["serviceType"] = tr("Network Access Point"); else if (uuid.startsWith("0x1117")) map["serviceType"] = tr("Group Network"); else if (uuid.startsWith("0x1124")) map["serviceType"] = tr("Human Interface Device (HID)"); else if (uuid.startsWith("0x1200")) map["serviceType"] = tr("Device Identification (DID)"); else map["serviceType"] = tr("Other"); m_model->insert(map); } bt_rdev_free_services(services_array); } // Display any found Bluetooth low energy services. if (deviceType == BT_DEVICE_TYPE_LE_PUBLIC || deviceType == BT_DEVICE_TYPE_LE_PRIVATE) { services_array = bt_rdev_get_services_gatt(remote_device); if (services_array) { for (int i = 0; services_array[i]; i++) { QVariantMap map; map["uuid"] = QString::fromLatin1(services_array[i]); map["address"] = m_address; map["serviceType"] = tr("GATT"); m_model->insert(map); } bt_rdev_free_services(services_array); } } bt_rdev_free(remote_device); emit changed(); }