diff --git a/blackberry-qnx/bb10/assets/coreInfo.json b/blackberry-qnx/bb10/assets/coreInfo.json
deleted file mode 100644
index 3c9258d119..0000000000
--- a/blackberry-qnx/bb10/assets/coreInfo.json
+++ /dev/null
@@ -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"
- }
-}
diff --git a/blackberry-qnx/bb10/bar-descriptor.xml b/blackberry-qnx/bb10/bar-descriptor.xml
index 64ce5cc9d3..24a26a9956 100644
--- a/blackberry-qnx/bb10/bar-descriptor.xml
+++ b/blackberry-qnx/bb10/bar-descriptor.xml
@@ -69,6 +69,7 @@
overlays
assets
icon.png
+ modules
diff --git a/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp b/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp
index c48a893a64..425b69125a 100644
--- a/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp
+++ b/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp
@@ -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", 1, 0, "FilePicker");
@@ -90,7 +87,8 @@ RetroArch::RetroArch()
//Get core DropDown reference to populate it in C++
coreSelection = mAppPane->findChild("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';
}
diff --git a/blackberry-qnx/bb10/src/RetroArch-Cascades.h b/blackberry-qnx/bb10/src/RetroArch-Cascades.h
index 14d51ca128..449b184a4f 100644
--- a/blackberry-qnx/bb10/src/RetroArch-Cascades.h
+++ b/blackberry-qnx/bb10/src/RetroArch-Cascades.h
@@ -9,6 +9,7 @@
#include
#include
#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;
};
diff --git a/blackberry-qnx/bb10/src/core_info.c b/blackberry-qnx/bb10/src/core_info.c
new file mode 100644
index 0000000000..5249e7f393
--- /dev/null
+++ b/blackberry-qnx/bb10/src/core_info.c
@@ -0,0 +1,92 @@
+#include "core_info.h"
+#include "general.h"
+#include
+#include
+
+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;icount;++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);
+}
diff --git a/blackberry-qnx/bb10/src/core_info.h b/blackberry-qnx/bb10/src/core_info.h
new file mode 100644
index 0000000000..69d5695ee5
--- /dev/null
+++ b/blackberry-qnx/bb10/src/core_info.h
@@ -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_ */