Conflicts:
	shell/android/jni/src/Android.cpp
	shell/android/src/com/reicast/emulator/emu/GL2JNIActivity.java
	shell/android/src/com/reicast/emulator/emu/JNIdc.java
This commit is contained in:
Bryan Barnes 2014-02-13 01:43:53 -05:00
parent 3f62290596
commit 52199df953
9 changed files with 81 additions and 10 deletions

View File

@ -541,6 +541,7 @@ struct maple_sega_vmu: maple_base
}
}
config->SetImage(lcd_data_decoded);
push_vmu_screen(lcd_data_decoded);
#if 0
// Update LCD window
if (!dev->lcd.visible)

View File

@ -31,3 +31,4 @@ struct maple_device
maple_device* maple_Create(MapleDeviceType type);
#define SIZE_OF_MIC_DATA 480 //ALSO DEFINED IN SipEmulator.java
int get_mic_data(u8* buffer); //implemented in Android.cpp
int push_vmu_screen(u8* buffer); //implemented in Android.cpp

View File

@ -40,6 +40,7 @@ extern "C"
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_setupMic(JNIEnv *env,jobject obj,jobject sip) __attribute__((visibility("default")));
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_vmuSwap(JNIEnv *env,jobject obj) __attribute__((visibility("default")));
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_setupVmu(JNIEnv *env,jobject obj,jobject sip) __attribute__((visibility("default")));
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_dynarec(JNIEnv *env,jobject obj, jint dynarec) __attribute__((visibility("default")));
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_idleskip(JNIEnv *env,jobject obj, jint idleskip) __attribute__((visibility("default")));
@ -283,12 +284,18 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_init(JNIEnv *env,jobj
#define SAMPLE_COUNT 512
JNIEnv* jenv;
//stuff for audio
jshortArray jsamples;
jmethodID writemid;
jobject track;
//stuff for microphone
jobject sipemu;
jmethodID getmicdata;
//stuff for vmu lcd
jobject vmulcd;
jbyteArray jpix;
jmethodID updatevmuscreen;
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_run(JNIEnv *env,jobject obj,jobject trk)
{
@ -311,6 +318,13 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_setupMic(JNIEnv *env,
mcfg_Create(MDT_Microphone,0,1);
}
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_setupVmu(JNIEnv *env,jobject obj,jobject vmu)
{
vmulcd = env->NewGlobalRef(vmu);
updatevmuscreen = env->GetMethodID(env->GetObjectClass(vmu),"updateBytes","([B)V");
jpix=jenv->NewByteArray(1536);
}
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_stop(JNIEnv *env,jobject obj)
{
dc_term();
@ -318,8 +332,6 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_stop(JNIEnv *env,jobj
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_vmuSwap(JNIEnv *env,jobject obj)
{
LOGD("vmuSwap go!");
maple_device* olda = MapleDevices[0][0];
maple_device* oldb = MapleDevices[0][1];
MapleDevices[0][0] = NULL;
@ -328,9 +340,6 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_vmuSwap(JNIEnv *env,j
MapleDevices[0][0] = oldb;
MapleDevices[0][1] = olda;
LOGD("vmuSwap done");
}
JNIEXPORT jint JNICALL Java_com_reicast_emulator_emu_JNIdc_send(JNIEnv *env,jobject obj,jint cmd, jint param)
@ -466,3 +475,10 @@ int get_mic_data(u8* buffer)
jenv->DeleteLocalRef(jdata);
return 1;
}
int push_vmu_screen(u8* buffer)
{
jenv->SetByteArrayRegion(jpix,0,1536,(jbyte*)buffer);
jenv->CallVoidMethod(vmulcd,updatevmuscreen,jpix);
return 1;
}

View File

@ -60,7 +60,6 @@ public class InputModFragment extends Fragment {
public void onViewCreated(View view, Bundle savedInstanceState) {
parentActivity = getActivity();
Runtime.getRuntime().freeMemory();
System.gc();
mPrefs = PreferenceManager.getDefaultSharedPreferences(parentActivity);
@ -413,7 +412,6 @@ public class InputModFragment extends Fragment {
return getButtonImage(x, y);
} else {
E.printStackTrace();
Runtime.getRuntime().freeMemory();
System.gc();
}
}

View File

@ -9,6 +9,7 @@ import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@ -57,6 +58,7 @@ public class GL2JNIActivity extends Activity {
ConfigureFragment.getCurrentConfiguration(prefs);
menu = new OnScreenMenu(GL2JNIActivity.this, prefs);
popUp = menu.createPopup();
/*
* try { //int rID =
* getResources().getIdentifier("fortyonepost.com.lfas:raw/syms.map",
@ -278,6 +280,10 @@ public class GL2JNIActivity extends Activity {
sip.startRecording();
JNIdc.setupMic(sip);
}
//setup vmu screen
JNIdc.setupVmu(menu.getVmuLcd());
}
private void runCompatibilityMode() {

View File

@ -103,7 +103,6 @@ public class GL2JNIView extends GLSurfaceView
vib=(Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
Runtime.getRuntime().freeMemory();
System.gc();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

View File

@ -25,7 +25,7 @@ public class JNIdc
public static native void setupMic(Object sip);
public static native void vmuSwap();
public static native void setupVmu(Object sip);
public static native void dynarec(int dynarec);
public static native void idleskip(int idleskip);
public static native void unstable(int unstable);

View File

@ -28,6 +28,7 @@ public class OnScreenMenu {
private boolean widescreen;
private boolean limitframes;
private boolean audiodisabled;
private VmuLcd vmuLcd;
private File sdcard = Environment.getExternalStorageDirectory();
private String home_directory = sdcard + "/dc";
@ -59,6 +60,9 @@ public class OnScreenMenu {
popUp.dismiss();
}
}), params);
vmuLcd = new VmuLcd(mContext);
hlay.addView(vmuLcd, params);
hlay.addView(addbut(R.drawable.vmu_swap, new OnClickListener() {
public void onClick(View v) {
@ -295,4 +299,8 @@ public class OnScreenMenu {
return but;
}
public VmuLcd getVmuLcd(){
return vmuLcd;
}
}

View File

@ -0,0 +1,42 @@
package com.reicast.emulator.emu;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.util.Log;
import android.view.View;
public class VmuLcd extends View {
public final static int w = 48;
public final static int h = 32;
private int[] image = new int[w*h];
private Bitmap current = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
private float scale;
public VmuLcd(Context context) {
super(context);
scale = (float)OnScreenMenu.getPixelsFromDp(60, getContext()) / w;
Log.d("VmuLcd", "scale: "+scale);
}
public void updateBytes(byte[] data){
for(int i=0; i<h; i++){
for(int j=0; j<w; j++){
image[i*w+j] = data[(h-i-1)*w+j]==0x00?Color.BLACK:Color.WHITE;
}
}
postInvalidate();
}
@Override
public void onDraw(Canvas c){
current.setPixels(image, 0, w, 0, 0, w, h);
c.scale(scale, scale);
c.drawBitmap(current, 0, 0, null);
}
}