void DeviceListing::update() { _model->clear(); bt_remote_device_t **remoteDeviceArray; bt_remote_device_t *nextRemoteDevice = 0; remoteDeviceArray = bt_disc_retrieve_devices(BT_DISCOVERY_PREKNOWN, 0); if (remoteDeviceArray) { for (int i = 0; (nextRemoteDevice = remoteDeviceArray[i]); ++i) { QVariantMap map; char buffer[128]; const int bufferSize = sizeof(buffer); if (isAnImmediateAlertDevice(nextRemoteDevice)) { qDebug() << "XXXX DeviceListing::update() - found an Immediate Alert device"; 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("Paired Bluetooth Devices Capable of Immediate Alert"); _model->insert(map); } else { qDebug() << "XXXX DeviceListing::update() - not an Immediate Alert device"; } } bt_rdev_free_array(remoteDeviceArray); } }
bb::cascades::ArrayDataModel * BlueToothManager::getPairedDevices() { Gate g(this, "getPairedList()"); addresses.clear(); int count(0); char friendlyName[200]; char address[200]; NamedArrayDataModel * toReturn = new NamedArrayDataModel(); bt_remote_device_t ** devices( bt_disc_retrieve_devices(BT_DISCOVERY_PREKNOWN, &count)); for (int i = 0; i < count; ++i) { QString message("%1"); message = message.arg(i); Gate g2(this, (QString) message); bt_rdev_get_friendly_name(devices[i], friendlyName, 200); bt_rdev_get_addr(devices[i], address); addresses << address; QVariantMap map; QString summary = "%1 (%2)"; summary = summary.arg(address).arg(friendlyName); map["name"] = summary; g2.log() << friendlyName << address; toReturn->append(map); } return toReturn; }
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 DeviceListing::update() { qDebug() << "YYYY DeviceListing::update() - clearing model"; _model->clear(); bt_remote_device_t **remoteDeviceArray; bt_remote_device_t *nextRemoteDevice = 0; qDebug() << "YYYY DeviceListing::update() - about to call bt_disc_retrieve_devices(BT_DISCOVERY_ALL, 0)"; remoteDeviceArray = bt_disc_retrieve_devices(BT_DISCOVERY_ALL, 0); qDebug() << "YYYY DeviceListing::update() - returned from bt_disc_retrieve_devices(BT_DISCOVERY_ALL, 0)"; if (remoteDeviceArray) { qDebug() << "YYYY DeviceListing::update() - found devices"; for (int i = 0; (nextRemoteDevice = remoteDeviceArray[i]); ++i) { QVariantMap map; char buffer[128]; const int bufferSize = sizeof(buffer); qDebug() << "\nYYYY DeviceListing::update() - checking device"; bt_rdev_get_friendly_name(nextRemoteDevice, buffer, bufferSize); map["deviceName"] = QString::fromLatin1(buffer); qDebug() << "YYYY DeviceListing::update() - name=" << QString::fromLatin1(buffer); if (isAHeartRateMonitor(nextRemoteDevice)) { qDebug() << "YYYY DeviceListing::update() - found an HR device"; 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("Paired Bluetooth Devices"); qDebug() << "YYYY DeviceListing::update() - address=" << QString::fromLatin1(buffer); _model->insert(map); } else { qDebug() << "YYYY DeviceListing::update() - not an HR device"; } } qDebug() << "YYYY DeviceListing::update() - freeing buffer"; bt_rdev_free_array(remoteDeviceArray); } qDebug() << "YYYY DeviceListing::update() - returning"; }
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); } }
//! [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(); }
ArduinoBTController::ArduinoBTController(QObject* parent) : QObject(parent) { // Initialize the bt device and SPP library APIs. int errorCode; errorCode = bt_device_init(BTControllerCallbackArduino); errorCode = bt_spp_init(); bt_remote_device_t **remote_device_array; bt_remote_device_t *next_remote_device = 0; // Retrieve and show all devices. remote_device_array = bt_disc_retrieve_devices(BT_DISCOVERY_ALL, 0); if (remote_device_array) { for (int i = 0; (next_remote_device = remote_device_array[i]); ++i) { QVariantMap map; char buffer[128]; const int bufferSize = sizeof(buffer); bt_rdev_get_friendly_name(next_remote_device, buffer, bufferSize); map["deviceName"] = QString::fromLatin1(buffer); bt_rdev_get_addr(next_remote_device, buffer); map["deviceAddress"] = QString::fromLatin1(buffer); if ( (strcmp(buffer, "00:12:09:12:02:05") == 0) or (strcmp(buffer, "20:13:06:18:04:04") == 0) ) { //this are my devicesis my device's mac adress qDebug() << "Found the BT device"; int rssi = 0; bool ok = false; QString m_rssi; const QString unknown = tr("Unknown"); bt_remote_device_t *remote_device = bt_rdev_get_device(buffer); ok = (bt_rdev_get_rssi(remote_device, &rssi) == 0); m_rssi = (ok ? QString::number(rssi) : unknown); const int fd = bt_spp_open(buffer, (char *) SPP_SERVICE_UUID, false); if (fd >= 0) { fflush(stdout); if (fd >= 0) { //starting the reciever/thread, I could use this to get data from a sensor m_sppDataThread.init(fd,false); m_sppDataThread.start(); //the shield has the bad habit of disconnecting if the app idles to long, so I'm sending a heartbeatsignal m_keepAliveThread.init(fd); m_keepAliveThread.start(); if (m_sppDataThread.active()) { char buffer[80] = "HELLO"; //it is nice to say hello! write(m_sppDataThread.getFD(), buffer, strlen(buffer)); } } } else { qDebug() << "spp_open fail errno =" << QString::number(errno); } } map["deviceClass"] = QString::number( bt_rdev_get_device_class(next_remote_device, BT_COD_DEVICECLASS)); map["deviceType"] = tr("Bluetooth Devices Paired"); // qDebug() << "map" << map; } bt_rdev_free_array(remote_device_array); } // Initialize the btdevice and SPP library APIs. bt_device_init(BTControllerCallbackArduino); bt_spp_init(); }