From f4a0ed01e09562938c54bc7e99a98e5b21a0e4f5 Mon Sep 17 00:00:00 2001 From: CatalystG Date: Sun, 23 Jun 2013 21:18:23 -0400 Subject: [PATCH] (BlackBerry) First pass at using ios core .info files. --- blackberry-qnx/bb10/assets/coreInfo.json | 186 ------------------ blackberry-qnx/bb10/bar-descriptor.xml | 1 + .../bb10/src/RetroArch-Cascades.cpp | 75 ++----- blackberry-qnx/bb10/src/RetroArch-Cascades.h | 4 +- blackberry-qnx/bb10/src/core_info.c | 92 +++++++++ blackberry-qnx/bb10/src/core_info.h | 30 +++ 6 files changed, 143 insertions(+), 245 deletions(-) delete mode 100644 blackberry-qnx/bb10/assets/coreInfo.json create mode 100644 blackberry-qnx/bb10/src/core_info.c create mode 100644 blackberry-qnx/bb10/src/core_info.h 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_ */