|
|
|
@ -106,7 +106,6 @@ QSerialPortPrivate::QSerialPortPrivate(QSerialPort *q)
@@ -106,7 +106,6 @@ QSerialPortPrivate::QSerialPortPrivate(QSerialPort *q)
|
|
|
|
|
, isCustomBaudRateSupported(false) |
|
|
|
|
, emittedBytesWritten(false) |
|
|
|
|
, pendingBytesWritten(0) |
|
|
|
|
, hasRegisteredFunctions(false) |
|
|
|
|
, jniDataBits(8) |
|
|
|
|
, jniStopBits(1) |
|
|
|
|
, jniParity(0) |
|
|
|
@ -115,34 +114,10 @@ QSerialPortPrivate::QSerialPortPrivate(QSerialPort *q)
@@ -115,34 +114,10 @@ QSerialPortPrivate::QSerialPortPrivate(QSerialPort *q)
|
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool QSerialPortPrivate::open(QIODevice::OpenMode mode) |
|
|
|
|
void QSerialPortPrivate::setNativeMethods(void) |
|
|
|
|
{ |
|
|
|
|
rwMode = mode; |
|
|
|
|
__android_log_print(ANDROID_LOG_INFO, kJTag, "Opening %s", systemLocation.toLatin1().data()); |
|
|
|
|
|
|
|
|
|
__android_log_print(ANDROID_LOG_INFO, kJTag, "Calling Java Open"); |
|
|
|
|
QAndroidJniObject jnameL = QAndroidJniObject::fromString(systemLocation); |
|
|
|
|
cleanJavaException(); |
|
|
|
|
deviceId = QAndroidJniObject::callStaticMethod<jint>( |
|
|
|
|
kJniClassName, |
|
|
|
|
"open", |
|
|
|
|
"(Ljava/lang/String;I)I", |
|
|
|
|
jnameL.object<jstring>(), |
|
|
|
|
(jint)this); |
|
|
|
|
cleanJavaException(); |
|
|
|
|
|
|
|
|
|
isReadStopped = false; |
|
|
|
|
|
|
|
|
|
if (deviceId == BAD_PORT) |
|
|
|
|
{ |
|
|
|
|
__android_log_print(ANDROID_LOG_ERROR, kJTag, "Error opening %s", systemLocation.toLatin1().data()); |
|
|
|
|
q_ptr->setError(QSerialPort::DeviceNotFoundError); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!hasRegisteredFunctions) |
|
|
|
|
{ |
|
|
|
|
__android_log_print(ANDROID_LOG_INFO, kJTag, "Registering Native Functions"); |
|
|
|
|
|
|
|
|
|
// REGISTER THE C++ FUNCTION WITH JNI
|
|
|
|
|
JNINativeMethod javaMethods[] { |
|
|
|
|
{"nativeDeviceHasDisconnected", "(I)V", reinterpret_cast<void *>(jniDeviceHasDisconnected)}, |
|
|
|
@ -156,15 +131,14 @@ bool QSerialPortPrivate::open(QIODevice::OpenMode mode)
@@ -156,15 +131,14 @@ bool QSerialPortPrivate::open(QIODevice::OpenMode mode)
|
|
|
|
|
jniEnv->ExceptionClear(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QAndroidJniObject javaClass(kJniClassName); |
|
|
|
|
if(!javaClass.isValid()) { |
|
|
|
|
__android_log_print(ANDROID_LOG_ERROR, kJTag, "Java class %s not valid", kJniClassName); |
|
|
|
|
return false; |
|
|
|
|
jclass objectClass = jniEnv->FindClass(kJniClassName); |
|
|
|
|
if(!objectClass) { |
|
|
|
|
__android_log_print(ANDROID_LOG_ERROR, kJTag, "Couldn't find class: %s", kJniClassName); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
jclass objectClass = jniEnv->GetObjectClass(javaClass.object<jobject>()); |
|
|
|
|
|
|
|
|
|
jint val = jniEnv->RegisterNatives(objectClass, javaMethods, sizeof(javaMethods) / sizeof(javaMethods[0])); |
|
|
|
|
jniEnv->DeleteLocalRef(objectClass); |
|
|
|
|
hasRegisteredFunctions = true; |
|
|
|
|
|
|
|
|
|
__android_log_print(ANDROID_LOG_INFO, kJTag, "Native Functions Registered"); |
|
|
|
|
|
|
|
|
|
if (jniEnv->ExceptionCheck()) { |
|
|
|
@ -172,11 +146,34 @@ bool QSerialPortPrivate::open(QIODevice::OpenMode mode)
@@ -172,11 +146,34 @@ bool QSerialPortPrivate::open(QIODevice::OpenMode mode)
|
|
|
|
|
jniEnv->ExceptionClear(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(val < 0) { |
|
|
|
|
if (val < 0) { |
|
|
|
|
__android_log_print(ANDROID_LOG_ERROR, kJTag, "Error registering methods"); |
|
|
|
|
q_ptr->setError(QSerialPort::OpenError); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool QSerialPortPrivate::open(QIODevice::OpenMode mode) |
|
|
|
|
{ |
|
|
|
|
rwMode = mode; |
|
|
|
|
__android_log_print(ANDROID_LOG_INFO, kJTag, "Opening %s", systemLocation.toLatin1().data()); |
|
|
|
|
|
|
|
|
|
__android_log_print(ANDROID_LOG_INFO, kJTag, "Calling Java Open"); |
|
|
|
|
QAndroidJniObject jnameL = QAndroidJniObject::fromString(systemLocation); |
|
|
|
|
cleanJavaException(); |
|
|
|
|
deviceId = QAndroidJniObject::callStaticMethod<jint>( |
|
|
|
|
kJniClassName, |
|
|
|
|
"open", |
|
|
|
|
"(Ljava/lang/String;I)I", |
|
|
|
|
jnameL.object<jstring>(), |
|
|
|
|
(jint)this); |
|
|
|
|
cleanJavaException(); |
|
|
|
|
|
|
|
|
|
isReadStopped = false; |
|
|
|
|
|
|
|
|
|
if (deviceId == BAD_PORT) |
|
|
|
|
{ |
|
|
|
|
__android_log_print(ANDROID_LOG_ERROR, kJTag, "Error opening %s", systemLocation.toLatin1().data()); |
|
|
|
|
q_ptr->setError(QSerialPort::DeviceNotFoundError); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
__android_log_print(ANDROID_LOG_INFO, kJTag, "Calling Java getDeviceHandle"); |
|
|
|
|