QBluetooth programming



  • Есть 2 usb-bluetooth адаптера подключенных в ubuntu 16.04(bluetooth бэкенд -bluez) и несколько удаленных bluetooth устройств. Возможно ли подключиться и открыть QBluetoothSocket адаптер №1 к устройству №1 и адаптер №2 к устройству №2, то есть, разные адаптера к разным устройствам(Сопряжение по тех. причинам не возможно)?



  • На сколько я знаю QBluetooth работает только на мобильных платформах, на десктопах блютуз эмулирует com порт, по крайней мере так в винде, что в убунте я не знаю наверняка.



  • @TheGringerEye said in QBluetooth programming:

    На сколько я знаю QBluetooth работает только на мобильных платформах, на десктопах блютуз эмулирует com порт, по крайней мере так в винде, что в убунте я не знаю наверняка.

    Нет. На линуксе используется bluez, на макоси есть нативный бэкэнд, так что проблемы только с виндой :)





  • @Konstantin-Tokarev да, используется bluez и подключать удаленные девайсы не вызывает проблем, но при открытии QBluetoothSocket( или rfcomm connect) нет возможности выбрать, какой из локальных адаптеров(№1 или №2) будет подключаться к удаленному девайсу (постоянно подключаеться один и тот же) и это главна беда. Так как мне нужно подключить порядка 10 удаленных девайсов к ПК, а на один локальный адаптер можно подключить <=7 удаленных.



  • Сам bluetooth-сокет открывается кодом

        switch (type) {
        case QBluetoothServiceInfo::L2capProtocol:
            socket = ::socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);
            break;
        case QBluetoothServiceInfo::RfcommProtocol:
            socket = ::socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
            break;
        default:
            socket = -1;
        }
    
    

    http://code.qt.io/cgit/qt/qtconnectivity.git/tree/src/bluetooth/qbluetoothsocket_bluez.cpp#n102

    Если socket() всегда использует только один адаптер, это может быть из-за конфигурации системы или из-за того, что надо вызвать какой-нибудь ioctl для настройки сокета. Надо изучить маны как это должно работать. Если на стороне QBluetoothSocket что-то не делается, нужно 1) зарепортить баг в bugreports.qt.io 2) сделать это на стороне прилодения используя socketDescriptor()





  • @Konstantin-Tokarev Спасибо большо! именно то, что нужно. Обмениваюсь данными между № 1 / 2 локальным адаптером и № 1 / 2 удаленным девайсом. Осталось 10 шт проверить.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.