123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- #include <jni.h>
- #include <android/log.h>
- #define TAG "sdlpal-jni"
- #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG,__VA_ARGS__)
- #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , TAG,__VA_ARGS__)
- #define LOGI(...) __android_log_print(ANDROID_LOG_INFO , TAG,__VA_ARGS__)
- #define LOGW(...) __android_log_print(ANDROID_LOG_WARN , TAG,__VA_ARGS__)
- #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , TAG,__VA_ARGS__)
- #define EXTERN_C_LINKAGE extern "C"
- #include "palcommon.h"
- #include "global.h"
- #include "palcfg.h"
- #include "util.h"
- char externalStoragePath[1024];
- char midiInterFile[1024];
- static int jstring_to_utf8(JNIEnv* env, jstring j_str, char *buffer, int capacity)
- {
- jsize length = env->GetStringUTFLength(j_str);
- const char * const base = env->GetStringUTFChars(j_str, NULL);
- if (base == NULL)
- {
- return 0;
- }
- if (capacity <= length)
- length = capacity - 1;
- strncpy(buffer, base, length);
- env->ReleaseStringUTFChars(j_str, base);
- buffer[length] = '\0';
- return length;
- }
- static JavaVM* gJVM;
- EXTERN_C_LINKAGE jint JNI_OnLoad(JavaVM* vm, void* reserved)
- {
- JNIEnv* env;
- if (vm->GetEnv((void**)&env, JNI_VERSION_1_2) != JNI_OK) {
- return -1;
- }
- gJVM = vm;
- return JNI_VERSION_1_2;
- }
- static JNIEnv* getJNIEnv()
- {
- JNIEnv* env;
- if (gJVM->GetEnv((void**)&env, JNI_VERSION_1_2) != JNI_OK) {
- return NULL;
- }
- return env;
- }
- /*
- * Class: io_github_sdlpal_PalActivity
- * Method: setExternalStorage
- * Signature: (Ljava/lang/String;)V
- */
- EXTERN_C_LINKAGE
- JNIEXPORT void JNICALL Java_io_github_sdlpal_PalActivity_setExternalStorage(JNIEnv *env, jclass cls, jstring j_str)
- {
- jstring_to_utf8(env, j_str, externalStoragePath, sizeof(externalStoragePath) - 8);
- strcat(externalStoragePath, "/sdlpal/");
- LOGV("JNI got externalStoragePath:%s", externalStoragePath);
- }
- /*
- * Class: io_github_sdlpal_PalActivity
- * Method: setMIDIInterFile
- * Signature: (Ljava/lang/String;)V
- */
- EXTERN_C_LINKAGE
- JNIEXPORT void JNICALL Java_io_github_sdlpal_PalActivity_setMIDIInterFile(JNIEnv *env, jclass cls, jstring j_str)
- {
- jstring_to_utf8(env, j_str, midiInterFile, sizeof(midiInterFile));
- LOGV("JNI got midi inter filename:%s", midiInterFile);
- }
- EXTERN_C_LINKAGE
- void* JNI_mediaplayer_load(const char *filename)
- {
- JNIEnv* env = getJNIEnv();
- jclass clazz = env->FindClass("io/github/sdlpal/PalActivity");
- jmethodID mid = env->GetStaticMethodID(clazz, "JNI_mediaplayer_load", "(Ljava/lang/String;)Landroid/media/MediaPlayer;");
- jstring str = env->NewStringUTF(filename);
- jobject player = env->CallStaticObjectMethod(clazz, mid, str);
- env->DeleteLocalRef(str);
- return env->NewGlobalRef(player);
- }
- EXTERN_C_LINKAGE
- void JNI_mediaplayer_free(void *player)
- {
- getJNIEnv()->DeleteGlobalRef((jobject)player);
- }
- EXTERN_C_LINKAGE
- void JNI_mediaplayer_play(void *player, int looping)
- {
- JNIEnv* env = getJNIEnv();
- jclass clazz = env->FindClass("android/media/MediaPlayer");
- env->CallVoidMethod((jobject)player, env->GetMethodID(clazz, "setLooping", "(Z)V"), looping ? JNI_TRUE : JNI_FALSE);
- env->CallVoidMethod((jobject)player, env->GetMethodID(clazz, "start", "()V"));
- }
- EXTERN_C_LINKAGE
- void JNI_mediaplayer_stop(void *player)
- {
- JNIEnv* env = getJNIEnv();
- jclass clazz = env->FindClass("android/media/MediaPlayer");
- env->CallVoidMethod((jobject)player, env->GetMethodID(clazz, "stop", "()V"));
- }
- EXTERN_C_LINKAGE
- int JNI_mediaplayer_isplaying(void *player)
- {
- JNIEnv* env = getJNIEnv();
- jclass clazz = env->FindClass("android/media/MediaPlayer");
- return env->CallBooleanMethod((jobject)player, env->GetMethodID(clazz, "isPlaying", "()Z"));
- }
- EXTERN_C_LINKAGE
- void JNI_mediaplayer_setvolume(void *player, int volume)
- {
- float vol = (float)volume / 127.0f;
- JNIEnv* env = getJNIEnv();
- jclass clazz = env->FindClass("android/media/MediaPlayer");
- env->CallVoidMethod((jobject)player, env->GetMethodID(clazz, "setVolume", "(FF)V"), vol, vol);
- }
- EXTERN_C_LINKAGE
- LPCSTR
- UTIL_BasePath(
- VOID
- )
- {
- return externalStoragePath;
- }
- EXTERN_C_LINKAGE
- LPCSTR
- UTIL_SavePath(
- VOID
- )
- {
- return externalStoragePath;
- }
- EXTERN_C_LINKAGE
- BOOL
- UTIL_GetScreenSize(
- DWORD *pdwScreenWidth,
- DWORD *pdwScreenHeight
- )
- {
- *pdwScreenWidth = 640;
- *pdwScreenHeight = 400;
- return TRUE;
- }
- EXTERN_C_LINKAGE
- BOOL
- UTIL_IsAbsolutePath(
- LPCSTR lpszFileName
- )
- {
- return lpszFileName[0] == '/';
- }
- EXTERN_C_LINKAGE
- INT
- UTIL_Platform_Init(
- int argc,
- char* argv[]
- )
- {
- gConfig.fLaunchSetting = FALSE;
- return 0;
- }
- EXTERN_C_LINKAGE
- VOID
- UTIL_Platform_Quit(
- VOID
- )
- {
- }
- #ifdef ENABLE_NEWLOG
- static int maxLogLevel = LOG_WARNING;
- PAL_C_LINKAGE VOID
- UTIL_SetLogLevel(
- int level
- )
- {
- if (level >= LOG_EMERG && level < LOG_LAST_PRIORITY)
- {
- maxLogLevel = level;
- }
- }
- EXTERN_C_LINKAGE
- VOID
- UTIL_WriteLog(
- int Priority,
- const char *Fmt,
- ...
- )
- {
- if (Priority < LOG_EMERG || Priority > maxLogLevel)
- {
- return;
- }
-
- switch(Priority)
- {
- case LOG_EMERG: Priority = ANDROID_LOG_FATAL; break;
- case LOG_ALERT: Priority = ANDROID_LOG_FATAL; break;
- case LOG_CRIT: Priority = ANDROID_LOG_ERROR; break;
- case LOG_ERR: Priority = ANDROID_LOG_ERROR; break;
- case LOG_WARNING: Priority = ANDROID_LOG_WARN; break;
- case LOG_NOTICE: Priority = ANDROID_LOG_INFO; break;
- case LOG_INFO: Priority = ANDROID_LOG_INFO; break;
- case LOG_DEBUG: Priority = ANDROID_LOG_DEBUG; break;
- default: Priority = ANDROID_LOG_VERBOSE; break;
- }
- va_list ap;
- va_start(ap, Fmt);
- __android_log_vprint(ANDROID_LOG_VERBOSE, TAG, Fmt, ap);
- va_end(ap);
- }
- #endif
|