com_phidgets_Manager.c
Go to the documentation of this file.
00001 #include "../stdafx.h"
00002 #include <stdlib.h>
00003 #include "com_phidgets_Manager.h"
00004 #include "../cphidgetmanager.h"
00005 #include "../csocket.h"
00006 #include "phidget_jni.h"
00007 
00008 static int CCONV attach_handler(CPhidgetHandle h, void *arg);
00009 static int CCONV detach_handler(CPhidgetHandle h, void *arg);
00010 static int CCONV serverConnect_handler(CPhidgetManagerHandle h, void *arg);
00011 static int CCONV serverDisconnect_handler(CPhidgetManagerHandle h, void *arg);
00012 
00013 extern jfieldID managerPhidget_fid;
00014 
00015 static jclass manager_class;
00016 
00017 static jfieldID manager_handle_fid;
00018 static jfieldID nativeAttachHandler_fid;
00019 static jfieldID nativeDetachHandler_fid;
00020 static jfieldID nativeServerConnectHandler_fid;
00021 static jfieldID nativeServerDisconnectHandler_fid;
00022 
00023 static jmethodID fireAttach_mid;
00024 static jmethodID fireDetach_mid;
00025 static jmethodID fireServerConnect_mid;
00026 static jmethodID fireServerDisconnect_mid;
00027 
00028 void
00029 com_phidgets_Manager_OnLoad(JNIEnv *env)
00030 {
00031         //Manager
00032         if (!(manager_class = (*env)->FindClass(env, "com/phidgets/Manager")))
00033                 JNI_ABORT_STDERR("");
00034         if (!(manager_class = (jclass)(*env)->NewGlobalRef(env, manager_class)))
00035                 JNI_ABORT_STDERR("");
00036 
00037         if (!(manager_handle_fid = (*env)->GetFieldID(env, manager_class, "handle", "J")))
00038                 JNI_ABORT_STDERR("");
00039         if (!(nativeAttachHandler_fid = (*env)->GetFieldID(env, manager_class, "nativeAttachHandler", "J")))
00040                 JNI_ABORT_STDERR("");
00041         if (!(nativeDetachHandler_fid = (*env)->GetFieldID(env, manager_class, "nativeDetachHandler", "J")))
00042                 JNI_ABORT_STDERR("");
00043         if (!(nativeServerConnectHandler_fid = (*env)->GetFieldID(env, manager_class, "nativeServerConnectHandler", "J")))
00044                 JNI_ABORT_STDERR("");
00045         if (!(nativeServerDisconnectHandler_fid = (*env)->GetFieldID(env, manager_class, "nativeServerDisconnectHandler", "J")))
00046                 JNI_ABORT_STDERR("");
00047 
00048         if (!(fireAttach_mid = (*env)->GetMethodID(env, manager_class, "fireAttach", "(Lcom/phidgets/event/AttachEvent;)V")))
00049                 JNI_ABORT_STDERR("");
00050         if (!(fireDetach_mid = (*env)->GetMethodID(env, manager_class, "fireDetach", "(Lcom/phidgets/event/DetachEvent;)V")))
00051                 JNI_ABORT_STDERR("");
00052         if (!(fireServerConnect_mid = (*env)->GetMethodID(env, manager_class, "fireServerConnect", "(Lcom/phidgets/event/ServerConnectEvent;)V")))
00053                 JNI_ABORT_STDERR("");
00054         if (!(fireServerDisconnect_mid = (*env)->GetMethodID(env, manager_class, "fireServerDisconnect", "(Lcom/phidgets/event/ServerDisconnectEvent;)V")))
00055                 JNI_ABORT_STDERR("");
00056 }
00057 
00058 JNIEXPORT jboolean JNICALL
00059 Java_com_phidgets_Manager_isAttached(JNIEnv *env, jobject obj)
00060 {
00061         CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env,
00062             obj, manager_handle_fid);
00063         int error;
00064         int s;
00065         
00066         if ((error = CPhidget_getDeviceStatus(h, &s)))
00067                 PH_THROW(error);
00068 
00069         return s == PHIDGET_ATTACHED;
00070 }
00071 
00072 JNIEXPORT jboolean JNICALL
00073 Java_com_phidgets_Manager_isAttachedToServer(JNIEnv *env, jobject obj)
00074 {
00075         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)(*env)->GetLongField(env,
00076             obj, manager_handle_fid);
00077         int error;
00078         int s;
00079         
00080         if ((error = CPhidgetManager_getServerStatus(h, &s)))
00081                 PH_THROW(error);
00082 
00083         return s == PHIDGET_ATTACHED;
00084 }
00085 
00086 JNIEXPORT jint JNICALL
00087 Java_com_phidgets_Manager_getServerPort(JNIEnv *env, jobject obj)
00088 {
00089         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)(*env)->GetLongField(env,
00090             obj, manager_handle_fid);
00091         int error;
00092         int port;
00093         const char *addr;
00094 
00095         if ((error = CPhidgetManager_getServerAddress(h, &addr, &port)))
00096                 PH_THROW(error);
00097 
00098         return port;
00099 }
00100 
00101 JNIEXPORT jstring JNICALL
00102 Java_com_phidgets_Manager_getServerAddress(JNIEnv *env, jobject obj)
00103 {
00104         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)(*env)->GetLongField(env,
00105             obj, manager_handle_fid);
00106         int error;
00107         int port;
00108         const char *addr;
00109 
00110         if ((error = CPhidgetManager_getServerAddress(h, &addr, &port)))
00111                 PH_THROW(error);
00112 
00113         return (*env)->NewStringUTF(env, addr);
00114 }
00115 
00116 JNIEXPORT jstring JNICALL
00117 Java_com_phidgets_Manager_getServerID(JNIEnv *env, jobject obj)
00118 {
00119         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)(*env)->GetLongField(env,
00120             obj, manager_handle_fid);
00121         int error;
00122         const char *id;
00123 
00124         if ((error = CPhidgetManager_getServerID(h, &id)))
00125                 PH_THROW(error);
00126 
00127         return (*env)->NewStringUTF(env, id);
00128 }
00129 
00130 JNIEXPORT void JNICALL
00131 Java_com_phidgets_Manager_enableManagerAttachEvents(JNIEnv *env, jobject obj,
00132   jboolean b)
00133 {
00134         jlong gr = updateGlobalRef(env, obj, nativeAttachHandler_fid, b);
00135         
00136         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)
00137             (*env)->GetLongField(env, obj, manager_handle_fid);
00138 
00139         CPhidgetManager_set_OnAttach_Handler(h, b ? attach_handler : 0,
00140             (void *)(uintptr_t)gr);
00141 }
00142 
00143 static int CCONV
00144 attach_handler(CPhidgetHandle h, void *arg)
00145 {
00146         JNIEnv *env;
00147         jobject obj;
00148         jobject device;
00149         jobject attachEvent;
00150         jlong devhandle;
00151 
00152         if ((*ph_vm)->AttachCurrentThread(ph_vm, (JNIEnvPtr)&env, NULL))
00153                 JNI_ABORT_STDERR("Couldn't AttachCurrentThread");
00154 
00155         obj = (jobject)arg;
00156         devhandle = (jlong)(uintptr_t)h;
00157 
00158         if (!(device = (*env)->NewObject(env, phidget_class, phidget_cons,
00159           devhandle)))
00160                 return -1;
00161 
00162         (*env)->SetBooleanField(env, device, managerPhidget_fid, JNI_TRUE);
00163 
00164         if (!(attachEvent = (*env)->NewObject(env, attachEvent_class, attachEvent_cons,
00165           device)))
00166                 return -1;
00167         (*env)->CallVoidMethod(env, obj, fireAttach_mid, attachEvent);
00168         (*env)->DeleteLocalRef(env, device);
00169         (*env)->DeleteLocalRef(env, attachEvent);
00170 
00171         return 0;
00172 }
00173 
00174 JNIEXPORT void JNICALL
00175 Java_com_phidgets_Manager_enableManagerDetachEvents(JNIEnv *env, jobject obj,
00176   jboolean b)
00177 {
00178         jlong gr = updateGlobalRef(env, obj, nativeDetachHandler_fid, b);
00179         
00180         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)
00181             (*env)->GetLongField(env, obj, manager_handle_fid);
00182 
00183         CPhidgetManager_set_OnDetach_Handler(h, b ? detach_handler : 0, (void *)(uintptr_t)gr);
00184 }
00185 
00186 static int CCONV
00187 detach_handler(CPhidgetHandle h, void *arg)
00188 {
00189         JNIEnv *env;
00190         jobject obj;
00191         jobject device;
00192         jobject detachEvent;
00193         jlong devhandle;
00194 
00195         if ((*ph_vm)->AttachCurrentThread(ph_vm, (JNIEnvPtr)&env, NULL))
00196                 JNI_ABORT_STDERR("Couldn't AttachCurrentThread");
00197 
00198         obj = (jobject)arg;
00199         devhandle = (jlong)(uintptr_t)h;
00200 
00201         if (!(device = (*env)->NewObject(env, phidget_class, phidget_cons,
00202           devhandle)))
00203                 return -1;
00204         
00205         (*env)->SetBooleanField(env, device, managerPhidget_fid, JNI_TRUE);
00206 
00207         if (!(detachEvent = (*env)->NewObject(env, detachEvent_class, detachEvent_cons,
00208           device)))
00209                 return -1;
00210         (*env)->CallVoidMethod(env, obj, fireDetach_mid, detachEvent);
00211         (*env)->DeleteLocalRef(env, device);
00212         (*env)->DeleteLocalRef(env, detachEvent);
00213 
00214         return 0;
00215 }
00216 
00217 JNIEXPORT void JNICALL
00218 Java_com_phidgets_Manager_enableServerConnectEvents(JNIEnv *env, jobject obj,
00219   jboolean b)
00220 {
00221         jlong gr = updateGlobalRef(env, obj, nativeServerConnectHandler_fid, b);
00222         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)(*env)->GetLongField(env,
00223             obj, manager_handle_fid);
00224 
00225         CPhidgetManager_set_OnServerConnect_Handler(h, b ? serverConnect_handler : 0,
00226             (void *)(uintptr_t)gr);
00227 }
00228 
00229 static int CCONV
00230 serverConnect_handler(CPhidgetManagerHandle h, void *arg)
00231 {
00232         JNIEnv *env;
00233         jobject obj;
00234         jobject serverConnectEvent;
00235 
00236         if ((*ph_vm)->AttachCurrentThread(ph_vm, (JNIEnvPtr)&env, NULL))
00237                 JNI_ABORT_STDERR("Couldn't AttachCurrentThread");
00238 
00239         obj = (jobject)arg;
00240 
00241         if (!(serverConnectEvent = (*env)->NewObject(env, serverConnectEvent_class, serverConnectEvent_cons,
00242           obj)))
00243                 return -1;
00244         (*env)->CallVoidMethod(env, obj, fireServerConnect_mid, serverConnectEvent);
00245         (*env)->DeleteLocalRef(env, serverConnectEvent);
00246 
00247         return 0;
00248 }
00249 
00250 JNIEXPORT void JNICALL
00251 Java_com_phidgets_Manager_enableServerDisconnectEvents(JNIEnv *env, jobject obj,
00252   jboolean b)
00253 {
00254         jlong gr = updateGlobalRef(env, obj, nativeServerDisconnectHandler_fid, b);
00255         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)(*env)->GetLongField(env,
00256             obj, manager_handle_fid);
00257 
00258         CPhidgetManager_set_OnServerDisconnect_Handler(h, b ? serverDisconnect_handler : 0,
00259             (void *)(uintptr_t)gr);
00260 }
00261 
00262 static int CCONV
00263 serverDisconnect_handler(CPhidgetManagerHandle h, void *arg)
00264 {
00265         JNIEnv *env;
00266         jobject obj;
00267         jobject serverDisconnectEvent;
00268 
00269         if ((*ph_vm)->AttachCurrentThread(ph_vm, (JNIEnvPtr)&env, NULL))
00270                 JNI_ABORT_STDERR("Couldn't AttachCurrentThread");
00271 
00272         obj = (jobject)arg;
00273 
00274         if (!(serverDisconnectEvent = (*env)->NewObject(env, serverDisconnectEvent_class, serverDisconnectEvent_cons,
00275           obj)))
00276                 return -1;
00277         (*env)->CallVoidMethod(env, obj, fireServerDisconnect_mid, serverDisconnectEvent);
00278         (*env)->DeleteLocalRef(env, serverDisconnectEvent);
00279 
00280         return 0;
00281 }
00282 
00283 JNIEXPORT void JNICALL
00284 Java_com_phidgets_Manager_nativeOpen(JNIEnv *env, jobject obj)
00285 {
00286         int error;
00287         
00288         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)
00289             (*env)->GetLongField(env, obj, manager_handle_fid);
00290 
00291         if ((error = CPhidgetManager_open(h)))
00292                 PH_THROW(error);
00293 }
00294 
00295 JNIEXPORT void JNICALL
00296 Java_com_phidgets_Manager_nativeOpenRemote(JNIEnv *env, jobject obj, jstring serverID, jstring pass)
00297 {
00298         int error;
00299     jboolean iscopy;
00300     const char *serverIDcopy = serverID?(*env)->GetStringUTFChars(
00301                                 env, serverID, &iscopy):0;
00302     const char *passcopy = (*env)->GetStringUTFChars(
00303                 env, pass, &iscopy);
00304 
00305         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)
00306             (*env)->GetLongField(env, obj, manager_handle_fid);
00307 
00308         if ((error = CPhidgetManager_openRemote(h, serverIDcopy, passcopy)))
00309                 PH_THROW(error);
00310 
00311         if(serverID)
00312                 (*env)->ReleaseStringUTFChars(env, serverID, serverIDcopy);
00313         (*env)->ReleaseStringUTFChars(env, pass, passcopy);
00314 }
00315 
00316 JNIEXPORT void JNICALL
00317 Java_com_phidgets_Manager_nativeOpenRemoteIP(JNIEnv *env, jobject obj, jstring ipAddr, jint port, jstring pass)
00318 {
00319         int error;
00320     jboolean iscopy;
00321     const char *ipAddrcopy = (*env)->GetStringUTFChars(
00322                 env, ipAddr, &iscopy);
00323     const char *passcopy = (*env)->GetStringUTFChars(
00324                 env, pass, &iscopy);
00325 
00326         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)
00327             (*env)->GetLongField(env, obj, manager_handle_fid);
00328 
00329         if ((error = CPhidgetManager_openRemoteIP(h, ipAddrcopy, port, passcopy)))
00330                 PH_THROW(error);
00331 
00332         (*env)->ReleaseStringUTFChars(env, ipAddr, ipAddrcopy);
00333         (*env)->ReleaseStringUTFChars(env, pass, passcopy);
00334 }
00335 
00336 JNIEXPORT void JNICALL
00337 Java_com_phidgets_Manager_nativeDelete(JNIEnv *env, jobject obj)
00338 {
00339         int error;
00340         
00341         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)
00342             (*env)->GetLongField(env, obj, manager_handle_fid);
00343 
00344         if ((error = CPhidgetManager_delete(h)))
00345                 PH_THROW(error);
00346 }
00347 
00348 JNIEXPORT void JNICALL
00349 Java_com_phidgets_Manager_nativeClose(JNIEnv *env, jobject obj)
00350 {
00351         int error;
00352         
00353         CPhidgetManagerHandle h = (CPhidgetManagerHandle)(uintptr_t)
00354             (*env)->GetLongField(env, obj, manager_handle_fid);
00355 
00356         if ((error = CPhidgetManager_close(h)))
00357                 PH_THROW(error);
00358 }
00359 
00360 JNIEXPORT jlong JNICALL
00361 Java_com_phidgets_Manager_create(JNIEnv *env, jobject obj)
00362 {
00363         int error;
00364         CPhidgetManagerHandle phidm;
00365         
00366         if ((error = CPhidgetManager_create(&phidm)))
00367                 PH_THROW(error);
00368         return (jlong)(uintptr_t)phidm; 
00369 }


pedal_monitor
Author(s): Pedro Mendes
autogenerated on Fri Jun 6 2014 18:37:20