mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-03-12 05:25:23 -07:00
Add Stub Regist JNI Bindings
This commit is contained in:
parent
73e519753f
commit
4e85d37b39
android/app/src/main
@ -37,6 +37,7 @@
|
||||
#define JNI_VERSION JNI_VERSION_1_6
|
||||
|
||||
#define BASE_PACKAGE "com/metallic/chiaki/lib"
|
||||
#define JNI_FCN(name) Java_com_metallic_chiaki_lib_ChiakiNative_##name
|
||||
|
||||
#define E (*env)
|
||||
|
||||
@ -107,17 +108,17 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
|
||||
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));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
@ -194,7 +195,7 @@ static void android_chiaki_event_cb(ChiakiEvent *event, void *user)
|
||||
(*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;
|
||||
ChiakiErrorCode err = CHIAKI_ERR_SUCCESS;
|
||||
@ -312,7 +313,7 @@ beach:
|
||||
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;
|
||||
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");
|
||||
}
|
||||
|
||||
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;
|
||||
CHIAKI_LOGI(&global_log, "Start JNI 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;
|
||||
CHIAKI_LOGI(&global_log, "Stop JNI 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;
|
||||
CHIAKI_LOGI(&global_log, "Join JNI 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;
|
||||
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;
|
||||
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);
|
||||
}
|
||||
|
||||
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;
|
||||
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;
|
||||
}
|
||||
|
||||
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);
|
||||
ChiakiErrorCode err = CHIAKI_ERR_SUCCESS;
|
||||
@ -556,7 +557,7 @@ beach:
|
||||
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;
|
||||
if(!service)
|
||||
@ -569,3 +570,18 @@ JNIEXPORT void JNICALL Java_com_metallic_chiaki_lib_ChiakiNative_discoveryServic
|
||||
E->DeleteGlobalRef(env, service->host_class);
|
||||
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 discoveryServiceCreate(result: CreateResult, options: DiscoveryServiceOptions, javaService: DiscoveryService)
|
||||
@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
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
data class ControllerState constructor(
|
||||
@ -241,4 +261,61 @@ class DiscoveryService(
|
||||
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…
x
Reference in New Issue
Block a user