2016-06-06 9 views
1

Ich schreibe eine einfache Anwendung für den Zugriff auf die PBAP meines Smartphones von meinem PC (Linux, Debian).QBluetoothSocketPrivate :: _ q_readNotify() 14 Fehler

Ich sehe alle Dienste meines Smartphones, ich kann auch verbinden (das Smartphone bekommt eine Pairing-Anfrage). Aber nach ein paar Sekunden bekomme ich den folgenden Fehler:

qt.bluetooth.bluez: void QBluetoothSocketPrivate::_q_readNotify() 14 error: -1 "Die Ressource ist zur Zeit nicht verfügbar" 

Hat jemand eine Idee, wie man es beheben?

Dies ist die Funktion i nennen:

 void ServiceDiscoveryDialog::startClient(const QBluetoothServiceInfo &remoteService) 
    { 


     // Connect to service 
     socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol); 
     qDebug() << "Create socket"; 
     socket->connectToService(remoteAddress, 1); 
     qDebug() << "ConnectToServiceTry done"; 

     connect(socket, SIGNAL(readyRead()), this, SLOT(readSocket())); 
     connect(socket, SIGNAL(connected()), this, SLOT(connected())); 
     connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected())); 
     } 

Danke.

Antwort

2

Nach etwa QBluetoothSocketPrivate::_q_readNotify() hier lesen:

http://code.qt.io/cgit/qt/qtconnectivity.git/tree/src/bluetooth/qbluetoothsocket_bluez.cpp?h=5.3.2

void QBluetoothSocketPrivate::_q_readNotify() 
{ 
    Q_Q(QBluetoothSocket); 
    char *writePointer = buffer.reserve(QPRIVATELINEARBUFFER_BUFFERSIZE); 
// qint64 readFromDevice = q->readData(writePointer, QPRIVATELINEARBUFFER_BUFFERSIZE); 
    int readFromDevice = ::read(socket, writePointer, QPRIVATELINEARBUFFER_BUFFERSIZE); 
    buffer.chop(QPRIVATELINEARBUFFER_BUFFERSIZE - (readFromDevice < 0 ? 0 : readFromDevice)); 
    if(readFromDevice <= 0){ 
     int errsv = errno; 
     readNotifier->setEnabled(false); 
     connectWriteNotifier->setEnabled(false); 
     errorString = qt_error_string(errsv); 
     qCWarning(QT_BT_BLUEZ) << Q_FUNC_INFO << socket << "error:" << readFromDevice << errorString; 
     if(errsv == EHOSTDOWN) 
      q->setSocketError(QBluetoothSocket::HostNotFoundError); 
     else 
      q->setSocketError(QBluetoothSocket::UnknownSocketError); 

     q->disconnectFromService(); 
    } 
    else { 
     emit q->readyRead(); 
    } 
} 

Es Ihr Gerät scheint Verbindung verliert und dass Fehler entsprechend zeigt.

+1

Danke für Ihre Antwort. Basierend darauf habe ich den Verbindungsteil nochmals überprüft. Das Problem war, dass ich einen festen Port für die Verbindung verwendet habe (1). Dieser Port muss für jeden Dienst/jedes Profil geändert werden. – SteffenH