QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate(QBluetoothLocalDevice *q) : q_ptr(q) { ppsRegisterControl(); ppsRegisterForEvent(QStringLiteral("access_changed"), this); ppsRegisterForEvent(QStringLiteral("pairing_complete"), this); ppsRegisterForEvent(QStringLiteral("device_deleted"), this); ppsRegisterForEvent(QStringLiteral("radio_shutdown"), this); }
bool QBluetoothSocketPrivate::setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType_, QBluetoothSocket::SocketState socketState, QBluetoothSocket::OpenMode openMode) { Q_Q(QBluetoothSocket); delete readNotifier; readNotifier = 0; delete connectWriteNotifier; connectWriteNotifier = 0; socket = socketDescriptor; socketType = socketType_; readNotifier = new QSocketNotifier(socket, QSocketNotifier::Read); QObject::connect(readNotifier, SIGNAL(activated(int)), this, SLOT(_q_readNotify())); connectWriteNotifier = new QSocketNotifier(socket, QSocketNotifier::Write, q); QObject::connect(connectWriteNotifier, SIGNAL(activated(int)), this, SLOT(_q_writeNotify())); q->setSocketState(socketState); q->setOpenMode(openMode); if (openMode == QBluetoothSocket::ConnectedState) emit q->connected(); isServerSocket = true; #ifndef QT_QNX_BT_BLUETOOTH ppsRegisterForEvent(QStringLiteral("service_disconnected"),this); #endif return true; }
bool QBluetoothSocketPrivate::setSocketDescriptor(int socketDescriptor, QBluetoothSocket::SocketType socketType, QBluetoothSocket::SocketState socketState, QBluetoothSocket::OpenMode openMode) { Q_Q(QBluetoothSocket); delete readNotifier; readNotifier = 0; delete connectWriteNotifier; connectWriteNotifier = 0; socket = socketDescriptor; socketType = socketType; // ensure that O_NONBLOCK is set on new connections. int flags = fcntl(socket, F_GETFL, 0); if (!(flags & O_NONBLOCK)) fcntl(socket, F_SETFL, flags | O_NONBLOCK); readNotifier = new QSocketNotifier(socket, QSocketNotifier::Read); QObject::connect(readNotifier, SIGNAL(activated(int)), q, SLOT(_q_readNotify())); connectWriteNotifier = new QSocketNotifier(socket, QSocketNotifier::Write, q); QObject::connect(connectWriteNotifier, SIGNAL(activated(int)), q, SLOT(_q_writeNotify())); q->setSocketState(socketState); q->setOpenMode(openMode); if (openMode == QBluetoothSocket::ConnectedState) emit q->connected(); isServerSocket = true; ppsRegisterForEvent(QStringLiteral("service_disconnected"),this); return true; }
void QBluetoothSocketPrivate::connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODevice::OpenMode openMode) { Q_Q(QBluetoothSocket); Q_UNUSED(openMode); qCDebug(QT_BT_QNX) << "Connecting socket"; m_peerAddress = address; #ifdef QT_QNX_BT_BLUETOOTH QByteArray b_uuid = uuid.toByteArray(); b_uuid = b_uuid.mid(1, b_uuid.length() - 2); socket = bt_spp_open(address.toString().toUtf8().data(), b_uuid.data(), false); if (socket == -1) { qCWarning(QT_BT_QNX) << "Could not connect to" << address.toString() << b_uuid << qt_error_string(errno); errorString = qt_error_string(errno); q->setSocketError(QBluetoothSocket::NetworkError); return; } delete readNotifier; delete connectWriteNotifier; readNotifier = new QSocketNotifier(socket, QSocketNotifier::Read); QObject::connect(readNotifier, SIGNAL(activated(int)), this, SLOT(_q_readNotify())); connectWriteNotifier = new QSocketNotifier(socket, QSocketNotifier::Write, q); QObject::connect(connectWriteNotifier, SIGNAL(activated(int)), this, SLOT(_q_writeNotify())); connecting = true; q->setOpenMode(openMode); #else m_uuid = uuid; if (isServerSocket) return; if (state != QBluetoothSocket::UnconnectedState) { qCDebug(QT_BT_QNX) << "Socket already connected"; return; } ppsSendControlMessage("connect_service", 0x1101, uuid, address.toString(), QString(), this, BT_SPP_CLIENT_SUBTYPE); ppsRegisterForEvent(QStringLiteral("service_connected"),this); ppsRegisterForEvent(QStringLiteral("get_mount_point_path"),this); #endif q->setSocketState(QBluetoothSocket::ConnectingState); }
void QBluetoothSocketPrivate::controlReply(ppsResult result) { #ifndef QT_QNX_BT_BLUETOOTH Q_Q(QBluetoothSocket); if (result.msg == QStringLiteral("connect_service")) { if (!result.errorMsg.isEmpty()) { qCWarning(QT_BT_QNX) << Q_FUNC_INFO << "Error connecting to service:" << result.errorMsg; errorString = result.errorMsg; q->setSocketError(QBluetoothSocket::UnknownSocketError); q->setSocketState(QBluetoothSocket::UnconnectedState); return; } else { qCDebug(QT_BT_QNX) << Q_FUNC_INFO << "Sending request for mount point"; ppsSendControlMessage("get_mount_point_path", 0x1101, m_uuid, m_peerAddress.toString(), QString(), this, BT_SPP_CLIENT_SUBTYPE); } } else if (result.msg == QStringLiteral("get_mount_point_path")) { QString path; path = result.dat.first(); qCDebug(QT_BT_QNX) << Q_FUNC_INFO << "PATH is" << path; if (!result.errorMsg.isEmpty()) { qCWarning(QT_BT_QNX) << Q_FUNC_INFO << result.errorMsg; errorString = result.errorMsg; q->setSocketError(QBluetoothSocket::UnknownSocketError); q->setSocketState(QBluetoothSocket::UnconnectedState); return; } else { qCDebug(QT_BT_QNX) << "Mount point path is:" << path; socket = ::open(path.toStdString().c_str(), O_RDWR); if (socket == -1) { errorString = qt_error_string(errno); q->setSocketError(QBluetoothSocket::UnknownSocketError); qCWarning(QT_BT_QNX) << Q_FUNC_INFO << socket << " error:" << errno << errorString; //TODO Try if this actually works q->disconnectFromService(); q->setSocketState(QBluetoothSocket::UnconnectedState); return; } Q_Q(QBluetoothSocket); readNotifier = new QSocketNotifier(socket, QSocketNotifier::Read); QObject::connect(readNotifier, SIGNAL(activated(int)), this, SLOT(_q_readNotify())); connectWriteNotifier = new QSocketNotifier(socket, QSocketNotifier::Write, q); QObject::connect(connectWriteNotifier, SIGNAL(activated(int)), this, SLOT(_q_writeNotify())); connectWriteNotifier->setEnabled(true); readNotifier->setEnabled(true); q->setOpenMode(QIODevice::ReadWrite); state = QBluetoothSocket::ConnectedState; emit q->connected(); ppsRegisterForEvent(QStringLiteral("service_disconnected"),this); } }
QT_BEGIN_NAMESPACE QBluetoothTransferReplyQnx::QBluetoothTransferReplyQnx(QIODevice *input, const QBluetoothTransferRequest &request, QBluetoothTransferManager *parent) : QBluetoothTransferReply(parent), tempfile(0), source(input), m_running(false), m_finished(false), m_error(QBluetoothTransferReply::NoError), m_errorStr() { setRequest(request); setManager(parent); ppsRegisterControl(); //qsrand(QTime::currentTime().msec()); //m_agent_path = agentPath; //m_agent_path.append(QString::fromLatin1("/%1").arg(qrand())); ppsRegisterForEvent(QStringLiteral("opp_update"), this); ppsRegisterForEvent(QStringLiteral("opp_complete"), this); ppsRegisterForEvent(QStringLiteral("opp_cancelled"), this); QMetaObject::invokeMethod(this, "start", Qt::QueuedConnection); m_running = true; }
void QBluetoothSocketPrivate::connectToService(const QBluetoothAddress &address, QBluetoothUuid uuid, QIODevice::OpenMode openMode) { Q_UNUSED(openMode); qBBBluetoothDebug() << "Connecting socket"; if (isServerSocket) { m_peerAddress = address; m_uuid = uuid; return; } if (state != QBluetoothSocket::UnconnectedState) { qBBBluetoothDebug() << "Socket already connected"; return; } state = QBluetoothSocket::ConnectingState; m_uuid = uuid; m_peerAddress = address; ppsSendControlMessage("connect_service", 0x1101, uuid, address.toString(), this, BT_SPP_CLIENT_SUBTYPE); ppsRegisterForEvent(QStringLiteral("service_connected"),this); ppsRegisterForEvent(QStringLiteral("get_mount_point_path"),this); socketType = QBluetoothSocket::RfcommSocket; }
bool QBluetoothServer::listen(const QBluetoothAddress &address, quint16 port) { Q_UNUSED(address) Q_D(QBluetoothServer); if (serverType() != QBluetoothServiceInfo::RfcommProtocol) { d->m_lastError = UnsupportedProtocolError; emit error(d->m_lastError); return false; } // listen has already been called before if (d->socket && d->socket->state() == QBluetoothSocket::ListeningState) return true; d->socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol); //We can not register an actual Rfcomm port, because the platform does not allow it //but we need a way to associate a server with a service if (port == 0) { //Try to assign a non taken port id for (int i=1; ; i++){ if (__fakeServerPorts.key(i) == 0) { port = i; break; } } } if (__fakeServerPorts.key(port) == 0) { __fakeServerPorts[d] = port; qCDebug(QT_BT_QNX) << "Port" << port << "registered"; } else { qCWarning(QT_BT_QNX) << "server with port" << port << "already registered or port invalid"; d->m_lastError = ServiceAlreadyRegisteredError; emit error(d->m_lastError); return false; } d->socket->setSocketState(QBluetoothSocket::ListeningState); ppsRegisterForEvent(QStringLiteral("service_connected"),d); return true; }
bool QBluetoothServer::listen(const QBluetoothAddress &address, quint16 port) { Q_UNUSED(address) Q_D(QBluetoothServer); if (serverType() != QBluetoothServiceInfo::RfcommProtocol) { d->m_lastError = UnsupportedProtocolError; emit error(d->m_lastError); return false; } QBluetoothLocalDevice device(address); if (!device.isValid()) { qCWarning(QT_BT_QNX) << "Device does not support Bluetooth or" << address.toString() << "is not a valid local adapter"; d->m_lastError = QBluetoothServer::UnknownError; emit error(d->m_lastError); return false; } QBluetoothLocalDevice::HostMode hostMode= device.hostMode(); if (hostMode == QBluetoothLocalDevice::HostPoweredOff) { d->m_lastError = QBluetoothServer::PoweredOffError; emit error(d->m_lastError); qCWarning(QT_BT_QNX) << "Bluetooth device is powered off"; return false; } // listen has already been called before if (!d->socket) d->socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol); else if (d->socket->state() == QBluetoothSocket::ListeningState) return false; //We can not register an actual Rfcomm port, because the platform does not allow it //but we need a way to associate a server with a service if (port == 0) { //Try to assign a non taken port id for (int i=1; ; i++){ if (__fakeServerPorts.key(i) == 0) { port = i; break; } } } if (__fakeServerPorts.key(port) == 0) { __fakeServerPorts[d] = port; qCDebug(QT_BT_QNX) << "Port" << port << "registered"; } else { qCWarning(QT_BT_QNX) << "server with port" << port << "already registered or port invalid"; d->m_lastError = ServiceAlreadyRegisteredError; emit error(d->m_lastError); return false; } #ifndef QT_QNX_BT_BLUETOOTH ppsRegisterForEvent(QStringLiteral("service_connected"),d); #endif d->socket->setSocketState(QBluetoothSocket::ListeningState); return true; }
QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate() { ppsRegisterControl(); ppsRegisterForEvent(QString("access_changed"), this); }