19#include <QtCore/qloggingcategory.h>
20#include <QtCore/qcoreapplication.h>
21#include <QtCore/qmetaobject.h>
34QBluetoothSocketPrivateDarwin::QBluetoothSocketPrivateDarwin()
35 : writeChunk(
std::numeric_limits<UInt16>::max())
40QBluetoothSocketPrivateDarwin::~QBluetoothSocketPrivateDarwin()
54QString QBluetoothSocketPrivateDarwin::localName()
const
66quint16 QBluetoothSocketPrivateDarwin::localPort()
const
71QString QBluetoothSocketPrivateDarwin::peerName()
const
75 NSString *nsName = nil;
85 return QString::fromNSString(nsName);
92 BluetoothDeviceAddress
addr = {};
104quint16 QBluetoothSocketPrivateDarwin::peerPort()
const
117void QBluetoothSocketPrivateDarwin::abort()
121 "still in connectToService()");
124 rfcommChannel.reset();
126 l2capChannel.reset();
131 emit q_ptr->readChannelFinished();
135void QBluetoothSocketPrivateDarwin::close()
139 "still in connectToService()");
141 if (!txBuffer.size())
146qint64 QBluetoothSocketPrivateDarwin::writeData(
const char *
data,
qint64 maxSize)
160 if (!txBuffer.size())
163 char *
dst = txBuffer.reserve(
int(maxSize));
180 if (!rxBuffer.isEmpty())
181 return rxBuffer.read(
data,
int(maxSize));
186qint64 QBluetoothSocketPrivateDarwin::bytesAvailable()
const
188 return rxBuffer.size();
191bool QBluetoothSocketPrivateDarwin::canReadLine()
const
193 return rxBuffer.canReadLine();
196qint64 QBluetoothSocketPrivateDarwin::bytesToWrite()
const
198 return txBuffer.size();
209 qCWarning(QT_BT_DARWIN) <<
"setting a socket descriptor is not supported by IOBluetooth";
215 QIODevice::OpenMode openMode)
222void QBluetoothSocketPrivateDarwin::connectToService(
const QBluetoothServiceInfo &service, QIODevice::OpenMode openMode)
229 qCWarning(QT_BT_DARWIN) <<
"called on a busy socket";
245 if (
service.protocolServiceMultiplexer() > 0) {
246 connectToService(
service.device().address(),
249 }
else if (
service.serverChannel() > 0) {
250 connectToService(
service.device().address(),
255 if (
service.serviceUuid().isNull()) {
256 qCWarning(QT_BT_DARWIN) <<
"No port, no PSM, and no "
257 "UUID provided, unable to connect";
261 q_ptr->doDeviceDiscovery(service, openMode);
266 QIODevice::OpenMode openMode)
281 qCWarning(QT_BT_DARWIN) <<
"called on a busy socket";
291 q_ptr->doDeviceDiscovery(service, openMode);
295 QIODevice::OpenMode
mode)
311 q_ptr->setOpenMode(
mode);
318 IOReturn status = kIOReturnError;
336 status = kIOReturnNoMemory;
342 status = kIOReturnNoMemory;
346 isConnecting =
false;
356 q_ptr->setOpenMode(openMode);
359 emit q_ptr->readyRead();
373 if (status != kIOReturnSuccess)
379void QBluetoothSocketPrivateDarwin::_q_writeNotify()
385 "invalid socket (no open channel)");
388 if (txBuffer.size()) {
390 writeChunk.resize(isL2CAP ? std::numeric_limits<UInt16>::max() :
393 const auto size = txBuffer.read(writeChunk.data(), writeChunk.size());
394 IOReturn status = kIOReturnError;
400 if (status != kIOReturnSuccess) {
413bool QBluetoothSocketPrivateDarwin::setRFCOMChannel(
void *generic)
420 auto channel =
static_cast<IOBluetoothRFCOMMChannel *
>(
generic);
435 return rfcommChannel;
438bool QBluetoothSocketPrivateDarwin::setL2CAPChannel(
void *generic)
445 auto channel =
static_cast<IOBluetoothL2CAPChannel *
>(
generic);
463void QBluetoothSocketPrivateDarwin::setChannelError(IOReturn errorCode)
478void QBluetoothSocketPrivateDarwin::channelOpenComplete()
483 q_ptr->setOpenMode(openMode);
492void QBluetoothSocketPrivateDarwin::channelClosed()
502 emit q_ptr->readChannelFinished();
510void QBluetoothSocketPrivateDarwin::readChannelData(
void *
data, std::size_t
size)
516 const char *
src =
static_cast<char *
>(
data);
517 char *
dst = rxBuffer.reserve(
int(
size));
522 emit q_ptr->readyRead();
526void QBluetoothSocketPrivateDarwin::writeComplete()
IOBluetoothL2CAPChannel * channel
IOBluetoothDevice * device
#define QT_BT_MAC_AUTORELEASEPOOL
Protocol
This enum describes the socket protocol used by the service.
SocketState
This enum describes the state of the Bluetooth socket.
@ UnsupportedProtocolError
static QString translate(const char *context, const char *key, const char *disambiguation=nullptr, int n=-1)
\threadsafe
\macro QT_RESTRICTED_CAST_FROM_ASCII
void clear()
Clears the contents of the string and makes it null.
QString qt_address(NSString *address)
void qt_test_iobluetooth_runloop()
QString qt_error_string(IOReturn errorCode)
Combined button and popup list for selecting options.
Q_CORE_EXPORT QtJniTypes::Service service()
static QT_BEGIN_NAMESPACE const char * socketType(QSocketNotifier::Type type)
#define qCWarning(category,...)
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLuint GLenum GLsizei length
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLuint GLuint64EXT address
#define Q_ASSERT_X(cond, x, msg)
const char SOC_CONNECT_IN_PROGRESS[]
const char SOC_NETWORK_ERROR[]
static T getAs(QTextDocument *doc, const QTextImageFormat &format, const qreal devicePixelRatio=1.0)