Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
inputstreamthread.cpp
Go to the documentation of this file.
1
// Copyright (C) 2016 Lauri Laanmets (Proekspert AS) <lauri.laanmets@eesti.ee>
2
// Copyright (C) 2016 The Qt Company Ltd.
3
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5
#
include
<
QtCore
/
QLoggingCategory
>
6
#
include
<
QtCore
/
QJniEnvironment
>
7
8
#
include
"android/inputstreamthread_p.h"
9
#
include
"android/jni_android_p.h"
10
#
include
"qbluetoothsocket_android_p.h"
11
12
QT_BEGIN_NAMESPACE
13
14
Q_DECLARE_LOGGING_CATEGORY(QT_BT_ANDROID)
15
16
InputStreamThread::InputStreamThread(QBluetoothSocketPrivateAndroid *socket)
17
: QObject(), m_socket_p(socket), expectClosure(
false
)
18
{
19
}
20
21
bool
InputStreamThread
::
run
()
22
{
23
QMutexLocker lock(&m_mutex);
24
25
javaInputStreamThread = QJniObject::construct<QtJniTypes::QtBtInputStreamThread>();
26
if
(!javaInputStreamThread.isValid() || !m_socket_p->inputStream.isValid())
27
return
false
;
28
29
javaInputStreamThread.callMethod<
void
>(
"setInputStream"
,
30
m_socket_p->inputStream.object<QtJniTypes::InputStream>());
31
javaInputStreamThread.setField(
"qtObject"
,
reinterpret_cast
<jlong>(
this
));
32
javaInputStreamThread.setField<jboolean>(
"logEnabled"
, QT_BT_ANDROID().isDebugEnabled());
33
34
javaInputStreamThread.callMethod<
void
>(
"start"
);
35
36
return
true
;
37
}
38
39
qint64
InputStreamThread
::
bytesAvailable
()
const
40
{
41
QMutexLocker locker(&m_mutex);
42
return
m_socket_p->rxBuffer.size();
43
}
44
45
bool
InputStreamThread
::
canReadLine
()
const
46
{
47
QMutexLocker locker(&m_mutex);
48
return
m_socket_p->rxBuffer.canReadLine();
49
}
50
51
qint64
InputStreamThread
::
readData
(
char
*data, qint64 maxSize)
52
{
53
QMutexLocker locker(&m_mutex);
54
55
if
(!m_socket_p->rxBuffer.isEmpty())
56
return
m_socket_p->rxBuffer.read(data, maxSize);
57
58
return
0;
59
}
60
61
//inside the java thread
62
void
InputStreamThread
::
javaThreadErrorOccurred
(
int
errorCode)
63
{
64
QMutexLocker lock(&m_mutex);
65
66
if
(!expectClosure)
67
emit errorOccurred(errorCode);
68
else
69
emit errorOccurred(-1);
// magic error, -1 means error was expected due to expected close()
70
}
71
72
//inside the java thread
73
void
InputStreamThread
::
javaReadyRead
(jbyteArray buffer,
int
bufferLength)
74
{
75
QJniEnvironment env;
76
77
QMutexLocker lock(&m_mutex);
78
char
*writePtr = m_socket_p->rxBuffer.reserve(bufferLength);
79
env->GetByteArrayRegion(buffer, 0, bufferLength,
reinterpret_cast
<jbyte*>(writePtr));
80
emit dataAvailable();
81
}
82
83
void
InputStreamThread
::
prepareForClosure
()
84
{
85
QMutexLocker lock(&m_mutex);
86
expectClosure =
true
;
87
}
88
89
QT_END_NAMESPACE
InputStreamThread
Definition
inputstreamthread_p.h:30
InputStreamThread::javaThreadErrorOccurred
void javaThreadErrorOccurred(int errorCode)
Definition
inputstreamthread.cpp:62
InputStreamThread::prepareForClosure
void prepareForClosure()
Definition
inputstreamthread.cpp:83
InputStreamThread::bytesAvailable
qint64 bytesAvailable() const
Definition
inputstreamthread.cpp:39
InputStreamThread::readData
qint64 readData(char *data, qint64 maxSize)
Definition
inputstreamthread.cpp:51
InputStreamThread::run
bool run()
Definition
inputstreamthread.cpp:21
InputStreamThread::javaReadyRead
void javaReadyRead(jbyteArray buffer, int bufferLength)
Definition
inputstreamthread.cpp:73
InputStreamThread::canReadLine
bool canReadLine() const
Definition
inputstreamthread.cpp:45
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
qtconnectivity
src
bluetooth
android
inputstreamthread.cpp
Generated on
for Qt by
1.18.0