Russian Qt Forum

Qt => Вопросы новичков => Тема начата: avrik от Май 18, 2015, 11:51



Название: Bluetooth и Qt
Отправлено: avrik от Май 18, 2015, 11:51
Добрый день!

Следуя этому туториалу http://doc.qt.io/qt-5/qtbluetooth-btchat-example.html, я запустил bluetooth-сервер.
Однако, когда я пытаюсь найти его с iPhone 5s приложением для поиска ble-устройств, компьютер находит, но не видит сервис "Bt Chat Server".

Код:
    qWarning() << "Starting bluetooth server!";

    QBluetoothLocalDevice localDevice;
    QBluetoothAddress adapterAddress = localDevice.address();

    qWarning() << adapterAddress;

    rfcommServer = new QBluetoothServer(QBluetoothServiceInfo::RfcommProtocol, this);
    connect(rfcommServer, SIGNAL(newConnection()), this, SLOT(clientConnected()));
    bool result = rfcommServer->listen(adapterAddress);
    if (!result) {
        qWarning() << "Cannot bind chat server to " << adapterAddress.toString();
        return;
    }

    qWarning() << "Bluetooth server started!";

    serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceName, tr("Bt Chat Server"));
    serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceDescription,
                             tr("Example bluetooth chat server"));
    serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceProvider, tr("qt-project.org"));

    static const QLatin1String serviceUuid("e8e10f95-1a70-4b27-9ccf-02010264e9c8");
    serviceInfo.setServiceUuid(QBluetoothUuid(serviceUuid));

    QBluetoothServiceInfo::Sequence publicBrowse;
    publicBrowse << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::PublicBrowseGroup));
    serviceInfo.setAttribute(QBluetoothServiceInfo::BrowseGroupList, publicBrowse);

    QBluetoothServiceInfo::Sequence protocolDescriptorList;
    QBluetoothServiceInfo::Sequence protocol;
    protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::L2cap));
    protocolDescriptorList.append(QVariant::fromValue(protocol));
    protocol.clear();
    protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::Rfcomm))
             << QVariant::fromValue(quint8(rfcommServer->serverPort()));
    protocolDescriptorList.append(QVariant::fromValue(protocol));
    serviceInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList,
                             protocolDescriptorList);

    serviceInfo.registerService(adapterAddress);

Вот что выдает в консоли:

Starting bluetooth server!
"28:CF:E9:1F:2C:D8"
Bluetooth server started!

Как видите, адрес адаптера находит, значит проблема не в устройстве.
Запускалось это в виртуалке Ubuntu 14.04.

Пробовал также собрать Qt 5.5 и запустить из под Mac OS X. Тот же самый результат.