diff --git a/WiiUseJC/wiiusej_WiiUseApi.c b/WiiUseJC/wiiusej_WiiUseApi.c index 83b2c4f..b3c8e99 100644 --- a/WiiUseJC/wiiusej_WiiUseApi.c +++ b/WiiUseJC/wiiusej_WiiUseApi.c @@ -44,7 +44,7 @@ JNIEXPORT jint JNICALL Java_wiiusej_WiiUseApi_doConnections /* variables declarations */ int found, connected, i; short leds; - + nbMaxWiiMotes = nbConnects; /* initialize wiimotes array with the maximum number of wiimotes */ @@ -220,7 +220,7 @@ JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setAccelThreshold * @param id id of the wiimote concerned * @param value alpha smoothing value */ -JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setSmoothAlpha +JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setAlphaSmoothing (JNIEnv *env, jobject obj, jint id, jfloat val) { wiiuse_set_smooth_alpha(wiimotes[id-1], val); } @@ -273,6 +273,55 @@ JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_deactivateContinuous wiiuse_set_flags(wiimotes[id-1], 0, WIIUSE_CONTINUOUS); } +/** + * Notify wiiuse that your screen has an aspect ratio of 4/3. + * @param id the id of the wiimote concerned + */ +JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setScreenRatio43 +(JNIEnv *env, jobject obj, jint id) { + wiiuse_set_aspect_ratio(wiimotes[id-1], WIIUSE_ASPECT_4_3); +} + +/** + * Notify wiiuse that your screen has an aspect ratio of 16/9. + * @param id the id of the wiimote concerned + */ +JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setScreenRatio169 +(JNIEnv *env, jobject obj, jint id) { + wiiuse_set_aspect_ratio(wiimotes[id-1], WIIUSE_ASPECT_4_3); +} + +/** + * Notify wiiuse that the sensor bar is above your screen. + * @param id the id of the wiimote concerned + */ +JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setSensorBarAboveScreen +(JNIEnv *env, jobject obj, jint id) { + wiiuse_set_ir_position(wiimotes[id-1], WIIUSE_IR_ABOVE); +} + +/** + * Notify wiiuse that the sensor bar is below your screen. + * @param id the id of the wiimote concerned + */ +JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setSensorBarBelowScreen +(JNIEnv *env, jobject obj, jint id) { + wiiuse_set_ir_position(wiimotes[id-1], WIIUSE_IR_BELOW); +} + +/** + * Set virtual screen resolution. It is used to automatically + * compute the position of a cursor on this virtual screen + * using the sensor bar. These results come in the IREvent. + * @param id the id of the wiimote concerned + * @param x x resolution. + * @param y y resolution. + */ +JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setVirtualScreenResolution +(JNIEnv *env, jobject obj, jint id, jint x, jint y) { + wiiuse_set_ir_vres(wiimotes[id-1], x, y); +} + /** * Get status from the wiimotes and send it through call backs. * @@ -319,17 +368,32 @@ JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_specialPoll */ if (WIIUSE_USING_IR(wiimotes[i])) { int a = 0; + + mid = (*env)->GetMethodID(env, cls, "prepareIRevent", + "(IIIIIIIIISS)V"); + if (mid == 0) { + return; + } + (*env)->CallVoidMethod(env, gath, mid, + wiimotes[i]->ir.x, wiimotes[i]->ir.y, wiimotes[i]->ir.z, + wiimotes[i]->ir.ax, wiimotes[i]->ir.ay, + wiimotes[i]->ir.vres[0], wiimotes[i]->ir.vres[1], + wiimotes[i]->ir.offset[0], wiimotes[i]->ir.offset[1], + wiimotes[i]->ir.pos, wiimotes[i]->ir.aspect); + mid = (*env)->GetMethodID(env, cls, "addIRPointToPreparedWiiMoteEvent", - "(II)V"); + "(IISSS)V"); if (mid == 0) { return; } /* go through each of the 4 possible IR sources */ for (; a < 4; a++) { /* check if the source is visible */ - if (wiimotes[i]->ir.dot[a].visible) { + if (wiimotes[i]->ir.dot[a].visible) { (*env)->CallVoidMethod(env, gath, mid, - wiimotes[i]->ir.dot[a].rx, wiimotes[i]->ir.dot[a].ry); + wiimotes[i]->ir.dot[a].x, wiimotes[i]->ir.dot[a].y, + wiimotes[i]->ir.dot[a].rx, wiimotes[i]->ir.dot[a].ry, + wiimotes[i]->ir.dot[a].size); } } } @@ -338,15 +402,16 @@ JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_specialPoll if (WIIUSE_USING_ACC(wiimotes[i])) { /* set orientation and gravity force */ mid = (*env)->GetMethodID(env, cls, - "addMotionSensingValues", "(FFFFFF)V"); + "addMotionSensingValues", "(FFFFFFSSS)V"); if (mid == 0) { return; } (*env)->CallVoidMethod(env, gath, mid, wiimotes[i]->orient.roll, wiimotes[i]->orient.pitch, wiimotes[i]->orient.yaw, - wiimotes[i]->gforce.x, wiimotes[i]->gforce.y, wiimotes[i]->gforce.z); + wiimotes[i]->gforce.x, wiimotes[i]->gforce.y, wiimotes[i]->gforce.z, + wiimotes[i]->accel.x, wiimotes[i]->accel.y, wiimotes[i]->accel.z); } - + /* add generic event to java object used to gather events in c environment */ mid = (*env)->GetMethodID(env, cls, "addWiimoteEvent", "()V"); @@ -357,35 +422,35 @@ JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_specialPoll break; case WIIUSE_STATUS: - /* a status event occured */ - mid = (*env)->GetMethodID(env, cls, "addStatusEvent", "(IZFSZIZFIFZZZZ)V"); - if (mid == 0) { - return; - } - /* LEDS */ - if (WIIUSE_IS_LED_SET(wiimotes[i], 1)) leds += 1; - if (WIIUSE_IS_LED_SET(wiimotes[i], 2)) leds += 2; - if (WIIUSE_IS_LED_SET(wiimotes[i], 3)) leds += 4; - if (WIIUSE_IS_LED_SET(wiimotes[i], 4)) leds += 8; - - (*env)->CallVoidMethod(env, gath, mid, - wiimotes[i]->unid, WIIMOTE_IS_SET(wiimotes[i], WIIMOTE_STATE_CONNECTED), - wiimotes[i]->battery_level, leds, WIIUSE_USING_SPEAKER(wiimotes[i]), - wiimotes[i]->exp.type,WIIMOTE_IS_SET(wiimotes[i], WIIMOTE_STATE_RUMBLE), - wiimotes[i]->orient_threshold, wiimotes[i]->accel_threshold, - wiimotes[i]->accel_calib.st_alpha, WIIMOTE_IS_FLAG_SET(wiimotes[i],WIIUSE_CONTINUOUS), - WIIMOTE_IS_FLAG_SET(wiimotes[i],WIIUSE_SMOOTHING), WIIUSE_USING_IR(wiimotes[i]), - WIIUSE_USING_ACC(wiimotes[i])); + /* a status event occured */ + mid = (*env)->GetMethodID(env, cls, "addStatusEvent", "(IZFSZIZFIFZZZZ)V"); + if (mid == 0) { + return; + } + /* LEDS */ + if (WIIUSE_IS_LED_SET(wiimotes[i], 1)) leds += 1; + if (WIIUSE_IS_LED_SET(wiimotes[i], 2)) leds += 2; + if (WIIUSE_IS_LED_SET(wiimotes[i], 3)) leds += 4; + if (WIIUSE_IS_LED_SET(wiimotes[i], 4)) leds += 8; + + (*env)->CallVoidMethod(env, gath, mid, + wiimotes[i]->unid, WIIMOTE_IS_SET(wiimotes[i], WIIMOTE_STATE_CONNECTED), + wiimotes[i]->battery_level, leds, WIIUSE_USING_SPEAKER(wiimotes[i]), + wiimotes[i]->exp.type,WIIMOTE_IS_SET(wiimotes[i], WIIMOTE_STATE_RUMBLE), + wiimotes[i]->orient_threshold, wiimotes[i]->accel_threshold, + wiimotes[i]->accel_calib.st_alpha, WIIMOTE_IS_FLAG_SET(wiimotes[i],WIIUSE_CONTINUOUS), + WIIMOTE_IS_FLAG_SET(wiimotes[i],WIIUSE_SMOOTHING), WIIUSE_USING_IR(wiimotes[i]), + WIIUSE_USING_ACC(wiimotes[i])); break; case WIIUSE_DISCONNECT: - /* the wiimote disconnected */ - mid = (*env)->GetMethodID(env, cls, "addDisconnectionEvent", "(I)V"); - if (mid == 0) { - return; - } - (*env)->CallVoidMethod(env, gath, mid, wiimotes[i]->unid); + /* the wiimote disconnected */ + mid = (*env)->GetMethodID(env, cls, "addDisconnectionEvent", "(I)V"); + if (mid == 0) { + return; + } + (*env)->CallVoidMethod(env, gath, mid, wiimotes[i]->unid); break; default: diff --git a/WiiUseJC/wiiusej_WiiUseApi.def b/WiiUseJC/wiiusej_WiiUseApi.def index aefb3ed..a83a234 100644 --- a/WiiUseJC/wiiusej_WiiUseApi.def +++ b/WiiUseJC/wiiusej_WiiUseApi.def @@ -11,7 +11,7 @@ Java_wiiusej_WiiUseApi_deactivateMotionSensing Java_wiiusej_WiiUseApi_setLeds Java_wiiusej_WiiUseApi_setOrientThreshold Java_wiiusej_WiiUseApi_setAccelThreshold -Java_wiiusej_WiiUseApi_setSmoothAlpha +Java_wiiusej_WiiUseApi_setAlphaSmoothing Java_wiiusej_WiiUseApi_reSync Java_wiiusej_WiiUseApi_activateSmoothing Java_wiiusej_WiiUseApi_deactivateSmoothing @@ -20,3 +20,8 @@ Java_wiiusej_WiiUseApi_deactivateContinuous Java_wiiusej_WiiUseApi_deactivateMotionSensing Java_wiiusej_WiiUseApi_getStatus Java_wiiusej_WiiUseApi_specialPoll +Java_wiiusej_WiiUseApi_setScreenRatio43 +Java_wiiusej_WiiUseApi_setScreenRatio169 +Java_wiiusej_WiiUseApi_setSensorBarAboveScreen +Java_wiiusej_WiiUseApi_setSensorBarBelowScreen +Java_wiiusej_WiiUseApi_setVirtualScreenResolution diff --git a/WiiUseJC/wiiusej_WiiUseApi.h b/WiiUseJC/wiiusej_WiiUseApi.h index 37a4391..fdf22a6 100644 --- a/WiiUseJC/wiiusej_WiiUseApi.h +++ b/WiiUseJC/wiiusej_WiiUseApi.h @@ -151,6 +151,46 @@ JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_activateContinuous JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_deactivateContinuous (JNIEnv *, jobject, jint); +/* + * Class: wiiusej_WiiUseApi + * Method: setScreenRatio43 + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setScreenRatio43 + (JNIEnv *, jobject, jint); + +/* + * Class: wiiusej_WiiUseApi + * Method: setScreenRatio169 + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setScreenRatio169 + (JNIEnv *, jobject, jint); + +/* + * Class: wiiusej_WiiUseApi + * Method: setSensorBarAboveScreen + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setSensorBarAboveScreen + (JNIEnv *, jobject, jint); + +/* + * Class: wiiusej_WiiUseApi + * Method: setSensorBarBelowScreen + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setSensorBarBelowScreen + (JNIEnv *, jobject, jint); + +/* + * Class: wiiusej_WiiUseApi + * Method: setVirtualScreenResolution + * Signature: (III)V + */ +JNIEXPORT void JNICALL Java_wiiusej_WiiUseApi_setVirtualScreenResolution + (JNIEnv *, jobject, jint, jint, jint); + /* * Class: wiiusej_WiiUseApi * Method: getStatus