mirror of
https://github.com/libretro/RetroArch
synced 2025-02-02 05:54:16 +00:00
(BlackBerry) First pass at using ios core .info files.
This commit is contained in:
parent
705b1045ae
commit
f4a0ed01e0
@ -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"
|
||||
}
|
||||
}
|
@ -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. -->
|
||||
|
@ -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';
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
92
blackberry-qnx/bb10/src/core_info.c
Normal file
92
blackberry-qnx/bb10/src/core_info.c
Normal 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);
|
||||
}
|
30
blackberry-qnx/bb10/src/core_info.h
Normal file
30
blackberry-qnx/bb10/src/core_info.h
Normal 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_ */
|
Loading…
x
Reference in New Issue
Block a user