/*! Returns the protocol that the QBluetoothServiceInfo object uses. */ QBluetoothServiceInfo::Protocol QBluetoothServiceInfo::socketProtocol() const { QBluetoothServiceInfo::Sequence parameters = protocolDescriptor(QBluetoothUuid::Rfcomm); if (!parameters.isEmpty()) return RfcommProtocol; parameters = protocolDescriptor(QBluetoothUuid::L2cap); if (!parameters.isEmpty()) return L2capProtocol; return UnknownProtocol; }
bool QBluetoothServiceInfoPrivate::registerService(const QBluetoothAddress& localAdapter) { Q_UNUSED(localAdapter); //QNX always uses default local adapter if (protocolDescriptor(QBluetoothUuid::Rfcomm).isEmpty()) { qCWarning(QT_BT_QNX) << Q_FUNC_INFO << "Only SPP services can be registered on QNX"; return false; } if (serverChannel() == -1) return false; if (__fakeServerPorts.key(serverChannel()) != 0) { if (!ppsSendControlMessage("register_server", 0x1101, attributes.value(QBluetoothServiceInfo::ServiceId).value<QBluetoothUuid>(), QString(), attributes.value(QBluetoothServiceInfo::ServiceName).toString(), __fakeServerPorts.key(serverChannel()), BT_SPP_SERVER_SUBTYPE)) return false; //The server needs to know the service name for the socket mount point path __fakeServerPorts.key(serverChannel())->m_serviceName = attributes.value(QBluetoothServiceInfo::ServiceName).toString(); } else { return false; } registered = true; return true; }
/*! This is a convenience function. Returns the protocol/service multiplexer for services which support the L2CAP protocol, otherwise returns -1. This function is equivalent to extracting the information from QBluetoothServiceInfo::Sequence returned by QBluetoothServiceInfo::attribute(QBluetoothServiceInfo::ProtocolDescriptorList). */ int QBluetoothServiceInfo::protocolServiceMultiplexer() const { QBluetoothServiceInfo::Sequence parameters = protocolDescriptor(QBluetoothUuid::L2cap); if (parameters.isEmpty()) return -1; else if (parameters.count() == 1) return 0; else return parameters.at(1).toUInt(); }
bool QBluetoothServiceInfoPrivate::registerService(const QBluetoothAddress& localAdapter) { Q_UNUSED(localAdapter); //QNX always uses default local adapter if (protocolDescriptor(QBluetoothUuid::Rfcomm).isEmpty()) { qCWarning(QT_BT_QNX) << Q_FUNC_INFO << "Only SPP services can be registered on QNX"; return false; } if (serverChannel() == -1) return false; if (__fakeServerPorts.key(serverChannel()) != 0) { #ifdef QT_QNX_BT_BLUETOOTH QByteArray b_uuid = attributes.value(QBluetoothServiceInfo::ServiceId) .value<QBluetoothUuid>().toByteArray(); b_uuid = b_uuid.mid(1, b_uuid.length() - 2); qCDebug(QT_BT_QNX) << "Registering server. " << b_uuid.data() << attributes.value(QBluetoothServiceInfo::ServiceName) .toString(); if (bt_spp_open_server(attributes.value(QBluetoothServiceInfo::ServiceName) .toString().toUtf8().data(), b_uuid.data(), true, &QBluetoothServerPrivate::btCallback, reinterpret_cast<long>(__fakeServerPorts.key(serverChannel()))) == -1) { qCDebug(QT_BT_QNX) << "Could not open the server. " << qt_error_string(errno) << errno; bt_spp_close_server(b_uuid.data()); return false; } #else if (!ppsSendControlMessage("register_server", 0x1101, attributes.value(QBluetoothServiceInfo::ServiceId).value<QBluetoothUuid>(), QString(), attributes.value(QBluetoothServiceInfo::ServiceName).toString(), __fakeServerPorts.key(serverChannel()), BT_SPP_SERVER_SUBTYPE)) return false; #endif //The server needs to know the service name for the socket mount point path __fakeServerPorts.key(serverChannel())->m_serviceName = attributes.value(QBluetoothServiceInfo::ServiceName).toString(); } else { return false; } registered = true; return true; }