Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. why qt android bluetooth rfcomm always failed qt5.7
Qt 6.11 is out! See what's new in the release blog

why qt android bluetooth rfcomm always failed qt5.7

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
2 Posts 1 Posters 1.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • dbskcncD Offline
    dbskcncD Offline
    dbskcnc
    wrote on last edited by dbskcnc
    #1

    android 4.4.2/qt 5.7 windows

    i want to use qt to communicate with a bluetooth com, but qt always failed with log below:

    D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:75 (void TbluetoothManager::sl_deviceDiscovered(const QBluetoothDeviceInfo&)): one bluetooth device: "HC-05||98:D3:31:40:A8:F3||{00000000-0000-0000-0000-000000000000}"
    D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:114 (void TbluetoothManager::sl_serviceDiscovered(const QBluetoothServiceInfo&)): service addr: "98:D3:31:40:A8:F3" mcom addr: "98:D3:31:40:A8:F3" service uuid: "{00001101-0000-1000-8000-00805f9b34fb}"
    D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:120 (TbluetoothManager::sl_serviceDiscovered(const QBluetoothServiceInfo&)::<lambda()>): stop service disc
    D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:135 (void TbluetoothManager::sl_comConnectToService()): connect to addr: "98:D3:31:40:A8:F3" suuid: "{00001101-0000-1000-8000-00805f9b34fb}"
    D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:104 (void TbluetoothManager::sl_comStateChanged(QBluetoothSocket::SocketState)): comm state: QBluetoothSocket::ConnectingState
    W/BluetoothAdapter( 2804): getBluetoothService() called with no BluetoothManagerCallback
    D/BluetoothSocket( 2804): connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[74]}
    W/System.err( 2804): java.io.IOException: read failed, socket might closed or timeout, read ret: -1
    W/System.err( 2804): at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:505)
    W/System.err( 2804): at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:516)
    W/System.err( 2804): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:320)
    W/System.err( 2804): at dalvik.system.NativeStart.run(Native Method)
    W/libadPad.so( 2804): (null):0 ((null)): qt.bluetooth.android: Falling back to workaround.
    W/libadPad.so( 2804): (null):0 ((null)): qt.bluetooth.android: Cannot determine RFCOMM service channel.
    W/libadPad.so( 2804): (null):0 ((null)): qt.bluetooth.android: Workaround thread invoked.
    W/BluetoothAdapter( 2804): getBluetoothService() called with no BluetoothManagerCallback
    D/BluetoothSocket( 2804): connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[75]}
    W/System.err( 2804): java.io.IOException: read failed, socket might closed or timeout, read ret: -1
    W/System.err( 2804): at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:505)
    W/System.err( 2804): at android.bluetooth.BluetoothSocket.waitSocketSignal(BluetoothSocket.java:482)
    W/System.err( 2804): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:324)
    W/System.err( 2804): at dalvik.system.NativeStart.run(Native Method)
    W/libadPad.so( 2804): (null):0 ((null)): qt.bluetooth.android: Socket connect via workaround failed.
    D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:109 (void TbluetoothManager::sl_comError(QBluetoothSocket::SocketError)): com error: QBluetoothSocket::ServiceNotFoundError
    D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:104 (void TbluetoothManager::sl_comStateChanged(QBluetoothSocket::SocketState)): comm state: QBluetoothSocket::UnconnectedState
    D/BluetoothAdapter( 2804): startLeScan(): null
    D/BluetoothAdapter( 2804): onClientRegistered() - status=0 clientIf=5
    D/dalvikvm( 2804): GC_CONCURRENT freed 770K, 15% free 4933K/5744K, paused 45ms+4ms, total 157ms
    D/BluetoothAdapter( 2804): stopLeScan()

    qt can scan the devices ,and discovry service is ok, but connectToService without any success.
    i can use app bluetooth rfcomm pro, it just connect and function ok.

    dbskcncD 1 Reply Last reply
    0
    • dbskcncD dbskcnc

      android 4.4.2/qt 5.7 windows

      i want to use qt to communicate with a bluetooth com, but qt always failed with log below:

      D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:75 (void TbluetoothManager::sl_deviceDiscovered(const QBluetoothDeviceInfo&)): one bluetooth device: "HC-05||98:D3:31:40:A8:F3||{00000000-0000-0000-0000-000000000000}"
      D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:114 (void TbluetoothManager::sl_serviceDiscovered(const QBluetoothServiceInfo&)): service addr: "98:D3:31:40:A8:F3" mcom addr: "98:D3:31:40:A8:F3" service uuid: "{00001101-0000-1000-8000-00805f9b34fb}"
      D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:120 (TbluetoothManager::sl_serviceDiscovered(const QBluetoothServiceInfo&)::<lambda()>): stop service disc
      D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:135 (void TbluetoothManager::sl_comConnectToService()): connect to addr: "98:D3:31:40:A8:F3" suuid: "{00001101-0000-1000-8000-00805f9b34fb}"
      D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:104 (void TbluetoothManager::sl_comStateChanged(QBluetoothSocket::SocketState)): comm state: QBluetoothSocket::ConnectingState
      W/BluetoothAdapter( 2804): getBluetoothService() called with no BluetoothManagerCallback
      D/BluetoothSocket( 2804): connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[74]}
      W/System.err( 2804): java.io.IOException: read failed, socket might closed or timeout, read ret: -1
      W/System.err( 2804): at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:505)
      W/System.err( 2804): at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:516)
      W/System.err( 2804): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:320)
      W/System.err( 2804): at dalvik.system.NativeStart.run(Native Method)
      W/libadPad.so( 2804): (null):0 ((null)): qt.bluetooth.android: Falling back to workaround.
      W/libadPad.so( 2804): (null):0 ((null)): qt.bluetooth.android: Cannot determine RFCOMM service channel.
      W/libadPad.so( 2804): (null):0 ((null)): qt.bluetooth.android: Workaround thread invoked.
      W/BluetoothAdapter( 2804): getBluetoothService() called with no BluetoothManagerCallback
      D/BluetoothSocket( 2804): connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[75]}
      W/System.err( 2804): java.io.IOException: read failed, socket might closed or timeout, read ret: -1
      W/System.err( 2804): at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:505)
      W/System.err( 2804): at android.bluetooth.BluetoothSocket.waitSocketSignal(BluetoothSocket.java:482)
      W/System.err( 2804): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:324)
      W/System.err( 2804): at dalvik.system.NativeStart.run(Native Method)
      W/libadPad.so( 2804): (null):0 ((null)): qt.bluetooth.android: Socket connect via workaround failed.
      D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:109 (void TbluetoothManager::sl_comError(QBluetoothSocket::SocketError)): com error: QBluetoothSocket::ServiceNotFoundError
      D/libadPad.so( 2804): D:\yj\qt\adPad\adPad\src\tbluetoothmanager.cpp:104 (void TbluetoothManager::sl_comStateChanged(QBluetoothSocket::SocketState)): comm state: QBluetoothSocket::UnconnectedState
      D/BluetoothAdapter( 2804): startLeScan(): null
      D/BluetoothAdapter( 2804): onClientRegistered() - status=0 clientIf=5
      D/dalvikvm( 2804): GC_CONCURRENT freed 770K, 15% free 4933K/5744K, paused 45ms+4ms, total 157ms
      D/BluetoothAdapter( 2804): stopLeScan()

      qt can scan the devices ,and discovry service is ok, but connectToService without any success.
      i can use app bluetooth rfcomm pro, it just connect and function ok.

      dbskcncD Offline
      dbskcncD Offline
      dbskcnc
      wrote on last edited by
      #2

      the code

      #ifndef TBLUETOOTHMANAGER_H
      #define TBLUETOOTHMANAGER_H
      
      #include <QObject>
      #include<QTimer>
      #include <qbluetoothaddress.h>
        #include <qbluetoothdevicediscoveryagent.h>
        #include <qbluetoothlocaldevice.h>
      
        #include <QBluetoothDeviceInfo>
      #include<QBluetoothSocket>
      #include<QBluetoothServiceDiscoveryAgent>
      
      #define SPP_UUID QString("00001101-0000-1000-8000-00805F9B34FB")
      
      class TbluetoothManager : public QObject
      {
          Q_OBJECT
      
          Q_PROPERTY(bool comOk READ comOk WRITE setComOk NOTIFY comOkChanged)
      
          Q_PROPERTY(QList<QString> bluedevices READ bluedevices WRITE setBluedevices NOTIFY bluedevicesChanged)
          QList<QString> m_bluedevices;
      
          bool m_comOk;
      
      public:
          explicit TbluetoothManager(QObject *parent = 0);
      
      QList<QString> bluedevices() const;
      
      bool comOk() const;
      
      signals:
          void onComData(QByteArray data);
      
          void bluedevicesChanged(QList<QString> bluedevices);
      
      
          void deviceDiscovered(const QBluetoothDeviceInfo &info);
      
          void comOkChanged(bool     comOk);
      
      public slots:
          void scanBluetoothDevices();
      
          void connectComDevices(QString device);
      
          void sl_deviceDiscovered(const QBluetoothDeviceInfo &info);
      
          void sl_comConnected();
          void sl_comDisconnected();
          void sl_comReadyRead();
      
          void sl_comStateChanged(QBluetoothSocket::SocketState state);
      
          void sl_comError(QBluetoothSocket::SocketError error);
      
      
      
      
          void sl_serviceDiscovered(const QBluetoothServiceInfo &info);
          void sl_comConnectToService();
      
      
          //auto gen
      
          void setBluedevices(QList<QString> bluedevices);
      
          void setComOk(bool     comOk);
      
      protected:
          QBluetoothDeviceDiscoveryAgent * discoveryAgent;
          QBluetoothSocket* m_local_bluetooth_socket;
          QBluetoothServiceDiscoveryAgent* m_bluetooth_service_disc;
      
          QString m_com_device_addr;
      
          QBluetoothServiceInfo m_com_service_info;
      
      
      };
      
      #endif // TBLUETOOTHMANAGER_H
      
      

      cpp:

      #include "tbluetoothmanager.h"
      #include<QBluetoothServiceInfo>
      #include<QDebug>
      
      
      
      TbluetoothManager::TbluetoothManager(QObject *parent) : QObject(parent)
      {
          discoveryAgent= new QBluetoothDeviceDiscoveryAgent(this);
          connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),
                        this, SLOT(sl_deviceDiscovered(QBluetoothDeviceInfo)));
      
          m_local_bluetooth_socket=0;
      
          m_bluetooth_service_disc= new QBluetoothServiceDiscoveryAgent(this);
          connect(m_bluetooth_service_disc,SIGNAL(serviceDiscovered(const  QBluetoothServiceInfo&)),SLOT(sl_serviceDiscovered(const QBluetoothServiceInfo&)));
      
      }
      
      QList<QString> TbluetoothManager::bluedevices() const
      {
          return m_bluedevices;
      }
      
      bool TbluetoothManager::comOk() const
      {
          return m_comOk;
      }
      
      void TbluetoothManager::scanBluetoothDevices()
      {
          //qDebug()<<"start scan bluetooth";
      
          m_bluedevices.clear();
          emit bluedevicesChanged(m_bluedevices);
      
          discoveryAgent->start();
      }
      
      void TbluetoothManager::connectComDevices(QString device)
      {
          int last_pos=device.lastIndexOf("||");
          if(last_pos<0){
              qDebug()<<"can not found sep in device string";
              return;
          }
      
          int last_second_pos=device.lastIndexOf("||",last_pos-1);
          if(last_second_pos<0){
              qDebug()<<"can not found second sep in device string";
              return;
          }
      
          m_com_device_addr=device.mid(last_second_pos+2,last_pos-last_second_pos-2);
      
          //qDebug()<< "device addr:"<<device_addr ;
      
          QString device_uuid=device.mid(last_pos+2,100);
      
          //qDebug()<< "device uuid:"<<device_uuid ;
      
          m_bluetooth_service_disc->setRemoteAddress(QBluetoothAddress(m_com_device_addr));
          m_bluetooth_service_disc->start();
      
      
      }
      
      void TbluetoothManager::sl_deviceDiscovered(const QBluetoothDeviceInfo &info)
      {
          QString device=info.name()+"||"+info.address().toString()+"||"+ info.deviceUuid().toString();
          m_bluedevices.append(device);
      
          emit bluedevicesChanged(m_bluedevices);
      
          qDebug()<<"one bluetooth device:"<<device;
      
          connectComDevices(device);
      }
      
      void TbluetoothManager::sl_comConnected()
      {
          qDebug()<< "com connected" ;
      
          setComOk(true);
      }
      
      void TbluetoothManager::sl_comDisconnected()
      {
          qDebug()<< "com disconnected" ;
      
          setComOk(false);
      }
      
      void TbluetoothManager::sl_comReadyRead()
      {
          QByteArray data=m_local_bluetooth_socket->readAll();
      
          qDebug()<< "com rev:" <<data;
      
      }
      
      void TbluetoothManager::sl_comStateChanged(QBluetoothSocket::SocketState state)
      {
          qDebug()<< "comm state:" <<state;
      }
      
      void TbluetoothManager::sl_comError(QBluetoothSocket::SocketError error)
      {
          qDebug()<< "com error:" <<error;
      }
      
      void TbluetoothManager::sl_serviceDiscovered(const QBluetoothServiceInfo &info)
      {
          qDebug()<< "service addr:" <<info.device().address().toString()<<"mcom addr:"<<m_com_device_addr
                  <<"service uuid:"<<info.serviceUuid().toString();
      
          if (info.device().address().toString()==m_com_device_addr) {
      
              QTimer::singleShot(10,[&]{
                  qDebug()<< "stop service disc" ;
                  m_bluetooth_service_disc->stop();;
              });
      
              m_com_service_info=info;
      
              QTimer::singleShot(1000,this,SLOT(sl_comConnectToService()));
              //m_local_bluetooth_socket->connectToService(info);
          }
      
      
      }
      
      void TbluetoothManager::sl_comConnectToService()
      {
          qDebug()<< "connect to addr:"<<m_com_service_info.device().address().toString()<<"suuid:"<<m_com_service_info.serviceUuid().toString() ;
      
          if (m_local_bluetooth_socket) {
              m_local_bluetooth_socket->deleteLater();
          }
      
          m_local_bluetooth_socket=new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
          m_local_bluetooth_socket->setPreferredSecurityFlags(QBluetooth::NoSecurity);
      
          connect(m_local_bluetooth_socket,SIGNAL(connected()), SLOT(sl_comConnected()));
          connect(m_local_bluetooth_socket,SIGNAL(disconnected()),SLOT(sl_comDisconnected()));
          connect(m_local_bluetooth_socket,SIGNAL(readyRead()),SLOT(sl_comReadyRead()));
          connect(m_local_bluetooth_socket,SIGNAL(stateChanged(QBluetoothSocket::SocketState)),SLOT(sl_comStateChanged(QBluetoothSocket::SocketState)));
          connect(m_local_bluetooth_socket,SIGNAL(error(QBluetoothSocket::SocketError)),SLOT(sl_comError(QBluetoothSocket::SocketError)));
      
          //m_local_bluetooth_socket->connectToService(m_com_service_info);
          m_local_bluetooth_socket->connectToService(m_com_service_info.device().address(),
                                                     QBluetoothUuid(SPP_UUID));
      }
      
      void TbluetoothManager::setBluedevices(QList<QString> bluedevices)
      {
          if (m_bluedevices == bluedevices)
              return;
      
          m_bluedevices = bluedevices;
          emit bluedevicesChanged(bluedevices);
      }
      
      void TbluetoothManager::setComOk(bool comOk)
      {
          if (m_comOk == comOk)
              return;
      
          m_comOk = comOk;
          emit comOkChanged(comOk);
      }
      
      
      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved