Commit 9c7acc66 authored by Paul Hunkin's avatar Paul Hunkin

More joystick stuff

parent ef474722
...@@ -48,7 +48,7 @@ extern "C" void Android_EnableFeature(int featureid, bool enabled); ...@@ -48,7 +48,7 @@ extern "C" void Android_EnableFeature(int featureid, bool enabled);
bool bRenderingEnabled = false; bool bRenderingEnabled = false;
//Feature IDs //Feature IDs
static const int FEATURE_SOUND = 1; static const int FEATURE_AUDIO = 1;
static const int FEATURE_ACCEL = 2; static const int FEATURE_ACCEL = 2;
//Accelerometer data storage //Accelerometer data storage
...@@ -76,7 +76,7 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved){ ...@@ -76,7 +76,7 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved){
mActivityInstance = cls; mActivityInstance = cls;
midCreateGLContext = mEnv->GetStaticMethodID(cls,"createGLContext","()V"); midCreateGLContext = mEnv->GetStaticMethodID(cls,"createGLContext","()V");
midFlipBuffers = mEnv->GetStaticMethodID(cls,"flipBuffers","()V"); midFlipBuffers = mEnv->GetStaticMethodID(cls,"flipBuffers","()V");
midEnableFeature = mEnv->GetStaticMethodID(cls,"enableFeature","(I, I)V"); midEnableFeature = mEnv->GetStaticMethodID(cls,"enableFeature","(II)V");
if(!midCreateGLContext || !midFlipBuffers || !midEnableFeature){ if(!midCreateGLContext || !midFlipBuffers || !midEnableFeature){
__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: Bad mids\n"); __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: Bad mids\n");
...@@ -196,7 +196,7 @@ extern "C" void Android_Render(){ ...@@ -196,7 +196,7 @@ extern "C" void Android_Render(){
extern "C" void Android_EnableFeature(int featureid, bool enabled){ extern "C" void Android_EnableFeature(int featureid, bool enabled){
mEnv->CallStaticVoidMethod(mActivityInstance, midFlipBuffers, mEnv->CallStaticVoidMethod(mActivityInstance, midEnableFeature,
featureid, (int)enabled); featureid, (int)enabled);
} }
...@@ -511,7 +511,7 @@ int SDL_main( int argc, char **argv ) ...@@ -511,7 +511,7 @@ int SDL_main( int argc, char **argv )
resizeWindow( SCREEN_WIDTH, SCREEN_HEIGHT ); resizeWindow( SCREEN_WIDTH, SCREEN_HEIGHT );
testAudio(); //testAudio();
/* wait for events */ /* wait for events */
......
...@@ -13,6 +13,8 @@ import android.graphics.*; ...@@ -13,6 +13,8 @@ import android.graphics.*;
import android.text.method.*; import android.text.method.*;
import android.text.*; import android.text.*;
import android.media.*; import android.media.*;
import android.hardware.*;
import android.content.*;
import java.lang.*; import java.lang.*;
...@@ -26,10 +28,15 @@ public class SDLActivity extends Activity { ...@@ -26,10 +28,15 @@ public class SDLActivity extends Activity {
private static SDLActivity mSingleton; private static SDLActivity mSingleton;
private static SDLSurface mSurface; private static SDLSurface mSurface;
//Audio
private static AudioTrack mAudioTrack; private static AudioTrack mAudioTrack;
private static boolean bAudioIsEnabled;
//Sensors
private static boolean bAccelIsEnabled;
//feature IDs. Must match up on the C side as well. //feature IDs. Must match up on the C side as well.
private static int FEATURE_SOUND = 1; private static int FEATURE_AUDIO = 1;
private static int FEATURE_ACCEL = 2; private static int FEATURE_ACCEL = 2;
//Load the .so //Load the .so
...@@ -52,6 +59,7 @@ public class SDLActivity extends Activity { ...@@ -52,6 +59,7 @@ public class SDLActivity extends Activity {
} }
//Audio
public static boolean initAudio(){ public static boolean initAudio(){
//blah. Hardcoded things are bad. FIXME when we have more sound stuff //blah. Hardcoded things are bad. FIXME when we have more sound stuff
...@@ -62,9 +70,24 @@ public class SDLActivity extends Activity { ...@@ -62,9 +70,24 @@ public class SDLActivity extends Activity {
AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_8BIT,
2048, 2048,
AudioTrack.MODE_STREAM); AudioTrack.MODE_STREAM);
bAudioIsEnabled = true;
return true; return true;
} }
//Accel
public static boolean initAccel(){
mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true);
bAccelIsEnabled = true;
return true;
}
public static boolean closeAccel(){
mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, false);
bAccelIsEnabled = false;
return true;
}
//Events //Events
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
...@@ -87,7 +110,7 @@ public class SDLActivity extends Activity { ...@@ -87,7 +110,7 @@ public class SDLActivity extends Activity {
public static native void onNativeTouch(int action, float x, public static native void onNativeTouch(int action, float x,
float y, float p); float y, float p);
public static native void onNativeResize(int x, int y, int format); public static native void onNativeResize(int x, int y, int format);
public static native void onNativeAccel(float x, float y, float z);
...@@ -117,7 +140,7 @@ public class SDLActivity extends Activity { ...@@ -117,7 +140,7 @@ public class SDLActivity extends Activity {
//Yuck. This is all horribly inelegent. If it gets to more than a few //Yuck. This is all horribly inelegent. If it gets to more than a few
//'features' I'll rip this out and make something nicer, I promise :) //'features' I'll rip this out and make something nicer, I promise :)
if(featureid == FEATURE_SOUND){ if(featureid == FEATURE_AUDIO){
if(enabled == 1){ if(enabled == 1){
initAudio(); initAudio();
}else{ }else{
...@@ -125,6 +148,14 @@ public class SDLActivity extends Activity { ...@@ -125,6 +148,14 @@ public class SDLActivity extends Activity {
//closeAudio(); //closeAudio();
} }
} }
else if(featureid == FEATURE_ACCEL){
if(enabled == 1){
initAccel();
}else{
closeAccel();
}
}
} }
...@@ -157,7 +188,7 @@ class SDLRunner implements Runnable{ ...@@ -157,7 +188,7 @@ class SDLRunner implements Runnable{
Because of this, that's where we set up the SDL thread Because of this, that's where we set up the SDL thread
*/ */
class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
View.OnKeyListener, View.OnTouchListener { View.OnKeyListener, View.OnTouchListener, SensorEventListener {
//This is what SDL runs in. It invokes SDL_main(), eventually //This is what SDL runs in. It invokes SDL_main(), eventually
private Thread mSDLThread; private Thread mSDLThread;
...@@ -167,6 +198,9 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, ...@@ -167,6 +198,9 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
private EGLSurface mEGLSurface; private EGLSurface mEGLSurface;
private EGLDisplay mEGLDisplay; private EGLDisplay mEGLDisplay;
//Sensors
private static SensorManager mSensorManager;
//Startup //Startup
public SDLSurface(Context context) { public SDLSurface(Context context) {
super(context); super(context);
...@@ -177,6 +211,8 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, ...@@ -177,6 +211,8 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
requestFocus(); requestFocus();
setOnKeyListener(this); setOnKeyListener(this);
setOnTouchListener(this); setOnTouchListener(this);
mSensorManager = (SensorManager)context.getSystemService("sensor");
} }
//Called when we have a valid drawing surface //Called when we have a valid drawing surface
...@@ -321,6 +357,31 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, ...@@ -321,6 +357,31 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
return true; return true;
} }
//Sensor events
public void enableSensor(int sensortype, boolean enabled){
//TODO: This uses getDefaultSensor - what if we have >1 accels?
if(enabled){
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(sensortype),
SensorManager.SENSOR_DELAY_GAME, null);
}else{
mSensorManager.unregisterListener(this,
mSensorManager.getDefaultSensor(sensortype));
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy){
//TODO
}
public void onSensorChanged(SensorEvent event){
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
SDLActivity.onNativeAccel( event.values[0],
event.values[1],
event.values[2] );
}
}
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment