1
0
mirror of https://github.com/libretro/RetroArch synced 2024-07-08 12:15:49 +00:00

(BlackBerry) First pass at using ios core .info files.

This commit is contained in:
CatalystG 2013-06-23 21:18:23 -04:00
parent 705b1045ae
commit f4a0ed01e0
6 changed files with 143 additions and 245 deletions

View File

@ -1,186 +0,0 @@
{
"snes9x_next_libretro_qnx.so":{
"display_name":"SNES / Super Famicom (SNES9x Next)",
"supported_extensions":"*.smc|*.fig|*.sfc|*.gd3|*.gd7|*.dx2|*.bsx|*.swc",
"corename":"SNES9x Next",
"manufacturer":"Nintendo",
"systemname":"Super Nintendo Entertainment System",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"genesis_plus_gx_libretro_qnx.so":{
"display_name":"Sega (MS/GG/MD/CD)",
"supported_extensions":"*.md|*.smd|*.gen|*.sms|*.gg|*.sg|*.bin|*.cue|*.ios",
"corename":"Genesis Plus GX",
"manufacturer":"Sega",
"systemname":"Sega (Various)",
"default_overlay":"app/native/overlays/genesis6-landscape.cfg"
},
"vba_next_libretro_qnx.so":{
"display_name":"Game Boy Advance",
"supported_extensions":"*.gba",
"corename":"VBA Next",
"manufacturer":"Nintendo",
"systemname":"Game Boy Advance",
"default_overlay":"app/native/overlays/box-gba.cfg"
},
"pcsx_rearmed_libretro_qnx.so":{
"display_name":"PlayStation1",
"supported_extensions":"*.bin|*.cue|*.img|*.mdf|*.pbp|*.cbn|*.toc",
"corename":"PCSX ReARMed",
"manufacturer":"Sony",
"systemname":"PlayStation",
"default_overlay":"app/native/overlays/psx-landscape.cfg"
},
"fb_alpha_libretro_qnx.so":{
"display_name":"Arcade",
"supported_extensions":"*.zip|*.ZIP",
"corename":"Final Burn Alpha",
"manufacturer":"Various",
"systemname":"Arcade (various)",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"gambatte_libretro_qnx.so":{
"display_name":"Game Boy / Game Boy Color",
"supported_extensions":"*.gb|*.gbc|*.dmg",
"corename":"gambatte",
"manufacturer":"Nintendo",
"systemname":"Game Boy Color",
"default_overlay":"app/native/overlays/gameboy-landscape.cfg"
},
"stella_libretro_qnx.so":{
"display_name":"Atari 2600",
"supported_extensions":"*.a26|*.bin",
"corename":"Stella",
"manufacturer":"Atari",
"systemname":"Atari 2600",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"tyrquake_libretro_qnx.so":{
"display_name":"TyrQuake",
"supported_extensions":"*.pak",
"corename":"prboom",
"manufacturer":"",
"systemname":"",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"desmume_libretro_qnx.so":{
"display_name":"Nintendo DS",
"supported_extensions":"*.nds",
"corename":"DeSmuME",
"manufacturer":"Nintendo",
"systemname":"Nintendo DS",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"mednafen_ngp_libretro_qnx.so":{
"display_name":"Neo Geo Pocket (Color)",
"supported_extensions":"*.ngp|*.ngc",
"corename":"Mednafen Neopop",
"manufacturer":"SNK",
"systemname":"Neo Geo Pocket (Color)",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"mednafen_pce_libretro_qnx.so":{
"display_name":"PC Engine/TurboGrafx-16",
"supported_extensions":"*.pce|*.sgx|*.cue",
"corename":"Mednafen PCE Fast",
"manufacturer":"NEC",
"systemname":"PC Engine/TurboGrafx-16",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"mednafen_psx_libretro_qnx.so":{
"display_name":"PlayStation1 (Mednafen PSX)",
"supported_extensions":"*.cue|*.toc",
"corename":"Mednafen PSX",
"manufacturer":"Sony",
"systemname":"PlayStation",
"default_overlay":"app/native/overlays/psx-landscape.cfg"
},
"mednafen_vb_libretro_qnx.so":{
"display_name":"Virtual Boy",
"supported_extensions":"*.vb|*.vboy|*.bin",
"corename":"Mednafen VB",
"manufacturer":"Nintendo",
"systemname":"Virtual Boy",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"mednafen_wswan_libretro_qnx.so":{
"display_name":"WonderSwan (Color)",
"supported_extensions":"*.ws|*.wsc",
"corename":"Mednafen WonderSwan",
"manufacturer":"Bandai",
"systemname":"WonderSwan (Color)",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"mednafen_gba_libretro_qnx.so":{
"display_name":"Game Boy Advance (Mednafen VBA)",
"supported_extensions":"*.gba",
"corename":"Mednafen VBA",
"manufacturer":"Nintendo",
"systemname":"Game Boy Advance",
"default_overlay":"app/native/overlays/gba-landscape.cfg"
},
"nestopia_libretro_qnx.so":{
"display_name":"NES / Famicom (NEStopia)",
"supported_extensions":"*.nes|*.fds",
"corename":"Nestopia",
"manufacturer":"Nintendo",
"systemname":"Nintendo Entertainment System",
"default_overlay":"app/native/overlays/nes-landscape.cfg"
},
"nxengine_libretro_qnx.so":{
"display_name":"NXEngine (Cave Story)",
"supported_extensions":"*.exe",
"corename":"NXEngine",
"manufacturer":"",
"systemname":"",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"prboom_libretro_qnx.so":{
"display_name":"PrBoom (DOOM)",
"supported_extensions":"*.wad|*.iwad",
"corename":"prboom",
"manufacturer":"",
"systemname":"",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"fceumm_libretro_qnx.so":{
"display_name":"NES / Famicom (FCEUmm)",
"supported_extensions":"*.nes|*.unif",
"corename":"FCEUmm",
"manufacturer":"Nintendo",
"systemname":"Nintendo Entertainment System",
"default_overlay":"app/native/overlays/nes-landscape.cfg"
},
"modelviewer_libretro_qnx.so":{
"display_name":"Modelviewer",
"supported_extensions":"*.obj",
"corename":"Modelviewer",
"manufacturer":"Various",
"systemname":"3D Models",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"quicknes_libretro_qnx.so":{
"display_name":"NES / Famicom (QuickNES)",
"supported_extensions":"*.nes",
"corename":"QuickNES",
"manufacturer":"Nintendo",
"systemname":"Nintendo Entertainment System",
"default_overlay":"app/native/overlays/nes-landscape.cfg"
},
"scenewalker_libretro_qnx.so":{
"display_name":"SceneWalker",
"supported_extensions":"*.obj",
"corename":"SceneWalker",
"manufacturer":"Various",
"systemname":"3D Models",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
},
"snes9x_libretro_qnx.so":{
"display_name":"SNES / Super Famicom (SNES9x)",
"supported_extensions":"*.smc|*.fig|*.sfc|*.gd3|*.gd7|*.dx2|*.bsx|*.swc",
"corename":"SNES9x",
"manufacturer":"Nintendo",
"systemname":"Super Nintendo Entertainment System",
"default_overlay":"app/native/overlays/snes-landscape.cfg"
}
}

View File

@ -69,6 +69,7 @@
<asset path="../../media/overlays">overlays</asset>
<asset path="assets">assets</asset>
<asset path="assets/images/icon.png">icon.png</asset>
<asset path="../../ios/modules">modules</asset>
<!-- Bright theme is used for this application. -->

View File

@ -16,6 +16,7 @@
#include "general.h"
#include "conf/config_file.h"
#include "file.h"
#include "core_info.h"
#ifdef HAVE_RGUI
#include "frontend/menu/rgui.h"
@ -50,10 +51,6 @@ using namespace bb::device;
extern screen_window_t screen_win;
extern screen_context_t screen_ctx;
//Use after calling findCores
//If we allow user added libs, this needs to be error checked
#define GET_CORE_INFO(x, y) coreInfo[coreList[x]].toMap()[y].toString()
RetroArch::RetroArch()
{
qmlRegisterType<bb::cascades::pickers::FilePicker>("bb.cascades.pickers", 1, 0, "FilePicker");
@ -90,7 +87,8 @@ RetroArch::RetroArch()
//Get core DropDown reference to populate it in C++
coreSelection = mAppPane->findChild<DropDown*>("dropdown_core");
connect(coreSelection, SIGNAL(selectedValueChanged(QVariant)), this, SLOT(onCoreSelected(QVariant)));
findCores();
core_info_list = get_core_info_list();
populateCores(core_info_list);
Application::instance()->setScene(mAppPane);
@ -113,7 +111,7 @@ RetroArch::RetroArch()
RetroArch::~RetroArch()
{
free(coreList);
free_core_info_list(core_info_list);
}
void RetroArch::aboutToQuit()
@ -249,10 +247,11 @@ void RetroArch::onCoreSelected(QVariant value)
core.clear();
core.append("app/native/lib/");
core.append(coreList[coreSelectedIndex]);
core.append(core_info_list->list[coreSelectedIndex].path);
emit coreChanged(core);
romExtensions = GET_CORE_INFO(coreSelectedIndex, "supported_extensions");
romExtensions = QString("*.%1").arg(core_info_list->list[coreSelectedIndex].supportedExtensions);
romExtensions.replace("|", "|*.");
emit romExtensionsChanged(romExtensions);
qDebug() << "Core Selected: " << core;
@ -289,59 +288,21 @@ void RetroArch::startEmulator()
}
}
void RetroArch::findCores()
void RetroArch::populateCores(core_info_list_t * info)
{
DIR *dirp;
struct dirent* direntp;
int count=0, i=0;
int i;
Option *tmp;
dirp = opendir(g_settings.libretro);
if( dirp != NULL )
//Populate DropDown
for (i = 0; i < info->count; ++i)
{
for(;;)
{
direntp = readdir( dirp );
if( direntp == NULL ) break;
count++;
}
fflush(stdout);
rewinddir(dirp);
qDebug() << info->list[i].displayName;
if(count==2)
{
printf("No Cores Found");fflush(stdout);
}
tmp = Option::create().text(QString(info->list[i].displayName))
.value(i);
coreList = (char**)malloc(count*sizeof(char*));
count = 0;
for(;;)
{
direntp = readdir( dirp );
if( direntp == NULL ) break;
coreList[count++] = strdup((char*)direntp->d_name);
}
//Load info for Cores
JsonDataAccess jda;
coreInfo = jda.load("app/native/assets/coreInfo.json").toMap();
Option *tmp;
//Populate DropDown
for (i = 2; i < count; ++i)
{
qDebug() << GET_CORE_INFO(i, "display_name");
tmp = Option::create().text(GET_CORE_INFO(i, "display_name"))
.value(i);
coreSelection->add(tmp);
}
coreSelection->add(tmp);
}
closedir(dirp);
}
void RetroArch::findDevices()
@ -376,9 +337,7 @@ void RetroArch::initRASettings()
//If Physical keyboard or a device mapped to player 1, hide overlay
//TODO: Should there be a minimized/quick settings only overlay?
if(!hwInfo->isPhysicalKeyboardDevice() && !port_device[0])
strlcpy(g_settings.input.overlay, GET_CORE_INFO(coreSelectedIndex, "default_overlay").toAscii().constData(), sizeof(g_settings.input.overlay));
else
if(hwInfo->isPhysicalKeyboardDevice() || port_device[0])
*g_settings.input.overlay = '\0';
}

View File

@ -9,6 +9,7 @@
#include <screen/screen.h>
#include <sys/neutrino.h>
#include "ButtonMap.h"
#include "core_info.h"
using namespace bb::cascades;
@ -33,11 +34,11 @@ public:
~ RetroArch();
Q_INVOKABLE void startEmulator();
Q_INVOKABLE void findCores();
Q_INVOKABLE void findDevices();
Q_INVOKABLE int mapButton(void* device, int player, int button);
Q_INVOKABLE QString buttonToString(void* deviceVp, int button);
Q_INVOKABLE void discoverController();
void populateCores(core_info_list_t * info);
signals:
void romChanged(QString);
@ -77,6 +78,7 @@ private:
QVariantMap coreInfo;
char **coreList;
int coreSelectedIndex;
core_info_list_t *core_info_list;
ButtonMap *buttonMap;
};

View File

@ -0,0 +1,92 @@
#include "core_info.h"
#include "general.h"
#include <math.h>
#include <dirent.h>
core_info_list_t *get_core_info_list()
{
DIR *dirp;
struct dirent* direntp;
int count=0, i=0;
core_info_t *core_info;
core_info_list_t *core_info_list;
if(!*g_settings.libretro)
return NULL;
dirp = opendir(g_settings.libretro);
if( dirp == NULL )
return NULL;
//Count number of cores
for(;;)
{
direntp = readdir( dirp );
if( direntp == NULL ) break;
count++;
}
rewinddir(dirp);
if(count == 2)
{
//Only . and ..
closedir(dirp);
return NULL;
}
core_info = (core_info_t*)malloc(count*sizeof(core_info_t));
core_info_list = malloc(sizeof(core_info_list_t));
core_info_list->list = core_info;
count = 0;
for(;;)
{
direntp = readdir( dirp );
if( direntp == NULL ) break;
if(strcmp((char*)direntp->d_name, ".")==0 || strcmp((char*)direntp->d_name, "..")==0)
continue;
core_info[count++].path = strdup((char*)direntp->d_name);
}
core_info_list->count = count;
for(i=0;i<count;++i)
{
char info_path[255];
snprintf(info_path, sizeof(info_path), "app/native/modules/");
strncat(info_path, core_info[i].path, sizeof(info_path)-strlen(info_path)-1);
char * substr = strrchr(info_path, '_');
if(substr)
{
info_path[strlen(info_path) - strlen(substr)] = '\0';
strncat(info_path, ".info", sizeof(info_path)-strlen(info_path)-1);
core_info[i].data = config_file_new(info_path);
if(core_info[i].data)
{
config_get_string(core_info[i].data, "display_name", &core_info[i].displayName);
config_get_string(core_info[i].data, "supported_extensions", &core_info[i].supportedExtensions);
} else {
core_info[i].displayName = "Not Supported";
}
}
}
closedir(dirp);
return core_info_list;
}
void free_core_info_list(core_info_list_t * core_info_list)
{
int i;
for(i=0;i<core_info_list->count;++i)
{
free(core_info_list->list[i].path);
free(core_info_list->list[i].displayName);
free(core_info_list->list[i].supportedExtensions);
config_file_free(core_info_list->list[i].data);
}
free(core_info_list->list);
free(core_info_list);
}

View File

@ -0,0 +1,30 @@
#ifndef CORE_INFO_H_
#define CORE_INFO_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "conf/config_file.h"
typedef struct {
char * path;
config_file_t* data;
char * configPath;
char * displayName;
char * supportedExtensions;
} core_info_t;
typedef struct {
core_info_t *list;
int count;
} core_info_list_t;
core_info_list_t *get_core_info_list();
void free_core_info_list(core_info_list_t * core_info_list);
#ifdef __cplusplus
}
#endif
#endif /* CORE_INFO_H_ */