summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2012-02-06 22:03:13 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2012-02-06 22:03:13 +0000
commit705290c5e6b3f80811051b597686def2b900ca53 (patch)
treeed0ff1d1d561758a0ff5de628e8f776993c1fe68
parentce3462999e09f133454fc84bf79e8c9f8c465bd2 (diff)
downloadnavit-705290c5e6b3f80811051b597686def2b900ca53.tar.gz
Add:android:Made watches more flexible
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@4929 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r--navit/android.c24
-rw-r--r--navit/android/src/org/navitproject/navit/NavitWatch.java8
-rw-r--r--navit/graphics/android/graphics_android.c28
3 files changed, 35 insertions, 25 deletions
diff --git a/navit/android.c b/navit/android.c
index eec4005a8..1107f600c 100644
--- a/navit/android.c
+++ b/navit/android.c
@@ -1,6 +1,5 @@
#include <stdlib.h>
#include <string.h>
-#include <poll.h>
#include <glib.h>
#include "android.h"
#include <android/log.h>
@@ -142,26 +141,11 @@ Java_org_navitproject_navit_NavitIdle_IdleCallback( JNIEnv* env, jobject thiz, i
}
JNIEXPORT void JNICALL
-Java_org_navitproject_navit_NavitWatch_poll( JNIEnv* env, jobject thiz, int fd, int cond)
+Java_org_navitproject_navit_NavitWatch_poll( JNIEnv* env, jobject thiz, int func, int fd, int cond)
{
- struct pollfd pfd;
- pfd.fd=fd;
- dbg(1,"%p poll called for %d %d\n",env, fd, cond);
- switch ((enum event_watch_cond)cond) {
- case event_watch_cond_read:
- pfd.events=POLLIN;
- break;
- case event_watch_cond_write:
- pfd.events=POLLOUT;
- break;
- case event_watch_cond_except:
- pfd.events=POLLERR;
- break;
- default:
- pfd.events=0;
- }
- pfd.revents=0;
- poll(&pfd, 1, -1);
+ void (*pollfunc)(JNIEnv *env, int fd, int cond)=(void *)func;
+
+ pollfunc(env, fd, cond);
}
JNIEXPORT void JNICALL
diff --git a/navit/android/src/org/navitproject/navit/NavitWatch.java b/navit/android/src/org/navitproject/navit/NavitWatch.java
index 33303c386..ebe5c8727 100644
--- a/navit/android/src/org/navitproject/navit/NavitWatch.java
+++ b/navit/android/src/org/navitproject/navit/NavitWatch.java
@@ -32,17 +32,19 @@ public class NavitWatch implements Runnable {
}
};
private boolean removed;
+ private int watch_func;
private int watch_fd;
private int watch_cond;
private int watch_callbackid;
private boolean callback_pending;
private Runnable callback_runnable;
- public native void poll(int fd, int cond);
+ public native void poll(int func, int fd, int cond);
public native void WatchCallback(int id);
- NavitWatch(int fd, int cond, int callbackid)
+ NavitWatch(int func, int fd, int cond, int callbackid)
{
// Log.e("NavitWatch","Creating new thread for "+fd+" "+cond+" from current thread " + java.lang.Thread.currentThread().getName());
+ watch_func=func;
watch_fd=fd;
watch_cond=cond;
watch_callbackid=callbackid;
@@ -60,7 +62,7 @@ public class NavitWatch implements Runnable {
{
for (;;) {
// Log.e("NavitWatch","Polling "+watch_fd+" "+watch_cond + " from " + java.lang.Thread.currentThread().getName());
- poll(watch_fd, watch_cond);
+ poll(watch_func, watch_fd, watch_cond);
// Log.e("NavitWatch","poll returned");
if (removed)
break;
diff --git a/navit/graphics/android/graphics_android.c b/navit/graphics/android/graphics_android.c
index fad09c558..c15ac0328 100644
--- a/navit/graphics/android/graphics_android.c
+++ b/navit/graphics/android/graphics_android.c
@@ -19,6 +19,7 @@
#include <unistd.h>
#include <glib.h>
+#include <poll.h>
#include "config.h"
#include "window.h"
#include "point.h"
@@ -715,11 +716,34 @@ static jclass NavitWatchClass;
static jmethodID NavitWatch_init;
static jmethodID NavitWatch_remove;
+
+static void do_poll(JNIEnv *env, int fd, int cond)
+{
+ struct pollfd pfd;
+ pfd.fd=fd;
+ dbg(1,"%p poll called for %d %d\n", fd, cond);
+ switch ((enum event_watch_cond)cond) {
+ case event_watch_cond_read:
+ pfd.events=POLLIN;
+ break;
+ case event_watch_cond_write:
+ pfd.events=POLLOUT;
+ break;
+ case event_watch_cond_except:
+ pfd.events=POLLERR;
+ break;
+ default:
+ pfd.events=0;
+ }
+ pfd.revents=0;
+ poll(&pfd, 1, -1);
+}
+
static struct event_watch *
event_android_add_watch(void *h, enum event_watch_cond cond, struct callback *cb)
{
jobject ret;
- ret=(*jnienv)->NewObject(jnienv, NavitWatchClass, NavitWatch_init, (int) h, (int) cond, (int)cb);
+ ret=(*jnienv)->NewObject(jnienv, NavitWatchClass, NavitWatch_init, (int)do_poll, (int) h, (int) cond, (int)cb);
dbg(0,"result for %p,%d,%p=%p\n",h,cond,cb,ret);
if (ret)
(*jnienv)->NewGlobalRef(jnienv, ret);
@@ -832,7 +856,7 @@ event_android_new(struct event_methods *meth)
if (!find_class_global("org/navitproject/navit/NavitWatch", &NavitWatchClass))
return NULL;
- NavitWatch_init = (*jnienv)->GetMethodID(jnienv, NavitWatchClass, "<init>", "(III)V");
+ NavitWatch_init = (*jnienv)->GetMethodID(jnienv, NavitWatchClass, "<init>", "(IIII)V");
if (NavitWatch_init == NULL)
return NULL;
NavitWatch_remove = (*jnienv)->GetMethodID(jnienv, NavitWatchClass, "remove", "()V");