From b6370d2441de873b1a5b9e65b1c2aa4d5da769fb Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 12 Aug 2013 01:51:49 +0200 Subject: [PATCH 01/14] (Android Java) Set threaded video to default - Shield/Nexus 7 2013 now simply an 'OK' messagebox --- android/phoenix/res/xml/prefs.xml | 2 +- .../retroarch/browser/MainMenuActivity.java | 26 +++++++------------ .../src/org/retroarch/browser/RetroArch.java | 8 +----- 3 files changed, 12 insertions(+), 24 deletions(-) diff --git a/android/phoenix/res/xml/prefs.xml b/android/phoenix/res/xml/prefs.xml index 1d7eab953f..b895af4e48 100644 --- a/android/phoenix/res/xml/prefs.xml +++ b/android/phoenix/res/xml/prefs.xml @@ -34,7 +34,7 @@ diff --git a/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java b/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java index b8db113a75..cd4a13cabd 100644 --- a/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java +++ b/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java @@ -13,7 +13,6 @@ import org.retroarch.R; import android.app.AlertDialog; import android.content.DialogInterface; -import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.AssetManager; @@ -155,18 +154,15 @@ public class MainMenuActivity extends PreferenceActivity { boolean detectDevice(boolean show_dialog) { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); - SharedPreferences.Editor edit = prefs.edit(); - edit.putBoolean("video_threaded", true); - edit.commit(); + boolean retval = false; Log.i("Device MODEL", android.os.Build.MODEL); if (android.os.Build.MODEL.equals("SHIELD")) { AlertDialog.Builder alert = new AlertDialog.Builder(this) .setTitle("NVidia Shield detected") - .setMessage("Would you like to set up the ideal configuration options for your device?\nNOTE: For optimal performance, turn off Google Account sync, Google Play Store auto-updates, GPS and Wifi in your Android settings menu.") - .setPositiveButton("Yes", new DialogInterface.OnClickListener() { + .setMessage("The ideal configuration options for your device will now be preconfigured.\nNOTE: For optimal performance, turn off Google Account sync, Google Play Store auto-updates, GPS and Wifi in your Android settings menu.") + .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); @@ -176,17 +172,16 @@ public class MainMenuActivity extends PreferenceActivity { edit.putBoolean("input_autodetect_enable", true); edit.commit(); } - }) - .setNegativeButton("No", null); + }); alert.show(); - return true; + retval = true; } else if (android.os.Build.ID.equals("JSS15J")) { AlertDialog.Builder alert = new AlertDialog.Builder(this) .setTitle("Nexus 7 2013 detected") - .setMessage("Would you like to set up the ideal configuration options for your device?\nNOTE: For optimal performance, turn off Google Account sync, Google Play Store auto-updates, GPS and Wifi in your Android settings menu.") - .setPositiveButton("Yes", new DialogInterface.OnClickListener() { + .setMessage("The ideal configuration options for your device will now be preconfigured.\nNOTE: For optimal performance, turn off Google Account sync, Google Play Store auto-updates, GPS and Wifi in your Android settings menu.") + .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); @@ -194,10 +189,9 @@ public class MainMenuActivity extends PreferenceActivity { edit.putString("video_refresh_rate", Double.valueOf(59.65).toString()); edit.commit(); } - }) - .setNegativeButton("No", null); + }); alert.show(); - return true; + retval = true; } if (show_dialog) { @@ -206,7 +200,7 @@ public class MainMenuActivity extends PreferenceActivity { Toast.LENGTH_SHORT).show(); } - return false; + return retval; } @Override diff --git a/android/phoenix/src/org/retroarch/browser/RetroArch.java b/android/phoenix/src/org/retroarch/browser/RetroArch.java index ae80922648..c65689d8a9 100644 --- a/android/phoenix/src/org/retroarch/browser/RetroArch.java +++ b/android/phoenix/src/org/retroarch/browser/RetroArch.java @@ -60,7 +60,6 @@ public class RetroArch extends Activity implements private IconAdapter adapter; static private final int ACTIVITY_LOAD_ROM = 0; static private String libretro_path; - static private Double report_refreshrate; static private final String TAG = "CoreSelection"; private ConfigFile config; private ConfigFile core_config; @@ -140,7 +139,6 @@ public class RetroArch extends Activity implements String cpuInfo = readCPUInfo(); boolean cpuIsNeon = cpuInfoIsNeon(cpuInfo); - report_refreshrate = getDisplayRefreshRate(); setContentView(R.layout.line_list); @@ -272,7 +270,7 @@ public class RetroArch extends Activity implements config.setInt("input_autodetect_icade_profile_pad4", Integer.valueOf(prefs.getString("input_autodetect_icade_profile_pad4", "0"))); config.setDouble("video_refresh_rate", getRefreshRate()); - config.setBoolean("video_threaded", prefs.getBoolean("video_threaded", false)); + config.setBoolean("video_threaded", prefs.getBoolean("video_threaded", true)); String aspect = prefs.getString("video_aspect_ratio", "auto"); if (aspect.equals("full")) { @@ -418,10 +416,6 @@ public class RetroArch extends Activity implements String current_ime = Settings.Secure.getString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD); new AlertDialog.Builder(this).setMessage(current_ime).setNeutralButton("Close", null).show(); return true; - case R.id.report_refreshrate: - String current_rate = "Screen Refresh Rate: " + Double.valueOf(report_refreshrate).toString(); - new AlertDialog.Builder(this).setMessage(current_rate).setNeutralButton("Close", null).show(); - return true; default: return false; } From f17fd23ad0f48bb56718825a16b4130a6ff88a41 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 12 Aug 2013 02:08:54 +0200 Subject: [PATCH 02/14] (Android Java) Remove Report Refreshrate --- android/phoenix/res/menu/context_menu.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/android/phoenix/res/menu/context_menu.xml b/android/phoenix/res/menu/context_menu.xml index 43b5055191..c1bfefb341 100644 --- a/android/phoenix/res/menu/context_menu.xml +++ b/android/phoenix/res/menu/context_menu.xml @@ -2,5 +2,4 @@ - From b142cae10ae86cf6b424103d17cedddfed92f479 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 12 Aug 2013 05:19:39 +0200 Subject: [PATCH 03/14] (Android Java) Split ModuleWrapper class off into separate .java file --- .../org/retroarch/browser/ModuleWrapper.java | 41 +++++++++++++++++++ .../src/org/retroarch/browser/RetroArch.java | 35 ---------------- 2 files changed, 41 insertions(+), 35 deletions(-) create mode 100644 android/phoenix/src/org/retroarch/browser/ModuleWrapper.java diff --git a/android/phoenix/src/org/retroarch/browser/ModuleWrapper.java b/android/phoenix/src/org/retroarch/browser/ModuleWrapper.java new file mode 100644 index 0000000000..c741c28af5 --- /dev/null +++ b/android/phoenix/src/org/retroarch/browser/ModuleWrapper.java @@ -0,0 +1,41 @@ +package org.retroarch.browser; + +import java.io.File; +import java.io.IOException; + +import android.content.Context; +import android.graphics.drawable.Drawable; + +class ModuleWrapper implements IconAdapterItem { + public final File file; + private ConfigFile config; + + public ModuleWrapper(Context aContext, File aFile, ConfigFile config) throws IOException { + file = aFile; + this.config = config; + } + + @Override + public boolean isEnabled() { + return true; + } + + @Override + public String getText() { + String stripped = file.getName().replace(".so", ""); + if (config.keyExists(stripped)) { + return config.getString(stripped); + } else + return stripped; + } + + @Override + public int getIconResourceId() { + return 0; + } + + @Override + public Drawable getIconDrawable() { + return null; + } +} \ No newline at end of file diff --git a/android/phoenix/src/org/retroarch/browser/RetroArch.java b/android/phoenix/src/org/retroarch/browser/RetroArch.java index c65689d8a9..52bfb6ec1c 100644 --- a/android/phoenix/src/org/retroarch/browser/RetroArch.java +++ b/android/phoenix/src/org/retroarch/browser/RetroArch.java @@ -17,44 +17,9 @@ import android.util.Log; import android.view.*; import android.view.ContextMenu.ContextMenuInfo; import android.view.inputmethod.*; -import android.graphics.drawable.*; // JELLY_BEAN_MR1 = 17 -class ModuleWrapper implements IconAdapterItem { - public final File file; - private ConfigFile config; - - public ModuleWrapper(Context aContext, File aFile, ConfigFile config) throws IOException { - file = aFile; - this.config = config; - } - - @Override - public boolean isEnabled() { - return true; - } - - @Override - public String getText() { - String stripped = file.getName().replace(".so", ""); - if (config.keyExists(stripped)) { - return config.getString(stripped); - } else - return stripped; - } - - @Override - public int getIconResourceId() { - return 0; - } - - @Override - public Drawable getIconDrawable() { - return null; - } -} - public class RetroArch extends Activity implements AdapterView.OnItemClickListener { private IconAdapter adapter; From 7abe27de81254ac5ecc7b6ff9fca82bae59af12f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 12 Aug 2013 05:51:33 +0200 Subject: [PATCH 04/14] (Android Java) Create separate class for ReportIME --- android/phoenix/AndroidManifest.xml | 1 + android/phoenix/res/menu/context_menu.xml | 1 - android/phoenix/res/xml/prefs.xml | 8 ++++++++ .../src/org/retroarch/browser/ReportIME.java | 15 +++++++++++++++ .../src/org/retroarch/browser/RetroArch.java | 4 ---- 5 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 android/phoenix/src/org/retroarch/browser/ReportIME.java diff --git a/android/phoenix/AndroidManifest.xml b/android/phoenix/AndroidManifest.xml index f6166bedd4..54364a192e 100644 --- a/android/phoenix/AndroidManifest.xml +++ b/android/phoenix/AndroidManifest.xml @@ -24,6 +24,7 @@ + diff --git a/android/phoenix/res/menu/context_menu.xml b/android/phoenix/res/menu/context_menu.xml index c1bfefb341..aa7695fc78 100644 --- a/android/phoenix/res/menu/context_menu.xml +++ b/android/phoenix/res/menu/context_menu.xml @@ -1,5 +1,4 @@ - diff --git a/android/phoenix/res/xml/prefs.xml b/android/phoenix/res/xml/prefs.xml index b895af4e48..72a6719ed9 100644 --- a/android/phoenix/res/xml/prefs.xml +++ b/android/phoenix/res/xml/prefs.xml @@ -383,6 +383,14 @@ android:title="R3 Button" /> + + + + + diff --git a/android/phoenix/src/org/retroarch/browser/ReportIME.java b/android/phoenix/src/org/retroarch/browser/ReportIME.java new file mode 100644 index 0000000000..1a85b393ee --- /dev/null +++ b/android/phoenix/src/org/retroarch/browser/ReportIME.java @@ -0,0 +1,15 @@ +package org.retroarch.browser; + +import android.app.Activity; +import android.app.AlertDialog; +import android.os.Bundle; +import android.provider.Settings; + +public class ReportIME extends Activity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + String current_ime = Settings.Secure.getString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD); + new AlertDialog.Builder(this).setMessage(current_ime).setNeutralButton("Close", null).show(); + } +} diff --git a/android/phoenix/src/org/retroarch/browser/RetroArch.java b/android/phoenix/src/org/retroarch/browser/RetroArch.java index 52bfb6ec1c..a001da96af 100644 --- a/android/phoenix/src/org/retroarch/browser/RetroArch.java +++ b/android/phoenix/src/org/retroarch/browser/RetroArch.java @@ -377,10 +377,6 @@ public class RetroArch extends Activity implements InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showInputMethodPicker(); return true; - case R.id.report_ime: - String current_ime = Settings.Secure.getString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD); - new AlertDialog.Builder(this).setMessage(current_ime).setNeutralButton("Close", null).show(); - return true; default: return false; } From 647a423aa4bc0cba10233ed25fea6c687e27d838 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 12 Aug 2013 17:43:27 +0200 Subject: [PATCH 05/14] (Android Phoenix) Split up menu classes into separate .java files --- android/phoenix/AndroidManifest.xml | 3 + .../retroarch/browser/HoneycombPopupMenu.java | 49 +++++++++ .../org/retroarch/browser/LazyPopupMenu.java | 15 +++ .../retroarch/browser/PopupMenuAbstract.java | 60 +++++++++++ .../src/org/retroarch/browser/RetroArch.java | 102 ------------------ 5 files changed, 127 insertions(+), 102 deletions(-) create mode 100644 android/phoenix/src/org/retroarch/browser/HoneycombPopupMenu.java create mode 100644 android/phoenix/src/org/retroarch/browser/LazyPopupMenu.java create mode 100644 android/phoenix/src/org/retroarch/browser/PopupMenuAbstract.java diff --git a/android/phoenix/AndroidManifest.xml b/android/phoenix/AndroidManifest.xml index 54364a192e..30e4c40026 100644 --- a/android/phoenix/AndroidManifest.xml +++ b/android/phoenix/AndroidManifest.xml @@ -24,6 +24,9 @@ + + + diff --git a/android/phoenix/src/org/retroarch/browser/HoneycombPopupMenu.java b/android/phoenix/src/org/retroarch/browser/HoneycombPopupMenu.java new file mode 100644 index 0000000000..ca4026a913 --- /dev/null +++ b/android/phoenix/src/org/retroarch/browser/HoneycombPopupMenu.java @@ -0,0 +1,49 @@ +package org.retroarch.browser; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.PopupMenu; + +@TargetApi(Build.VERSION_CODES.HONEYCOMB) +class HoneycombPopupMenu extends LazyPopupMenu { + private PopupMenu instance; + HoneycombPopupMenu.OnMenuItemClickListener listen; + + public HoneycombPopupMenu(Context context, View anchor) + { + instance = new PopupMenu(context, anchor); + } + + @Override + public void setOnMenuItemClickListener(HoneycombPopupMenu.OnMenuItemClickListener listener) + { + listen = listener; + instance.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + return listen.onMenuItemClick(item); + } + + }); + } + + @Override + public Menu getMenu() { + return instance.getMenu(); + } + + @Override + public MenuInflater getMenuInflater() { + return instance.getMenuInflater(); + } + + @Override + public void show() { + instance.show(); + } +} diff --git a/android/phoenix/src/org/retroarch/browser/LazyPopupMenu.java b/android/phoenix/src/org/retroarch/browser/LazyPopupMenu.java new file mode 100644 index 0000000000..9e72cb5622 --- /dev/null +++ b/android/phoenix/src/org/retroarch/browser/LazyPopupMenu.java @@ -0,0 +1,15 @@ +package org.retroarch.browser; + +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; + +abstract class LazyPopupMenu { + public abstract Menu getMenu(); + public abstract MenuInflater getMenuInflater(); + public abstract void setOnMenuItemClickListener(LazyPopupMenu.OnMenuItemClickListener listener); + public abstract void show(); + public interface OnMenuItemClickListener { + public abstract boolean onMenuItemClick(MenuItem item); + } +} \ No newline at end of file diff --git a/android/phoenix/src/org/retroarch/browser/PopupMenuAbstract.java b/android/phoenix/src/org/retroarch/browser/PopupMenuAbstract.java new file mode 100644 index 0000000000..5477a187d7 --- /dev/null +++ b/android/phoenix/src/org/retroarch/browser/PopupMenuAbstract.java @@ -0,0 +1,60 @@ +package org.retroarch.browser; + +import android.content.Context; +import android.os.Build; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.View; + +class PopupMenuAbstract extends LazyPopupMenu +{ + private LazyPopupMenu lazy; + + public PopupMenuAbstract(Context context, View anchor) + { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) + { + lazy = new HoneycombPopupMenu(context, anchor); + } + } + + @Override + public Menu getMenu() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) + { + return lazy.getMenu(); + } + else + { + return null; + } + } + + @Override + public MenuInflater getMenuInflater() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) + { + return lazy.getMenuInflater(); + } + else + { + return null; + } + } + + @Override + public void setOnMenuItemClickListener(PopupMenuAbstract.OnMenuItemClickListener listener) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) + { + lazy.setOnMenuItemClickListener(listener); + } + } + + @Override + public void show() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) + { + lazy.show(); + } + } +} diff --git a/android/phoenix/src/org/retroarch/browser/RetroArch.java b/android/phoenix/src/org/retroarch/browser/RetroArch.java index a001da96af..22d17b94d2 100644 --- a/android/phoenix/src/org/retroarch/browser/RetroArch.java +++ b/android/phoenix/src/org/retroarch/browser/RetroArch.java @@ -382,105 +382,3 @@ public class RetroArch extends Activity implements } } } - -abstract class LazyPopupMenu { - public abstract Menu getMenu(); - public abstract MenuInflater getMenuInflater(); - public abstract void setOnMenuItemClickListener(LazyPopupMenu.OnMenuItemClickListener listener); - public abstract void show(); - public interface OnMenuItemClickListener { - public abstract boolean onMenuItemClick(MenuItem item); - } -} - -@TargetApi(Build.VERSION_CODES.HONEYCOMB) -class HoneycombPopupMenu extends LazyPopupMenu { - private PopupMenu instance; - HoneycombPopupMenu.OnMenuItemClickListener listen; - - public HoneycombPopupMenu(Context context, View anchor) - { - instance = new PopupMenu(context, anchor); - } - - @Override - public void setOnMenuItemClickListener(HoneycombPopupMenu.OnMenuItemClickListener listener) - { - listen = listener; - instance.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - return listen.onMenuItemClick(item); - } - - }); - } - - @Override - public Menu getMenu() { - return instance.getMenu(); - } - - @Override - public MenuInflater getMenuInflater() { - return instance.getMenuInflater(); - } - - @Override - public void show() { - instance.show(); - } -} - -class PopupMenuAbstract extends LazyPopupMenu -{ - private LazyPopupMenu lazy; - - public PopupMenuAbstract(Context context, View anchor) - { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) - { - lazy = new HoneycombPopupMenu(context, anchor); - } - } - - @Override - public Menu getMenu() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) - { - return lazy.getMenu(); - } - else - { - return null; - } - } - - @Override - public MenuInflater getMenuInflater() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) - { - return lazy.getMenuInflater(); - } - else - { - return null; - } - } - - @Override - public void setOnMenuItemClickListener(PopupMenuAbstract.OnMenuItemClickListener listener) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) - { - lazy.setOnMenuItemClickListener(listener); - } - } - - @Override - public void show() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) - { - lazy.show(); - } - } -} From fc4a6b625049190f0e7a6cdf82bcda8cfe69a4bc Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 12 Aug 2013 18:48:07 +0200 Subject: [PATCH 06/14] (Android Phoenix) Rename RetroArch.java to CoreSelection.java --- android/phoenix/AndroidManifest.xml | 2 +- android/phoenix/res/xml/prefs.xml | 2 +- .../retroarch/browser/{RetroArch.java => CoreSelection.java} | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename android/phoenix/src/org/retroarch/browser/{RetroArch.java => CoreSelection.java} (99%) diff --git a/android/phoenix/AndroidManifest.xml b/android/phoenix/AndroidManifest.xml index 30e4c40026..1b0d909718 100644 --- a/android/phoenix/AndroidManifest.xml +++ b/android/phoenix/AndroidManifest.xml @@ -15,7 +15,7 @@ android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:hasCode="true"> - + diff --git a/android/phoenix/res/xml/prefs.xml b/android/phoenix/res/xml/prefs.xml index 72a6719ed9..4ffa8b1dcf 100644 --- a/android/phoenix/res/xml/prefs.xml +++ b/android/phoenix/res/xml/prefs.xml @@ -4,7 +4,7 @@ diff --git a/android/phoenix/src/org/retroarch/browser/RetroArch.java b/android/phoenix/src/org/retroarch/browser/CoreSelection.java similarity index 99% rename from android/phoenix/src/org/retroarch/browser/RetroArch.java rename to android/phoenix/src/org/retroarch/browser/CoreSelection.java index 22d17b94d2..70675051f3 100644 --- a/android/phoenix/src/org/retroarch/browser/RetroArch.java +++ b/android/phoenix/src/org/retroarch/browser/CoreSelection.java @@ -20,7 +20,7 @@ import android.view.inputmethod.*; // JELLY_BEAN_MR1 = 17 -public class RetroArch extends Activity implements +public class CoreSelection extends Activity implements AdapterView.OnItemClickListener { private IconAdapter adapter; static private final int ACTIVITY_LOAD_ROM = 0; From a7b8bfc020d0cf55509cda69dcd8c5841e0eece9 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 12 Aug 2013 18:53:17 +0200 Subject: [PATCH 07/14] (Android Phoenix) Add Ouya autodetection rules - should disable input overlay at startup and setup input_autodetect to true --- .../retroarch/browser/MainMenuActivity.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java b/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java index cd4a13cabd..4d235d3c93 100644 --- a/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java +++ b/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java @@ -176,6 +176,24 @@ public class MainMenuActivity extends PreferenceActivity { alert.show(); retval = true; } + else if (android.os.Build.MODEL.equals( "OUYA Console")) + { + AlertDialog.Builder alert = new AlertDialog.Builder(this) + .setTitle("OUYA detected") + .setMessage("The ideal configuration options for your device will now be preconfigured.\nNOTE: For optimal performance, turn off Google Account sync, Google Play Store auto-updates, GPS and Wifi in your Android settings menu.") + .setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); + SharedPreferences.Editor edit = prefs.edit(); + edit.putBoolean("input_overlay_enable", false); + edit.putBoolean("input_autodetect_enable", true); + edit.commit(); + } + }); + alert.show(); + retval = true; + } else if (android.os.Build.ID.equals("JSS15J")) { AlertDialog.Builder alert = new AlertDialog.Builder(this) From 3122dbf4e602024c568751251f5b88806b35eea5 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 12 Aug 2013 18:54:27 +0200 Subject: [PATCH 08/14] (Android Phoenix) Update string somewhat to reflect that Ouya doesn't have Google Play installed --- android/phoenix/src/org/retroarch/browser/MainMenuActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java b/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java index 4d235d3c93..1e8f81284f 100644 --- a/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java +++ b/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java @@ -180,7 +180,7 @@ public class MainMenuActivity extends PreferenceActivity { { AlertDialog.Builder alert = new AlertDialog.Builder(this) .setTitle("OUYA detected") - .setMessage("The ideal configuration options for your device will now be preconfigured.\nNOTE: For optimal performance, turn off Google Account sync, Google Play Store auto-updates, GPS and Wifi in your Android settings menu.") + .setMessage("The ideal configuration options for your device will now be preconfigured.\nNOTE: For optimal performance, turn off Google Account sync, GPS and Wifi in your Android settings menu.") .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { From 16ca310f93e036add0a8fb63e0adf181bbce818c Mon Sep 17 00:00:00 2001 From: Themaister Date: Mon, 12 Aug 2013 20:13:06 +0200 Subject: [PATCH 09/14] Add high latency audio support for Android. Should fix ghetto hardware again. --- android/phoenix/res/xml/prefs.xml | 6 +++ .../org/retroarch/browser/CoreSelection.java | 1 + audio/opensl.c | 42 ++++++++++++------- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/android/phoenix/res/xml/prefs.xml b/android/phoenix/res/xml/prefs.xml index 4ffa8b1dcf..0b3142b73c 100644 --- a/android/phoenix/res/xml/prefs.xml +++ b/android/phoenix/res/xml/prefs.xml @@ -98,6 +98,12 @@ android:summary="Enable dynamic rate control (recommended)." android:title="Dynamic Rate Control" android:dependency="audio_enable" /> + diff --git a/android/phoenix/src/org/retroarch/browser/CoreSelection.java b/android/phoenix/src/org/retroarch/browser/CoreSelection.java index 70675051f3..44f59f267e 100644 --- a/android/phoenix/src/org/retroarch/browser/CoreSelection.java +++ b/android/phoenix/src/org/retroarch/browser/CoreSelection.java @@ -219,6 +219,7 @@ public class CoreSelection extends Activity implements SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); config.setBoolean("audio_rate_control", prefs.getBoolean("audio_rate_control", true)); config.setInt("audio_out_rate", getOptimalSamplingRate()); + config.setInt("audio_latency", prefs.getBoolean("audio_high_latency", false) ? 160 : 64); config.setBoolean("audio_enable", prefs.getBoolean("audio_enable", true)); config.setBoolean("video_smooth", prefs.getBoolean("video_smooth", true)); config.setBoolean("video_allow_rotate", prefs.getBoolean("video_allow_rotate", true)); diff --git a/audio/opensl.c b/audio/opensl.c index 5339bbb3b6..068e42a7a2 100644 --- a/audio/opensl.c +++ b/audio/opensl.c @@ -33,13 +33,10 @@ #define SLPlayItf_SetPlayState(a, ...) ((*(a))->SetPlayState(a, __VA_ARGS__)) -// TODO: Are these sane? -#define BUFFER_SIZE (2 * 1024) -#define BUFFER_COUNT 16 - typedef struct sl { - uint8_t buffer[BUFFER_COUNT][BUFFER_SIZE]; + uint8_t **buffer; + uint8_t *buffer_chunk; unsigned buffer_index; unsigned buffer_ptr; volatile unsigned buffered_blocks; @@ -55,6 +52,7 @@ typedef struct sl slock_t *lock; scond_t *cond; bool nonblock; + unsigned buf_size; unsigned buf_count; } sl_t; @@ -93,6 +91,8 @@ static void sl_free(void *data) if (sl->cond) scond_free(sl->cond); + free(sl->buffer); + free(sl->buffer_chunk); free(sl); } @@ -122,11 +122,23 @@ static void *sl_init(const char *device, unsigned rate, unsigned latency) GOTO_IF_FAIL(SLEngineItf_CreateOutputMix(sl->engine, &sl->output_mix, 0, NULL, NULL)); GOTO_IF_FAIL(SLObjectItf_Realize(sl->output_mix, SL_BOOLEAN_FALSE)); + sl->buf_size = next_pow2(32 * latency); sl->buf_count = (latency * 4 * out_rate + 500) / 1000; - sl->buf_count = (sl->buf_count + BUFFER_SIZE / 2) / BUFFER_SIZE; - sl->buf_count = min(sl->buf_count, BUFFER_COUNT); + sl->buf_count = (sl->buf_count + sl->buf_size / 2) / sl->buf_size; - RARCH_LOG("[SLES] : Setting audio latency (buffer size: [%d]) ...\n", sl->buf_count * BUFFER_SIZE); + sl->buffer = (uint8_t**)calloc(sizeof(uint8_t*), sl->buf_count); + if (!sl->buffer) + goto error; + + sl->buffer_chunk = (uint8_t*)calloc(sl->buf_count, sl->buf_size); + if (!sl->buffer_chunk) + goto error; + + for (unsigned i = 0; i < sl->buf_count; i++) + sl->buffer[i] = sl->buffer_chunk + i * sl->buf_size; + + RARCH_LOG("[SLES] : Setting audio latency: Block size = %u, Blocks = %u, Total = %u ...\n", + sl->buf_size, sl->buf_count, sl->buf_size * sl->buf_count); fmt_pcm.formatType = SL_DATAFORMAT_PCM; fmt_pcm.numChannels = 2; @@ -164,7 +176,7 @@ static void *sl_init(const char *device, unsigned rate, unsigned latency) sl->buffered_blocks = sl->buf_count; sl->buffer_index = 0; for (unsigned i = 0; i < sl->buf_count; i++) - (*sl->buffer_queue)->Enqueue(sl->buffer_queue, sl->buffer[i], BUFFER_SIZE); + (*sl->buffer_queue)->Enqueue(sl->buffer_queue, sl->buffer[i], sl->buf_size); GOTO_IF_FAIL(SLObjectItf_GetInterface(sl->buffer_queue_object, SL_IID_PLAY, &sl->player)); GOTO_IF_FAIL(SLPlayItf_SetPlayState(sl->player, SL_PLAYSTATE_PLAYING)); @@ -218,7 +230,7 @@ static ssize_t sl_write(void *data, const void *buf_, size_t size) slock_unlock(sl->lock); } - size_t avail_write = min(BUFFER_SIZE - sl->buffer_ptr, size); + size_t avail_write = min(sl->buf_size - sl->buffer_ptr, size); if (avail_write) { memcpy(sl->buffer[sl->buffer_index] + sl->buffer_ptr, buf, avail_write); @@ -228,9 +240,9 @@ static ssize_t sl_write(void *data, const void *buf_, size_t size) written += avail_write; } - if (sl->buffer_ptr >= BUFFER_SIZE) + if (sl->buffer_ptr >= sl->buf_size) { - SLresult res = (*sl->buffer_queue)->Enqueue(sl->buffer_queue, sl->buffer[sl->buffer_index], BUFFER_SIZE); + SLresult res = (*sl->buffer_queue)->Enqueue(sl->buffer_queue, sl->buffer[sl->buffer_index], sl->buf_size); sl->buffer_index = (sl->buffer_index + 1) % sl->buf_count; __sync_fetch_and_add(&sl->buffered_blocks, 1); sl->buffer_ptr = 0; @@ -243,22 +255,20 @@ static ssize_t sl_write(void *data, const void *buf_, size_t size) } } - //RARCH_LOG("Blocks: %u\n", sl->buffered_blocks); - return written; } static size_t sl_write_avail(void *data) { sl_t *sl = (sl_t*)data; - size_t avail = (sl->buf_count - (int)sl->buffered_blocks - 1) * BUFFER_SIZE + (BUFFER_SIZE - (int)sl->buffer_ptr); + size_t avail = (sl->buf_count - (int)sl->buffered_blocks - 1) * sl->buf_size + (sl->buf_size - (int)sl->buffer_ptr); return avail; } static size_t sl_buffer_size(void *data) { sl_t *sl = (sl_t*)data; - return BUFFER_SIZE * sl->buf_count; + return sl->buf_size * sl->buf_count; } static bool sl_use_float(void *data) From cd1681b1fb1717374f485c5d9d78a03103ece530 Mon Sep 17 00:00:00 2001 From: Themaister Date: Mon, 12 Aug 2013 22:24:26 +0200 Subject: [PATCH 10/14] Clean up dpad emulation. Avoid crufty and broken dpad_state. Use g_settings.input.axis_threshold option. --- android/native/jni/input_android.c | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/android/native/jni/input_android.c b/android/native/jni/input_android.c index 3b91bd94f5..880785398c 100644 --- a/android/native/jni/input_android.c +++ b/android/native/jni/input_android.c @@ -27,12 +27,6 @@ #define MAX_TOUCH 16 -typedef struct -{ - float dzone_min; - float dzone_max; -} dpad_values_t; - typedef struct { int16_t lx, ly; @@ -48,7 +42,6 @@ static unsigned pads_connected; static int state_device_ids[MAX_PADS]; static uint64_t state[MAX_PADS]; static uint64_t keycode_lut[LAST_KEYCODE]; -dpad_values_t dpad_state[MAX_PADS]; analog_t analog_state[MAX_PADS]; struct input_pointer @@ -194,8 +187,8 @@ static void engine_handle_dpad_default(AInputEvent *event, int source, bool debug_enable, unsigned emulation) { uint64_t *state_cur = &state[state_id]; - float dzone_min = dpad_state[state_id].dzone_min; - float dzone_max = dpad_state[state_id].dzone_max; + float dzone_min = -g_settings.input.axis_threshold; + float dzone_max = g_settings.input.axis_threshold; float x = AMotionEvent_getX(event, motion_pointer); float y = AMotionEvent_getY(event, motion_pointer); @@ -221,8 +214,8 @@ static void engine_handle_dpad_getaxisvalue(AInputEvent *event, bool debug_enable, unsigned emulation) { uint64_t *state_cur = &state[state_id]; - float dzone_min = dpad_state[state_id].dzone_min; - float dzone_max = dpad_state[state_id].dzone_max; + float dzone_min = -g_settings.input.axis_threshold; + float dzone_max = g_settings.input.axis_threshold; float x = AMotionEvent_getAxisValue(event, AXIS_X, motion_pointer); float y = AMotionEvent_getAxisValue(event, AXIS_Y, motion_pointer); float z = AMotionEvent_getAxisValue(event, AXIS_Z, motion_pointer); @@ -320,8 +313,6 @@ static void *android_input_init(void) g_settings.input.binds[i][RETRO_DEVICE_ID_JOYPAD_L3].joykey = (1ULL << RETRO_DEVICE_ID_JOYPAD_L3); g_settings.input.binds[i][RETRO_DEVICE_ID_JOYPAD_R3].joykey = (1ULL << RETRO_DEVICE_ID_JOYPAD_R3); - dpad_state[i].dzone_min = -0.99f; - dpad_state[i].dzone_max = 0.99f; g_settings.input.dpad_emulation[i] = ANALOG_DPAD_LSTICK; } @@ -511,9 +502,6 @@ static void android_input_set_keybinds(void *data, unsigned device, g_settings.input.device[port] = device; strlcpy(g_settings.input.device_names[port], "TTT THT Arcade", sizeof(g_settings.input.device_names[port])); - dpad_state[id].dzone_min = -2.00f; - dpad_state[id].dzone_max = 1.00f; - /* same as Rumblepad 2 - merge? */ //keycode_lut[AKEYCODE_BUTTON_7] |= ((RETRO_DEVICE_ID_JOYPAD_L2+1) << shift); @@ -652,8 +640,6 @@ static void android_input_set_keybinds(void *data, unsigned device, g_settings.input.device[port] = device; strlcpy(g_settings.input.device_names[port], "Huijia USB SNES", sizeof(g_settings.input.device_names[port])); - dpad_state[id].dzone_min = -1.00f; - dpad_state[id].dzone_max = 1.00f; keycode_lut[AKEYCODE_BUTTON_3] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift); keycode_lut[AKEYCODE_BUTTON_4] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift); @@ -668,8 +654,6 @@ static void android_input_set_keybinds(void *data, unsigned device, g_settings.input.device[port] = device; strlcpy(g_settings.input.device_names[port], "Super Smartjoy", sizeof(g_settings.input.device_names[port])); - dpad_state[id].dzone_min = -1.00f; - dpad_state[id].dzone_max = 1.00f; keycode_lut[AKEYCODE_BUTTON_3] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift); keycode_lut[AKEYCODE_BUTTON_4] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift); @@ -1076,8 +1060,6 @@ static void android_input_set_keybinds(void *data, unsigned device, g_settings.input.device[port] = device; strlcpy(g_settings.input.device_names[port], "Buffalo BGC FC801", sizeof(g_settings.input.device_names[port])); - dpad_state[id].dzone_min = -1.00f; - dpad_state[id].dzone_max = 1.00f; keycode_lut[AKEYCODE_BUTTON_1] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift); keycode_lut[AKEYCODE_BUTTON_2] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift); From 5a2a89a8db2e84cce84c99c00d34d1c33623620f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 12 Aug 2013 23:32:02 +0200 Subject: [PATCH 11/14] (Android Phoenix) Separate java classfile for FileWrapper (Android) Bind menu button to RGUI for 360 pad --- android/native/jni/input_android.c | 1 + android/phoenix/AndroidManifest.xml | 1 + .../retroarch/browser/DirectoryActivity.java | 68 ----------------- .../org/retroarch/browser/FileWrapper.java | 75 +++++++++++++++++++ 4 files changed, 77 insertions(+), 68 deletions(-) create mode 100644 android/phoenix/src/org/retroarch/browser/FileWrapper.java diff --git a/android/native/jni/input_android.c b/android/native/jni/input_android.c index 880785398c..a7457f7f9f 100644 --- a/android/native/jni/input_android.c +++ b/android/native/jni/input_android.c @@ -722,6 +722,7 @@ static void android_input_set_keybinds(void *data, unsigned device, sizeof(g_settings.input.device_names[port])); g_settings.input.dpad_emulation[port] = ANALOG_DPAD_DUALANALOG; + keycode_lut[AKEYCODE_BUTTON_MODE] |= ((RARCH_MENU_TOGGLE + 1) << shift); keycode_lut[AKEYCODE_BACK] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift); keycode_lut[AKEYCODE_BUTTON_SELECT] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift); keycode_lut[AKEYCODE_BUTTON_START] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift); diff --git a/android/phoenix/AndroidManifest.xml b/android/phoenix/AndroidManifest.xml index 1b0d909718..d0dc0587b0 100644 --- a/android/phoenix/AndroidManifest.xml +++ b/android/phoenix/AndroidManifest.xml @@ -29,6 +29,7 @@ + diff --git a/android/phoenix/src/org/retroarch/browser/DirectoryActivity.java b/android/phoenix/src/org/retroarch/browser/DirectoryActivity.java index 96bdfb0b36..5199054ff1 100644 --- a/android/phoenix/src/org/retroarch/browser/DirectoryActivity.java +++ b/android/phoenix/src/org/retroarch/browser/DirectoryActivity.java @@ -12,75 +12,7 @@ import android.os.*; import android.preference.PreferenceManager; import android.widget.*; import android.view.*; -import android.graphics.drawable.*; -class FileWrapper implements IconAdapterItem { - public final File file; - public final boolean parentItem; - public final boolean dirSelectItem; - - protected final boolean enabled; - - public static final int DIRSELECT = 0; - public static final int PARENT = 1; - public static final int FILE = 2; - - protected final int typeIndex; - - public FileWrapper(File aFile, int type, boolean aIsEnabled) { - file = aFile; - - parentItem = type == PARENT; - dirSelectItem = type == DIRSELECT; - typeIndex = type == FILE ? (FILE + (file.isDirectory() ? 0 : 1)) : type; - - enabled = parentItem || dirSelectItem || aIsEnabled; - } - - @Override - public boolean isEnabled() { - return enabled; - } - - @Override - public String getText() { - if (dirSelectItem) - return "[[Use this directory]]"; - else if (parentItem) - return "[Parent Directory]"; - else - return file.getName(); - } - - @Override - public int getIconResourceId() { - if (!parentItem && !dirSelectItem) { - return file.isFile() ? R.drawable.ic_file : R.drawable.ic_dir; - } else { - return R.drawable.ic_dir; - } - } - - @Override - public Drawable getIconDrawable() { - return null; - } - - public int compareTo(FileWrapper aOther) { - if (aOther != null) { - // Who says ternary is hard to follow - if (isEnabled() == aOther.isEnabled()) { - return (typeIndex == aOther.typeIndex) ? file - .compareTo(aOther.file) - : ((typeIndex < aOther.typeIndex) ? -1 : 1); - } else { - return isEnabled() ? -1 : 1; - } - } - - return -1; - } -} public class DirectoryActivity extends Activity implements AdapterView.OnItemClickListener { diff --git a/android/phoenix/src/org/retroarch/browser/FileWrapper.java b/android/phoenix/src/org/retroarch/browser/FileWrapper.java new file mode 100644 index 0000000000..8af274db16 --- /dev/null +++ b/android/phoenix/src/org/retroarch/browser/FileWrapper.java @@ -0,0 +1,75 @@ +package org.retroarch.browser; + +import java.io.File; + +import org.retroarch.R; + +import android.graphics.drawable.Drawable; + +class FileWrapper implements IconAdapterItem { + public final File file; + public final boolean parentItem; + public final boolean dirSelectItem; + + protected final boolean enabled; + + public static final int DIRSELECT = 0; + public static final int PARENT = 1; + public static final int FILE = 2; + + protected final int typeIndex; + + public FileWrapper(File aFile, int type, boolean aIsEnabled) { + file = aFile; + + parentItem = type == PARENT; + dirSelectItem = type == DIRSELECT; + typeIndex = type == FILE ? (FILE + (file.isDirectory() ? 0 : 1)) : type; + + enabled = parentItem || dirSelectItem || aIsEnabled; + } + + @Override + public boolean isEnabled() { + return enabled; + } + + @Override + public String getText() { + if (dirSelectItem) + return "[[Use this directory]]"; + else if (parentItem) + return "[Parent Directory]"; + else + return file.getName(); + } + + @Override + public int getIconResourceId() { + if (!parentItem && !dirSelectItem) { + return file.isFile() ? R.drawable.ic_file : R.drawable.ic_dir; + } else { + return R.drawable.ic_dir; + } + } + + @Override + public Drawable getIconDrawable() { + return null; + } + + public int compareTo(FileWrapper aOther) { + if (aOther != null) { + // Who says ternary is hard to follow + if (isEnabled() == aOther.isEnabled()) { + return (typeIndex == aOther.typeIndex) ? file + .compareTo(aOther.file) + : ((typeIndex < aOther.typeIndex) ? -1 : 1); + } else { + return isEnabled() ? -1 : 1; + } + } + + return -1; + } +} From 255f21fb8865e928105c42e633027f06b9c56e1f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 13 Aug 2013 00:00:00 +0200 Subject: [PATCH 12/14] (Android) Autodetection - Fixes face buttons on PS3 pad --- android/native/jni/input_android.c | 37 ++++++------------------------ 1 file changed, 7 insertions(+), 30 deletions(-) diff --git a/android/native/jni/input_android.c b/android/native/jni/input_android.c index a7457f7f9f..f34b69c8ff 100644 --- a/android/native/jni/input_android.c +++ b/android/native/jni/input_android.c @@ -839,52 +839,29 @@ static void android_input_set_keybinds(void *data, unsigned device, keycode_lut[AKEYCODE_ESCAPE] |= ((RARCH_QUIT_KEY+1) << shift); break; case DEVICE_PLAYSTATION3_VERSION1: - g_settings.input.device[port] = device; - strlcpy(g_settings.input.device_names[port], "PlayStation3 Ver.1", - sizeof(g_settings.input.device_names[port])); - - g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE; - keycode_lut[AKEYCODE_DPAD_UP] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift); - keycode_lut[AKEYCODE_DPAD_DOWN] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift); - keycode_lut[AKEYCODE_DPAD_LEFT] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift); - keycode_lut[AKEYCODE_DPAD_RIGHT] |= ((RETRO_DEVICE_ID_JOYPAD_RIGHT+1) << shift); - keycode_lut[AKEYCODE_BUTTON_A] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift); - keycode_lut[AKEYCODE_BUTTON_X] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift); - keycode_lut[AKEYCODE_BUTTON_SELECT] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift); - keycode_lut[AKEYCODE_BUTTON_START] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift); - keycode_lut[AKEYCODE_BUTTON_Y] |= ((RETRO_DEVICE_ID_JOYPAD_X+1) << shift); - keycode_lut[AKEYCODE_BUTTON_B] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift); - keycode_lut[AKEYCODE_BUTTON_L1] |= ((RETRO_DEVICE_ID_JOYPAD_L+1) << shift); - keycode_lut[AKEYCODE_BUTTON_R1] |= ((RETRO_DEVICE_ID_JOYPAD_R+1) << shift); - keycode_lut[AKEYCODE_BUTTON_L2] |= ((RETRO_DEVICE_ID_JOYPAD_L2+1) << shift); - keycode_lut[AKEYCODE_BUTTON_R2] |= ((RETRO_DEVICE_ID_JOYPAD_R2+1) << shift); - keycode_lut[AKEYCODE_BUTTON_THUMBL] |= ((RETRO_DEVICE_ID_JOYPAD_L3+1) << shift); - keycode_lut[AKEYCODE_BUTTON_THUMBR] |= ((RETRO_DEVICE_ID_JOYPAD_R3+1) << shift); - keycode_lut[AKEYCODE_BUTTON_1] |= ((RARCH_MENU_TOGGLE+1) << shift); - break; case DEVICE_PLAYSTATION3_VERSION2: g_settings.input.device[port] = device; - g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE; - strlcpy(g_settings.input.device_names[port], "PlayStation3 Ver.2", + strlcpy(g_settings.input.device_names[port], "PlayStation3", sizeof(g_settings.input.device_names[port])); + g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE; keycode_lut[AKEYCODE_DPAD_UP] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift); keycode_lut[AKEYCODE_DPAD_DOWN] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift); keycode_lut[AKEYCODE_DPAD_LEFT] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift); keycode_lut[AKEYCODE_DPAD_RIGHT] |= ((RETRO_DEVICE_ID_JOYPAD_RIGHT+1) << shift); - keycode_lut[AKEYCODE_BUTTON_1] |= ((RARCH_MENU_TOGGLE+1) << shift); - keycode_lut[AKEYCODE_BUTTON_A] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift); - keycode_lut[AKEYCODE_BUTTON_X] |= ((RETRO_DEVICE_ID_JOYPAD_X+1) << shift); + keycode_lut[AKEYCODE_BUTTON_A] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift); + keycode_lut[AKEYCODE_BUTTON_X] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift); keycode_lut[AKEYCODE_BUTTON_SELECT] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift); keycode_lut[AKEYCODE_BUTTON_START] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift); - keycode_lut[AKEYCODE_BUTTON_Y] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift); - keycode_lut[AKEYCODE_BUTTON_B] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift); + keycode_lut[AKEYCODE_BUTTON_B] |= ((RETRO_DEVICE_ID_JOYPAD_X+1) << shift); + keycode_lut[AKEYCODE_BUTTON_Y] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift); keycode_lut[AKEYCODE_BUTTON_L1] |= ((RETRO_DEVICE_ID_JOYPAD_L+1) << shift); keycode_lut[AKEYCODE_BUTTON_R1] |= ((RETRO_DEVICE_ID_JOYPAD_R+1) << shift); keycode_lut[AKEYCODE_BUTTON_L2] |= ((RETRO_DEVICE_ID_JOYPAD_L2+1) << shift); keycode_lut[AKEYCODE_BUTTON_R2] |= ((RETRO_DEVICE_ID_JOYPAD_R2+1) << shift); keycode_lut[AKEYCODE_BUTTON_THUMBL] |= ((RETRO_DEVICE_ID_JOYPAD_L3+1) << shift); keycode_lut[AKEYCODE_BUTTON_THUMBR] |= ((RETRO_DEVICE_ID_JOYPAD_R3+1) << shift); + keycode_lut[AKEYCODE_BUTTON_1] |= ((RARCH_MENU_TOGGLE+1) << shift); break; case DEVICE_MOGA: g_settings.input.device[port] = device; From dc16abe72805d98b8cf2921936e2e2214e38c754 Mon Sep 17 00:00:00 2001 From: meancoot Date: Mon, 12 Aug 2013 18:02:16 -0400 Subject: [PATCH 13/14] (OSX) Fix gamepad axis inputs --- apple/OSX/hid_pad.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apple/OSX/hid_pad.c b/apple/OSX/hid_pad.c index b3bf370491..79c453e9b3 100644 --- a/apple/OSX/hid_pad.c +++ b/apple/OSX/hid_pad.c @@ -62,7 +62,7 @@ static void hid_input_callback(void* inContext, IOReturn inResult, void* inSende if (state) g_current_input_data.pad_buttons[slot] |= (1 << (use - 1)); else g_current_input_data.pad_buttons[slot] &= ~(1 << (use - 1)); } - else if (type == kIOHIDElementTypeInput_Axis && page == kHIDPage_GenericDesktop) + else if (type == kIOHIDElementTypeInput_Misc && page == kHIDPage_GenericDesktop) { static const uint32_t axis_use_ids[4] = { 48, 49, 50, 53 }; for (int i = 0; i < 4; i ++) From 68e8fbc45fb78ffbc267da76e4b2f34fc27cb385 Mon Sep 17 00:00:00 2001 From: meancoot Date: Mon, 12 Aug 2013 19:02:34 -0400 Subject: [PATCH 14/14] (iOS) Fix icade button mapping --- apple/RetroArch/apple_input.c | 7 ++++++- apple/RetroArch/apple_input.h | 1 + apple/iOS/settings.m | 8 +++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/apple/RetroArch/apple_input.c b/apple/RetroArch/apple_input.c index 771701176a..07a1bdecfa 100644 --- a/apple/RetroArch/apple_input.c +++ b/apple/RetroArch/apple_input.c @@ -86,6 +86,11 @@ void apple_input_enable_icade(bool on) icade_buttons = 0; } +uint32_t apple_input_get_icade_buttons() +{ + return icade_enabled ? icade_buttons : 0; +} + void apple_input_handle_key_event(unsigned keycode, bool down) { keycode = HIDKEY(keycode); @@ -131,7 +136,7 @@ static void apple_input_poll(void *data) } input_joypad_poll(g_joydriver); - g_polled_input_data.pad_buttons[0] |= icade_buttons; + g_polled_input_data.pad_buttons[0] |= apple_input_get_icade_buttons(); g_current_input_data.mouse_delta[0] = 0; g_current_input_data.mouse_delta[1] = 0; diff --git a/apple/RetroArch/apple_input.h b/apple/RetroArch/apple_input.h index 2f606fd9c9..4a1ee13788 100644 --- a/apple/RetroArch/apple_input.h +++ b/apple/RetroArch/apple_input.h @@ -47,6 +47,7 @@ extern apple_input_data_t g_polled_input_data; //< Game thread data // Main thread only void apple_input_enable_icade(bool on); +uint32_t apple_input_get_icade_buttons(); void apple_input_handle_key_event(unsigned keycode, bool down); #endif diff --git a/apple/iOS/settings.m b/apple/iOS/settings.m index e452d636bb..65b4c025eb 100644 --- a/apple/iOS/settings.m +++ b/apple/iOS/settings.m @@ -755,7 +755,6 @@ static NSArray* build_input_port_group(config_file_t* config, uint32_t player) { "nul", 0x00}, }; - for (int i = 0; ios_key_name_map[i].hid_id; i++) { if (g_current_input_data.keys[ios_key_name_map[i].hid_id]) @@ -767,9 +766,12 @@ static NSArray* build_input_port_group(config_file_t* config, uint32_t player) } // Pad Buttons - for (int i = 0; g_current_input_data.pad_buttons[_value.player] && i < sizeof(g_current_input_data.pad_buttons[_value.player]) * 8; i++) + uint32_t buttons = g_current_input_data.pad_buttons[_value.player] | + ((_value.player == 0) ? apple_input_get_icade_buttons() : 0); + + for (int i = 0; buttons && i < sizeof(buttons) * 8; i++) { - if (g_current_input_data.pad_buttons[_value.player] & (1 << i)) + if (buttons & (1 << i)) { _value.msubValues[1] = [NSString stringWithFormat:@"%d", i]; [self finish];