mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-19 13:09:39 -07:00
Add Stub Regist JNI Bindings
This commit is contained in:
parent
73e519753f
commit
4e85d37b39
2 changed files with 107 additions and 14 deletions
|
@ -37,6 +37,7 @@
|
||||||
#define JNI_VERSION JNI_VERSION_1_6
|
#define JNI_VERSION JNI_VERSION_1_6
|
||||||
|
|
||||||
#define BASE_PACKAGE "com/metallic/chiaki/lib"
|
#define BASE_PACKAGE "com/metallic/chiaki/lib"
|
||||||
|
#define JNI_FCN(name) Java_com_metallic_chiaki_lib_ChiakiNative_##name
|
||||||
|
|
||||||
#define E (*env)
|
#define E (*env)
|
||||||
|
|
||||||
|
@ -107,17 +108,17 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
|
||||||
return JNI_VERSION;
|
return JNI_VERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_errorCodeToString(JNIEnv *env, jobject obj, jint value)
|
JNIEXPORT jstring JNICALL JNI_FCN(errorCodeToString)(JNIEnv *env, jobject obj, jint value)
|
||||||
{
|
{
|
||||||
return E->NewStringUTF(env, chiaki_error_string((ChiakiErrorCode)value));
|
return E->NewStringUTF(env, chiaki_error_string((ChiakiErrorCode)value));
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_quitReasonToString(JNIEnv *env, jobject obj, jint value)
|
JNIEXPORT jstring JNICALL JNI_FCN(quitReasonToString)(JNIEnv *env, jobject obj, jint value)
|
||||||
{
|
{
|
||||||
return E->NewStringUTF(env, chiaki_quit_reason_string((ChiakiQuitReason)value));
|
return E->NewStringUTF(env, chiaki_quit_reason_string((ChiakiQuitReason)value));
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_quitReasonIsStopped(JNIEnv *env, jobject obj, jint value)
|
JNIEXPORT jboolean JNICALL JNI_FCN(quitReasonIsStopped)(JNIEnv *env, jobject obj, jint value)
|
||||||
{
|
{
|
||||||
return value == CHIAKI_QUIT_REASON_STOPPED;
|
return value == CHIAKI_QUIT_REASON_STOPPED;
|
||||||
}
|
}
|
||||||
|
@ -194,7 +195,7 @@ static void android_chiaki_event_cb(ChiakiEvent *event, void *user)
|
||||||
(*global_vm)->DetachCurrentThread(global_vm);
|
(*global_vm)->DetachCurrentThread(global_vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionCreate(JNIEnv *env, jobject obj, jobject result, jobject connect_info_obj, jobject java_session)
|
JNIEXPORT void JNICALL JNI_FCN(sessionCreate)(JNIEnv *env, jobject obj, jobject result, jobject connect_info_obj, jobject java_session)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = NULL;
|
AndroidChiakiSession *session = NULL;
|
||||||
ChiakiErrorCode err = CHIAKI_ERR_SUCCESS;
|
ChiakiErrorCode err = CHIAKI_ERR_SUCCESS;
|
||||||
|
@ -312,7 +313,7 @@ beach:
|
||||||
E->SetLongField(env, result, E->GetFieldID(env, result_class, "ptr", "J"), (jlong)session);
|
E->SetLongField(env, result, E->GetFieldID(env, result_class, "ptr", "J"), (jlong)session);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionFree(JNIEnv *env, jobject obj, jlong ptr)
|
JNIEXPORT void JNICALL JNI_FCN(sessionFree)(JNIEnv *env, jobject obj, jlong ptr)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
||||||
CHIAKI_LOGI(&global_log, "Shutting down JNI Session");
|
CHIAKI_LOGI(&global_log, "Shutting down JNI Session");
|
||||||
|
@ -328,34 +329,34 @@ JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionFree(JNI
|
||||||
CHIAKI_LOGI(&global_log, "JNI Session has quit");
|
CHIAKI_LOGI(&global_log, "JNI Session has quit");
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionStart(JNIEnv *env, jobject obj, jlong ptr)
|
JNIEXPORT jint JNICALL JNI_FCN(sessionStart)(JNIEnv *env, jobject obj, jlong ptr)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
||||||
CHIAKI_LOGI(&global_log, "Start JNI Session");
|
CHIAKI_LOGI(&global_log, "Start JNI Session");
|
||||||
return chiaki_session_start(&session->session);
|
return chiaki_session_start(&session->session);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionStop(JNIEnv *env, jobject obj, jlong ptr)
|
JNIEXPORT jint JNICALL JNI_FCN(sessionStop)(JNIEnv *env, jobject obj, jlong ptr)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
||||||
CHIAKI_LOGI(&global_log, "Stop JNI Session");
|
CHIAKI_LOGI(&global_log, "Stop JNI Session");
|
||||||
return chiaki_session_stop(&session->session);
|
return chiaki_session_stop(&session->session);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionJoin(JNIEnv *env, jobject obj, jlong ptr)
|
JNIEXPORT jint JNICALL JNI_FCN(sessionJoin)(JNIEnv *env, jobject obj, jlong ptr)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
||||||
CHIAKI_LOGI(&global_log, "Join JNI Session");
|
CHIAKI_LOGI(&global_log, "Join JNI Session");
|
||||||
return chiaki_session_join(&session->session);
|
return chiaki_session_join(&session->session);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionSetSurface(JNIEnv *env, jobject obj, jlong ptr, jobject surface)
|
JNIEXPORT void JNICALL JNI_FCN(sessionSetSurface)(JNIEnv *env, jobject obj, jlong ptr, jobject surface)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
||||||
android_chiaki_video_decoder_set_surface(&session->video_decoder, env, surface);
|
android_chiaki_video_decoder_set_surface(&session->video_decoder, env, surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionSetControllerState(JNIEnv *env, jobject obj, jlong ptr, jobject controller_state_java)
|
JNIEXPORT void JNICALL JNI_FCN(sessionSetControllerState)(JNIEnv *env, jobject obj, jlong ptr, jobject controller_state_java)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
||||||
ChiakiControllerState controller_state = { 0 };
|
ChiakiControllerState controller_state = { 0 };
|
||||||
|
@ -369,7 +370,7 @@ JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionSetContr
|
||||||
chiaki_session_set_controller_state(&session->session, &controller_state);
|
chiaki_session_set_controller_state(&session->session, &controller_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_sessionSetLoginPin(JNIEnv *env, jobject obj, jlong ptr, jstring pin_java)
|
JNIEXPORT void JNICALL JNI_FCN(sessionSetLoginPin)(JNIEnv *env, jobject obj, jlong ptr, jstring pin_java)
|
||||||
{
|
{
|
||||||
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
AndroidChiakiSession *session = (AndroidChiakiSession *)ptr;
|
||||||
const char *pin = E->GetStringUTFChars(env, pin_java, NULL);
|
const char *pin = E->GetStringUTFChars(env, pin_java, NULL);
|
||||||
|
@ -485,7 +486,7 @@ static ChiakiErrorCode sockaddr_from_java(JNIEnv *env, jobject /*InetSocketAddre
|
||||||
return CHIAKI_ERR_SUCCESS;
|
return CHIAKI_ERR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_discoveryServiceCreate(JNIEnv *env, jobject obj, jobject result, jobject options_obj, jobject java_service)
|
JNIEXPORT void JNICALL JNI_FCN(discoveryServiceCreate)(JNIEnv *env, jobject obj, jobject result, jobject options_obj, jobject java_service)
|
||||||
{
|
{
|
||||||
jclass result_class = E->GetObjectClass(env, result);
|
jclass result_class = E->GetObjectClass(env, result);
|
||||||
ChiakiErrorCode err = CHIAKI_ERR_SUCCESS;
|
ChiakiErrorCode err = CHIAKI_ERR_SUCCESS;
|
||||||
|
@ -556,7 +557,7 @@ beach:
|
||||||
E->SetLongField(env, result, E->GetFieldID(env, result_class, "ptr", "J"), (jlong)service);
|
E->SetLongField(env, result, E->GetFieldID(env, result_class, "ptr", "J"), (jlong)service);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_discoveryServiceFree(JNIEnv *env, jobject obj, jlong ptr)
|
JNIEXPORT void JNICALL JNI_FCN(discoveryServiceFree)(JNIEnv *env, jobject obj, jlong ptr)
|
||||||
{
|
{
|
||||||
AndroidDiscoveryService *service = (AndroidDiscoveryService *)ptr;
|
AndroidDiscoveryService *service = (AndroidDiscoveryService *)ptr;
|
||||||
if(!service)
|
if(!service)
|
||||||
|
@ -569,3 +570,18 @@ JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_discoveryServic
|
||||||
E->DeleteGlobalRef(env, service->host_class);
|
E->DeleteGlobalRef(env, service->host_class);
|
||||||
free(service);
|
free(service);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL JNI_FCN(registStart)(JNIEnv *env, jobject obj, jobject result, jobject regist_info_obj, jobject log_obj, jobject java_regist)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL JNI_FCN(registStop)(JNIEnv *env, jobject obj, jlong ptr)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL JNI_FCN(registFree)(JNIEnv *env, jobject obj, jlong ptr)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -46,6 +46,9 @@ private class ChiakiNative
|
||||||
@JvmStatic external fun sessionSetLoginPin(ptr: Long, pin: String)
|
@JvmStatic external fun sessionSetLoginPin(ptr: Long, pin: String)
|
||||||
@JvmStatic external fun discoveryServiceCreate(result: CreateResult, options: DiscoveryServiceOptions, javaService: DiscoveryService)
|
@JvmStatic external fun discoveryServiceCreate(result: CreateResult, options: DiscoveryServiceOptions, javaService: DiscoveryService)
|
||||||
@JvmStatic external fun discoveryServiceFree(ptr: Long)
|
@JvmStatic external fun discoveryServiceFree(ptr: Long)
|
||||||
|
@JvmStatic external fun registStart(result: CreateResult, registInfo: RegistInfo, javaLog: Log, javaRegist: Regist)
|
||||||
|
@JvmStatic external fun registStop(ptr: Long)
|
||||||
|
@JvmStatic external fun registFree(ptr: Long)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +58,23 @@ class ErrorCode(val value: Int)
|
||||||
var isSuccess = value == 0
|
var isSuccess = value == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Log(val levelMask: Int)
|
||||||
|
{
|
||||||
|
enum class Level(val value: Int)
|
||||||
|
{
|
||||||
|
DEBUG(1 shl 4),
|
||||||
|
VERBOSE(1 shl 3),
|
||||||
|
INFO(1 shl 2),
|
||||||
|
WARNING(1 shl 1),
|
||||||
|
ERROR(1 shl 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun log(level: Int, text: String)
|
||||||
|
{
|
||||||
|
Log.i("ChiakiJavaLog", "level $level, text $text")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun maxAbs(a: Short, b: Short) = if(abs(a.toInt()) > abs(b.toInt())) a else b
|
private fun maxAbs(a: Short, b: Short) = if(abs(a.toInt()) > abs(b.toInt())) a else b
|
||||||
|
|
||||||
data class ControllerState constructor(
|
data class ControllerState constructor(
|
||||||
|
@ -241,4 +261,61 @@ class DiscoveryService(
|
||||||
callback?.let { it(hostsList) }
|
callback?.let { it(hostsList) }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
data class RegistInfo(
|
||||||
|
val host: String,
|
||||||
|
val broadcast: Boolean,
|
||||||
|
val psnId: String,
|
||||||
|
val pin: UInt
|
||||||
|
)
|
||||||
|
|
||||||
|
data class RegistHost(
|
||||||
|
val apSsid: String,
|
||||||
|
val apBssid: String,
|
||||||
|
val apKey: String,
|
||||||
|
val apName: String,
|
||||||
|
val ps4Mac: ByteArray,
|
||||||
|
val ps4Nickname: String,
|
||||||
|
val rpRegistKey: ByteArray,
|
||||||
|
val rpKeyType: UInt,
|
||||||
|
val rpKey: ByteArray
|
||||||
|
)
|
||||||
|
|
||||||
|
sealed class RegistEvent
|
||||||
|
object RegistEventCanceled: RegistEvent()
|
||||||
|
object RegistEventFailed: RegistEvent()
|
||||||
|
class RegistEventSuccess(val host: RegistHost)
|
||||||
|
|
||||||
|
class Regist(
|
||||||
|
info: RegistInfo,
|
||||||
|
log: Log,
|
||||||
|
val callback: (RegistEvent) -> Unit
|
||||||
|
)
|
||||||
|
{
|
||||||
|
private var nativePtr: Long
|
||||||
|
|
||||||
|
init
|
||||||
|
{
|
||||||
|
val result = ChiakiNative.CreateResult(0, 0)
|
||||||
|
ChiakiNative.registStart(result, info, log, this)
|
||||||
|
val errorCode = ErrorCode(result.errorCode)
|
||||||
|
if(!errorCode.isSuccess)
|
||||||
|
throw CreateError(errorCode)
|
||||||
|
nativePtr = result.ptr
|
||||||
|
}
|
||||||
|
|
||||||
|
fun stop()
|
||||||
|
{
|
||||||
|
ChiakiNative.registStop(nativePtr)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun dispose()
|
||||||
|
{
|
||||||
|
if(nativePtr == 0L)
|
||||||
|
return
|
||||||
|
ChiakiNative.registFree(nativePtr)
|
||||||
|
nativePtr = 0L
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue