void DeviceListing::discover() { qDebug() << "YYYY DeviceListing::discover()"; bb::system::SystemToast toast; toast.setBody(tr("Searching for Bluetooth LE devices ... please wait until search has completed ...")); toast.setPosition(bb::system::SystemUiPosition::MiddleCenter); toast.exec(); bt_disc_start_inquiry(BT_INQUIRY_GIAC); qDebug() << "XXXX done scanning"; bt_disc_cancel_inquiry(); toast.setBody(tr("Search completed!")); toast.exec(); update(); bt_remote_device_t *nextRemoteDevice = 0; qDebug() << "YYYY DeviceListing::discover() - about to call bt_disc_retrieve_devices(BT_DISCOVERY_ALL, 0)"; bt_remote_device_t **remoteDeviceArray = bt_disc_retrieve_devices(BT_DISCOVERY_ALL, 0); qDebug() << "YYYY DeviceListing::discover() - returned from bt_disc_retrieve_devices(BT_DISCOVERY_ALL, 0)"; if (remoteDeviceArray) { qDebug() << "YYYY DeviceListing::discover() - found devices"; for (int i = 0; (nextRemoteDevice = remoteDeviceArray[i]); ++i) { QVariantMap map; char buffer[128]; const int bufferSize = sizeof(buffer); qDebug() << "YYYY DeviceListing::discover() - checking device"; if (hasDeviceInformationService(nextRemoteDevice)) { qDebug() << "YYYY DeviceListing::discover() - found device information service"; bt_rdev_get_friendly_name(nextRemoteDevice, buffer, bufferSize); map["deviceName"] = QString::fromLatin1(buffer); qDebug() << "YYYY DeviceListing::discover() - name=" << QString::fromLatin1(buffer); bt_rdev_get_address(nextRemoteDevice, buffer); map["deviceAddress"] = QString::fromLatin1(buffer); map["deviceClass"] = QString::number(bt_rdev_get_device_class(nextRemoteDevice, BT_COD_DEVICECLASS)); map["deviceType"] = tr("Bluetooth Devices Nearby"); qDebug() << "YYYY DeviceListing::discover() - address=" << QString::fromLatin1(buffer); _model->insert(map); } else { qDebug() << "YYYY DeviceListing::discover() - no device information service"; } } qDebug() << "YYYY DeviceListing::discover() - freeing buffer"; bt_rdev_free_array(remoteDeviceArray); } qDebug() << "YYYY DeviceListing::discover() - returning"; }
void DevicesManager::findBleDevices() { emit startedScanningForDevices(); bb::system::SystemToast toast; toast.setBody("Searching for Bluetooth LE devices ... please wait until search has completed ..."); toast.setPosition(bb::system::SystemUiPosition::MiddleCenter); toast.show(); if (!bt_initialised) { // Initialise the Bluetooth device and allocate the required resources for the library. Specify a call back function for Bluetooth events. bt_device_init(btEvent); // make sure the Bluetooth radio is switched on if (!bt_ldev_get_power()) { bt_ldev_set_power(true); } bt_initialised = true; } DataContainer *dc = DataContainer::getInstance(); dc->clearDeviceList(); // note that this is a blocking call. For each device discovered however, a call back is made to btEvent with event type BT_EVT_DEVICE_ADDED bt_disc_start_inquiry(BT_INQUIRY_GIAC); bt_remote_device_t **remoteDeviceArray = 0; bt_remote_device_t *remoteDevice = 0; remoteDeviceArray = bt_disc_retrieve_devices(BT_DISCOVERY_ALL, 0); int device_count; device_count=0; if (remoteDeviceArray) { for (int i = 0; (remoteDevice = remoteDeviceArray[i]); ++i) { const int deviceType = bt_rdev_get_type(remoteDevice); if ((deviceType == BT_DEVICE_TYPE_LE_PUBLIC) || (deviceType == BT_DEVICE_TYPE_LE_PRIVATE)) { device_count++; DevicesManager::getDevicesManager()->extractAndStoreBleDeviceAttributes(remoteDevice); } bt_rdev_free(remoteDevice); } // qDebug() << "YYYY DevicesManager::findBleDevices() - freeing buffer"; // if (remoteDeviceArray) { // bt_rdev_free_array(remoteDeviceArray); // } } qDebug() << "XXXX number of devices found=" << device_count; dc->setDeviceCount(device_count); emit setDeviceCount(QVariant(device_count)); emit finishedScanningForDevices(); }
void DeviceListing::discover() { bb::system::SystemToast toast; toast.setBody(tr("Searching for Bluetooth devices ... please wait until search completed ...")); toast.setPosition(bb::system::SystemUiPosition::MiddleCenter); toast.show(); bt_disc_start_inquiry(BT_INQUIRY_GIAC); delay(5); bt_disc_cancel_inquiry(); toast.cancel(); toast.setBody(tr("Search completed!")); toast.exec(); update(); bt_remote_device_t *nextRemoteDevice = 0; bt_remote_device_t **remoteDeviceArray = bt_disc_retrieve_devices(BT_DISCOVERY_CACHED, 0); if (remoteDeviceArray) { for (int i = 0; (nextRemoteDevice = remoteDeviceArray[i]); ++i) { QVariantMap map; char buffer[128]; const int bufferSize = sizeof(buffer); if (isAnImmediateAlertDevice(nextRemoteDevice)) { bt_rdev_get_friendly_name(nextRemoteDevice, buffer, bufferSize); map["deviceName"] = QString::fromLatin1(buffer); bt_rdev_get_address(nextRemoteDevice, buffer); map["deviceAddress"] = QString::fromLatin1(buffer); map["deviceClass"] = QString::number(bt_rdev_get_device_class(nextRemoteDevice, BT_COD_DEVICECLASS)); map["deviceType"] = tr("Bluetooth Devices Nearby Capable of Immediate Alert"); _model->insert(map); } else { qDebug() << "XXXX DeviceListing::update() - not an Immediate Alert device"; } } bt_rdev_free_array(remoteDeviceArray); } }