]> sigrok.org Git - sigrok-util.git/blame - cross-compile/android/pulseview-cpp.patch
sigrok-cross-android: Provide a USB open hook for libusb running under JVM
[sigrok-util.git] / cross-compile / android / pulseview-cpp.patch
CommitLineData
aef0361e
MC
1diff --git a/CMakeLists.txt b/CMakeLists.txt
2index 11767a6..b8eed96 100644
3--- a/CMakeLists.txt
4+++ b/CMakeLists.txt
5@@ -317,12 +317,21 @@ if(WIN32)
6 list(APPEND PULSEVIEW_LINK_LIBS "-lqsvg")
7 endif()
8
9+if(ANDROID)
10+add_library(${PROJECT_NAME} SHARED
11+ ${pulseview_SOURCES}
12+ ${pulseview_HEADERS_MOC}
13+ ${pulseview_FORMS_HEADERS}
14+ ${pulseview_RESOURCES_RCC}
15+)
16+else()
17 add_executable(${PROJECT_NAME}
18 ${pulseview_SOURCES}
19 ${pulseview_HEADERS_MOC}
20 ${pulseview_FORMS_HEADERS}
21 ${pulseview_RESOURCES_RCC}
22 )
23+endif()
24
25 target_link_libraries(${PROJECT_NAME} ${PULSEVIEW_LINK_LIBS})
26
bdf42f4b
MC
27diff --git a/main.cpp b/main.cpp
28index 2c6a59e..79627db 100644
29--- a/main.cpp 2014-04-26 23:40:24.253187700 +0200
30+++ b/main.cpp 2014-04-27 00:38:55.378353311 +0200
31@@ -20,6 +20,9 @@
32
33 #ifdef ENABLE_DECODE
34 #include <libsigrokdecode/libsigrokdecode.h> /* First, so we avoid a _POSIX_C_SOURCE warning. */
35+#ifdef ANDROID
36+#include <jni.h>
37+#endif
38 #endif
39
40 #include <stdint.h>
41@@ -45,6 +48,47 @@
42 Q_IMPORT_PLUGIN(qsvg)
43 #endif
44
45+#if defined(ENABLE_DECODE) && defined(ANDROID)
46+jint JNI_OnLoad(JavaVM *vm, void *reserved)
47+{
48+ JNIEnv* env;
49+
50+ (void)reserved;
51+
52+ if (vm->GetEnv((void **)&env, JNI_VERSION_1_6) != JNI_OK) {
53+ return -1;
54+ }
55+
56+ jclass envc = env->FindClass("org/sigrok/androidutils/Environment");
57+ jmethodID getEnv = env->GetStaticMethodID(envc, "getEnvironment",
58+ "()[Ljava/lang/String;");
59+ jobjectArray envs =
60+ (jobjectArray)env->CallStaticObjectMethod(envc, getEnv);
61+ jsize i, envn = env->GetArrayLength(envs);
62+ for (i=0; i<envn; i+=2) {
63+ jstring key = (jstring)env->GetObjectArrayElement(envs, i);
64+ jstring value = (jstring)env->GetObjectArrayElement(envs, i+1);
65+ const char *utfkey = env->GetStringUTFChars(key, 0);
66+ const char *utfvalue = env->GetStringUTFChars(value, 0);
67+ setenv(utfkey, utfvalue, 1);
68+ env->ReleaseStringUTFChars(value, utfvalue);
69+ env->ReleaseStringUTFChars(key, utfkey);
70+ env->DeleteLocalRef(value);
71+ env->DeleteLocalRef(key);
72+ }
73+ env->DeleteLocalRef(envs);
74+ env->DeleteLocalRef(envc);
75+
76+ return JNI_VERSION_1_6;
77+}
78+
79+void JNI_OnUnload(JavaVM *vm, void *reserved)
80+{
81+ (void)vm;
82+ (void)reserved;
83+}
84+#endif
85+
86 void usage()
87 {
88 fprintf(stdout,