]> sigrok.org Git - sigrok-util.git/blame - cross-compile/android/pulseview-cpp.patch
sigrok-cross-android: Make Python work in PulseView, and reenable SRD
[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
27diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp
28index e4f0276..861d25b 100644
29--- a/pv/view/decodetrace.cpp
30+++ b/pv/view/decodetrace.cpp
31@@ -373,7 +373,7 @@ void DecodeTrace::draw_instant(const pv::data::decode::Annotation &a, QPainter &
32 {
33 const QString text = a.annotations().empty() ?
34 QString() : a.annotations().back();
35- const double w = min(p.boundingRect(QRectF(), 0, text).width(),
36+ const double w = min((double)p.boundingRect(QRectF(), 0, text).width(),
37 0.0) + h;
38 const QRectF rect(x - w / 2, y - h / 2, w, h);
39
bdf42f4b
MC
40diff --git a/main.cpp b/main.cpp
41index 2c6a59e..79627db 100644
42--- a/main.cpp 2014-04-26 23:40:24.253187700 +0200
43+++ b/main.cpp 2014-04-27 00:38:55.378353311 +0200
44@@ -20,6 +20,9 @@
45
46 #ifdef ENABLE_DECODE
47 #include <libsigrokdecode/libsigrokdecode.h> /* First, so we avoid a _POSIX_C_SOURCE warning. */
48+#ifdef ANDROID
49+#include <jni.h>
50+#endif
51 #endif
52
53 #include <stdint.h>
54@@ -45,6 +48,47 @@
55 Q_IMPORT_PLUGIN(qsvg)
56 #endif
57
58+#if defined(ENABLE_DECODE) && defined(ANDROID)
59+jint JNI_OnLoad(JavaVM *vm, void *reserved)
60+{
61+ JNIEnv* env;
62+
63+ (void)reserved;
64+
65+ if (vm->GetEnv((void **)&env, JNI_VERSION_1_6) != JNI_OK) {
66+ return -1;
67+ }
68+
69+ jclass envc = env->FindClass("org/sigrok/androidutils/Environment");
70+ jmethodID getEnv = env->GetStaticMethodID(envc, "getEnvironment",
71+ "()[Ljava/lang/String;");
72+ jobjectArray envs =
73+ (jobjectArray)env->CallStaticObjectMethod(envc, getEnv);
74+ jsize i, envn = env->GetArrayLength(envs);
75+ for (i=0; i<envn; i+=2) {
76+ jstring key = (jstring)env->GetObjectArrayElement(envs, i);
77+ jstring value = (jstring)env->GetObjectArrayElement(envs, i+1);
78+ const char *utfkey = env->GetStringUTFChars(key, 0);
79+ const char *utfvalue = env->GetStringUTFChars(value, 0);
80+ setenv(utfkey, utfvalue, 1);
81+ env->ReleaseStringUTFChars(value, utfvalue);
82+ env->ReleaseStringUTFChars(key, utfkey);
83+ env->DeleteLocalRef(value);
84+ env->DeleteLocalRef(key);
85+ }
86+ env->DeleteLocalRef(envs);
87+ env->DeleteLocalRef(envc);
88+
89+ return JNI_VERSION_1_6;
90+}
91+
92+void JNI_OnUnload(JavaVM *vm, void *reserved)
93+{
94+ (void)vm;
95+ (void)reserved;
96+}
97+#endif
98+
99 void usage()
100 {
101 fprintf(stdout,