00001 #include "../stdafx.h" 00002 #include <stdlib.h> 00003 #include "com_phidgets_Phidget.h" 00004 #include "../cphidget.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(CPhidgetHandle h, void *arg); 00011 static int CCONV serverDisconnect_handler(CPhidgetHandle h, void *arg); 00012 static int CCONV error_handler(CPhidgetHandle h, void *, int l, const char *arg); 00013 00014 jfieldID handle_fid; 00015 jfieldID managerPhidget_fid; 00016 static jfieldID nativeAttachHandler_fid; 00017 static jfieldID nativeDetachHandler_fid; 00018 static jfieldID nativeErrorHandler_fid; 00019 static jfieldID nativeServerConnectHandler_fid; 00020 static jfieldID nativeServerDisconnectHandler_fid; 00021 00022 static jmethodID fireAttach_mid; 00023 static jmethodID fireDetach_mid; 00024 static jmethodID fireError_mid; 00025 static jmethodID fireServerConnect_mid; 00026 static jmethodID fireServerDisconnect_mid; 00027 00028 void 00029 com_phidgets_Phidget_OnLoad(JNIEnv *env) 00030 { 00031 if (!(handle_fid = (*env)->GetFieldID(env, phidget_class, "handle", "J"))) 00032 JNI_ABORT_STDERR("Couldn't get Field ID handle from phidget_class"); 00033 if (!(managerPhidget_fid = (*env)->GetFieldID(env, phidget_class, "managerPhidget", "Z"))) 00034 JNI_ABORT_STDERR("Couldn't get Field ID managerPhidget from phidget_class"); 00035 if (!(nativeAttachHandler_fid = (*env)->GetFieldID(env, phidget_class, "nativeAttachHandler", "J"))) 00036 JNI_ABORT_STDERR("Couldn't get Field ID nativeAttachHandler from phidget_class"); 00037 if (!(nativeDetachHandler_fid = (*env)->GetFieldID(env, phidget_class, "nativeDetachHandler", "J"))) 00038 JNI_ABORT_STDERR("Couldn't get Field ID nativeDetachHandler from phidget_class"); 00039 if (!(nativeErrorHandler_fid = (*env)->GetFieldID(env, phidget_class, "nativeErrorHandler", "J"))) 00040 JNI_ABORT_STDERR("Couldn't get Field ID nativeErrorHandler from phidget_class"); 00041 if (!(nativeServerConnectHandler_fid = (*env)->GetFieldID(env, phidget_class, "nativeServerConnectHandler", "J"))) 00042 JNI_ABORT_STDERR("Couldn't get Field ID nativeServerConnectHandler from phidget_class"); 00043 if (!(nativeServerDisconnectHandler_fid = (*env)->GetFieldID(env, phidget_class, "nativeServerDisconnectHandler", "J"))) 00044 JNI_ABORT_STDERR("Couldn't get Field ID nativeServerDisconnectHandler from phidget_class"); 00045 00046 if (!(fireAttach_mid = (*env)->GetMethodID(env, phidget_class, "fireAttach", "(Lcom/phidgets/event/AttachEvent;)V"))) 00047 JNI_ABORT_STDERR("Couldn't get method ID fireAttach from phidget_class"); 00048 if (!(fireDetach_mid = (*env)->GetMethodID(env, phidget_class, "fireDetach", "(Lcom/phidgets/event/DetachEvent;)V"))) 00049 JNI_ABORT_STDERR("Couldn't get method ID fireDetach from phidget_class"); 00050 if (!(fireError_mid = (*env)->GetMethodID(env, phidget_class, "fireError", "(Lcom/phidgets/event/ErrorEvent;)V"))) 00051 JNI_ABORT_STDERR("Couldn't get method ID fireError from phidget_class"); 00052 if (!(fireServerConnect_mid = (*env)->GetMethodID(env, phidget_class, "fireServerConnect", "(Lcom/phidgets/event/ServerConnectEvent;)V"))) 00053 JNI_ABORT_STDERR("Couldn't get method ID fireServerConnect from phidget_class"); 00054 if (!(fireServerDisconnect_mid = (*env)->GetMethodID(env, phidget_class, "fireServerDisconnect", "(Lcom/phidgets/event/ServerDisconnectEvent;)V"))) 00055 JNI_ABORT_STDERR("Couldn't get method ID fireServerDisconnect from phidget_class"); 00056 } 00057 00058 JNIEXPORT void JNICALL 00059 Java_com_phidgets_Phidget_enableAttachEvents(JNIEnv *env, jobject obj, 00060 jboolean b) 00061 { 00062 jlong gr = updateGlobalRef(env, obj, nativeAttachHandler_fid, b); 00063 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00064 obj, handle_fid); 00065 00066 CPhidget_set_OnAttach_Handler(h, b ? attach_handler : 0, 00067 (void *)(uintptr_t)gr); 00068 } 00069 00070 static int CCONV 00071 attach_handler(CPhidgetHandle h, void *arg) 00072 { 00073 JNIEnv *env; 00074 jobject obj; 00075 jobject attachEvent; 00076 00077 if ((*ph_vm)->AttachCurrentThread(ph_vm, (JNIEnvPtr)&env, NULL)) 00078 JNI_ABORT_STDERR("Couldn't AttachCurrentThread"); 00079 00080 obj = (jobject)arg; 00081 00082 if (!(attachEvent = (*env)->NewObject(env, attachEvent_class, attachEvent_cons, 00083 obj))) 00084 return -1; 00085 (*env)->CallVoidMethod(env, obj, fireAttach_mid, attachEvent); 00086 (*env)->DeleteLocalRef(env, attachEvent); 00087 00088 return 0; 00089 } 00090 00091 JNIEXPORT void JNICALL 00092 Java_com_phidgets_Phidget_enableDetachEvents(JNIEnv *env, jobject obj, 00093 jboolean b) 00094 { 00095 jlong gr = updateGlobalRef(env, obj, nativeDetachHandler_fid, b); 00096 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00097 obj, handle_fid); 00098 00099 CPhidget_set_OnDetach_Handler(h, b ? detach_handler : 0, (void *)(uintptr_t)gr); 00100 } 00101 00102 static int CCONV 00103 detach_handler(CPhidgetHandle h, void *arg) 00104 { 00105 JNIEnv *env; 00106 jobject obj; 00107 jobject detachEvent; 00108 00109 if ((*ph_vm)->AttachCurrentThread(ph_vm, (JNIEnvPtr)&env, NULL)) 00110 JNI_ABORT_STDERR("Couldn't AttachCurrentThread"); 00111 00112 obj = (jobject)arg; 00113 00114 if (!(detachEvent = (*env)->NewObject(env, detachEvent_class, detachEvent_cons, 00115 obj))) 00116 return -1; 00117 (*env)->CallVoidMethod(env, obj, fireDetach_mid, detachEvent); 00118 (*env)->DeleteLocalRef(env, detachEvent); 00119 00120 return 0; 00121 } 00122 00123 JNIEXPORT void JNICALL 00124 Java_com_phidgets_Phidget_enableErrorEvents(JNIEnv *env, jobject obj, 00125 jboolean b) 00126 { 00127 jlong gr = updateGlobalRef(env, obj, nativeErrorHandler_fid, b); 00128 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00129 obj, handle_fid); 00130 00131 CPhidget_set_OnError_Handler(h, b ? error_handler : 0, (void *)(uintptr_t)gr); 00132 } 00133 00134 static int CCONV 00135 error_handler(CPhidgetHandle h, void *arg, int l, const char *v) 00136 { 00137 JNIEnv *env; 00138 jobject obj; 00139 jobject errorEvent; 00140 jobject eobj; 00141 jstring edesc; 00142 00143 if ((*ph_vm)->AttachCurrentThread(ph_vm, (JNIEnvPtr)&env, NULL)) 00144 JNI_ABORT_STDERR("Couldn't AttachCurrentThread"); 00145 00146 obj = (jobject)arg; 00147 00148 if (!(edesc = (*env)->NewStringUTF(env, v))) 00149 return -1; 00150 00151 if (!(eobj = (*env)->NewObject(env, ph_exception_class, ph_exception_cons, l, edesc))) 00152 return -1; 00153 00154 if (!(errorEvent = (*env)->NewObject(env, errorEvent_class, errorEvent_cons, obj, eobj))) 00155 return -1; 00156 00157 (*env)->DeleteLocalRef (env, edesc); 00158 (*env)->CallVoidMethod(env, obj, fireError_mid, errorEvent); 00159 (*env)->DeleteLocalRef(env, errorEvent); 00160 00161 return 0; 00162 } 00163 00164 JNIEXPORT void JNICALL 00165 Java_com_phidgets_Phidget_enableServerConnectEvents(JNIEnv *env, jobject obj, 00166 jboolean b) 00167 { 00168 jlong gr = updateGlobalRef(env, obj, nativeServerConnectHandler_fid, b); 00169 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00170 obj, handle_fid); 00171 00172 CPhidget_set_OnServerConnect_Handler(h, b ? serverConnect_handler : 0, 00173 (void *)(uintptr_t)gr); 00174 } 00175 00176 static int CCONV 00177 serverConnect_handler(CPhidgetHandle h, void *arg) 00178 { 00179 JNIEnv *env; 00180 jobject obj; 00181 jobject serverConnectEvent; 00182 00183 if ((*ph_vm)->AttachCurrentThread(ph_vm, (JNIEnvPtr)&env, NULL)) 00184 JNI_ABORT_STDERR("Couldn't AttachCurrentThread"); 00185 00186 obj = (jobject)arg; 00187 00188 if (!(serverConnectEvent = (*env)->NewObject(env, serverConnectEvent_class, serverConnectEvent_cons, 00189 obj))) 00190 return -1; 00191 (*env)->CallVoidMethod(env, obj, fireServerConnect_mid, serverConnectEvent); 00192 (*env)->DeleteLocalRef(env, serverConnectEvent); 00193 00194 return 0; 00195 } 00196 00197 JNIEXPORT void JNICALL 00198 Java_com_phidgets_Phidget_enableServerDisconnectEvents(JNIEnv *env, jobject obj, 00199 jboolean b) 00200 { 00201 jlong gr = updateGlobalRef(env, obj, nativeServerDisconnectHandler_fid, b); 00202 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00203 obj, handle_fid); 00204 00205 CPhidget_set_OnServerDisconnect_Handler(h, b ? serverDisconnect_handler : 0, 00206 (void *)(uintptr_t)gr); 00207 } 00208 00209 static int CCONV 00210 serverDisconnect_handler(CPhidgetHandle h, void *arg) 00211 { 00212 JNIEnv *env; 00213 jobject obj; 00214 jobject serverDisconnectEvent; 00215 00216 if ((*ph_vm)->AttachCurrentThread(ph_vm, (JNIEnvPtr)&env, NULL)) 00217 JNI_ABORT_STDERR("Couldn't AttachCurrentThread"); 00218 00219 obj = (jobject)arg; 00220 00221 if (!(serverDisconnectEvent = (*env)->NewObject(env, serverDisconnectEvent_class, serverDisconnectEvent_cons, 00222 obj))) 00223 return -1; 00224 (*env)->CallVoidMethod(env, obj, fireServerDisconnect_mid, serverDisconnectEvent); 00225 (*env)->DeleteLocalRef(env, serverDisconnectEvent); 00226 00227 return 0; 00228 } 00229 00230 JNIEXPORT void JNICALL 00231 Java_com_phidgets_Phidget_nativeOpen(JNIEnv *env, jobject obj, jint ser) 00232 { 00233 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00234 obj, handle_fid); 00235 int error; 00236 00237 if ((error = CPhidget_open(h, ser))) 00238 PH_THROW(error); 00239 } 00240 00241 JNIEXPORT void JNICALL 00242 Java_com_phidgets_Phidget_nativeOpenRemote(JNIEnv *env, jobject obj, jint ser, jstring serverID, jstring pass) 00243 { 00244 int error; 00245 jboolean iscopy; 00246 const char *serverIDcopy = serverID?(*env)->GetStringUTFChars( 00247 env, serverID, &iscopy):0; 00248 const char *passcopy = (*env)->GetStringUTFChars( 00249 env, pass, &iscopy); 00250 00251 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t) 00252 (*env)->GetLongField(env, obj, handle_fid); 00253 00254 if ((error = CPhidget_openRemote(h, ser, serverIDcopy, passcopy))) 00255 PH_THROW(error); 00256 00257 if(serverID) 00258 (*env)->ReleaseStringUTFChars(env, serverID, serverIDcopy); 00259 (*env)->ReleaseStringUTFChars(env, pass, passcopy); 00260 } 00261 00262 JNIEXPORT void JNICALL 00263 Java_com_phidgets_Phidget_nativeOpenRemoteIP(JNIEnv *env, jobject obj, jint ser, jstring ipAddr, jint port, jstring pass) 00264 { 00265 int error; 00266 jboolean iscopy; 00267 const char *ipAddrcopy = (*env)->GetStringUTFChars( 00268 env, ipAddr, &iscopy); 00269 const char *passcopy = (*env)->GetStringUTFChars( 00270 env, pass, &iscopy); 00271 00272 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t) 00273 (*env)->GetLongField(env, obj, handle_fid); 00274 00275 if ((error = CPhidget_openRemoteIP(h, ser, ipAddrcopy, port, passcopy))) 00276 PH_THROW(error); 00277 00278 (*env)->ReleaseStringUTFChars(env, ipAddr, ipAddrcopy); 00279 (*env)->ReleaseStringUTFChars(env, pass, passcopy); 00280 } 00281 00282 JNIEXPORT void JNICALL 00283 Java_com_phidgets_Phidget_nativeOpenLabel(JNIEnv *env, jobject obj, jstring label) 00284 { 00285 int error; 00286 jboolean iscopy; 00287 const char *labelcopy = (*env)->GetStringUTFChars( 00288 env, label, &iscopy); 00289 00290 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00291 obj, handle_fid); 00292 00293 if ((error = CPhidget_openLabel(h, labelcopy))) 00294 PH_THROW(error); 00295 00296 (*env)->ReleaseStringUTFChars(env, label, labelcopy); 00297 } 00298 00299 JNIEXPORT void JNICALL 00300 Java_com_phidgets_Phidget_nativeOpenLabelRemote(JNIEnv *env, jobject obj, jstring label, jstring serverID, jstring pass) 00301 { 00302 int error; 00303 jboolean iscopy; 00304 const char *serverIDcopy = serverID?(*env)->GetStringUTFChars( 00305 env, serverID, &iscopy):0; 00306 const char *passcopy = (*env)->GetStringUTFChars( 00307 env, pass, &iscopy); 00308 const char *labelcopy = (*env)->GetStringUTFChars( 00309 env, label, &iscopy); 00310 00311 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t) 00312 (*env)->GetLongField(env, obj, handle_fid); 00313 00314 if ((error = CPhidget_openLabelRemote(h, labelcopy, serverIDcopy, passcopy))) 00315 PH_THROW(error); 00316 00317 if(serverID) 00318 (*env)->ReleaseStringUTFChars(env, serverID, serverIDcopy); 00319 (*env)->ReleaseStringUTFChars(env, pass, passcopy); 00320 (*env)->ReleaseStringUTFChars(env, label, labelcopy); 00321 } 00322 00323 JNIEXPORT void JNICALL 00324 Java_com_phidgets_Phidget_nativeOpenLabelRemoteIP(JNIEnv *env, jobject obj, jstring label, jstring ipAddr, jint port, jstring pass) 00325 { 00326 int error; 00327 jboolean iscopy; 00328 const char *ipAddrcopy = (*env)->GetStringUTFChars( 00329 env, ipAddr, &iscopy); 00330 const char *passcopy = (*env)->GetStringUTFChars( 00331 env, pass, &iscopy); 00332 const char *labelcopy = (*env)->GetStringUTFChars( 00333 env, label, &iscopy); 00334 00335 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t) 00336 (*env)->GetLongField(env, obj, handle_fid); 00337 00338 if ((error = CPhidget_openLabelRemoteIP(h, labelcopy, ipAddrcopy, port, passcopy))) 00339 PH_THROW(error); 00340 00341 (*env)->ReleaseStringUTFChars(env, ipAddr, ipAddrcopy); 00342 (*env)->ReleaseStringUTFChars(env, pass, passcopy); 00343 (*env)->ReleaseStringUTFChars(env, label, labelcopy); 00344 } 00345 00346 JNIEXPORT void JNICALL 00347 Java_com_phidgets_Phidget_nativeClose(JNIEnv *env, jobject obj) 00348 { 00349 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00350 obj, handle_fid); 00351 int error; 00352 00353 if ((error = CPhidget_close(h))) 00354 PH_THROW(error); 00355 } 00356 00357 JNIEXPORT void JNICALL 00358 Java_com_phidgets_Phidget_nativeDelete(JNIEnv *env, jobject obj) 00359 { 00360 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00361 obj, handle_fid); 00362 int error; 00363 00364 if ((error = CPhidget_delete(h))) 00365 PH_THROW(error); 00366 } 00367 00368 JNIEXPORT jint JNICALL 00369 Java_com_phidgets_Phidget_getSerialNumber(JNIEnv *env, jobject obj) 00370 { 00371 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00372 obj, handle_fid); 00373 int error; 00374 int ser; 00375 00376 if ((error = CPhidget_getSerialNumber(h, &ser))) 00377 PH_THROW(error); 00378 00379 return ser; 00380 } 00381 00382 JNIEXPORT jint JNICALL 00383 Java_com_phidgets_Phidget_getServerPort(JNIEnv *env, jobject obj) 00384 { 00385 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00386 obj, handle_fid); 00387 int error; 00388 int port; 00389 const char *addr; 00390 00391 if ((error = CPhidget_getServerAddress(h, &addr, &port))) 00392 PH_THROW(error); 00393 00394 return port; 00395 } 00396 00397 JNIEXPORT jstring JNICALL 00398 Java_com_phidgets_Phidget_getServerAddress(JNIEnv *env, jobject obj) 00399 { 00400 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00401 obj, handle_fid); 00402 int error; 00403 int port; 00404 const char *addr; 00405 00406 if ((error = CPhidget_getServerAddress(h, &addr, &port))) 00407 PH_THROW(error); 00408 00409 return (*env)->NewStringUTF(env, addr); 00410 } 00411 00412 JNIEXPORT jstring JNICALL 00413 Java_com_phidgets_Phidget_getServerID(JNIEnv *env, jobject obj) 00414 { 00415 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00416 obj, handle_fid); 00417 int error; 00418 const char *id; 00419 00420 if ((error = CPhidget_getServerID(h, &id))) 00421 PH_THROW(error); 00422 00423 return (*env)->NewStringUTF(env, id); 00424 } 00425 00426 JNIEXPORT jint JNICALL 00427 Java_com_phidgets_Phidget_getDeviceID(JNIEnv *env, jobject obj) 00428 { 00429 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00430 obj, handle_fid); 00431 int error; 00432 CPhidget_DeviceID id; 00433 00434 if ((error = CPhidget_getDeviceID(h, &id))) 00435 PH_THROW(error); 00436 00437 return (int)id; 00438 } 00439 00440 JNIEXPORT jint JNICALL 00441 Java_com_phidgets_Phidget_getDeviceClass(JNIEnv *env, jobject obj) 00442 { 00443 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00444 obj, handle_fid); 00445 int error; 00446 CPhidget_DeviceClass cls; 00447 00448 if ((error = CPhidget_getDeviceClass(h, &cls))) 00449 PH_THROW(error); 00450 00451 return (int)cls; 00452 } 00453 00454 JNIEXPORT jint JNICALL 00455 Java_com_phidgets_Phidget_getDeviceVersion(JNIEnv *env, jobject obj) 00456 { 00457 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00458 obj, handle_fid); 00459 int error; 00460 int ver; 00461 00462 if ((error = CPhidget_getDeviceVersion(h, &ver))) 00463 PH_THROW(error); 00464 00465 return ver; 00466 } 00467 00468 JNIEXPORT jstring JNICALL 00469 Java_com_phidgets_Phidget_getDeviceType(JNIEnv *env, jobject obj) 00470 { 00471 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00472 obj, handle_fid); 00473 const char *type; 00474 int error; 00475 00476 if ((error = CPhidget_getDeviceType(h, &type))) 00477 PH_THROW(error); 00478 00479 return (*env)->NewStringUTF(env, type); 00480 } 00481 00482 JNIEXPORT jstring JNICALL 00483 Java_com_phidgets_Phidget_getDeviceName(JNIEnv *env, jobject obj) 00484 { 00485 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00486 obj, handle_fid); 00487 const char *type; 00488 int error; 00489 00490 if ((error = CPhidget_getDeviceName(h, &type))) 00491 PH_THROW(error); 00492 00493 return (*env)->NewStringUTF(env, type); 00494 } 00495 00496 JNIEXPORT jstring JNICALL 00497 Java_com_phidgets_Phidget_getDeviceLabel(JNIEnv *env, jobject obj) 00498 { 00499 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00500 obj, handle_fid); 00501 const char *label; 00502 int error; 00503 00504 if ((error = CPhidget_getDeviceLabel(h, &label))) 00505 PH_THROW(error); 00506 00507 return (*env)->NewStringUTF(env, label); 00508 } 00509 00510 JNIEXPORT void JNICALL 00511 Java_com_phidgets_Phidget_setDeviceLabel(JNIEnv *env, jobject obj, jstring v) 00512 { 00513 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t) 00514 (*env)->GetLongField(env, obj, handle_fid); 00515 int error; 00516 jboolean iscopy; 00517 const char *textString = (*env)->GetStringUTFChars( 00518 env, v, &iscopy); 00519 if ((error = CPhidget_setDeviceLabel(h, (char *)textString))) 00520 PH_THROW(error); 00521 (*env)->ReleaseStringUTFChars(env, v, textString); 00522 } 00523 00524 JNIEXPORT void JNICALL 00525 Java_com_phidgets_Phidget_nativeEnableLogging(JNIEnv *env, jclass cls, jint level, jstring file) 00526 { 00527 int error; 00528 jboolean iscopy; 00529 const char *textString = file ? (*env)->GetStringUTFChars(env, file, &iscopy) : NULL; 00530 if ((error = CPhidget_enableLogging(level, (char *)textString))) 00531 PH_THROW(error); 00532 if(textString != NULL) 00533 (*env)->ReleaseStringUTFChars(env, file, textString); 00534 } 00535 00536 JNIEXPORT void JNICALL 00537 Java_com_phidgets_Phidget_disableLogging(JNIEnv *env, jclass cls) 00538 { 00539 int error; 00540 if ((error = CPhidget_disableLogging())) 00541 PH_THROW(error); 00542 } 00543 00544 JNIEXPORT void JNICALL 00545 Java_com_phidgets_Phidget_nativeLog(JNIEnv *env, jclass cls, jint level, jstring id, jstring log) 00546 { 00547 int error; 00548 jboolean iscopy1; 00549 const char *textString1 = (*env)->GetStringUTFChars( 00550 env, id, &iscopy1); 00551 jboolean iscopy2; 00552 const char *textString2 = (*env)->GetStringUTFChars( 00553 env, log, &iscopy2); 00554 if ((error = CPhidget_log(level, (char *)textString1, (char *)textString2))) 00555 PH_THROW(error); 00556 (*env)->ReleaseStringUTFChars(env, id, textString1); 00557 (*env)->ReleaseStringUTFChars(env, log, textString2); 00558 } 00559 00560 JNIEXPORT jstring JNICALL 00561 Java_com_phidgets_Phidget_getLibraryVersion(JNIEnv *env, jclass cls) 00562 { 00563 const char *ver; 00564 00565 CPhidget_getLibraryVersion(&ver); 00566 00567 return (*env)->NewStringUTF(env, ver); 00568 } 00569 00570 JNIEXPORT jboolean JNICALL 00571 Java_com_phidgets_Phidget_isAttached(JNIEnv *env, jobject obj) 00572 { 00573 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00574 obj, handle_fid); 00575 int error; 00576 int s; 00577 00578 if ((error = CPhidget_getDeviceStatus(h, &s))) 00579 PH_THROW(error); 00580 00581 return s == PHIDGET_ATTACHED; 00582 } 00583 00584 JNIEXPORT jboolean JNICALL 00585 Java_com_phidgets_Phidget_isAttachedToServer(JNIEnv *env, jobject obj) 00586 { 00587 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, 00588 obj, handle_fid); 00589 int error; 00590 int s; 00591 00592 if ((error = CPhidget_getServerStatus(h, &s))) 00593 PH_THROW(error); 00594 00595 return s == PHIDGET_ATTACHED; 00596 } 00597 00598 JNIEXPORT void JNICALL 00599 Java_com_phidgets_Phidget_waitForAttachment(JNIEnv *env, jobject obj, jint timeout) 00600 { 00601 int error; 00602 CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env, obj, handle_fid); 00603 00604 if ((error = CPhidget_waitForAttachment(h, timeout))) 00605 PH_THROW(error); 00606 00607 return; 00608 }