Unverified Commit bd307a17 authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #7730 from DonLakeFlyer/Android64Serial

Android 64 bit stage 1
parents 646b87e1 2a3ee083
......@@ -25,7 +25,7 @@ matrix:
sudo: required
- dist: trusty
language: android
env: SPEC=android-g++ CONFIG=installer
env: SPEC=android-clang CONFIG=installer
sudo: false
- os: osx
osx_image: xcode9.2
......@@ -82,16 +82,16 @@ install:
fi
# android dependencies: qt, gstreamer, android-ndk
- if [ "${SPEC}" = "android-g++" ]; then
- if [ "${SPEC}" = "android-clang" ]; then
wget --quiet https://s3-us-west-2.amazonaws.com/qgroundcontrol/dependencies/gstreamer-1.0-android-universal-1.14.4.tar.bz2 &&
tar jxf gstreamer-1.0-android-universal-1.14.4.tar.bz2 -C ${TRAVIS_BUILD_DIR} &&
wget --quiet https://s3-us-west-2.amazonaws.com/qgroundcontrol/dependencies/Qt5.11.0-android_armv7-min.tar.bz2 &&
tar jxf Qt5.11.0-android_armv7-min.tar.bz2 -C /tmp &&
wget --quiet https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip &&
unzip android-ndk-r16b-linux-x86_64.zip > /dev/null &&
export ANDROID_NDK_ROOT=`pwd`/android-ndk-r16b &&
wget --quiet https://s3-us-west-2.amazonaws.com/qgroundcontrol/dependencies/Qt5.12.4-android_armv7-min.tar.bz2 &&
tar jxf Qt5.12.4-android_armv7-min.tar.bz2 -C /tmp &&
wget --quiet https://dl.google.com/android/repository/android-ndk-r20-linux-x86_64.zip &&
unzip android-ndk-r20-linux-x86_64.zip > /dev/null &&
export ANDROID_NDK_ROOT=`pwd`/android-ndk-r20 &&
export ANDROID_SDK_ROOT=/usr/local/android-sdk &&
export PATH=/tmp/Qt5.11-android_armv7/5.11.0/android_armv7/bin:`pwd`/android-ndk-r16b:$PATH && echo $PATH
export PATH=/tmp/Qt5.12-android_armv7/5.12.4/android_armv7/bin:`pwd`/android-ndk-r20:$PATH && echo $PATH
;
fi
......@@ -133,12 +133,12 @@ before_script:
- cd ${TRAVIS_BUILD_DIR}
# switch android config from installer to release if the android storepass isn't available
- if [[ "${SPEC}" = "android-g++" && "${CONFIG}" = "installer" && -z ${ANDROID_STOREPASS} ]]; then
- if [[ "${SPEC}" = "android-clang" && "${CONFIG}" = "installer" && -z ${ANDROID_STOREPASS} ]]; then
export CONFIG=release;
fi
# insert QGC version in AndroidManifest.xml
- if [ "${SPEC}" = "android-g++" ]; then
- if [ "${SPEC}" = "android-clang" ]; then
git remote set-branches origin 'master' &&
git fetch --tags origin master &&
./tools/update_android_version.sh;
......@@ -181,7 +181,7 @@ after_success:
else
GOOGLE_PLAY_PKG=none;
fi
- if [[ "${SPEC}" = "android-g++" && "${TRAVIS_PULL_REQUEST}" = "false" && "${GOOGLE_PLAY_PKG}" != "none" ]]; then
- if [[ "${SPEC}" = "android-clang" && "${TRAVIS_PULL_REQUEST}" = "false" && "${GOOGLE_PLAY_PKG}" != "none" ]]; then
pip install --user --upgrade oauth2client &&
pip install --user google-api-python-client pyopenssl ndg-httpsclient pyasn1 &&
openssl aes-256-cbc -K $encrypted_25db6eb7c3fd_key -iv $encrypted_25db6eb7c3fd_iv -in android/Google_Play_Android_Developer-4432a3c4f5d1.json.enc -out android/Google_Play_Android_Developer-4432a3c4f5d1.json -d &&
......
......@@ -34,7 +34,7 @@ linux {
DEFINES += __STDC_LIMIT_MACROS __rasp_pi2__
DEFINES += QGC_GST_TAISYNC_ENABLED
DEFINES += QGC_GST_MICROHARD_ENABLED
} else : android-g++ | android-clang {
} else : android-clang {
CONFIG += AndroidBuild MobileBuild
DEFINES += __android__
DEFINES += __STDC_LIMIT_MACROS
......@@ -42,6 +42,8 @@ linux {
DEFINES += QGC_GST_TAISYNC_ENABLED
DEFINES += QGC_GST_MICROHARD_ENABLED
QMAKE_CXXFLAGS += -Wno-address-of-packed-member
QMAKE_CXXFLAGS += -Wno-unused-command-line-argument
QMAKE_LINK += -nostdlib++ # Hack fix?: https://forum.qt.io/topic/103713/error-cannot-find-lc-qt-5-12-android
target.path = $$DESTDIR
equals(ANDROID_TARGET_ARCH, x86) {
CONFIG += Androidx86Build
......
......@@ -154,6 +154,8 @@ AndroidBuild {
ANDROID_EXTRA_LIBS += $$BASEDIR/libs/OpenSSL/Android/arch-armeabi-v7a/lib/libssl.so
LIBS += $$ANDROID_EXTRA_LIBS
INCLUDEPATH += $$BASEDIR/libs/OpenSSL/Android/arch-armeabi-v7a/include
} else:contains(QT_ARCH, arm64) {
# Haven't figured out how to get 64 bit arm OpenSLL yet. This means things like terrain queries will not qork.
} else {
ANDROID_EXTRA_LIBS += $$BASEDIR/libs/OpenSSL/Android/arch-x86/lib/libcrypto.so
ANDROID_EXTRA_LIBS += $$BASEDIR/libs/OpenSSL/Android/arch-x86/lib/libssl.so
......
......@@ -69,7 +69,7 @@ public class QGCActivity extends QtActivity
private static UsbManager _usbManager = null;
private static List<UsbSerialDriver> _drivers;
private static HashMap<Integer, UsbIoManager> m_ioManager;
private static HashMap<Integer, Integer> _userDataHashByDeviceId;
private static HashMap<Integer, Long> _userDataHashByDeviceId;
private static final String TAG = "QGC_QGCActivity";
private static PowerManager.WakeLock _wakeLock;
private static final String ACTION_USB_PERMISSION = "org.mavlink.qgroundcontrol.action.USB_PERMISSION";
......@@ -85,14 +85,14 @@ public class QGCActivity extends QtActivity
new UsbIoManager.Listener()
{
@Override
public void onRunError(Exception eA, int userData)
public void onRunError(Exception eA, long userData)
{
Log.e(TAG, "onRunError Exception");
nativeDeviceException(userData, eA.getMessage());
}
@Override
public void onNewData(final byte[] dataA, int userData)
public void onNewData(final byte[] dataA, long userData)
{
nativeDeviceNewData(userData, dataA);
}
......@@ -174,9 +174,9 @@ public class QGCActivity extends QtActivity
};
// Native C++ functions which connect back to QSerialPort code
private static native void nativeDeviceHasDisconnected(int userData);
private static native void nativeDeviceException(int userData, String messageA);
private static native void nativeDeviceNewData(int userData, byte[] dataA);
private static native void nativeDeviceHasDisconnected(long userData);
private static native void nativeDeviceException(long userData, String messageA);
private static native void nativeDeviceNewData(long userData, byte[] dataA);
private static native void nativeUpdateAvailableJoysticks();
// Native C++ functions called to log output
......@@ -190,7 +190,7 @@ public class QGCActivity extends QtActivity
{
_instance = this;
_drivers = new ArrayList<UsbSerialDriver>();
_userDataHashByDeviceId = new HashMap<Integer, Integer>();
_userDataHashByDeviceId = new HashMap<Integer, Long>();
m_ioManager = new HashMap<Integer, UsbIoManager>();
}
......@@ -375,7 +375,7 @@ public class QGCActivity extends QtActivity
/// Open the specified device
/// @param userData Data to associate with device and pass back through to native calls.
/// @return Device id
public static int open(Context parentContext, String deviceName, int userData)
public static int open(Context parentContext, String deviceName, long userData)
{
int deviceId = BAD_DEVICE_ID;
......
......@@ -40,7 +40,7 @@ public class UsbIoManager implements Runnable {
private static final String TAG = "QGC_UsbIoManager";
private final UsbSerialDriver mDriver;
private int mUserData;
private long mUserData;
private final ByteBuffer mReadBuffer = ByteBuffer.allocate(BUFSIZ);
private final ByteBuffer mWriteBuffer = ByteBuffer.allocate(BUFSIZ);
......@@ -62,13 +62,13 @@ public class UsbIoManager implements Runnable {
/**
* Called when new incoming data is available.
*/
public void onNewData(byte[] data, int userData);
public void onNewData(byte[] data, long userData);
/**
* Called when {@link SerialInputOutputManager#run()} aborts due to an
* error.
*/
public void onRunError(Exception e, int userData);
public void onRunError(Exception e, long userData);
}
......@@ -87,7 +87,7 @@ public class UsbIoManager implements Runnable {
/**
* Creates a new instance with the provided listener.
*/
public UsbIoManager(UsbSerialDriver driver, Listener listener, int userData)
public UsbIoManager(UsbSerialDriver driver, Listener listener, long userData)
{
mDriver = driver;
mListener = listener;
......
......@@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE
static const char kJniClassName[] {"org/mavlink/qgroundcontrol/QGCActivity"};
static void jniDeviceHasDisconnected(JNIEnv *envA, jobject thizA, jint userDataA)
static void jniDeviceHasDisconnected(JNIEnv *envA, jobject thizA, jlong userDataA)
{
Q_UNUSED(envA);
Q_UNUSED(thizA);
......@@ -64,7 +64,7 @@ static void jniDeviceHasDisconnected(JNIEnv *envA, jobject thizA, jint userDataA
(reinterpret_cast<QSerialPortPrivate*>(userDataA))->q_ptr->close();
}
static void jniDeviceNewData(JNIEnv *envA, jobject thizA, jint userDataA, jbyteArray dataA)
static void jniDeviceNewData(JNIEnv *envA, jobject thizA, jlong userDataA, jbyteArray dataA)
{
Q_UNUSED(thizA);
if (userDataA != 0)
......@@ -76,7 +76,7 @@ static void jniDeviceNewData(JNIEnv *envA, jobject thizA, jint userDataA, jbyteA
}
}
static void jniDeviceException(JNIEnv *envA, jobject thizA, jint userDataA, jstring messageA)
static void jniDeviceException(JNIEnv *envA, jobject thizA, jlong userDataA, jstring messageA)
{
Q_UNUSED(thizA);
if(userDataA != 0)
......@@ -143,9 +143,9 @@ void QSerialPortPrivate::setNativeMethods(void)
// REGISTER THE C++ FUNCTION WITH JNI
JNINativeMethod javaMethods[] {
{"nativeDeviceHasDisconnected", "(I)V", reinterpret_cast<void *>(jniDeviceHasDisconnected)},
{"nativeDeviceNewData", "(I[B)V", reinterpret_cast<void *>(jniDeviceNewData)},
{"nativeDeviceException", "(ILjava/lang/String;)V", reinterpret_cast<void *>(jniDeviceException)},
{"nativeDeviceHasDisconnected", "(J)V", reinterpret_cast<void *>(jniDeviceHasDisconnected)},
{"nativeDeviceNewData", "(J[B)V", reinterpret_cast<void *>(jniDeviceNewData)},
{"nativeDeviceException", "(JLjava/lang/String;)V", reinterpret_cast<void *>(jniDeviceException)},
{"qgcLogDebug", "(Ljava/lang/String;)V", reinterpret_cast<void *>(jniLogDebug)},
{"qgcLogWarning", "(Ljava/lang/String;)V", reinterpret_cast<void *>(jniLogWarning)}
};
......@@ -186,10 +186,10 @@ bool QSerialPortPrivate::open(QIODevice::OpenMode mode)
deviceId = QAndroidJniObject::callStaticMethod<jint>(
kJniClassName,
"open",
"(Landroid/content/Context;Ljava/lang/String;I)I",
"(Landroid/content/Context;Ljava/lang/String;J)I",
QtAndroid::androidActivity().object(),
jnameL.object<jstring>(),
reinterpret_cast<jint>(this));
reinterpret_cast<jlong>(this));
cleanJavaException();
isReadStopped = false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment