From 5a6bec18b604b80b071f1e047ebecf92eb561488 Mon Sep 17 00:00:00 2001 From: Saggi Mizrahi Date: Wed, 25 Jul 2012 01:22:49 -0400 Subject: [PATCH 01/19] Remove trailing newlines from some files Signed-off-by: Saggi Mizrahi --- gfx/gfx_common.c | 2 +- gfx/gfx_common.h | 2 +- gfx/sdl_gfx.c | 4 ++-- gfx/xvideo.c | 48 ++++++++++++++++++++++++------------------------ 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/gfx/gfx_common.c b/gfx/gfx_common.c index f5475af8b7..9b1eeb372a 100644 --- a/gfx/gfx_common.c +++ b/gfx/gfx_common.c @@ -1,6 +1,6 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2010-2012 - Hans-Kristian Arntzen - * + * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- * ation, either version 3 of the License, or (at your option) any later version. diff --git a/gfx/gfx_common.h b/gfx/gfx_common.h index 2f30488fb3..3d65cfe36d 100644 --- a/gfx/gfx_common.h +++ b/gfx/gfx_common.h @@ -1,6 +1,6 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2010-2012 - Hans-Kristian Arntzen - * + * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- * ation, either version 3 of the License, or (at your option) any later version. diff --git a/gfx/sdl_gfx.c b/gfx/sdl_gfx.c index 56d07e3846..8c7844793f 100644 --- a/gfx/sdl_gfx.c +++ b/gfx/sdl_gfx.c @@ -301,7 +301,7 @@ static void *sdl_gfx_init(const video_info_t *video, const input_driver_t **inpu RARCH_SCALE_BASE * video->input_scale, 15, fmt->Rmask, fmt->Gmask, fmt->Bmask, fmt->Amask); } - RARCH_LOG("[Debug]: SDL Pixel format: Rshift = %u, Gshift = %u, Bshift = %u\n", + RARCH_LOG("[Debug]: SDL Pixel format: Rshift = %u, Gshift = %u, Bshift = %u\n", (unsigned)fmt->Rshift, (unsigned)fmt->Gshift, (unsigned)fmt->Bshift); if (!vid->buffer) @@ -491,7 +491,7 @@ static bool sdl_gfx_frame(void *data, const void *frame, unsigned width, unsigne // 32-bit -> 32-bit else vid->convert_32_func((uint32_t*)vid->buffer->pixels, vid->buffer->pitch, (const uint32_t*)frame, width, height, pitch, vid->screen->format); - + if (SDL_MUSTLOCK(vid->buffer)) SDL_UnlockSurface(vid->buffer); diff --git a/gfx/xvideo.c b/gfx/xvideo.c index 2abc230caf..14d03e2bf2 100644 --- a/gfx/xvideo.c +++ b/gfx/xvideo.c @@ -1,6 +1,6 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2010-2012 - Hans-Kristian Arntzen - * + * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- * ation, either version 3 of the License, or (at your option) any later version. @@ -109,7 +109,7 @@ static void init_yuv_tables(xv_t *xv) xv->utable = (uint8_t*)malloc(0x8000); xv->vtable = (uint8_t*)malloc(0x8000); - for (unsigned i = 0; i < 0x8000; i++) + for (unsigned i = 0; i < 0x8000; i++) { // Extract RGB555 color data from i unsigned r = (i >> 10) & 0x1F, g = (i >> 5) & 0x1F, b = (i) & 0x1F; @@ -212,14 +212,14 @@ static void xv_init_font(xv_t *xv, const char *font_path, unsigned font_size) } // We render @ 2x scale to combat chroma downsampling. Also makes fonts more bearable :) -static void render16_yuy2(xv_t *xv, const void *input_, unsigned width, unsigned height, unsigned pitch) +static void render16_yuy2(xv_t *xv, const void *input_, unsigned width, unsigned height, unsigned pitch) { const uint16_t *input = (const uint16_t*)input_; uint8_t *output = (uint8_t*)xv->image->data; - for (unsigned y = 0; y < height; y++) + for (unsigned y = 0; y < height; y++) { - for (unsigned x = 0; x < width; x++) + for (unsigned x = 0; x < width; x++) { uint16_t p = *input++; @@ -240,14 +240,14 @@ static void render16_yuy2(xv_t *xv, const void *input_, unsigned width, unsigned } } -static void render16_uyvy(xv_t *xv, const void *input_, unsigned width, unsigned height, unsigned pitch) +static void render16_uyvy(xv_t *xv, const void *input_, unsigned width, unsigned height, unsigned pitch) { const uint16_t *input = (const uint16_t*)input_; uint8_t *output = (uint8_t*)xv->image->data; - for (unsigned y = 0; y < height; y++) + for (unsigned y = 0; y < height; y++) { - for (unsigned x = 0; x < width; x++) + for (unsigned x = 0; x < width; x++) { uint16_t p = *input++; @@ -268,7 +268,7 @@ static void render16_uyvy(xv_t *xv, const void *input_, unsigned width, unsigned } } -static void render32_yuy2(xv_t *xv, const void *input_, unsigned width, unsigned height, unsigned pitch) +static void render32_yuy2(xv_t *xv, const void *input_, unsigned width, unsigned height, unsigned pitch) { const uint32_t *input = (const uint32_t*)input_; uint8_t *output = (uint8_t*)xv->image->data; @@ -297,12 +297,12 @@ static void render32_yuy2(xv_t *xv, const void *input_, unsigned width, unsigned } } -static void render32_uyvy(xv_t *xv, const void *input_, unsigned width, unsigned height, unsigned pitch) +static void render32_uyvy(xv_t *xv, const void *input_, unsigned width, unsigned height, unsigned pitch) { const uint32_t *input = (const uint32_t*)input_; uint16_t *output = (uint16_t*)xv->image->data; - for (unsigned y = 0; y < height; y++) + for (unsigned y = 0; y < height; y++) { for (unsigned x = 0; x < width; x++) { @@ -364,16 +364,16 @@ static bool adaptor_set_format(xv_t *xv, Display *dpy, XvPortID port, const vide if (!format) return false; - for (int i = 0; i < format_count; i++) + for (int i = 0; i < format_count; i++) { for (unsigned j = 0; j < sizeof(formats) / sizeof(formats[0]); j++) { - if (format[i].type == XvYUV && format[i].bits_per_pixel == 16 && format[i].format == XvPacked) + if (format[i].type == XvYUV && format[i].bits_per_pixel == 16 && format[i].format == XvPacked) { if (format[i].component_order[0] == formats[j].components[0] && format[i].component_order[1] == formats[j].components[1] && format[i].component_order[2] == formats[j].components[2] && - format[i].component_order[3] == formats[j].components[3]) + format[i].component_order[3] == formats[j].components[3]) { xv->fourcc = format[i].id; xv->render_func = video->rgb32 ? formats[j].render_32 : formats[j].render_16; @@ -426,7 +426,7 @@ static void *xv_init(const video_info_t *video, const input_driver_t **input, vo xv->port = 0; XvAdaptorInfo *adaptor_info; XvQueryAdaptors(xv->display, DefaultRootWindow(xv->display), &adaptor_count, &adaptor_info); - for (unsigned i = 0; i < adaptor_count; i++) + for (unsigned i = 0; i < adaptor_count; i++) { // Find adaptor that supports both input (memory->drawable) and image (drawable->screen) masks. if (adaptor_info[i].num_formats < 1) continue; @@ -443,7 +443,7 @@ static void *xv_init(const video_info_t *video, const input_driver_t **input, vo } XvFreeAdaptorInfo(adaptor_info); - if (xv->port == 0) + if (xv->port == 0) { RARCH_ERR("XVideo: Failed to find valid XvPort or format.\n"); goto error; @@ -454,7 +454,7 @@ static void *xv_init(const video_info_t *video, const input_driver_t **input, vo visualtemplate.depth = xv->depth; visualtemplate.visual = 0; visualinfo = XGetVisualInfo(xv->display, VisualIDMask | VisualScreenMask | VisualDepthMask, &visualtemplate, &visualmatches); - if (visualmatches < 1 || !visualinfo->visual) + if (visualmatches < 1 || !visualinfo->visual) { if (visualinfo) XFree(visualinfo); RARCH_ERR("XVideo: Unable to find Xv-compatible visual.\n"); @@ -495,7 +495,7 @@ static void *xv_init(const video_info_t *video, const input_driver_t **input, vo xv->height = geom->max_height; xv->image = XvShmCreateImage(xv->display, xv->port, xv->fourcc, NULL, xv->width, xv->height, &xv->shminfo); - if (!xv->image) + if (!xv->image) { RARCH_ERR("XVideo: XShmCreateImage failed.\n"); goto error; @@ -506,7 +506,7 @@ static void *xv_init(const video_info_t *video, const input_driver_t **input, vo xv->shminfo.shmid = shmget(IPC_PRIVATE, xv->image->data_size, IPC_CREAT | 0777); xv->shminfo.shmaddr = xv->image->data = (char*)shmat(xv->shminfo.shmid, NULL, 0); xv->shminfo.readOnly = false; - if (!XShmAttach(xv->display, &xv->shminfo)) + if (!XShmAttach(xv->display, &xv->shminfo)) { RARCH_ERR("XVideo: XShmAttach failed.\n"); goto error; @@ -579,7 +579,7 @@ static bool check_resize(xv_t *xv, unsigned width, unsigned height) xv->shminfo.shmaddr = xv->image->data = (char*)shmat(xv->shminfo.shmid, NULL, 0); xv->shminfo.readOnly = false; - + if (!XShmAttach(xv->display, &xv->shminfo)) { RARCH_ERR("Failed to reattch XvShm image.\n"); @@ -602,7 +602,7 @@ static void calc_out_rect(bool keep_aspect, unsigned *x, unsigned *y, unsigned * float desired_aspect = g_settings.video.aspect_ratio; float device_aspect = (float)vp_width / vp_height; - // If the aspect ratios of screen and desired aspect ratio are sufficiently equal (floating point stuff), + // If the aspect ratios of screen and desired aspect ratio are sufficiently equal (floating point stuff), // assume they are actually equal. if (fabs(device_aspect - desired_aspect) < 0.0001) { @@ -741,7 +741,7 @@ static bool xv_alive(void *data) XNextEvent(xv->display, &event); switch (event.type) { - case ClientMessage: + case ClientMessage: if ((Atom)event.xclient.data.l[0] == xv->quit_atom) return false; break; @@ -776,9 +776,9 @@ static void xv_free(void *data) shmctl(xv->shminfo.shmid, IPC_RMID, NULL); XFree(xv->image); - if (xv->window) + if (xv->window) XUnmapWindow(xv->display, xv->window); - if (xv->colormap) + if (xv->colormap) XFreeColormap(xv->display, xv->colormap); XCloseDisplay(xv->display); From de8c4b9a5fdff90a15999cabab0d541ea373344f Mon Sep 17 00:00:00 2001 From: Saggi Mizrahi Date: Wed, 25 Jul 2012 00:52:57 -0400 Subject: [PATCH 02/19] (Linux) Suspend screen saver when using SDL or XVIDEO This doesn't add support for the opengl backend because I'm too tired to figure out the context mess. Signed-off-by: Saggi Mizrahi --- gfx/gfx_common.c | 37 +++++++++++++++++++++++++++++++++++++ gfx/gfx_common.h | 5 +++++ gfx/sdl_gfx.c | 26 ++++++++++++++++++++++++++ gfx/xvideo.c | 2 ++ 4 files changed, 70 insertions(+) diff --git a/gfx/gfx_common.c b/gfx/gfx_common.c index 9b1eeb372a..8ef5e829e1 100644 --- a/gfx/gfx_common.c +++ b/gfx/gfx_common.c @@ -33,6 +33,12 @@ #endif #endif +#if IS_LINUX +#include +#include +#include +#endif + #if defined(__CELLOS_LV2__) && !defined(__PSL1GHT__) || defined(_MSC_VER) static int gettimeofday(struct timeval *val, void *dummy) { @@ -107,6 +113,37 @@ bool gfx_window_title(char *buf, size_t size) return ret; } +#ifdef IS_LINUX +void suspend_screensaver(Window wnd) { + char wid[20]; + snprintf(wid, 20, "%d", (int) wnd); + wid[19] = '\0'; + char* args[4]; + args[0] = "xdg-screensaver"; + args[1] = "suspend"; + args[2] = wid; + args[3] = NULL; + + int cpid = fork(); + if (cpid < 0) { + RARCH_WARN("Could not suspend screen saver: %s\n", strerror(errno)); + return; + } + + if (!cpid) { + execvp(args[0], args); + exit(errno); + } + + int err = 0; + waitpid(cpid, &err, 0); + if (err) { + RARCH_WARN("Could not suspend screen saver: %s\n", strerror(err)); + } +} +#endif + + #if defined(_WIN32) && !defined(_XBOX) #include #include "../dynamic.h" diff --git a/gfx/gfx_common.h b/gfx/gfx_common.h index 3d65cfe36d..5d2c2040f8 100644 --- a/gfx/gfx_common.h +++ b/gfx/gfx_common.h @@ -22,6 +22,11 @@ bool gfx_window_title(char *buf, size_t size); void gfx_window_title_reset(void); +#ifdef IS_LINUX +#include +void suspend_screensaver(Window wnd); +#endif + #ifdef _WIN32 void gfx_set_dwm(void); #endif diff --git a/gfx/sdl_gfx.c b/gfx/sdl_gfx.c index 8c7844793f..a7916f2329 100644 --- a/gfx/sdl_gfx.c +++ b/gfx/sdl_gfx.c @@ -21,6 +21,10 @@ #include "../input/rarch_sdl_input.h" #include "gfx_common.h" +#ifdef IS_LINUX +#include "SDL_syswm.h" +#endif + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -243,6 +247,21 @@ static void sdl_render_msg_32(sdl_video_t *vid, SDL_Surface *buffer, const char #endif } +#ifdef IS_LINUX +static Window sdl_get_window_id() { + SDL_SysWMinfo sys_info; + SDL_VERSION(&sys_info.version); + + if(SDL_GetWMInfo(&sys_info) <= 0) { + RARCH_WARN("%s", SDL_GetError()); + return -1; + } + + Window wid = sys_info.info.x11.window; + return wid; +} +#endif + static void *sdl_gfx_init(const video_info_t *video, const input_driver_t **input, void **input_data) { #ifdef _WIN32 @@ -270,6 +289,13 @@ static void *sdl_gfx_init(const video_info_t *video, const input_driver_t **inpu vid->render32 = video->rgb32 && !g_settings.video.force_16bit; vid->screen = SDL_SetVideoMode(video->width, video->height, vid->render32 ? 32 : 15, SDL_HWSURFACE | SDL_HWACCEL | SDL_DOUBLEBUF | (video->fullscreen ? SDL_FULLSCREEN : 0)); +#ifdef IS_LINUX + int wid = sdl_get_window_id(); + if (wid > 0) { + suspend_screensaver(wid); + } +#endif + if (!vid->screen && !g_settings.video.force_16bit && !video->rgb32) { vid->upsample = true; diff --git a/gfx/xvideo.c b/gfx/xvideo.c index 14d03e2bf2..8241b5473c 100644 --- a/gfx/xvideo.c +++ b/gfx/xvideo.c @@ -527,6 +527,8 @@ static void *xv_init(const video_info_t *video, const input_driver_t **input, vo xv_set_nonblock_state(xv, !video->vsync); xv->focus = true; + suspend_screensaver(xv->window); + xinput = input_x.init(); if (xinput) { From d1d10eefdff1ba662590fffcaab99d2dda6884ac Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 25 Jul 2012 14:11:00 +0200 Subject: [PATCH 03/19] (360) Get rid of ifdefs in 360-specific input driver --- 360/xinput_360_input.c | 8 -------- 360/xinput_360_input.h | 2 -- 2 files changed, 10 deletions(-) diff --git a/360/xinput_360_input.c b/360/xinput_360_input.c index 2d6515375c..0345e6c5c6 100644 --- a/360/xinput_360_input.c +++ b/360/xinput_360_input.c @@ -17,9 +17,7 @@ #include #include -#ifdef _XBOX #include -#endif #include "../driver.h" #include "../general.h" @@ -73,7 +71,6 @@ static void xinput_input_free_input(void *data) (void)data; } -#ifdef _XBOX360 #include "../console/retroarch_console.h" void xdk360_input_map_dpad_to_stick(uint32_t map_dpad_enum, uint32_t controller_id) @@ -100,14 +97,11 @@ void xdk360_input_map_dpad_to_stick(uint32_t map_dpad_enum, uint32_t controller_ break; } } -#endif static void* xinput_input_init(void) { -#ifdef _XBOX360 for(unsigned i = 0; i < 4; i++) xdk360_input_map_dpad_to_stick(g_settings.input.dpad_emulation[i], i); -#endif return (void*)-1; } @@ -116,7 +110,6 @@ static bool xinput_input_key_pressed(void *data, int key) { (void)data; bool retval = false; -#ifdef _XBOX360 XINPUT_STATE state; xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; @@ -163,7 +156,6 @@ static bool xinput_input_key_pressed(void *data, int key) retval = g_console.ingame_menu_enable ? g_console.ingame_menu_enable : g_console.menu_enable; } } -#endif return retval; } diff --git a/360/xinput_360_input.h b/360/xinput_360_input.h index 53efa72f74..229aafb025 100644 --- a/360/xinput_360_input.h +++ b/360/xinput_360_input.h @@ -32,8 +32,6 @@ enum { #define DEADZONE (16000) -#ifdef _XBOX extern void xdk360_input_map_dpad_to_stick(uint32_t map_dpad_enum, uint32_t controller_id); -#endif #endif From 3c1a55dce4826f31cf587052bf2c6c524fd04336 Mon Sep 17 00:00:00 2001 From: freakdave Date: Wed, 25 Jul 2012 14:23:59 +0200 Subject: [PATCH 04/19] (Xbox 1) Fixed rom list/text position in 720p (Xbox 1) Fixed 720p background image problem (loads native 720p image now) --- xbox1/Media/menuMainBG_720p.png | Bin 0 -> 20341 bytes xbox1/frontend/RetroLaunch/MenuMain.cpp | 35 +++++++++++++++++++----- xbox1/frontend/RetroLaunch/MenuMain.h | 4 +++ xbox1/frontend/menu.cpp | 2 +- 4 files changed, 33 insertions(+), 8 deletions(-) create mode 100644 xbox1/Media/menuMainBG_720p.png diff --git a/xbox1/Media/menuMainBG_720p.png b/xbox1/Media/menuMainBG_720p.png new file mode 100644 index 0000000000000000000000000000000000000000..2bd9482cc13556020cdbdeff58ea4eb8e4f4ebe5 GIT binary patch literal 20341 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 literal 0 HcmV?d00001 diff --git a/xbox1/frontend/RetroLaunch/MenuMain.cpp b/xbox1/frontend/RetroLaunch/MenuMain.cpp index 942a491400..eed2cad4f9 100644 --- a/xbox1/frontend/RetroLaunch/MenuMain.cpp +++ b/xbox1/frontend/RetroLaunch/MenuMain.cpp @@ -36,21 +36,38 @@ bool CMenuMain::Create() { RARCH_LOG("CMenuMain::Create()."); + xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; + + width = d3d->d3dpp.BackBufferWidth; + //height = d3d->d3dpp.BackBufferHeight; + // Title coords with color m_menuMainTitle_x = 305; m_menuMainTitle_y = 30; m_menuMainTitle_c = 0xFFFFFFFF; - // Load background image - m_menuMainBG.Create("D:\\Media\\menuMainBG.png"); m_menuMainBG_x = 0; m_menuMainBG_y = 0; - m_menuMainBG_w = 640; - m_menuMainBG_h = 480; + //m_menuMainBG_w = width; + //m_menuMainBG_h = height; + // Quick hack to properly center the romlist in 720p, + // it might need more work though (font size and rom selector size -> needs more memory) // Init rom list coords - m_menuMainRomListPos_x = 100; - m_menuMainRomListPos_y = 100; + // Load background image + if(width == 640) + { + m_menuMainBG.Create("D:\\Media\\menuMainBG.png"); + m_menuMainRomListPos_x = 100; + m_menuMainRomListPos_y = 100; + } + else if(width == 1280) + { + m_menuMainBG.Create("D:\\Media\\menuMainBG_720p.png"); + m_menuMainRomListPos_x = 400; + m_menuMainRomListPos_y = 150; + } + m_menuMainRomListSpacing = 20; // Load rom selector panel @@ -93,7 +110,11 @@ void CMenuMain::Render() m_menuMainBG.Render(m_menuMainBG_x, m_menuMainBG_y); //Display some text - g_font.Render("Press RSTICK THUMB to exit. Press START and/or A to launch a rom.", 65, 430, 16, XFONT_NORMAL, m_menuMainTitle_c); + //Center the text (hardcoded) + int xpos = width == 640 ? 65 : 400; + int ypos = width == 640 ? 430 : 670; + + g_font.Render("Press RSTICK THUMB to exit. Press START and/or A to launch a rom.", xpos, ypos, 16, XFONT_NORMAL, m_menuMainTitle_c); //Begin with the rom selector panel //FIXME: Width/Height needs to be current Rom texture width/height (or should we just leave it at a fixed size?) diff --git a/xbox1/frontend/RetroLaunch/MenuMain.h b/xbox1/frontend/RetroLaunch/MenuMain.h index d131da2f2e..22c16ebfcc 100644 --- a/xbox1/frontend/RetroLaunch/MenuMain.h +++ b/xbox1/frontend/RetroLaunch/MenuMain.h @@ -73,6 +73,10 @@ int m_romListEndRender; int m_romListSelectedRom; int m_romListOffset; +// Backbuffer width, height +int width; +int height; + }; extern CMenuMain g_menuMain; diff --git a/xbox1/frontend/menu.cpp b/xbox1/frontend/menu.cpp index 20ec4efba5..d16015ae30 100644 --- a/xbox1/frontend/menu.cpp +++ b/xbox1/frontend/menu.cpp @@ -64,7 +64,7 @@ void menu_loop(void) 1.0f, 0); d3d->d3d_render_device->BeginScene(); - d3d->d3d_render_device->SetFlickerFilter(5); + d3d->d3d_render_device->SetFlickerFilter(1); d3d->d3d_render_device->SetSoftDisplayFilter(1); //g_input.GetInput(); From 86067e3aeb5f4871af4c693e3efb4599190b2f79 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Wed, 25 Jul 2012 19:03:01 +0200 Subject: [PATCH 05/19] (RARCH_CONSOLE) Split up rzlib helper functions into separate file --- console/griffin/griffin.c | 5 ++ console/retroarch_console.c | 131 -------------------------------- console/retroarch_console.h | 4 - console/retroarch_rzlib.c | 145 ++++++++++++++++++++++++++++++++++++ console/retroarch_rzlib.h | 26 +++++++ ps3/frontend/menu.c | 4 + 6 files changed, 180 insertions(+), 135 deletions(-) create mode 100644 console/retroarch_rzlib.c create mode 100644 console/retroarch_rzlib.h diff --git a/console/griffin/griffin.c b/console/griffin/griffin.c index ecfd7be085..ce0e65a102 100644 --- a/console/griffin/griffin.c +++ b/console/griffin/griffin.c @@ -22,6 +22,11 @@ CONSOLE EXTENSIONS ============================================================ */ #include "../retroarch_console.c" + +#ifdef HAVE_ZLIB +#include "../retroarch_rzlib.c" +#endif + #include "../console_settings.c" #ifdef HAVE_LIBRETRO_MANAGEMENT diff --git a/console/retroarch_console.c b/console/retroarch_console.c index e6b455dcf7..8417e2d917 100644 --- a/console/retroarch_console.c +++ b/console/retroarch_console.c @@ -32,11 +32,6 @@ #include "../conf/config_file_macros.h" #endif -#ifdef HAVE_ZLIB -#include "rzlib/zlib.h" -#define WRITEBUFFERSIZE (1024 * 512) -#endif - #ifdef _WIN32 #include "../compat/posix_string.h" #endif @@ -105,132 +100,6 @@ void rarch_console_name_from_id(char *name, size_t size) } } -#ifdef HAVE_ZLIB -static int rarch_extract_currentfile_in_zip(unzFile uf) -{ - char filename_inzip[PATH_MAX]; - FILE *fout = NULL; - - unz_file_info file_info; - int err = unzGetCurrentFileInfo(uf, - &file_info, filename_inzip, sizeof(filename_inzip), - NULL, 0, NULL, 0); - - if (err != UNZ_OK) - { - RARCH_ERR("Error %d while trying to get ZIP file information.\n", err); - return err; - } - - size_t size_buf = WRITEBUFFERSIZE; - void *buf = malloc(size_buf); - if (!buf) - { - RARCH_ERR("Error allocating memory for ZIP extract operation.\n"); - return UNZ_INTERNALERROR; - } - - char write_filename[PATH_MAX]; - -#ifdef HAVE_HDD_CACHE_PARTITION - -#if defined(__CELLOS_LV2__) - snprintf(write_filename, sizeof(write_filename), "/dev_hdd1/%s", filename_inzip); -#elif defined(_XBOX) - snprintf(write_filename, sizeof(write_filename), "cache:\\%s", filename_inzip); -#endif - -#endif - - err = unzOpenCurrentFile(uf); - if (err != UNZ_OK) - RARCH_ERR("Error %d while trying to open ZIP file.\n", err); - else - { - /* success */ - fout = fopen(write_filename, "wb"); - - if (!fout) - RARCH_ERR("Error opening %s.\n", write_filename); - } - - if (fout) - { - RARCH_LOG("Extracting: %s..\n", write_filename); - - do - { - err = unzReadCurrentFile(uf, buf, size_buf); - if (err < 0) - { - RARCH_ERR("Error %d while reading from ZIP file.\n", err); - break; - } - - if (err > 0) - { - if (fwrite(buf, err, 1, fout) != 1) - { - RARCH_ERR("Error while extracting file(s) from ZIP.\n"); - err = UNZ_ERRNO; - break; - } - } - } while (err > 0); - - if (fout) - fclose(fout); - } - - if (err == UNZ_OK) - { - err = unzCloseCurrentFile (uf); - if (err != UNZ_OK) - RARCH_ERR("Error %d while trying to close ZIP file.\n", err); - } - else - unzCloseCurrentFile(uf); - - free(buf); - return err; -} - -int rarch_extract_zipfile(const char *zip_path) -{ - unzFile uf = unzOpen(zip_path); - - unz_global_info gi; - int err = unzGetGlobalInfo(uf, &gi); - if (err != UNZ_OK) - RARCH_ERR("Error %d while trying to get ZIP file global info.\n",err); - - for (unsigned i = 0; i < gi.number_entry; i++) - { - if (rarch_extract_currentfile_in_zip(uf) != UNZ_OK) - break; - - if ((i + 1) < gi.number_entry) - { - err = unzGoToNextFile(uf); - if (err != UNZ_OK) - { - RARCH_ERR("Error %d while trying to go to the next file in the ZIP archive.\n",err); - break; - } - } - } - -#ifdef HAVE_HDD_CACHE_PARTITION - if(g_console.info_msg_enable) - rarch_settings_msg(S_MSG_EXTRACTED_ZIPFILE, S_DELAY_180); -#endif - - return 0; -} - -#endif - - /*============================================================ INPUT EXTENSIONS ============================================================ */ diff --git a/console/retroarch_console.h b/console/retroarch_console.h index cb8184cbda..3de981fd1f 100644 --- a/console/retroarch_console.h +++ b/console/retroarch_console.h @@ -170,10 +170,6 @@ const char *rarch_console_get_rom_ext(void); // Transforms a library id to a name suitable as a pathname. void rarch_console_name_from_id(char *name, size_t size); -#ifdef HAVE_ZLIB -int rarch_extract_zipfile(const char *zip_path); -#endif - /*============================================================ INPUT EXTENSIONS ============================================================ */ diff --git a/console/retroarch_rzlib.c b/console/retroarch_rzlib.c new file mode 100644 index 0000000000..97b9facb26 --- /dev/null +++ b/console/retroarch_rzlib.c @@ -0,0 +1,145 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2012 - Hans-Kristian Arntzen + * Copyright (C) 2011-2012 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include +#include +#include +#include "../boolean.h" + +#include "retroarch_rzlib.h" + +static int rarch_extract_currentfile_in_zip(unzFile uf) +{ + char filename_inzip[PATH_MAX]; + FILE *file_out = NULL; + + unz_file_info file_info; + int err = unzGetCurrentFileInfo(uf, + &file_info, filename_inzip, sizeof(filename_inzip), + NULL, 0, NULL, 0); + + if (err != UNZ_OK) + { + RARCH_ERR("Error %d while trying to get ZIP file information.\n", err); + return err; + } + + size_t size_buf = WRITEBUFFERSIZE; + void *buf = malloc(size_buf); + if (!buf) + { + RARCH_ERR("Error allocating memory for ZIP extract operation.\n"); + return UNZ_INTERNALERROR; + } + + char write_filename[PATH_MAX]; + +#ifdef HAVE_HDD_CACHE_PARTITION + +#if defined(__CELLOS_LV2__) + snprintf(write_filename, sizeof(write_filename), "/dev_hdd1/%s", filename_inzip); +#elif defined(_XBOX) + snprintf(write_filename, sizeof(write_filename), "cache:\\%s", filename_inzip); +#endif + +#endif + + err = unzOpenCurrentFile(uf); + if (err != UNZ_OK) + RARCH_ERR("Error %d while trying to open ZIP file.\n", err); + else + { + /* success */ + file_out = fopen(write_filename, "wb"); + + if (!file_out) + RARCH_ERR("Error opening %s.\n", write_filename); + } + + if (file_out) + { + RARCH_LOG("Extracting: %s..\n", write_filename); + + do + { + err = unzReadCurrentFile(uf, buf, size_buf); + if (err < 0) + { + RARCH_ERR("Error %d while reading from ZIP file.\n", err); + break; + } + + if (err > 0) + { + if (fwrite(buf, err, 1, file_out) != 1) + { + RARCH_ERR("Error while extracting file(s) from ZIP.\n"); + err = UNZ_ERRNO; + break; + } + } + }while (err > 0); + + if (file_out) + fclose(file_out); + } + + if (err == UNZ_OK) + { + err = unzCloseCurrentFile (uf); + if (err != UNZ_OK) + RARCH_ERR("Error %d while trying to close ZIP file.\n", err); + } + else + unzCloseCurrentFile(uf); + + free(buf); + return err; +} + +int rarch_extract_zipfile(const char *zip_path) +{ + unzFile uf = unzOpen(zip_path); + + unz_global_info gi; + int err = unzGetGlobalInfo(uf, &gi); + if (err != UNZ_OK) + RARCH_ERR("Error %d while trying to get ZIP file global info.\n",err); + + for (unsigned i = 0; i < gi.number_entry; i++) + { + if (rarch_extract_currentfile_in_zip(uf) != UNZ_OK) + break; + + if ((i + 1) < gi.number_entry) + { + err = unzGoToNextFile(uf); + if (err != UNZ_OK) + { + RARCH_ERR("Error %d while trying to go to the next file in the ZIP archive.\n",err); + break; + } + } + } + +#ifdef HAVE_HDD_CACHE_PARTITION + if(g_console.info_msg_enable) + rarch_settings_msg(S_MSG_EXTRACTED_ZIPFILE, S_DELAY_180); +#endif + + return 0; +} diff --git a/console/retroarch_rzlib.h b/console/retroarch_rzlib.h new file mode 100644 index 0000000000..440384d10a --- /dev/null +++ b/console/retroarch_rzlib.h @@ -0,0 +1,26 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2012 - Hans-Kristian Arntzen + * Copyright (C) 2011-2012 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#ifndef _RARCH_CONSOLE_RZLIB_H +#define _RARCH_CONSOLE_RZLIB_H + +#include "rzlib/zlib.h" + +#define WRITEBUFFERSIZE (1024 * 512) + +int rarch_extract_zipfile(const char *zip_path); + +#endif diff --git a/ps3/frontend/menu.c b/ps3/frontend/menu.c index 004a13fa79..bc0e559c41 100644 --- a/ps3/frontend/menu.c +++ b/ps3/frontend/menu.c @@ -28,6 +28,10 @@ #include "../../console/retroarch_console.h" +#ifdef HAVE_ZLIB +#include "../../console/retroarch_rzlib.h" +#endif + #include "../../gfx/gl_common.h" #include "../../gfx/gl_font.h" #include "../../gfx/gfx_context.h" From 4ed249fe182064d1e9301652a1ec9697830e463e Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Wed, 25 Jul 2012 19:35:21 +0200 Subject: [PATCH 06/19] (RARCH_CONSOLE) Split up input code into retroarch_console_input.c - beter segregation of input code --- 360/xinput_360_input.c | 37 ++++ console/griffin/griffin.c | 1 + console/retroarch_console.c | 340 ------------------------------ console/retroarch_console.h | 21 -- console/retroarch_console_input.c | 222 +++++++++++++++++++ console/retroarch_console_input.h | 16 ++ ps3/ps3_input.c | 37 ++++ wii/input.c | 34 +++ xbox1/xinput_xbox_input.c | 37 ++++ 9 files changed, 384 insertions(+), 361 deletions(-) create mode 100644 console/retroarch_console_input.c diff --git a/360/xinput_360_input.c b/360/xinput_360_input.c index 0345e6c5c6..71da9458e2 100644 --- a/360/xinput_360_input.c +++ b/360/xinput_360_input.c @@ -27,6 +27,43 @@ static uint64_t state[4]; static unsigned pads_connected; +const struct platform_bind platform_keys[] = { + { XINPUT_GAMEPAD_B, "B button" }, + { XINPUT_GAMEPAD_A, "A button" }, + { XINPUT_GAMEPAD_Y, "Y button" }, + { XINPUT_GAMEPAD_X, "X button" }, + { XINPUT_GAMEPAD_DPAD_UP, "D-Pad Up" }, + { XINPUT_GAMEPAD_DPAD_DOWN, "D-Pad Down" }, + { XINPUT_GAMEPAD_DPAD_LEFT, "D-Pad Left" }, + { XINPUT_GAMEPAD_DPAD_RIGHT, "D-Pad Right" }, + { XINPUT_GAMEPAD_BACK, "Back button" }, + { XINPUT_GAMEPAD_START, "Start button" }, + { XINPUT_GAMEPAD_LEFT_SHOULDER, "Left Shoulder" }, + { XINPUT_GAMEPAD_LEFT_TRIGGER, "Left Trigger" }, + { XINPUT_GAMEPAD_LEFT_THUMB, "Left Thumb" }, + { XINPUT_GAMEPAD_RIGHT_SHOULDER, "Right Shoulder" }, + { XINPUT_GAMEPAD_RIGHT_TRIGGER, "Right Trigger" }, + { XINPUT_GAMEPAD_RIGHT_THUMB, "Right Thumb" }, + { XINPUT_GAMEPAD_LSTICK_LEFT_MASK, "LStick Left" }, + { XINPUT_GAMEPAD_LSTICK_RIGHT_MASK, "LStick Right" }, + { XINPUT_GAMEPAD_LSTICK_UP_MASK, "LStick Up" }, + { XINPUT_GAMEPAD_LSTICK_DOWN_MASK, "LStick Down" }, + { XINPUT_GAMEPAD_DPAD_LEFT | XINPUT_GAMEPAD_LSTICK_LEFT_MASK, "LStick D-Pad Left" }, + { XINPUT_GAMEPAD_DPAD_RIGHT | XINPUT_GAMEPAD_LSTICK_RIGHT_MASK, "LStick D-Pad Right" }, + { XINPUT_GAMEPAD_DPAD_UP | XINPUT_GAMEPAD_LSTICK_UP_MASK, "LStick D-Pad Up" }, + { XINPUT_GAMEPAD_DPAD_DOWN | XINPUT_GAMEPAD_LSTICK_DOWN_MASK, "LStick D-Pad Down" }, + { XINPUT_GAMEPAD_RSTICK_LEFT_MASK, "RStick Left" }, + { XINPUT_GAMEPAD_RSTICK_RIGHT_MASK, "RStick Right" }, + { XINPUT_GAMEPAD_RSTICK_UP_MASK, "RStick Up" }, + { XINPUT_GAMEPAD_RSTICK_DOWN_MASK, "RStick Down" }, + { XINPUT_GAMEPAD_DPAD_LEFT | XINPUT_GAMEPAD_RSTICK_LEFT_MASK, "RStick D-Pad Left" }, + { XINPUT_GAMEPAD_DPAD_RIGHT | XINPUT_GAMEPAD_RSTICK_RIGHT_MASK, "RStick D-Pad Right" }, + { XINPUT_GAMEPAD_DPAD_UP | XINPUT_GAMEPAD_RSTICK_UP_MASK, "RStick D-Pad Up" }, + { XINPUT_GAMEPAD_DPAD_DOWN | XINPUT_GAMEPAD_RSTICK_DOWN_MASK, "RStick D-Pad Down" }, +}; + +const unsigned int platform_keys_size = sizeof(platform_keys); + static void xinput_input_poll(void *data) { (void)data; diff --git a/console/griffin/griffin.c b/console/griffin/griffin.c index ce0e65a102..0b5c308209 100644 --- a/console/griffin/griffin.c +++ b/console/griffin/griffin.c @@ -22,6 +22,7 @@ CONSOLE EXTENSIONS ============================================================ */ #include "../retroarch_console.c" +#include "../retroarch_console_input.c" #ifdef HAVE_ZLIB #include "../retroarch_rzlib.c" diff --git a/console/retroarch_console.c b/console/retroarch_console.c index 8417e2d917..ff51d33af2 100644 --- a/console/retroarch_console.c +++ b/console/retroarch_console.c @@ -100,346 +100,6 @@ void rarch_console_name_from_id(char *name, size_t size) } } -/*============================================================ - INPUT EXTENSIONS -============================================================ */ - -#include "retroarch_console_input.h" - -struct platform_bind -{ - uint64_t joykey; - const char *label; -}; - -uint64_t rarch_default_keybind_lut[RARCH_FIRST_META_KEY]; - -char rarch_default_libretro_keybind_name_lut[RARCH_FIRST_META_KEY][256] = { - "RetroPad Button B", /* RETRO_DEVICE_ID_JOYPAD_B */ - "RetroPad Button Y", /* RETRO_DEVICE_ID_JOYPAD_Y */ - "RetroPad Button Select", /* RETRO_DEVICE_ID_JOYPAD_SELECT */ - "RetroPad Button Start", /* RETRO_DEVICE_ID_JOYPAD_START */ - "RetroPad D-Pad Up", /* RETRO_DEVICE_ID_JOYPAD_UP */ - "RetroPad D-Pad Down", /* RETRO_DEVICE_ID_JOYPAD_DOWN */ - "RetroPad D-Pad Left", /* RETRO_DEVICE_ID_JOYPAD_LEFT */ - "RetroPad D-Pad Right", /* RETRO_DEVICE_ID_JOYPAD_RIGHT */ - "RetroPad Button A", /* RETRO_DEVICE_ID_JOYPAD_A */ - "RetroPad Button X", /* RETRO_DEVICE_ID_JOYPAD_X */ - "RetroPad Button L1", /* RETRO_DEVICE_ID_JOYPAD_L */ - "RetroPad Button R1", /* RETRO_DEVICE_ID_JOYPAD_R */ - "RetroPad Button L2", /* RETRO_DEVICE_ID_JOYPAD_L2 */ - "RetroPad Button R2", /* RETRO_DEVICE_ID_JOYPAD_R2 */ - "RetroPad Button L3", /* RETRO_DEVICE_ID_JOYPAD_L3 */ - "RetroPad Button R3", /* RETRO_DEVICE_ID_JOYPAD_R3 */ -}; - -#if defined(__CELLOS_LV2__) -static const struct platform_bind platform_keys[] = { - { CTRL_CIRCLE_MASK, "Circle button" }, - { CTRL_CROSS_MASK, "Cross button" }, - { CTRL_TRIANGLE_MASK, "Triangle button" }, - { CTRL_SQUARE_MASK, "Square button" }, - { CTRL_UP_MASK, "D-Pad Up" }, - { CTRL_DOWN_MASK, "D-Pad Down" }, - { CTRL_LEFT_MASK, "D-Pad Left" }, - { CTRL_RIGHT_MASK, "D-Pad Right" }, - { CTRL_SELECT_MASK, "Select button" }, - { CTRL_START_MASK, "Start button" }, - { CTRL_L1_MASK, "L1 button" }, - { CTRL_L2_MASK, "L2 button" }, - { CTRL_L3_MASK, "L3 button" }, - { CTRL_R1_MASK, "R1 button" }, - { CTRL_R2_MASK, "R2 button" }, - { CTRL_R3_MASK, "R3 button" }, - { CTRL_LSTICK_LEFT_MASK, "LStick Left" }, - { CTRL_LSTICK_RIGHT_MASK, "LStick Right" }, - { CTRL_LSTICK_UP_MASK, "LStick Up" }, - { CTRL_LSTICK_DOWN_MASK, "LStick Down" }, - { CTRL_LEFT_MASK | CTRL_LSTICK_LEFT_MASK, "LStick D-Pad Left" }, - { CTRL_RIGHT_MASK | CTRL_LSTICK_RIGHT_MASK, "LStick D-Pad Right" }, - { CTRL_UP_MASK | CTRL_LSTICK_UP_MASK, "LStick D-Pad Up" }, - { CTRL_DOWN_MASK | CTRL_LSTICK_DOWN_MASK, "LStick D-Pad Down" }, - { CTRL_RSTICK_LEFT_MASK, "RStick Left" }, - { CTRL_RSTICK_RIGHT_MASK, "RStick Right" }, - { CTRL_RSTICK_UP_MASK, "RStick Up" }, - { CTRL_RSTICK_DOWN_MASK, "RStick Down" }, - { CTRL_LEFT_MASK | CTRL_RSTICK_LEFT_MASK, "RStick D-Pad Left" }, - { CTRL_RIGHT_MASK | CTRL_RSTICK_RIGHT_MASK, "RStick D-Pad Right" }, - { CTRL_UP_MASK | CTRL_RSTICK_UP_MASK, "RStick D-Pad Up" }, - { CTRL_DOWN_MASK | CTRL_RSTICK_DOWN_MASK, "RStick D-Pad Down" }, -}; -#elif defined(_XBOX360) -static const struct platform_bind platform_keys[] = { - { XINPUT_GAMEPAD_B, "B button" }, - { XINPUT_GAMEPAD_A, "A button" }, - { XINPUT_GAMEPAD_Y, "Y button" }, - { XINPUT_GAMEPAD_X, "X button" }, - { XINPUT_GAMEPAD_DPAD_UP, "D-Pad Up" }, - { XINPUT_GAMEPAD_DPAD_DOWN, "D-Pad Down" }, - { XINPUT_GAMEPAD_DPAD_LEFT, "D-Pad Left" }, - { XINPUT_GAMEPAD_DPAD_RIGHT, "D-Pad Right" }, - { XINPUT_GAMEPAD_BACK, "Back button" }, - { XINPUT_GAMEPAD_START, "Start button" }, - { XINPUT_GAMEPAD_LEFT_SHOULDER, "Left Shoulder" }, - { XINPUT_GAMEPAD_LEFT_TRIGGER, "Left Trigger" }, - { XINPUT_GAMEPAD_LEFT_THUMB, "Left Thumb" }, - { XINPUT_GAMEPAD_RIGHT_SHOULDER, "Right Shoulder" }, - { XINPUT_GAMEPAD_RIGHT_TRIGGER, "Right Trigger" }, - { XINPUT_GAMEPAD_RIGHT_THUMB, "Right Thumb" }, - { XINPUT_GAMEPAD_LSTICK_LEFT_MASK, "LStick Left" }, - { XINPUT_GAMEPAD_LSTICK_RIGHT_MASK, "LStick Right" }, - { XINPUT_GAMEPAD_LSTICK_UP_MASK, "LStick Up" }, - { XINPUT_GAMEPAD_LSTICK_DOWN_MASK, "LStick Down" }, - { XINPUT_GAMEPAD_DPAD_LEFT | XINPUT_GAMEPAD_LSTICK_LEFT_MASK, "LStick D-Pad Left" }, - { XINPUT_GAMEPAD_DPAD_RIGHT | XINPUT_GAMEPAD_LSTICK_RIGHT_MASK, "LStick D-Pad Right" }, - { XINPUT_GAMEPAD_DPAD_UP | XINPUT_GAMEPAD_LSTICK_UP_MASK, "LStick D-Pad Up" }, - { XINPUT_GAMEPAD_DPAD_DOWN | XINPUT_GAMEPAD_LSTICK_DOWN_MASK, "LStick D-Pad Down" }, - { XINPUT_GAMEPAD_RSTICK_LEFT_MASK, "RStick Left" }, - { XINPUT_GAMEPAD_RSTICK_RIGHT_MASK, "RStick Right" }, - { XINPUT_GAMEPAD_RSTICK_UP_MASK, "RStick Up" }, - { XINPUT_GAMEPAD_RSTICK_DOWN_MASK, "RStick Down" }, - { XINPUT_GAMEPAD_DPAD_LEFT | XINPUT_GAMEPAD_RSTICK_LEFT_MASK, "RStick D-Pad Left" }, - { XINPUT_GAMEPAD_DPAD_RIGHT | XINPUT_GAMEPAD_RSTICK_RIGHT_MASK, "RStick D-Pad Right" }, - { XINPUT_GAMEPAD_DPAD_UP | XINPUT_GAMEPAD_RSTICK_UP_MASK, "RStick D-Pad Up" }, - { XINPUT_GAMEPAD_DPAD_DOWN | XINPUT_GAMEPAD_RSTICK_DOWN_MASK, "RStick D-Pad Down" }, -}; -#elif defined(_XBOX1) -static const struct platform_bind platform_keys[] = { - { XINPUT1_GAMEPAD_B, "B button" }, - { XINPUT1_GAMEPAD_A, "A button" }, - { XINPUT1_GAMEPAD_Y, "Y button" }, - { XINPUT1_GAMEPAD_X, "X button" }, - { XINPUT1_GAMEPAD_DPAD_UP, "D-Pad Up" }, - { XINPUT1_GAMEPAD_DPAD_DOWN, "D-Pad Down" }, - { XINPUT1_GAMEPAD_DPAD_LEFT, "D-Pad Left" }, - { XINPUT1_GAMEPAD_DPAD_RIGHT, "D-Pad Right" }, - { XINPUT1_GAMEPAD_BACK, "Back button" }, - { XINPUT1_GAMEPAD_START, "Start button" }, - { XINPUT1_GAMEPAD_WHITE, "White button" }, - { XINPUT1_GAMEPAD_LEFT_TRIGGER, "Left Trigger" }, - { XINPUT1_GAMEPAD_LEFT_THUMB, "Left Thumb" }, - { XINPUT1_GAMEPAD_BLACK, "Black button" }, - { XINPUT1_GAMEPAD_RIGHT_TRIGGER, "Right Trigger" }, - { XINPUT1_GAMEPAD_RIGHT_THUMB, "Right Thumb" }, - { XINPUT1_GAMEPAD_LSTICK_LEFT_MASK, "LStick Left" }, - { XINPUT1_GAMEPAD_LSTICK_RIGHT_MASK, "LStick Right" }, - { XINPUT1_GAMEPAD_LSTICK_UP_MASK, "LStick Up" }, - { XINPUT1_GAMEPAD_LSTICK_DOWN_MASK, "LStick Down" }, - { XINPUT1_GAMEPAD_DPAD_LEFT | XINPUT1_GAMEPAD_LSTICK_LEFT_MASK, "LStick D-Pad Left" }, - { XINPUT1_GAMEPAD_DPAD_RIGHT | XINPUT1_GAMEPAD_LSTICK_RIGHT_MASK, "LStick D-Pad Right" }, - { XINPUT1_GAMEPAD_DPAD_UP | XINPUT1_GAMEPAD_LSTICK_UP_MASK, "LStick D-Pad Up" }, - { XINPUT1_GAMEPAD_DPAD_DOWN | XINPUT1_GAMEPAD_LSTICK_DOWN_MASK, "LStick D-Pad Down" }, - { XINPUT1_GAMEPAD_RSTICK_LEFT_MASK, "RStick Left" }, - { XINPUT1_GAMEPAD_RSTICK_RIGHT_MASK, "RStick Right" }, - { XINPUT1_GAMEPAD_RSTICK_UP_MASK, "RStick Up" }, - { XINPUT1_GAMEPAD_RSTICK_DOWN_MASK, "RStick Down" }, - { XINPUT1_GAMEPAD_DPAD_LEFT | XINPUT1_GAMEPAD_RSTICK_LEFT_MASK, "RStick D-Pad Left" }, - { XINPUT1_GAMEPAD_DPAD_RIGHT | XINPUT1_GAMEPAD_RSTICK_RIGHT_MASK, "RStick D-Pad Right" }, - { XINPUT1_GAMEPAD_DPAD_UP | XINPUT1_GAMEPAD_RSTICK_UP_MASK, "RStick D-Pad Up" }, - { XINPUT1_GAMEPAD_DPAD_DOWN | XINPUT1_GAMEPAD_RSTICK_DOWN_MASK, "RStick D-Pad Down" }, -}; -#elif defined(GEKKO) -static const struct platform_bind platform_keys[] = { - { PAD_BUTTON_B, "(NGC) B button" }, - { PAD_BUTTON_A, "(NGC) A button" }, - { PAD_BUTTON_Y, "(NGC) Y button" }, - { PAD_BUTTON_X, "(NGC) X button" }, - { PAD_BUTTON_UP, "(NGC) D-Pad Up" }, - { PAD_BUTTON_DOWN, "(NGC) D-Pad Down" }, - { PAD_BUTTON_LEFT, "(NGC) D-Pad Left" }, - { PAD_BUTTON_RIGHT, "(NGC) D-Pad Right" }, - { PAD_TRIGGER_Z, "(NGC) Z trigger" }, - { PAD_BUTTON_START, "(NGC) Start button" }, - { PAD_TRIGGER_L, "(NGC) Left Trigger" }, - { PAD_TRIGGER_R, "(NGC) Right Trigger" }, -#ifdef HW_RVL - { WPAD_CLASSIC_BUTTON_B, "(Wii Classici) B button" }, - { WPAD_CLASSIC_BUTTON_A, "(Wii Classic) A button" }, - { WPAD_CLASSIC_BUTTON_Y, "(Wii Classic) Y button" }, - { WPAD_CLASSIC_BUTTON_X, "(Wii Classic) X button" }, - { WPAD_CLASSIC_BUTTON_UP, "(Wii Classic) D-Pad Up" }, - { WPAD_CLASSIC_BUTTON_DOWN, "(Wii Classic) D-Pad Down" }, - { WPAD_CLASSIC_BUTTON_LEFT, "(Wii Classic) D-Pad Left" }, - { WPAD_CLASSIC_BUTTON_RIGHT, "(Wii Classic) D-Pad Right" }, - { WPAD_CLASSIC_BUTTON_MINUS, "(Wii Classic) Select/Minus button" }, - { WPAD_CLASSIC_BUTTON_PLUS, "(Wii Classic) Start/Plus button" }, - { WPAD_CLASSIC_BUTTON_HOME, "(Wii Classic) Home button" }, - { WPAD_CLASSIC_BUTTON_FULL_L, "(Wii Classic) Left Trigger" }, - { WPAD_CLASSIC_BUTTON_FULL_R, "(Wii Classic) Right Trigger" }, - { WPAD_CLASSIC_BUTTON_ZL, "(Wii Classic) ZL button" }, - { WPAD_CLASSIC_BUTTON_ZR, "(Wii Classic) ZR button" }, -#endif -}; -#endif - -#ifdef HAVE_DEFAULT_RETROPAD_INPUT - -uint64_t rarch_input_find_previous_platform_key(uint64_t joykey) -{ - size_t arr_size = sizeof(platform_keys) / sizeof(platform_keys[0]); - - if (platform_keys[0].joykey == joykey) - return joykey; - - for (size_t i = 1; i < arr_size; i++) - { - if (platform_keys[i].joykey == joykey) - return platform_keys[i - 1].joykey; - } - - return NO_BTN; -} - -uint64_t rarch_input_find_next_platform_key(uint64_t joykey) -{ - size_t arr_size = sizeof(platform_keys) / sizeof(platform_keys[0]); - if (platform_keys[arr_size - 1].joykey == joykey) - return joykey; - - for (size_t i = 0; i < arr_size - 1; i++) - { - if (platform_keys[i].joykey == joykey) - return platform_keys[i + 1].joykey; - } - - return NO_BTN; -} - -const char *rarch_input_find_platform_key_label(uint64_t joykey) -{ - if (joykey == NO_BTN) - return "No button"; - - size_t arr_size = sizeof(platform_keys) / sizeof(platform_keys[0]); - for (size_t i = 0; i < arr_size; i++) - { - if (platform_keys[i].joykey == joykey) - return platform_keys[i].label; - } - - return "Unknown"; -} - - -void rarch_input_set_keybind(unsigned player, unsigned keybind_action, uint64_t default_retro_joypad_id) -{ - uint64_t *key = &g_settings.input.binds[player][default_retro_joypad_id].joykey; - - switch (keybind_action) - { - case KEYBIND_DECREMENT: - *key = rarch_input_find_previous_platform_key(*key); - break; - - case KEYBIND_INCREMENT: - *key = rarch_input_find_next_platform_key(*key); - break; - - case KEYBIND_DEFAULT: - *key = rarch_default_keybind_lut[default_retro_joypad_id]; - break; - - default: - break; - } -} - -void rarch_input_set_default_keybinds(unsigned player) -{ - for (unsigned i = 0; i < RARCH_FIRST_META_KEY; i++) - { - g_settings.input.binds[player][i].id = i; - g_settings.input.binds[player][i].joykey = rarch_default_keybind_lut[i]; - } - g_settings.input.dpad_emulation[player] = DPAD_EMULATION_LSTICK; -} - -void rarch_input_set_controls_default (void) -{ -#if defined(__CELLOS_LV2__) - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_B] = platform_keys[PS3_DEVICE_ID_JOYPAD_CROSS].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_Y] = platform_keys[PS3_DEVICE_ID_JOYPAD_SQUARE].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_SELECT] = platform_keys[PS3_DEVICE_ID_JOYPAD_SELECT].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_START] = platform_keys[PS3_DEVICE_ID_JOYPAD_START].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_UP] = platform_keys[PS3_DEVICE_ID_JOYPAD_UP].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_DOWN] = platform_keys[PS3_DEVICE_ID_JOYPAD_DOWN].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_LEFT] = platform_keys[PS3_DEVICE_ID_JOYPAD_LEFT].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_RIGHT] = platform_keys[PS3_DEVICE_ID_JOYPAD_RIGHT].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_A] = platform_keys[PS3_DEVICE_ID_JOYPAD_CIRCLE].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_X] = platform_keys[PS3_DEVICE_ID_JOYPAD_TRIANGLE].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[PS3_DEVICE_ID_JOYPAD_L1].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[PS3_DEVICE_ID_JOYPAD_R1].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[PS3_DEVICE_ID_JOYPAD_R2].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R3] = platform_keys[PS3_DEVICE_ID_JOYPAD_R3].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[PS3_DEVICE_ID_JOYPAD_L2].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L3] = platform_keys[PS3_DEVICE_ID_JOYPAD_L3].joykey; -#elif defined(_XBOX) - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_B] = platform_keys[XDK_DEVICE_ID_JOYPAD_A].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_Y] = platform_keys[XDK_DEVICE_ID_JOYPAD_X].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_SELECT] = platform_keys[XDK_DEVICE_ID_JOYPAD_BACK].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_START] = platform_keys[XDK_DEVICE_ID_JOYPAD_START].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_UP] = platform_keys[XDK_DEVICE_ID_JOYPAD_UP].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_DOWN] = platform_keys[XDK_DEVICE_ID_JOYPAD_DOWN].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_LEFT] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_RIGHT] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_A] = platform_keys[XDK_DEVICE_ID_JOYPAD_B].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_X] = platform_keys[XDK_DEVICE_ID_JOYPAD_Y].joykey; -#if defined(_XBOX1) - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[XDK_DEVICE_ID_JOYPAD_LB].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[XDK_DEVICE_ID_JOYPAD_RB].joykey; -#elif defined(_XBOX360) - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[XDK_DEVICE_ID_JOYPAD_LB].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[XDK_DEVICE_ID_JOYPAD_RB].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER].joykey; -#endif - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L3] = platform_keys[XDK_DEVICE_ID_LSTICK_THUMB].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R3] = platform_keys[XDK_DEVICE_ID_RSTICK_THUMB].joykey; -#endif - for(uint32_t x = 0; x < MAX_PLAYERS; x++) - rarch_input_set_default_keybinds(x); -} - -const char *rarch_input_get_default_keybind_name(unsigned id) -{ - return rarch_default_libretro_keybind_name_lut[id]; -} - -#endif - -void rarch_input_set_default_keybind_names_for_emulator(void) -{ - struct retro_system_info info; -#ifdef ANDROID - pretro_get_system_info(&info); -#else - retro_get_system_info(&info); -#endif - const char *id = info.library_name ? info.library_name : "Unknown"; - - // Genesis Plus GX/Next - if (strstr(id, "Genesis Plus GX")) - { - strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_B], - "B button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_B])); - strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_A], - "C button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_A])); - strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_X], - "Y button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_X])); - strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_Y], - "A button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_Y])); - strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_L], - "X button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_L])); - strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_R], - "Z button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_R])); - strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_SELECT], - "Mode button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_SELECT])); - } -} - - /*============================================================ VIDEO EXTENSIONS ============================================================ */ diff --git a/console/retroarch_console.h b/console/retroarch_console.h index 3de981fd1f..4de103b1af 100644 --- a/console/retroarch_console.h +++ b/console/retroarch_console.h @@ -170,27 +170,6 @@ const char *rarch_console_get_rom_ext(void); // Transforms a library id to a name suitable as a pathname. void rarch_console_name_from_id(char *name, size_t size); -/*============================================================ - INPUT EXTENSIONS -============================================================ */ - -#ifdef HAVE_DEFAULT_RETROPAD_INPUT -const char *rarch_input_find_platform_key_label(uint64_t joykey); -uint64_t rarch_input_find_previous_platform_key(uint64_t joykey); -uint64_t rarch_input_find_next_platform_key(uint64_t joykey); - -// Sets custom default keybind names (some systems emulated by the emulator -// will need different keybind names for buttons, etc.) -void rarch_input_set_default_keybind_names_for_emulator(void); -void rarch_input_set_default_keybinds(unsigned player); - -void rarch_input_set_keybind(unsigned player, unsigned keybind_action, uint64_t default_retro_joypad_id); - -void rarch_input_set_controls_default (void); -const char *rarch_input_get_default_keybind_name (unsigned id); -#endif - - /*============================================================ RetroArch ============================================================ */ diff --git a/console/retroarch_console_input.c b/console/retroarch_console_input.c new file mode 100644 index 0000000000..3ac556add0 --- /dev/null +++ b/console/retroarch_console_input.c @@ -0,0 +1,222 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2012 - Hans-Kristian Arntzen + * Copyright (C) 2011-2012 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include +#include +#include +#include "../boolean.h" +#include "retroarch_console_input.h" + +struct platform_bind +{ + uint64_t joykey; + const char *label; +}; + +uint64_t rarch_default_keybind_lut[RARCH_FIRST_META_KEY]; + +char rarch_default_libretro_keybind_name_lut[RARCH_FIRST_META_KEY][256] = { + "RetroPad Button B", /* RETRO_DEVICE_ID_JOYPAD_B */ + "RetroPad Button Y", /* RETRO_DEVICE_ID_JOYPAD_Y */ + "RetroPad Button Select", /* RETRO_DEVICE_ID_JOYPAD_SELECT */ + "RetroPad Button Start", /* RETRO_DEVICE_ID_JOYPAD_START */ + "RetroPad D-Pad Up", /* RETRO_DEVICE_ID_JOYPAD_UP */ + "RetroPad D-Pad Down", /* RETRO_DEVICE_ID_JOYPAD_DOWN */ + "RetroPad D-Pad Left", /* RETRO_DEVICE_ID_JOYPAD_LEFT */ + "RetroPad D-Pad Right", /* RETRO_DEVICE_ID_JOYPAD_RIGHT */ + "RetroPad Button A", /* RETRO_DEVICE_ID_JOYPAD_A */ + "RetroPad Button X", /* RETRO_DEVICE_ID_JOYPAD_X */ + "RetroPad Button L1", /* RETRO_DEVICE_ID_JOYPAD_L */ + "RetroPad Button R1", /* RETRO_DEVICE_ID_JOYPAD_R */ + "RetroPad Button L2", /* RETRO_DEVICE_ID_JOYPAD_L2 */ + "RetroPad Button R2", /* RETRO_DEVICE_ID_JOYPAD_R2 */ + "RetroPad Button L3", /* RETRO_DEVICE_ID_JOYPAD_L3 */ + "RetroPad Button R3", /* RETRO_DEVICE_ID_JOYPAD_R3 */ +}; + +#ifdef HAVE_DEFAULT_RETROPAD_INPUT + +extern const struct platform_bind platform_keys[]; +extern const unsigned int platform_keys_size; + +uint64_t rarch_input_find_previous_platform_key(uint64_t joykey) +{ + size_t arr_size = platform_keys_size / sizeof(platform_keys[0]); + + if (platform_keys[0].joykey == joykey) + return joykey; + + for (size_t i = 1; i < arr_size; i++) + { + if (platform_keys[i].joykey == joykey) + return platform_keys[i - 1].joykey; + } + + return NO_BTN; +} + +uint64_t rarch_input_find_next_platform_key(uint64_t joykey) +{ + size_t arr_size = platform_keys_size / sizeof(platform_keys[0]); + + if (platform_keys[arr_size - 1].joykey == joykey) + return joykey; + + for (size_t i = 0; i < arr_size - 1; i++) + { + if (platform_keys[i].joykey == joykey) + return platform_keys[i + 1].joykey; + } + + return NO_BTN; +} + +const char *rarch_input_find_platform_key_label(uint64_t joykey) +{ + if (joykey == NO_BTN) + return "No button"; + + size_t arr_size = platform_keys_size / sizeof(platform_keys[0]); + for (size_t i = 0; i < arr_size; i++) + { + if (platform_keys[i].joykey == joykey) + return platform_keys[i].label; + } + + return "Unknown"; +} + + +void rarch_input_set_keybind(unsigned player, unsigned keybind_action, uint64_t default_retro_joypad_id) +{ + uint64_t *key = &g_settings.input.binds[player][default_retro_joypad_id].joykey; + + switch (keybind_action) + { + case KEYBIND_DECREMENT: + *key = rarch_input_find_previous_platform_key(*key); + break; + + case KEYBIND_INCREMENT: + *key = rarch_input_find_next_platform_key(*key); + break; + + case KEYBIND_DEFAULT: + *key = rarch_default_keybind_lut[default_retro_joypad_id]; + break; + + default: + break; + } +} + +void rarch_input_set_default_keybinds(unsigned player) +{ + for (unsigned i = 0; i < RARCH_FIRST_META_KEY; i++) + { + g_settings.input.binds[player][i].id = i; + g_settings.input.binds[player][i].joykey = rarch_default_keybind_lut[i]; + } + g_settings.input.dpad_emulation[player] = DPAD_EMULATION_LSTICK; +} + +void rarch_input_set_controls_default (void) +{ +#if defined(__CELLOS_LV2__) + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_B] = platform_keys[PS3_DEVICE_ID_JOYPAD_CROSS].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_Y] = platform_keys[PS3_DEVICE_ID_JOYPAD_SQUARE].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_SELECT] = platform_keys[PS3_DEVICE_ID_JOYPAD_SELECT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_START] = platform_keys[PS3_DEVICE_ID_JOYPAD_START].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_UP] = platform_keys[PS3_DEVICE_ID_JOYPAD_UP].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_DOWN] = platform_keys[PS3_DEVICE_ID_JOYPAD_DOWN].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_LEFT] = platform_keys[PS3_DEVICE_ID_JOYPAD_LEFT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_RIGHT] = platform_keys[PS3_DEVICE_ID_JOYPAD_RIGHT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_A] = platform_keys[PS3_DEVICE_ID_JOYPAD_CIRCLE].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_X] = platform_keys[PS3_DEVICE_ID_JOYPAD_TRIANGLE].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[PS3_DEVICE_ID_JOYPAD_L1].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[PS3_DEVICE_ID_JOYPAD_R1].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[PS3_DEVICE_ID_JOYPAD_R2].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R3] = platform_keys[PS3_DEVICE_ID_JOYPAD_R3].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[PS3_DEVICE_ID_JOYPAD_L2].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L3] = platform_keys[PS3_DEVICE_ID_JOYPAD_L3].joykey; +#elif defined(_XBOX) + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_B] = platform_keys[XDK_DEVICE_ID_JOYPAD_A].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_Y] = platform_keys[XDK_DEVICE_ID_JOYPAD_X].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_SELECT] = platform_keys[XDK_DEVICE_ID_JOYPAD_BACK].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_START] = platform_keys[XDK_DEVICE_ID_JOYPAD_START].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_UP] = platform_keys[XDK_DEVICE_ID_JOYPAD_UP].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_DOWN] = platform_keys[XDK_DEVICE_ID_JOYPAD_DOWN].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_LEFT] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_RIGHT] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_A] = platform_keys[XDK_DEVICE_ID_JOYPAD_B].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_X] = platform_keys[XDK_DEVICE_ID_JOYPAD_Y].joykey; +#if defined(_XBOX1) + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[XDK_DEVICE_ID_JOYPAD_LB].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[XDK_DEVICE_ID_JOYPAD_RB].joykey; +#elif defined(_XBOX360) + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[XDK_DEVICE_ID_JOYPAD_LB].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[XDK_DEVICE_ID_JOYPAD_RB].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER].joykey; +#endif + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L3] = platform_keys[XDK_DEVICE_ID_LSTICK_THUMB].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R3] = platform_keys[XDK_DEVICE_ID_RSTICK_THUMB].joykey; +#endif + for(uint32_t x = 0; x < MAX_PLAYERS; x++) + rarch_input_set_default_keybinds(x); +} + +const char *rarch_input_get_default_keybind_name(unsigned id) +{ + return rarch_default_libretro_keybind_name_lut[id]; +} + +#endif + +/* TODO: Hackish, try to do this in a cleaner, more extensible and less hardcoded way */ + +void rarch_input_set_default_keybind_names_for_emulator(void) +{ + struct retro_system_info info; +#ifdef ANDROID + pretro_get_system_info(&info); +#else + retro_get_system_info(&info); +#endif + const char *id = info.library_name ? info.library_name : "Unknown"; + + // Genesis Plus GX/Next + if (strstr(id, "Genesis Plus GX")) + { + strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_B], + "B button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_B])); + strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_A], + "C button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_A])); + strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_X], + "Y button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_X])); + strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_Y], + "A button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_Y])); + strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_L], + "X button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_L])); + strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_R], + "Z button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_R])); + strlcpy(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_SELECT], + "Mode button", sizeof(rarch_default_libretro_keybind_name_lut[RETRO_DEVICE_ID_JOYPAD_SELECT])); + } +} diff --git a/console/retroarch_console_input.h b/console/retroarch_console_input.h index bf4af5ad86..206c2ca76f 100644 --- a/console/retroarch_console_input.h +++ b/console/retroarch_console_input.h @@ -138,4 +138,20 @@ enum xdk_device_id extern uint64_t rarch_default_keybind_lut[RARCH_FIRST_META_KEY]; extern char rarch_default_libretro_keybind_name_lut[RARCH_FIRST_META_KEY][256]; +#ifdef HAVE_DEFAULT_RETROPAD_INPUT +const char *rarch_input_find_platform_key_label(uint64_t joykey); +uint64_t rarch_input_find_previous_platform_key(uint64_t joykey); +uint64_t rarch_input_find_next_platform_key(uint64_t joykey); + +// Sets custom default keybind names (some systems emulated by the emulator +// will need different keybind names for buttons, etc.) +void rarch_input_set_default_keybind_names_for_emulator(void); +void rarch_input_set_default_keybinds(unsigned player); + +void rarch_input_set_keybind(unsigned player, unsigned keybind_action, uint64_t default_retro_joypad_id); + +void rarch_input_set_controls_default (void); +const char *rarch_input_get_default_keybind_name (unsigned id); +#endif + #endif diff --git a/ps3/ps3_input.c b/ps3/ps3_input.c index 24b1511367..232063661c 100644 --- a/ps3/ps3_input.c +++ b/ps3/ps3_input.c @@ -97,6 +97,43 @@ CellMouseData ps3_mouse_input_poll_device(uint32_t id) #define MAP(x) (x & 0xFF) +const struct platform_bind platform_keys[] = { + { CTRL_CIRCLE_MASK, "Circle button" }, + { CTRL_CROSS_MASK, "Cross button" }, + { CTRL_TRIANGLE_MASK, "Triangle button" }, + { CTRL_SQUARE_MASK, "Square button" }, + { CTRL_UP_MASK, "D-Pad Up" }, + { CTRL_DOWN_MASK, "D-Pad Down" }, + { CTRL_LEFT_MASK, "D-Pad Left" }, + { CTRL_RIGHT_MASK, "D-Pad Right" }, + { CTRL_SELECT_MASK, "Select button" }, + { CTRL_START_MASK, "Start button" }, + { CTRL_L1_MASK, "L1 button" }, + { CTRL_L2_MASK, "L2 button" }, + { CTRL_L3_MASK, "L3 button" }, + { CTRL_R1_MASK, "R1 button" }, + { CTRL_R2_MASK, "R2 button" }, + { CTRL_R3_MASK, "R3 button" }, + { CTRL_LSTICK_LEFT_MASK, "LStick Left" }, + { CTRL_LSTICK_RIGHT_MASK, "LStick Right" }, + { CTRL_LSTICK_UP_MASK, "LStick Up" }, + { CTRL_LSTICK_DOWN_MASK, "LStick Down" }, + { CTRL_LEFT_MASK | CTRL_LSTICK_LEFT_MASK, "LStick D-Pad Left" }, + { CTRL_RIGHT_MASK | CTRL_LSTICK_RIGHT_MASK, "LStick D-Pad Right" }, + { CTRL_UP_MASK | CTRL_LSTICK_UP_MASK, "LStick D-Pad Up" }, + { CTRL_DOWN_MASK | CTRL_LSTICK_DOWN_MASK, "LStick D-Pad Down" }, + { CTRL_RSTICK_LEFT_MASK, "RStick Left" }, + { CTRL_RSTICK_RIGHT_MASK, "RStick Right" }, + { CTRL_RSTICK_UP_MASK, "RStick Up" }, + { CTRL_RSTICK_DOWN_MASK, "RStick Down" }, + { CTRL_LEFT_MASK | CTRL_RSTICK_LEFT_MASK, "RStick D-Pad Left" }, + { CTRL_RIGHT_MASK | CTRL_RSTICK_RIGHT_MASK, "RStick D-Pad Right" }, + { CTRL_UP_MASK | CTRL_RSTICK_UP_MASK, "RStick D-Pad Up" }, + { CTRL_DOWN_MASK | CTRL_RSTICK_DOWN_MASK, "RStick D-Pad Down" }, +}; + +const unsigned int platform_keys_size = sizeof(platform_keys); + static uint64_t state[MAX_PADS]; static unsigned pads_connected; #ifdef HAVE_MOUSE diff --git a/wii/input.c b/wii/input.c index f1a4ca8a52..6fe63fc4a0 100644 --- a/wii/input.c +++ b/wii/input.c @@ -30,6 +30,40 @@ static bool pad_state[5][RARCH_FIRST_META_KEY]; /* Gamecube pads */ static bool wpad_state[5][RARCH_FIRST_META_KEY]; /* Wii Classic pads */ #endif +const struct platform_bind platform_keys[] = { + { PAD_BUTTON_B, "(NGC) B button" }, + { PAD_BUTTON_A, "(NGC) A button" }, + { PAD_BUTTON_Y, "(NGC) Y button" }, + { PAD_BUTTON_X, "(NGC) X button" }, + { PAD_BUTTON_UP, "(NGC) D-Pad Up" }, + { PAD_BUTTON_DOWN, "(NGC) D-Pad Down" }, + { PAD_BUTTON_LEFT, "(NGC) D-Pad Left" }, + { PAD_BUTTON_RIGHT, "(NGC) D-Pad Right" }, + { PAD_TRIGGER_Z, "(NGC) Z trigger" }, + { PAD_BUTTON_START, "(NGC) Start button" }, + { PAD_TRIGGER_L, "(NGC) Left Trigger" }, + { PAD_TRIGGER_R, "(NGC) Right Trigger" }, +#ifdef HW_RVL + { WPAD_CLASSIC_BUTTON_B, "(Wii Classici) B button" }, + { WPAD_CLASSIC_BUTTON_A, "(Wii Classic) A button" }, + { WPAD_CLASSIC_BUTTON_Y, "(Wii Classic) Y button" }, + { WPAD_CLASSIC_BUTTON_X, "(Wii Classic) X button" }, + { WPAD_CLASSIC_BUTTON_UP, "(Wii Classic) D-Pad Up" }, + { WPAD_CLASSIC_BUTTON_DOWN, "(Wii Classic) D-Pad Down" }, + { WPAD_CLASSIC_BUTTON_LEFT, "(Wii Classic) D-Pad Left" }, + { WPAD_CLASSIC_BUTTON_RIGHT, "(Wii Classic) D-Pad Right" }, + { WPAD_CLASSIC_BUTTON_MINUS, "(Wii Classic) Select/Minus button" }, + { WPAD_CLASSIC_BUTTON_PLUS, "(Wii Classic) Start/Plus button" }, + { WPAD_CLASSIC_BUTTON_HOME, "(Wii Classic) Home button" }, + { WPAD_CLASSIC_BUTTON_FULL_L, "(Wii Classic) Left Trigger" }, + { WPAD_CLASSIC_BUTTON_FULL_R, "(Wii Classic) Right Trigger" }, + { WPAD_CLASSIC_BUTTON_ZL, "(Wii Classic) ZL button" }, + { WPAD_CLASSIC_BUTTON_ZR, "(Wii Classic) ZR button" }, +#endif +}; + +const unsigned int platform_keys_size = sizeof(platform_keys); + static bool g_quit; static int16_t wii_input_state(void *data, const struct retro_keybind **binds, diff --git a/xbox1/xinput_xbox_input.c b/xbox1/xinput_xbox_input.c index df0a7ab40a..5510a7163d 100644 --- a/xbox1/xinput_xbox_input.c +++ b/xbox1/xinput_xbox_input.c @@ -32,6 +32,43 @@ DWORD dwDeviceMask; bool bInserted[4]; bool bRemoved[4]; +const struct platform_bind platform_keys[] = { + { XINPUT1_GAMEPAD_B, "B button" }, + { XINPUT1_GAMEPAD_A, "A button" }, + { XINPUT1_GAMEPAD_Y, "Y button" }, + { XINPUT1_GAMEPAD_X, "X button" }, + { XINPUT1_GAMEPAD_DPAD_UP, "D-Pad Up" }, + { XINPUT1_GAMEPAD_DPAD_DOWN, "D-Pad Down" }, + { XINPUT1_GAMEPAD_DPAD_LEFT, "D-Pad Left" }, + { XINPUT1_GAMEPAD_DPAD_RIGHT, "D-Pad Right" }, + { XINPUT1_GAMEPAD_BACK, "Back button" }, + { XINPUT1_GAMEPAD_START, "Start button" }, + { XINPUT1_GAMEPAD_WHITE, "White button" }, + { XINPUT1_GAMEPAD_LEFT_TRIGGER, "Left Trigger" }, + { XINPUT1_GAMEPAD_LEFT_THUMB, "Left Thumb" }, + { XINPUT1_GAMEPAD_BLACK, "Black button" }, + { XINPUT1_GAMEPAD_RIGHT_TRIGGER, "Right Trigger" }, + { XINPUT1_GAMEPAD_RIGHT_THUMB, "Right Thumb" }, + { XINPUT1_GAMEPAD_LSTICK_LEFT_MASK, "LStick Left" }, + { XINPUT1_GAMEPAD_LSTICK_RIGHT_MASK, "LStick Right" }, + { XINPUT1_GAMEPAD_LSTICK_UP_MASK, "LStick Up" }, + { XINPUT1_GAMEPAD_LSTICK_DOWN_MASK, "LStick Down" }, + { XINPUT1_GAMEPAD_DPAD_LEFT | XINPUT1_GAMEPAD_LSTICK_LEFT_MASK, "LStick D-Pad Left" }, + { XINPUT1_GAMEPAD_DPAD_RIGHT | XINPUT1_GAMEPAD_LSTICK_RIGHT_MASK, "LStick D-Pad Right" }, + { XINPUT1_GAMEPAD_DPAD_UP | XINPUT1_GAMEPAD_LSTICK_UP_MASK, "LStick D-Pad Up" }, + { XINPUT1_GAMEPAD_DPAD_DOWN | XINPUT1_GAMEPAD_LSTICK_DOWN_MASK, "LStick D-Pad Down" }, + { XINPUT1_GAMEPAD_RSTICK_LEFT_MASK, "RStick Left" }, + { XINPUT1_GAMEPAD_RSTICK_RIGHT_MASK, "RStick Right" }, + { XINPUT1_GAMEPAD_RSTICK_UP_MASK, "RStick Up" }, + { XINPUT1_GAMEPAD_RSTICK_DOWN_MASK, "RStick Down" }, + { XINPUT1_GAMEPAD_DPAD_LEFT | XINPUT1_GAMEPAD_RSTICK_LEFT_MASK, "RStick D-Pad Left" }, + { XINPUT1_GAMEPAD_DPAD_RIGHT | XINPUT1_GAMEPAD_RSTICK_RIGHT_MASK, "RStick D-Pad Right" }, + { XINPUT1_GAMEPAD_DPAD_UP | XINPUT1_GAMEPAD_RSTICK_UP_MASK, "RStick D-Pad Up" }, + { XINPUT1_GAMEPAD_DPAD_DOWN | XINPUT1_GAMEPAD_RSTICK_DOWN_MASK, "RStick D-Pad Down" }, +}; + +const unsigned int platform_keys_size = sizeof(platform_keys); + #define DEADZONE (16000) static unsigned pads_connected; From 811abcf6122b0c42849b61553ac9daed95aaf08a Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Wed, 25 Jul 2012 21:02:01 +0200 Subject: [PATCH 07/19] (RARCH_CONSOLE) Further Input rewrite for console ports --- 360/xinput_360_input.c | 28 +++++++++ 360/xinput_360_input.h | 38 ++++++++++++ console/console_settings.c | 4 +- console/console_settings.h | 2 +- console/libretro_mgmt.c | 4 +- console/libretro_mgmt.h | 3 +- console/retroarch_console_input.c | 46 +-------------- console/retroarch_console_input.h | 96 +------------------------------ driver.h | 3 + input/null.c | 5 ++ ps3/frontend/main.c | 4 +- ps3/ps3_input.c | 21 +++++++ ps3/ps3_input.h | 38 ++++++++++++ wii/input.c | 6 +- xbox1/xinput_xbox_input.c | 28 +++++++++ xbox1/xinput_xbox_input.h | 38 ++++++++++++ xdk/frontend/main.c | 4 +- 17 files changed, 219 insertions(+), 149 deletions(-) diff --git a/360/xinput_360_input.c b/360/xinput_360_input.c index 71da9458e2..7b9b6aed62 100644 --- a/360/xinput_360_input.c +++ b/360/xinput_360_input.c @@ -197,6 +197,33 @@ static bool xinput_input_key_pressed(void *data, int key) return retval; } +static void xinput_set_default_keybind_lut(void) +{ + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_B] = platform_keys[XDK_DEVICE_ID_JOYPAD_A].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_Y] = platform_keys[XDK_DEVICE_ID_JOYPAD_X].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_SELECT] = platform_keys[XDK_DEVICE_ID_JOYPAD_BACK].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_START] = platform_keys[XDK_DEVICE_ID_JOYPAD_START].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_UP] = platform_keys[XDK_DEVICE_ID_JOYPAD_UP].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_DOWN] = platform_keys[XDK_DEVICE_ID_JOYPAD_DOWN].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_LEFT] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_RIGHT] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_A] = platform_keys[XDK_DEVICE_ID_JOYPAD_B].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_X] = platform_keys[XDK_DEVICE_ID_JOYPAD_Y].joykey; +#if defined(_XBOX1) + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[XDK_DEVICE_ID_JOYPAD_LB].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[XDK_DEVICE_ID_JOYPAD_RB].joykey; +#elif defined(_XBOX360) + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[XDK_DEVICE_ID_JOYPAD_LB].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[XDK_DEVICE_ID_JOYPAD_RB].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER].joykey; +#endif + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L3] = platform_keys[XDK_DEVICE_ID_LSTICK_THUMB].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R3] = platform_keys[XDK_DEVICE_ID_RSTICK_THUMB].joykey; +} + const input_driver_t input_xinput = { xinput_input_init, @@ -204,5 +231,6 @@ const input_driver_t input_xinput = xinput_input_state, xinput_input_key_pressed, xinput_input_free_input, + xinput_set_default_keybind_lut, "xinput" }; diff --git a/360/xinput_360_input.h b/360/xinput_360_input.h index 229aafb025..1c83129cd7 100644 --- a/360/xinput_360_input.h +++ b/360/xinput_360_input.h @@ -30,6 +30,44 @@ enum { XINPUT_GAMEPAD_RIGHT_TRIGGER = 1 << 25 }; +enum xdk_device_id +{ + XDK_DEVICE_ID_JOYPAD_B = 0, + XDK_DEVICE_ID_JOYPAD_A, + XDK_DEVICE_ID_JOYPAD_Y, + XDK_DEVICE_ID_JOYPAD_X, + XDK_DEVICE_ID_JOYPAD_UP, + XDK_DEVICE_ID_JOYPAD_DOWN, + XDK_DEVICE_ID_JOYPAD_LEFT, + XDK_DEVICE_ID_JOYPAD_RIGHT, + XDK_DEVICE_ID_JOYPAD_BACK, + XDK_DEVICE_ID_JOYPAD_START, + XDK_DEVICE_ID_JOYPAD_LB, + XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER, + XDK_DEVICE_ID_LSTICK_THUMB, + XDK_DEVICE_ID_JOYPAD_RB, + XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER, + XDK_DEVICE_ID_RSTICK_THUMB, + XDK_DEVICE_ID_LSTICK_LEFT, + XDK_DEVICE_ID_LSTICK_RIGHT, + XDK_DEVICE_ID_LSTICK_UP, + XDK_DEVICE_ID_LSTICK_DOWN, + XDK_DEVICE_ID_LSTICK_LEFT_DPAD, + XDK_DEVICE_ID_LSTICK_RIGHT_DPAD, + XDK_DEVICE_ID_LSTICK_UP_DPAD, + XDK_DEVICE_ID_LSTICK_DOWN_DPAD, + XDK_DEVICE_ID_RSTICK_LEFT, + XDK_DEVICE_ID_RSTICK_RIGHT, + XDK_DEVICE_ID_RSTICK_UP, + XDK_DEVICE_ID_RSTICK_DOWN, + XDK_DEVICE_ID_RSTICK_LEFT_DPAD, + XDK_DEVICE_ID_RSTICK_RIGHT_DPAD, + XDK_DEVICE_ID_RSTICK_UP_DPAD, + XDK_DEVICE_ID_RSTICK_DOWN_DPAD, + + RARCH_LAST_PLATFORM_KEY +}; + #define DEADZONE (16000) extern void xdk360_input_map_dpad_to_stick(uint32_t map_dpad_enum, uint32_t controller_id); diff --git a/console/console_settings.c b/console/console_settings.c index d494e40611..8d5fe67323 100644 --- a/console/console_settings.c +++ b/console/console_settings.c @@ -296,7 +296,7 @@ void rarch_settings_create_menu_item_label(char * str, unsigned setting, size_t } } -void rarch_settings_set_default (void) +void rarch_settings_set_default (const input_driver_t *input) { // g_settings g_settings.rewind_enable = false; @@ -323,7 +323,7 @@ void rarch_settings_set_default (void) g_settings.video.msg_pos_y = 0.90f; g_settings.video.aspect_ratio = -1.0f; - rarch_input_set_controls_default(); + rarch_input_set_controls_default(input); // g_console g_console.block_config_read = true; diff --git a/console/console_settings.h b/console/console_settings.h index a7022cfe32..fa0affb200 100644 --- a/console/console_settings.h +++ b/console/console_settings.h @@ -105,7 +105,7 @@ enum void rarch_settings_change(unsigned setting); void rarch_settings_default(unsigned setting); void rarch_settings_msg(unsigned setting, unsigned delay); -void rarch_settings_set_default (void); +void rarch_settings_set_default (const input_driver_t *input); void rarch_settings_create_menu_item_label(char * str, unsigned setting, size_t size); void rarch_settings_create_menu_item_label_w(wchar_t *strwbuf, unsigned setting, size_t size); diff --git a/console/libretro_mgmt.c b/console/libretro_mgmt.c index 3dd0ef9958..3362be5ff5 100644 --- a/console/libretro_mgmt.c +++ b/console/libretro_mgmt.c @@ -140,7 +140,7 @@ end: dir_list_free(dir_list); } -void rarch_configure_libretro(const char *path_prefix, const char * extension) +void rarch_configure_libretro(const input_driver_t *input, const char *path_prefix, const char * extension) { char full_path[1024]; snprintf(full_path, sizeof(full_path), "%sCORE%s", path_prefix, extension); @@ -148,7 +148,7 @@ void rarch_configure_libretro(const char *path_prefix, const char * extension) bool find_libretro_file = rarch_configure_libretro_core(full_path, path_prefix, path_prefix, default_paths.config_file, extension); - rarch_settings_set_default(); + rarch_settings_set_default(input); rarch_config_load(default_paths.config_file, path_prefix, extension, find_libretro_file); init_libretro_sym(); } diff --git a/console/libretro_mgmt.h b/console/libretro_mgmt.h index 936f31106b..e7713f07eb 100644 --- a/console/libretro_mgmt.h +++ b/console/libretro_mgmt.h @@ -18,6 +18,7 @@ #define LIBRETRO_MGMT_H__ #include "../boolean.h" +#include "../driver.h" enum { @@ -30,6 +31,6 @@ enum void rarch_manage_libretro_set_first_file(char *first_file, size_t size_of_first_file, const char *libretro_path, const char * exe_ext); bool rarch_configure_libretro_core(const char *full_path, const char *tmp_path, const char *libretro_path, const char *config_path, const char *extension); -void rarch_configure_libretro(const char *path_prefix, const char * extension); +void rarch_configure_libretro(const input_driver_t *input, const char *path_prefix, const char * extension); #endif diff --git a/console/retroarch_console_input.c b/console/retroarch_console_input.c index 3ac556add0..a86977449a 100644 --- a/console/retroarch_console_input.c +++ b/console/retroarch_console_input.c @@ -134,50 +134,10 @@ void rarch_input_set_default_keybinds(unsigned player) g_settings.input.dpad_emulation[player] = DPAD_EMULATION_LSTICK; } -void rarch_input_set_controls_default (void) +void rarch_input_set_controls_default (const input_driver_t *input) { -#if defined(__CELLOS_LV2__) - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_B] = platform_keys[PS3_DEVICE_ID_JOYPAD_CROSS].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_Y] = platform_keys[PS3_DEVICE_ID_JOYPAD_SQUARE].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_SELECT] = platform_keys[PS3_DEVICE_ID_JOYPAD_SELECT].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_START] = platform_keys[PS3_DEVICE_ID_JOYPAD_START].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_UP] = platform_keys[PS3_DEVICE_ID_JOYPAD_UP].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_DOWN] = platform_keys[PS3_DEVICE_ID_JOYPAD_DOWN].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_LEFT] = platform_keys[PS3_DEVICE_ID_JOYPAD_LEFT].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_RIGHT] = platform_keys[PS3_DEVICE_ID_JOYPAD_RIGHT].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_A] = platform_keys[PS3_DEVICE_ID_JOYPAD_CIRCLE].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_X] = platform_keys[PS3_DEVICE_ID_JOYPAD_TRIANGLE].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[PS3_DEVICE_ID_JOYPAD_L1].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[PS3_DEVICE_ID_JOYPAD_R1].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[PS3_DEVICE_ID_JOYPAD_R2].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R3] = platform_keys[PS3_DEVICE_ID_JOYPAD_R3].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[PS3_DEVICE_ID_JOYPAD_L2].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L3] = platform_keys[PS3_DEVICE_ID_JOYPAD_L3].joykey; -#elif defined(_XBOX) - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_B] = platform_keys[XDK_DEVICE_ID_JOYPAD_A].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_Y] = platform_keys[XDK_DEVICE_ID_JOYPAD_X].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_SELECT] = platform_keys[XDK_DEVICE_ID_JOYPAD_BACK].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_START] = platform_keys[XDK_DEVICE_ID_JOYPAD_START].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_UP] = platform_keys[XDK_DEVICE_ID_JOYPAD_UP].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_DOWN] = platform_keys[XDK_DEVICE_ID_JOYPAD_DOWN].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_LEFT] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_RIGHT] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_A] = platform_keys[XDK_DEVICE_ID_JOYPAD_B].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_X] = platform_keys[XDK_DEVICE_ID_JOYPAD_Y].joykey; -#if defined(_XBOX1) - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[XDK_DEVICE_ID_JOYPAD_LB].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[XDK_DEVICE_ID_JOYPAD_RB].joykey; -#elif defined(_XBOX360) - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[XDK_DEVICE_ID_JOYPAD_LB].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[XDK_DEVICE_ID_JOYPAD_RB].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER].joykey; -#endif - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L3] = platform_keys[XDK_DEVICE_ID_LSTICK_THUMB].joykey; - rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R3] = platform_keys[XDK_DEVICE_ID_RSTICK_THUMB].joykey; -#endif + input->set_default_keybind_lut(); + for(uint32_t x = 0; x < MAX_PLAYERS; x++) rarch_input_set_default_keybinds(x); } diff --git a/console/retroarch_console_input.h b/console/retroarch_console_input.h index 206c2ca76f..3063bf57a8 100644 --- a/console/retroarch_console_input.h +++ b/console/retroarch_console_input.h @@ -41,100 +41,6 @@ enum DPAD_EMULATION_RSTICK }; -#ifdef _XBOX360 -#include "../360/xinput_360_input.h" -#endif - -#if defined(__CELLOS_LV2__) -#include "../ps3/ps3_input.h" -enum ps3_device_id -{ - PS3_DEVICE_ID_JOYPAD_CIRCLE = 0, - PS3_DEVICE_ID_JOYPAD_CROSS, - PS3_DEVICE_ID_JOYPAD_TRIANGLE, - PS3_DEVICE_ID_JOYPAD_SQUARE, - PS3_DEVICE_ID_JOYPAD_UP, - PS3_DEVICE_ID_JOYPAD_DOWN, - PS3_DEVICE_ID_JOYPAD_LEFT, - PS3_DEVICE_ID_JOYPAD_RIGHT, - PS3_DEVICE_ID_JOYPAD_SELECT, - PS3_DEVICE_ID_JOYPAD_START, - PS3_DEVICE_ID_JOYPAD_L1, - PS3_DEVICE_ID_JOYPAD_L2, - PS3_DEVICE_ID_JOYPAD_L3, - PS3_DEVICE_ID_JOYPAD_R1, - PS3_DEVICE_ID_JOYPAD_R2, - PS3_DEVICE_ID_JOYPAD_R3, - PS3_DEVICE_ID_LSTICK_LEFT, - PS3_DEVICE_ID_LSTICK_RIGHT, - PS3_DEVICE_ID_LSTICK_UP, - PS3_DEVICE_ID_LSTICK_DOWN, - PS3_DEVICE_ID_LSTICK_LEFT_DPAD, - PS3_DEVICE_ID_LSTICK_RIGHT_DPAD, - PS3_DEVICE_ID_LSTICK_UP_DPAD, - PS3_DEVICE_ID_LSTICK_DOWN_DPAD, - PS3_DEVICE_ID_RSTICK_LEFT, - PS3_DEVICE_ID_RSTICK_RIGHT, - PS3_DEVICE_ID_RSTICK_UP, - PS3_DEVICE_ID_RSTICK_DOWN, - PS3_DEVICE_ID_RSTICK_LEFT_DPAD, - PS3_DEVICE_ID_RSTICK_RIGHT_DPAD, - PS3_DEVICE_ID_RSTICK_UP_DPAD, - PS3_DEVICE_ID_RSTICK_DOWN_DPAD, - - RARCH_LAST_PLATFORM_KEY -}; - -#elif defined(_XBOX) - -enum xdk_device_id -{ - XDK_DEVICE_ID_JOYPAD_B = 0, - XDK_DEVICE_ID_JOYPAD_A, - XDK_DEVICE_ID_JOYPAD_Y, - XDK_DEVICE_ID_JOYPAD_X, - XDK_DEVICE_ID_JOYPAD_UP, - XDK_DEVICE_ID_JOYPAD_DOWN, - XDK_DEVICE_ID_JOYPAD_LEFT, - XDK_DEVICE_ID_JOYPAD_RIGHT, - XDK_DEVICE_ID_JOYPAD_BACK, - XDK_DEVICE_ID_JOYPAD_START, - XDK_DEVICE_ID_JOYPAD_LB, - XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER, - XDK_DEVICE_ID_LSTICK_THUMB, - XDK_DEVICE_ID_JOYPAD_RB, - XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER, - XDK_DEVICE_ID_RSTICK_THUMB, - XDK_DEVICE_ID_LSTICK_LEFT, - XDK_DEVICE_ID_LSTICK_RIGHT, - XDK_DEVICE_ID_LSTICK_UP, - XDK_DEVICE_ID_LSTICK_DOWN, - XDK_DEVICE_ID_LSTICK_LEFT_DPAD, - XDK_DEVICE_ID_LSTICK_RIGHT_DPAD, - XDK_DEVICE_ID_LSTICK_UP_DPAD, - XDK_DEVICE_ID_LSTICK_DOWN_DPAD, - XDK_DEVICE_ID_RSTICK_LEFT, - XDK_DEVICE_ID_RSTICK_RIGHT, - XDK_DEVICE_ID_RSTICK_UP, - XDK_DEVICE_ID_RSTICK_DOWN, - XDK_DEVICE_ID_RSTICK_LEFT_DPAD, - XDK_DEVICE_ID_RSTICK_RIGHT_DPAD, - XDK_DEVICE_ID_RSTICK_UP_DPAD, - XDK_DEVICE_ID_RSTICK_DOWN_DPAD, - - RARCH_LAST_PLATFORM_KEY -}; - -#ifdef _XBOX1 -#include "../xbox1/xinput_xbox_input.h" -#endif -#elif defined(GEKKO) -#include -#ifdef HW_RVL -#include -#endif -#endif - extern uint64_t rarch_default_keybind_lut[RARCH_FIRST_META_KEY]; extern char rarch_default_libretro_keybind_name_lut[RARCH_FIRST_META_KEY][256]; @@ -150,7 +56,7 @@ void rarch_input_set_default_keybinds(unsigned player); void rarch_input_set_keybind(unsigned player, unsigned keybind_action, uint64_t default_retro_joypad_id); -void rarch_input_set_controls_default (void); +void rarch_input_set_controls_default (const input_driver_t *input); const char *rarch_input_get_default_keybind_name (unsigned id); #endif diff --git a/driver.h b/driver.h index 3399e22196..3fdf20befe 100644 --- a/driver.h +++ b/driver.h @@ -159,6 +159,9 @@ typedef struct input_driver int16_t (*input_state)(void *data, const struct retro_keybind **retro_keybinds, unsigned port, unsigned device, unsigned index, unsigned id); bool (*key_pressed)(void *data, int key); void (*free)(void *data); +#ifdef RARCH_CONSOLE + void (*set_default_keybind_lut)(void); +#endif const char *ident; } input_driver_t; diff --git a/input/null.c b/input/null.c index a861b63d4b..4b228b4ad0 100644 --- a/input/null.c +++ b/input/null.c @@ -51,12 +51,17 @@ static void null_input_free(void *data) (void)data; } +static void null_set_default_keybind_lut(void) { } + const input_driver_t input_null = { null_input_init, null_input_poll, null_input_state, null_input_key_pressed, null_input_free, +#ifdef RARCH_CONSOLE + null_set_default_keybind_lut, +#endif "null", }; diff --git a/ps3/frontend/main.c b/ps3/frontend/main.c index fa15f3ddf5..082c82fb95 100644 --- a/ps3/frontend/main.c +++ b/ps3/frontend/main.c @@ -240,10 +240,11 @@ int main(int argc, char *argv[]) get_environment_settings(argc, argv); config_set_defaults(); + input_ps3.init(); char tmp_path[PATH_MAX]; snprintf(tmp_path, sizeof(tmp_path), "%s/", default_paths.core_dir); - rarch_configure_libretro(tmp_path, default_paths.executable_extension); + rarch_configure_libretro(&input_ps3, tmp_path, default_paths.executable_extension); #if(CELL_SDK_VERSION > 0x340000) if (g_console.screenshots_enable) @@ -268,7 +269,6 @@ int main(int argc, char *argv[]) video_gl.start(); - input_ps3.init(); #ifdef HAVE_OSKUTIL oskutil_init(&g_console.oskutil_handle, 0); diff --git a/ps3/ps3_input.c b/ps3/ps3_input.c index 232063661c..9a6454a484 100644 --- a/ps3/ps3_input.c +++ b/ps3/ps3_input.c @@ -470,12 +470,33 @@ static bool ps3_key_pressed(void *data, int key) } } +static void ps3_set_default_keybind_lut(void) +{ + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_B] = platform_keys[PS3_DEVICE_ID_JOYPAD_CROSS].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_Y] = platform_keys[PS3_DEVICE_ID_JOYPAD_SQUARE].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_SELECT] = platform_keys[PS3_DEVICE_ID_JOYPAD_SELECT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_START] = platform_keys[PS3_DEVICE_ID_JOYPAD_START].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_UP] = platform_keys[PS3_DEVICE_ID_JOYPAD_UP].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_DOWN] = platform_keys[PS3_DEVICE_ID_JOYPAD_DOWN].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_LEFT] = platform_keys[PS3_DEVICE_ID_JOYPAD_LEFT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_RIGHT] = platform_keys[PS3_DEVICE_ID_JOYPAD_RIGHT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_A] = platform_keys[PS3_DEVICE_ID_JOYPAD_CIRCLE].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_X] = platform_keys[PS3_DEVICE_ID_JOYPAD_TRIANGLE].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[PS3_DEVICE_ID_JOYPAD_L1].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[PS3_DEVICE_ID_JOYPAD_R1].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[PS3_DEVICE_ID_JOYPAD_R2].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R3] = platform_keys[PS3_DEVICE_ID_JOYPAD_R3].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[PS3_DEVICE_ID_JOYPAD_L2].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L3] = platform_keys[PS3_DEVICE_ID_JOYPAD_L3].joykey; +} + const input_driver_t input_ps3 = { .init = ps3_input_initialize, .poll = ps3_input_poll, .input_state = ps3_input_state, .key_pressed = ps3_key_pressed, .free = ps3_free_input, + .set_default_keybind_lut = ps3_set_default_keybind_lut, .ident = "ps3", }; diff --git a/ps3/ps3_input.h b/ps3/ps3_input.h index 66cdb5c7b1..5e4436168a 100644 --- a/ps3/ps3_input.h +++ b/ps3/ps3_input.h @@ -156,6 +156,44 @@ typedef struct CellOskDialogParam dialogParam; } oskutil_params; +enum ps3_device_id +{ + PS3_DEVICE_ID_JOYPAD_CIRCLE = 0, + PS3_DEVICE_ID_JOYPAD_CROSS, + PS3_DEVICE_ID_JOYPAD_TRIANGLE, + PS3_DEVICE_ID_JOYPAD_SQUARE, + PS3_DEVICE_ID_JOYPAD_UP, + PS3_DEVICE_ID_JOYPAD_DOWN, + PS3_DEVICE_ID_JOYPAD_LEFT, + PS3_DEVICE_ID_JOYPAD_RIGHT, + PS3_DEVICE_ID_JOYPAD_SELECT, + PS3_DEVICE_ID_JOYPAD_START, + PS3_DEVICE_ID_JOYPAD_L1, + PS3_DEVICE_ID_JOYPAD_L2, + PS3_DEVICE_ID_JOYPAD_L3, + PS3_DEVICE_ID_JOYPAD_R1, + PS3_DEVICE_ID_JOYPAD_R2, + PS3_DEVICE_ID_JOYPAD_R3, + PS3_DEVICE_ID_LSTICK_LEFT, + PS3_DEVICE_ID_LSTICK_RIGHT, + PS3_DEVICE_ID_LSTICK_UP, + PS3_DEVICE_ID_LSTICK_DOWN, + PS3_DEVICE_ID_LSTICK_LEFT_DPAD, + PS3_DEVICE_ID_LSTICK_RIGHT_DPAD, + PS3_DEVICE_ID_LSTICK_UP_DPAD, + PS3_DEVICE_ID_LSTICK_DOWN_DPAD, + PS3_DEVICE_ID_RSTICK_LEFT, + PS3_DEVICE_ID_RSTICK_RIGHT, + PS3_DEVICE_ID_RSTICK_UP, + PS3_DEVICE_ID_RSTICK_DOWN, + PS3_DEVICE_ID_RSTICK_LEFT_DPAD, + PS3_DEVICE_ID_RSTICK_RIGHT_DPAD, + PS3_DEVICE_ID_RSTICK_UP_DPAD, + PS3_DEVICE_ID_RSTICK_DOWN_DPAD, + + RARCH_LAST_PLATFORM_KEY +}; + void oskutil_write_message(oskutil_params *params, const wchar_t* msg); void oskutil_write_initial_message(oskutil_params *params, const wchar_t* msg); void oskutil_init(oskutil_params *params, unsigned int containersize); diff --git a/wii/input.c b/wii/input.c index 6fe63fc4a0..219e97ba82 100644 --- a/wii/input.c +++ b/wii/input.c @@ -188,12 +188,16 @@ static bool wii_key_pressed(void *data, int key) } } +static void wii_set_default_keybind_lut(void) +{ +} + const input_driver_t input_wii = { .init = wii_input_initialize, .poll = wii_input_poll, .input_state = wii_input_state, .key_pressed = wii_key_pressed, .free = wii_free_input, + .set_default_keybind_lut = wii_set_default_keybind_lut, .ident = "wii", }; - diff --git a/xbox1/xinput_xbox_input.c b/xbox1/xinput_xbox_input.c index 5510a7163d..c680c5072d 100644 --- a/xbox1/xinput_xbox_input.c +++ b/xbox1/xinput_xbox_input.c @@ -191,6 +191,33 @@ static bool xinput_input_key_pressed(void *data, int key) return retval; } +static void xinput_set_default_keybind_lut(void) +{ + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_B] = platform_keys[XDK_DEVICE_ID_JOYPAD_A].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_Y] = platform_keys[XDK_DEVICE_ID_JOYPAD_X].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_SELECT] = platform_keys[XDK_DEVICE_ID_JOYPAD_BACK].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_START] = platform_keys[XDK_DEVICE_ID_JOYPAD_START].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_UP] = platform_keys[XDK_DEVICE_ID_JOYPAD_UP].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_DOWN] = platform_keys[XDK_DEVICE_ID_JOYPAD_DOWN].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_LEFT] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_RIGHT] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_A] = platform_keys[XDK_DEVICE_ID_JOYPAD_B].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_X] = platform_keys[XDK_DEVICE_ID_JOYPAD_Y].joykey; +#if defined(_XBOX1) + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[XDK_DEVICE_ID_JOYPAD_LB].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[XDK_DEVICE_ID_JOYPAD_RB].joykey; +#elif defined(_XBOX360) + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[XDK_DEVICE_ID_JOYPAD_LB].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[XDK_DEVICE_ID_JOYPAD_RB].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER].joykey; +#endif + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L3] = platform_keys[XDK_DEVICE_ID_LSTICK_THUMB].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R3] = platform_keys[XDK_DEVICE_ID_RSTICK_THUMB].joykey; +} + const input_driver_t input_xinput = { xinput_input_init, @@ -198,5 +225,6 @@ const input_driver_t input_xinput = xinput_input_state, xinput_input_key_pressed, xinput_input_free_input, + xinput_set_default_keybind_lut, "xinput" }; diff --git a/xbox1/xinput_xbox_input.h b/xbox1/xinput_xbox_input.h index 34bf1a8719..be7bc64782 100644 --- a/xbox1/xinput_xbox_input.h +++ b/xbox1/xinput_xbox_input.h @@ -44,4 +44,42 @@ enum { XINPUT1_GAMEPAD_RSTICK_DOWN_MASK = 1 << 23, }; +enum xdk_device_id +{ + XDK_DEVICE_ID_JOYPAD_B = 0, + XDK_DEVICE_ID_JOYPAD_A, + XDK_DEVICE_ID_JOYPAD_Y, + XDK_DEVICE_ID_JOYPAD_X, + XDK_DEVICE_ID_JOYPAD_UP, + XDK_DEVICE_ID_JOYPAD_DOWN, + XDK_DEVICE_ID_JOYPAD_LEFT, + XDK_DEVICE_ID_JOYPAD_RIGHT, + XDK_DEVICE_ID_JOYPAD_BACK, + XDK_DEVICE_ID_JOYPAD_START, + XDK_DEVICE_ID_JOYPAD_LB, + XDK_DEVICE_ID_JOYPAD_LEFT_TRIGGER, + XDK_DEVICE_ID_LSTICK_THUMB, + XDK_DEVICE_ID_JOYPAD_RB, + XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER, + XDK_DEVICE_ID_RSTICK_THUMB, + XDK_DEVICE_ID_LSTICK_LEFT, + XDK_DEVICE_ID_LSTICK_RIGHT, + XDK_DEVICE_ID_LSTICK_UP, + XDK_DEVICE_ID_LSTICK_DOWN, + XDK_DEVICE_ID_LSTICK_LEFT_DPAD, + XDK_DEVICE_ID_LSTICK_RIGHT_DPAD, + XDK_DEVICE_ID_LSTICK_UP_DPAD, + XDK_DEVICE_ID_LSTICK_DOWN_DPAD, + XDK_DEVICE_ID_RSTICK_LEFT, + XDK_DEVICE_ID_RSTICK_RIGHT, + XDK_DEVICE_ID_RSTICK_UP, + XDK_DEVICE_ID_RSTICK_DOWN, + XDK_DEVICE_ID_RSTICK_LEFT_DPAD, + XDK_DEVICE_ID_RSTICK_RIGHT_DPAD, + XDK_DEVICE_ID_RSTICK_UP_DPAD, + XDK_DEVICE_ID_RSTICK_DOWN_DPAD, + + RARCH_LAST_PLATFORM_KEY +}; + #endif diff --git a/xdk/frontend/main.c b/xdk/frontend/main.c index a66adc334c..59c33fcf75 100644 --- a/xdk/frontend/main.c +++ b/xdk/frontend/main.c @@ -121,14 +121,14 @@ int main(int argc, char *argv[]) config_set_defaults(); - rarch_configure_libretro(default_paths.filesystem_root_dir, default_paths.executable_extension); + input_xinput.init(); + rarch_configure_libretro(&input_xinput, default_paths.filesystem_root_dir, default_paths.executable_extension); #if defined(HAVE_D3D8) || defined(HAVE_D3D9) video_xdk_d3d.start(); #else video_null.start(); #endif - input_xinput.init(); rarch_input_set_default_keybind_names_for_emulator(); From 2ab5f84e5c3b09fc8bafd56ff262ac69df106072 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Wed, 25 Jul 2012 21:46:22 +0200 Subject: [PATCH 08/19] (360/PS3) Ports that support HAVE_HDD_CACHE_PARTITION will fill in default_paths member with path to cache dir --- console/retroarch_console.h | 3 +++ console/retroarch_rzlib.c | 8 +------- ps3/frontend/main.c | 3 +++ xdk/frontend/main.c | 7 +++++-- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/console/retroarch_console.h b/console/retroarch_console.h index 4de103b1af..9174f5d010 100644 --- a/console/retroarch_console.h +++ b/console/retroarch_console.h @@ -139,6 +139,9 @@ typedef struct char menu_border_file[PATH_MAX]; char border_file[PATH_MAX]; char border_dir[PATH_MAX]; +#ifdef HAVE_HDD_CACHE_PARTITION + char cache_dir[PATH_MAX]; +#endif char cgp_dir[PATH_MAX]; char config_file[PATH_MAX]; char core_dir[PATH_MAX]; diff --git a/console/retroarch_rzlib.c b/console/retroarch_rzlib.c index 97b9facb26..5576f0f97d 100644 --- a/console/retroarch_rzlib.c +++ b/console/retroarch_rzlib.c @@ -49,13 +49,7 @@ static int rarch_extract_currentfile_in_zip(unzFile uf) char write_filename[PATH_MAX]; #ifdef HAVE_HDD_CACHE_PARTITION - -#if defined(__CELLOS_LV2__) - snprintf(write_filename, sizeof(write_filename), "/dev_hdd1/%s", filename_inzip); -#elif defined(_XBOX) - snprintf(write_filename, sizeof(write_filename), "cache:\\%s", filename_inzip); -#endif - + snprintf(write_filename, sizeof(write_filename), "%s%s", default_paths.cache_dir, filename_inzip); #endif err = unzOpenCurrentFile(uf); diff --git a/ps3/frontend/main.c b/ps3/frontend/main.c index 082c82fb95..800aae82f9 100644 --- a/ps3/frontend/main.c +++ b/ps3/frontend/main.c @@ -187,6 +187,9 @@ static void get_environment_settings(int argc, char *argv[]) RARCH_LOG("usrDirPath : [%s].\n", default_paths.port_dir); } +#ifdef HAVE_HDD_CACHE_PARTITION + snprintf(default_paths.cache_dir, sizeof(default_paths.cache_dir), "/dev_hdd1/"); +#endif snprintf(default_paths.core_dir, sizeof(default_paths.core_dir), "%s/cores", default_paths.port_dir); snprintf(default_paths.executable_extension, sizeof(default_paths.executable_extension), ".SELF"); snprintf(default_paths.savestate_dir, sizeof(default_paths.savestate_dir), "%s/savestates", default_paths.core_dir); diff --git a/xdk/frontend/main.c b/xdk/frontend/main.c index 59c33fcf75..4d3c5ee3ba 100644 --- a/xdk/frontend/main.c +++ b/xdk/frontend/main.c @@ -99,13 +99,16 @@ static void get_environment_settings (void) } #endif -#ifdef _XBOX1 +#if defined(_XBOX1) /* FIXME: Hardcoded */ strlcpy(default_paths.config_file, "D:\\retroarch.cfg", sizeof(default_paths.config_file)); strlcpy(g_settings.system_directory, "D:\\system\\", sizeof(g_settings.system_directory)); strlcpy(default_paths.filesystem_root_dir, "D:\\", sizeof(default_paths.filesystem_root_dir)); strlcpy(default_paths.executable_extension, ".xbe", sizeof(default_paths.executable_extension)); -#else +#elif defined(_XBOX360) +#ifdef HAVE_HDD_CACHE_PARTITION + strlcpy(default_paths.cache_dir, "cache:\\", sizeof(default_paths.cache_dir)); +#endif strlcpy(default_paths.filesystem_root_dir, "game:\\", sizeof(default_paths.filesystem_root_dir)); strlcpy(default_paths.shader_file, "game:\\media\\shaders\\stock.cg", sizeof(default_paths.shader_file)); strlcpy(default_paths.config_file, "game:\\retroarch.cfg", sizeof(default_paths.config_file)); From bfb933d98da9ea48d0702295c60f9b3126b276e1 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Wed, 25 Jul 2012 23:09:36 +0200 Subject: [PATCH 09/19] (PS3) Split up more code in retroarch_console.c --- console/griffin/griffin.c | 6 + console/libretro_mgmt.c | 2 +- console/libretro_mgmt.h | 2 - console/retroarch_config.c | 188 +++++++++++++++++++++++ console/retroarch_config.h | 31 ++++ console/retroarch_console.c | 238 ------------------------------ console/retroarch_console.h | 28 +--- console/retroarch_console_input.h | 7 - console/retroarch_rom_ext.c | 80 ++++++++++ console/retroarch_rom_ext.h | 29 ++++ ps3/frontend/main.c | 2 + ps3/frontend/menu.c | 3 + xdk/frontend/main.c | 1 + 13 files changed, 344 insertions(+), 273 deletions(-) create mode 100644 console/retroarch_config.c create mode 100644 console/retroarch_config.h create mode 100644 console/retroarch_rom_ext.c create mode 100644 console/retroarch_rom_ext.h diff --git a/console/griffin/griffin.c b/console/griffin/griffin.c index 0b5c308209..90ddaab09c 100644 --- a/console/griffin/griffin.c +++ b/console/griffin/griffin.c @@ -21,7 +21,13 @@ /*============================================================ CONSOLE EXTENSIONS ============================================================ */ +#include "../retroarch_rom_ext.c" #include "../retroarch_console.c" + +#ifdef HAVE_CONFIGFILE +#include "../retroarch_config.c" +#endif + #include "../retroarch_console_input.c" #ifdef HAVE_ZLIB diff --git a/console/libretro_mgmt.c b/console/libretro_mgmt.c index 3362be5ff5..87844ef4e3 100644 --- a/console/libretro_mgmt.c +++ b/console/libretro_mgmt.c @@ -65,7 +65,7 @@ static bool rarch_manage_libretro_install(char *libretro_core_installed, size_t return ret; } -bool rarch_configure_libretro_core(const char *full_path, const char *tmp_path, +static bool rarch_configure_libretro_core(const char *full_path, const char *tmp_path, const char *libretro_path, const char *config_path, const char *extension) { bool libretro_core_was_installed = false; diff --git a/console/libretro_mgmt.h b/console/libretro_mgmt.h index e7713f07eb..07e486e8df 100644 --- a/console/libretro_mgmt.h +++ b/console/libretro_mgmt.h @@ -29,8 +29,6 @@ enum }; void rarch_manage_libretro_set_first_file(char *first_file, size_t size_of_first_file, const char *libretro_path, const char * exe_ext); -bool rarch_configure_libretro_core(const char *full_path, const char *tmp_path, - const char *libretro_path, const char *config_path, const char *extension); void rarch_configure_libretro(const input_driver_t *input, const char *path_prefix, const char * extension); #endif diff --git a/console/retroarch_config.c b/console/retroarch_config.c new file mode 100644 index 0000000000..e8e71b3317 --- /dev/null +++ b/console/retroarch_config.c @@ -0,0 +1,188 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2012 - Hans-Kristian Arntzen + * Copyright (C) 2011-2012 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include + +#include "retroarch_config.h" + +#include "../conf/config_file.h" +#include "../conf/config_file_macros.h" + +void rarch_config_create_default(const char * conf_name) +{ + FILE * f; + RARCH_WARN("Config file \"%s\" doesn't exist. Creating...\n", conf_name); + f = fopen(conf_name, "w"); + fclose(f); +} + +void rarch_config_load(const char * conf_name, const char * libretro_dir_path, const char * exe_ext, bool find_libretro_path) +{ + if(!path_file_exists(conf_name)) + rarch_config_create_default(conf_name); + else + { + config_file_t * conf = config_file_new(conf_name); + + // g_settings + +#ifdef HAVE_LIBRETRO_MANAGEMENT + if(find_libretro_path) + { + CONFIG_GET_STRING(libretro, "libretro_path"); + + if(strcmp(g_settings.libretro, "") == 0) + { + char first_file[PATH_MAX]; + rarch_manage_libretro_set_first_file(first_file, sizeof(first_file), libretro_dir_path, exe_ext); + if(first_file != NULL) + strlcpy(g_settings.libretro, first_file, sizeof(g_settings.libretro)); + } + } +#endif + + CONFIG_GET_STRING(system_directory, "system_directory"); + CONFIG_GET_STRING(cheat_database, "cheat_database"); + CONFIG_GET_BOOL(rewind_enable, "rewind_enable"); + CONFIG_GET_STRING(video.cg_shader_path, "video_cg_shader"); +#ifdef HAVE_FBO + CONFIG_GET_STRING(video.second_pass_shader, "video_second_pass_shader"); + CONFIG_GET_FLOAT(video.fbo_scale_x, "video_fbo_scale_x"); + CONFIG_GET_FLOAT(video.fbo_scale_y, "video_fbo_scale_y"); + CONFIG_GET_BOOL(video.render_to_texture, "video_render_to_texture"); + CONFIG_GET_BOOL(video.second_pass_smooth, "video_second_pass_smooth"); +#endif +#ifdef _XBOX360 + CONFIG_GET_BOOL_CONSOLE(gamma_correction_enable, "gamma_correction_enable"); + CONFIG_GET_INT_CONSOLE(color_format, "color_format"); +#endif + CONFIG_GET_BOOL(video.smooth, "video_smooth"); + CONFIG_GET_BOOL(video.vsync, "video_vsync"); + CONFIG_GET_FLOAT(video.aspect_ratio, "video_aspect_ratio"); + CONFIG_GET_STRING(audio.device, "audio_device"); + + for (unsigned i = 0; i < 7; i++) + { + char cfg[64]; + snprintf(cfg, sizeof(cfg), "input_dpad_emulation_p%u", i + 1); + CONFIG_GET_INT(input.dpad_emulation[i], cfg); + } + + // g_console + +#ifdef HAVE_FBO + CONFIG_GET_BOOL_CONSOLE(fbo_enabled, "fbo_enabled"); +#endif +#ifdef __CELLOS_LV2__ + CONFIG_GET_BOOL_CONSOLE(custom_bgm_enable, "custom_bgm_enable"); +#endif + CONFIG_GET_BOOL_CONSOLE(overscan_enable, "overscan_enable"); + CONFIG_GET_BOOL_CONSOLE(screenshots_enable, "screenshots_enable"); + CONFIG_GET_BOOL_CONSOLE(throttle_enable, "throttle_enable"); + CONFIG_GET_BOOL_CONSOLE(triple_buffering_enable, "triple_buffering_enable"); + CONFIG_GET_BOOL_CONSOLE(info_msg_enable, "info_msg_enable"); + CONFIG_GET_INT_CONSOLE(aspect_ratio_index, "aspect_ratio_index"); + CONFIG_GET_INT_CONSOLE(current_resolution_id, "current_resolution_id"); + CONFIG_GET_INT_CONSOLE(viewports.custom_vp.x, "custom_viewport_x"); + CONFIG_GET_INT_CONSOLE(viewports.custom_vp.y, "custom_viewport_y"); + CONFIG_GET_INT_CONSOLE(viewports.custom_vp.width, "custom_viewport_width"); + CONFIG_GET_INT_CONSOLE(viewports.custom_vp.height, "custom_viewport_height"); + CONFIG_GET_INT_CONSOLE(screen_orientation, "screen_orientation"); + CONFIG_GET_INT_CONSOLE(sound_mode, "sound_mode"); + CONFIG_GET_STRING_CONSOLE(default_rom_startup_dir, "default_rom_startup_dir"); + CONFIG_GET_FLOAT_CONSOLE(menu_font_size, "menu_font_size"); + CONFIG_GET_FLOAT_CONSOLE(overscan_amount, "overscan_amount"); + + // g_extern + CONFIG_GET_INT_EXTERN(state_slot, "state_slot"); + CONFIG_GET_INT_EXTERN(audio_data.mute, "audio_mute"); + } +} + +void rarch_config_save(const char * conf_name) +{ + if(!path_file_exists(conf_name)) + rarch_config_create_default(conf_name); + else + { + config_file_t * conf = config_file_new(conf_name); + + if(conf == NULL) + conf = config_file_new(NULL); + + // g_settings + config_set_string(conf, "libretro_path", g_settings.libretro); +#ifdef HAVE_XML + config_set_string(conf, "cheat_database_path", g_settings.cheat_database); +#endif + config_set_bool(conf, "rewind_enable", g_settings.rewind_enable); + config_set_string(conf, "video_cg_shader", g_settings.video.cg_shader_path); + config_set_float(conf, "video_aspect_ratio", g_settings.video.aspect_ratio); +#ifdef HAVE_FBO + config_set_float(conf, "video_fbo_scale_x", g_settings.video.fbo_scale_x); + config_set_float(conf, "video_fbo_scale_y", g_settings.video.fbo_scale_y); + config_set_string(conf, "video_second_pass_shader", g_settings.video.second_pass_shader); + config_set_bool(conf, "video_render_to_texture", g_settings.video.render_to_texture); + config_set_bool(conf, "video_second_pass_smooth", g_settings.video.second_pass_smooth); +#endif + config_set_bool(conf, "video_smooth", g_settings.video.smooth); + config_set_bool(conf, "video_vsync", g_settings.video.vsync); + config_set_string(conf, "audio_device", g_settings.audio.device); + + for (unsigned i = 0; i < 7; i++) + { + char cfg[64]; + snprintf(cfg, sizeof(cfg), "input_dpad_emulation_p%u", i + 1); + config_set_int(conf, cfg, g_settings.input.dpad_emulation[i]); + } + +#ifdef RARCH_CONSOLE + config_set_bool(conf, "fbo_enabled", g_console.fbo_enabled); +#ifdef __CELLOS_LV2__ + config_set_bool(conf, "custom_bgm_enable", g_console.custom_bgm_enable); +#endif + config_set_bool(conf, "overscan_enable", g_console.overscan_enable); + config_set_bool(conf, "screenshots_enable", g_console.screenshots_enable); +#ifdef _XBOX + config_set_bool(conf, "gamma_correction_enable", g_console.gamma_correction_enable); + config_set_int(conf, "color_format", g_console.color_format); +#endif + config_set_bool(conf, "throttle_enable", g_console.throttle_enable); + config_set_bool(conf, "triple_buffering_enable", g_console.triple_buffering_enable); + config_set_bool(conf, "info_msg_enable", g_console.info_msg_enable); + config_set_int(conf, "sound_mode", g_console.sound_mode); + config_set_int(conf, "aspect_ratio_index", g_console.aspect_ratio_index); + config_set_int(conf, "current_resolution_id", g_console.current_resolution_id); + config_set_int(conf, "custom_viewport_width", g_console.viewports.custom_vp.width); + config_set_int(conf, "custom_viewport_height", g_console.viewports.custom_vp.height); + config_set_int(conf, "custom_viewport_x", g_console.viewports.custom_vp.x); + config_set_int(conf, "custom_viewport_y", g_console.viewports.custom_vp.y); + config_set_int(conf, "screen_orientation", g_console.screen_orientation); + config_set_string(conf, "default_rom_startup_dir", g_console.default_rom_startup_dir); + config_set_float(conf, "menu_font_size", g_console.menu_font_size); + config_set_float(conf, "overscan_amount", g_console.overscan_amount); +#endif + + // g_extern + config_set_int(conf, "state_slot", g_extern.state_slot); + config_set_int(conf, "audio_mute", g_extern.audio_data.mute); + + if (!config_file_write(conf, conf_name)) + RARCH_ERR("Failed to write config file to \"%s\". Check permissions.\n", conf_name); + + free(conf); + } +} diff --git a/console/retroarch_config.h b/console/retroarch_config.h new file mode 100644 index 0000000000..1ed691b422 --- /dev/null +++ b/console/retroarch_config.h @@ -0,0 +1,31 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2012 - Hans-Kristian Arntzen + * Copyright (C) 2011-2012 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#ifndef _RARCH_CONSOLE_CONFIG_H +#define _RARCH_CONSOLE_CONFIG_H + +enum +{ + CONFIG_FILE, + SHADER_PRESET_FILE, + INPUT_PRESET_FILE +}; + +void rarch_config_create_default(const char * conf_name); +void rarch_config_load(const char * conf_name, const char * libretro_dir_path, const char * exe_ext, bool find_libretro_path); +void rarch_config_save(const char * conf_name); + +#endif diff --git a/console/retroarch_console.c b/console/retroarch_console.c index ff51d33af2..62ab43d73e 100644 --- a/console/retroarch_console.c +++ b/console/retroarch_console.c @@ -18,7 +18,6 @@ #include #include #include -#include #include "../boolean.h" #include "../compat/strl.h" #include "../libretro.h" @@ -27,79 +26,14 @@ #include "retroarch_console.h" #include "../file.h" -#ifdef HAVE_CONFIGFILE -#include "../conf/config_file.h" -#include "../conf/config_file_macros.h" -#endif - #ifdef _WIN32 #include "../compat/posix_string.h" #endif #define MAX_ARGS 32 -/*============================================================ - ROM EXTENSIONS -============================================================ */ - default_paths_t default_paths; -void rarch_console_load_game(const char *path) -{ - snprintf(g_console.rom_path, sizeof(g_console.rom_path), path); - rarch_settings_change(S_START_RARCH); -} - -const char *rarch_console_get_rom_ext(void) -{ - const char *retval = NULL; - - struct retro_system_info info; -#ifdef ANDROID - pretro_get_system_info(&info); -#else - retro_get_system_info(&info); -#endif - - if (info.valid_extensions) - retval = info.valid_extensions; - else - retval = "ZIP|zip"; - - return retval; -} - -void rarch_console_name_from_id(char *name, size_t size) -{ - if (size == 0) - return; - - struct retro_system_info info; -#ifdef ANDROID - pretro_get_system_info(&info); -#else - retro_get_system_info(&info); -#endif - const char *id = info.library_name ? info.library_name : "Unknown"; - - if (!id || strlen(id) >= size) - { - name[0] = '\0'; - return; - } - - name[strlen(id)] = '\0'; - - for (size_t i = 0; id[i] != '\0'; i++) - { - char c = id[i]; - if (isspace(c) || isblank(c)) - name[i] = '_'; - else - name[i] = tolower(c); - } -} - /*============================================================ VIDEO EXTENSIONS ============================================================ */ @@ -374,175 +308,3 @@ const char * rarch_convert_wchar_to_const_char(const wchar_t * wstr) wcstombs(str, wstr, sizeof(str)); return str; } - -/*============================================================ - CONFIG - ============================================================ */ - -#ifdef HAVE_CONFIGFILE -void rarch_config_create_default(const char * conf_name) -{ - FILE * f; - RARCH_WARN("Config file \"%s\" doesn't exist. Creating...\n", conf_name); - f = fopen(conf_name, "w"); - fclose(f); -} - -void rarch_config_load(const char * conf_name, const char * libretro_dir_path, const char * exe_ext, bool find_libretro_path) -{ - if(!path_file_exists(conf_name)) - rarch_config_create_default(conf_name); - else - { - config_file_t * conf = config_file_new(conf_name); - - // g_settings - -#ifdef HAVE_LIBRETRO_MANAGEMENT - if(find_libretro_path) - { - CONFIG_GET_STRING(libretro, "libretro_path"); - - if(strcmp(g_settings.libretro, "") == 0) - { - char first_file[PATH_MAX]; - rarch_manage_libretro_set_first_file(first_file, sizeof(first_file), libretro_dir_path, exe_ext); - if(first_file != NULL) - strlcpy(g_settings.libretro, first_file, sizeof(g_settings.libretro)); - } - } -#endif - - CONFIG_GET_STRING(system_directory, "system_directory"); - CONFIG_GET_STRING(cheat_database, "cheat_database"); - CONFIG_GET_BOOL(rewind_enable, "rewind_enable"); - CONFIG_GET_STRING(video.cg_shader_path, "video_cg_shader"); -#ifdef HAVE_FBO - CONFIG_GET_STRING(video.second_pass_shader, "video_second_pass_shader"); - CONFIG_GET_FLOAT(video.fbo_scale_x, "video_fbo_scale_x"); - CONFIG_GET_FLOAT(video.fbo_scale_y, "video_fbo_scale_y"); - CONFIG_GET_BOOL(video.render_to_texture, "video_render_to_texture"); - CONFIG_GET_BOOL(video.second_pass_smooth, "video_second_pass_smooth"); -#endif -#ifdef _XBOX360 - CONFIG_GET_BOOL_CONSOLE(gamma_correction_enable, "gamma_correction_enable"); - CONFIG_GET_INT_CONSOLE(color_format, "color_format"); -#endif - CONFIG_GET_BOOL(video.smooth, "video_smooth"); - CONFIG_GET_BOOL(video.vsync, "video_vsync"); - CONFIG_GET_FLOAT(video.aspect_ratio, "video_aspect_ratio"); - CONFIG_GET_STRING(audio.device, "audio_device"); - - for (unsigned i = 0; i < 7; i++) - { - char cfg[64]; - snprintf(cfg, sizeof(cfg), "input_dpad_emulation_p%u", i + 1); - CONFIG_GET_INT(input.dpad_emulation[i], cfg); - } - - // g_console - -#ifdef HAVE_FBO - CONFIG_GET_BOOL_CONSOLE(fbo_enabled, "fbo_enabled"); -#endif -#ifdef __CELLOS_LV2__ - CONFIG_GET_BOOL_CONSOLE(custom_bgm_enable, "custom_bgm_enable"); -#endif - CONFIG_GET_BOOL_CONSOLE(overscan_enable, "overscan_enable"); - CONFIG_GET_BOOL_CONSOLE(screenshots_enable, "screenshots_enable"); - CONFIG_GET_BOOL_CONSOLE(throttle_enable, "throttle_enable"); - CONFIG_GET_BOOL_CONSOLE(triple_buffering_enable, "triple_buffering_enable"); - CONFIG_GET_BOOL_CONSOLE(info_msg_enable, "info_msg_enable"); - CONFIG_GET_INT_CONSOLE(aspect_ratio_index, "aspect_ratio_index"); - CONFIG_GET_INT_CONSOLE(current_resolution_id, "current_resolution_id"); - CONFIG_GET_INT_CONSOLE(viewports.custom_vp.x, "custom_viewport_x"); - CONFIG_GET_INT_CONSOLE(viewports.custom_vp.y, "custom_viewport_y"); - CONFIG_GET_INT_CONSOLE(viewports.custom_vp.width, "custom_viewport_width"); - CONFIG_GET_INT_CONSOLE(viewports.custom_vp.height, "custom_viewport_height"); - CONFIG_GET_INT_CONSOLE(screen_orientation, "screen_orientation"); - CONFIG_GET_INT_CONSOLE(sound_mode, "sound_mode"); - CONFIG_GET_STRING_CONSOLE(default_rom_startup_dir, "default_rom_startup_dir"); - CONFIG_GET_FLOAT_CONSOLE(menu_font_size, "menu_font_size"); - CONFIG_GET_FLOAT_CONSOLE(overscan_amount, "overscan_amount"); - - // g_extern - CONFIG_GET_INT_EXTERN(state_slot, "state_slot"); - CONFIG_GET_INT_EXTERN(audio_data.mute, "audio_mute"); - } -} - -void rarch_config_save(const char * conf_name) -{ - if(!path_file_exists(conf_name)) - rarch_config_create_default(conf_name); - else - { - config_file_t * conf = config_file_new(conf_name); - - if(conf == NULL) - conf = config_file_new(NULL); - - // g_settings - config_set_string(conf, "libretro_path", g_settings.libretro); -#ifdef HAVE_XML - config_set_string(conf, "cheat_database_path", g_settings.cheat_database); -#endif - config_set_bool(conf, "rewind_enable", g_settings.rewind_enable); - config_set_string(conf, "video_cg_shader", g_settings.video.cg_shader_path); - config_set_float(conf, "video_aspect_ratio", g_settings.video.aspect_ratio); -#ifdef HAVE_FBO - config_set_float(conf, "video_fbo_scale_x", g_settings.video.fbo_scale_x); - config_set_float(conf, "video_fbo_scale_y", g_settings.video.fbo_scale_y); - config_set_string(conf, "video_second_pass_shader", g_settings.video.second_pass_shader); - config_set_bool(conf, "video_render_to_texture", g_settings.video.render_to_texture); - config_set_bool(conf, "video_second_pass_smooth", g_settings.video.second_pass_smooth); -#endif - config_set_bool(conf, "video_smooth", g_settings.video.smooth); - config_set_bool(conf, "video_vsync", g_settings.video.vsync); - config_set_string(conf, "audio_device", g_settings.audio.device); - - for (unsigned i = 0; i < 7; i++) - { - char cfg[64]; - snprintf(cfg, sizeof(cfg), "input_dpad_emulation_p%u", i + 1); - config_set_int(conf, cfg, g_settings.input.dpad_emulation[i]); - } - -#ifdef RARCH_CONSOLE - config_set_bool(conf, "fbo_enabled", g_console.fbo_enabled); -#ifdef __CELLOS_LV2__ - config_set_bool(conf, "custom_bgm_enable", g_console.custom_bgm_enable); -#endif - config_set_bool(conf, "overscan_enable", g_console.overscan_enable); - config_set_bool(conf, "screenshots_enable", g_console.screenshots_enable); -#ifdef _XBOX - config_set_bool(conf, "gamma_correction_enable", g_console.gamma_correction_enable); - config_set_int(conf, "color_format", g_console.color_format); -#endif - config_set_bool(conf, "throttle_enable", g_console.throttle_enable); - config_set_bool(conf, "triple_buffering_enable", g_console.triple_buffering_enable); - config_set_bool(conf, "info_msg_enable", g_console.info_msg_enable); - config_set_int(conf, "sound_mode", g_console.sound_mode); - config_set_int(conf, "aspect_ratio_index", g_console.aspect_ratio_index); - config_set_int(conf, "current_resolution_id", g_console.current_resolution_id); - config_set_int(conf, "custom_viewport_width", g_console.viewports.custom_vp.width); - config_set_int(conf, "custom_viewport_height", g_console.viewports.custom_vp.height); - config_set_int(conf, "custom_viewport_x", g_console.viewports.custom_vp.x); - config_set_int(conf, "custom_viewport_y", g_console.viewports.custom_vp.y); - config_set_int(conf, "screen_orientation", g_console.screen_orientation); - config_set_string(conf, "default_rom_startup_dir", g_console.default_rom_startup_dir); - config_set_float(conf, "menu_font_size", g_console.menu_font_size); - config_set_float(conf, "overscan_amount", g_console.overscan_amount); -#endif - - // g_extern - config_set_int(conf, "state_slot", g_extern.state_slot); - config_set_int(conf, "audio_mute", g_extern.audio_data.mute); - - if (!config_file_write(conf, conf_name)) - RARCH_ERR("Failed to write config file to \"%s\". Check permissions.\n", conf_name); - - free(conf); - } -} -#endif diff --git a/console/retroarch_console.h b/console/retroarch_console.h index 9174f5d010..7931eac951 100644 --- a/console/retroarch_console.h +++ b/console/retroarch_console.h @@ -114,12 +114,6 @@ extern struct aspect_ratio_elem aspectratio_lut[ASPECT_RATIO_END]; extern void rarch_set_auto_viewport(unsigned width, unsigned height); extern void rarch_load_shader(unsigned slot, const char *path); -#include "retroarch_console_input.h" - -/*============================================================ - SOUND -============================================================ */ - enum { SOUND_MODE_NORMAL, @@ -131,9 +125,6 @@ enum #endif }; -/*============================================================ - ROM EXTENSIONS -============================================================ */ typedef struct { char menu_border_file[PATH_MAX]; @@ -164,15 +155,6 @@ typedef struct extern default_paths_t default_paths; -void rarch_console_load_game(const char *path); - -// Get rom extensions for current library. -// Returns NULL if library doesn't have any preferences in particular. -const char *rarch_console_get_rom_ext(void); - -// Transforms a library id to a name suitable as a pathname. -void rarch_console_name_from_id(char *name, size_t size); - /*============================================================ RetroArch ============================================================ */ @@ -230,13 +212,9 @@ const char * rarch_convert_wchar_to_const_char(const wchar_t * wstr); enum { - CONFIG_FILE, - SHADER_PRESET_FILE, - INPUT_PRESET_FILE + MODE_EMULATION = 0, + MODE_MENU, + MODE_EXIT }; -void rarch_config_create_default(const char * conf_name); -void rarch_config_load(const char * conf_name, const char * libretro_dir_path, const char * exe_ext, bool find_libretro_path); -void rarch_config_save(const char * conf_name); - #endif diff --git a/console/retroarch_console_input.h b/console/retroarch_console_input.h index 3063bf57a8..4f2e86890c 100644 --- a/console/retroarch_console_input.h +++ b/console/retroarch_console_input.h @@ -27,13 +27,6 @@ enum keybind_set_id KEYBIND_DEFAULT }; -enum -{ - MODE_EMULATION = 0, - MODE_MENU, - MODE_EXIT -}; - enum { DPAD_EMULATION_NONE = 0, diff --git a/console/retroarch_rom_ext.c b/console/retroarch_rom_ext.c new file mode 100644 index 0000000000..eb4e3b163f --- /dev/null +++ b/console/retroarch_rom_ext.c @@ -0,0 +1,80 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2012 - Hans-Kristian Arntzen + * Copyright (C) 2011-2012 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include + +#include "../general.h" + +#include "console_settings.h" + +#include "retroarch_rom_ext.h" + +void rarch_console_load_game(const char *path) +{ + snprintf(g_console.rom_path, sizeof(g_console.rom_path), path); + rarch_settings_change(S_START_RARCH); +} + +const char *rarch_console_get_rom_ext(void) +{ + const char *retval = NULL; + + struct retro_system_info info; +#ifdef ANDROID + pretro_get_system_info(&info); +#else + retro_get_system_info(&info); +#endif + + if (info.valid_extensions) + retval = info.valid_extensions; + else + retval = "ZIP|zip"; + + return retval; +} + +void rarch_console_name_from_id(char *name, size_t size) +{ + if (size == 0) + return; + + struct retro_system_info info; +#ifdef ANDROID + pretro_get_system_info(&info); +#else + retro_get_system_info(&info); +#endif + const char *id = info.library_name ? info.library_name : "Unknown"; + + if (!id || strlen(id) >= size) + { + name[0] = '\0'; + return; + } + + name[strlen(id)] = '\0'; + + for (size_t i = 0; id[i] != '\0'; i++) + { + char c = id[i]; + if (isspace(c) || isblank(c)) + name[i] = '_'; + else + name[i] = tolower(c); + } +} diff --git a/console/retroarch_rom_ext.h b/console/retroarch_rom_ext.h new file mode 100644 index 0000000000..92a56a5e32 --- /dev/null +++ b/console/retroarch_rom_ext.h @@ -0,0 +1,29 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2012 - Hans-Kristian Arntzen + * Copyright (C) 2011-2012 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#ifndef RARCH_ROM_EXT_H__ +#define RARCH_ROM_EXT_H__ + +void rarch_console_load_game(const char *path); + +// Get rom extensions for current library. +// Returns NULL if library doesn't have any preferences in particular. +const char *rarch_console_get_rom_ext(void); + +// Transforms a library id to a name suitable as a pathname. +void rarch_console_name_from_id(char *name, size_t size); + +#endif diff --git a/ps3/frontend/main.c b/ps3/frontend/main.c index 800aae82f9..4cf8691ca9 100644 --- a/ps3/frontend/main.c +++ b/ps3/frontend/main.c @@ -46,6 +46,8 @@ #include "../../gfx/gl_common.h" #include "../../console/retroarch_console.h" +#include "../../console/retroarch_console_input.h" +#include "../../console/retroarch_config.h" #include "../../conf/config_file.h" #include "../../conf/config_file_macros.h" #include "../../general.h" diff --git a/ps3/frontend/menu.c b/ps3/frontend/menu.c index bc0e559c41..26c02f5052 100644 --- a/ps3/frontend/menu.c +++ b/ps3/frontend/menu.c @@ -27,6 +27,9 @@ #include "../../console/fileio/file_browser.h" #include "../../console/retroarch_console.h" +#include "../../console/retroarch_rom_ext.h" +#include "../../console/retroarch_console_input.h" +#include "../../console/retroarch_config.h" #ifdef HAVE_ZLIB #include "../../console/retroarch_rzlib.h" diff --git a/xdk/frontend/main.c b/xdk/frontend/main.c index 4d3c5ee3ba..82baaaba7e 100644 --- a/xdk/frontend/main.c +++ b/xdk/frontend/main.c @@ -38,6 +38,7 @@ #endif #include "../../console/retroarch_console.h" +#include "../../console/retroarch_config.h" #include "../../conf/config_file.h" #include "../../conf/config_file_macros.h" #include "../../file.h" From 5087d9f69c7b20a5ad56210c11d8c1382fb7106a Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 25 Jul 2012 23:24:38 +0200 Subject: [PATCH 10/19] (Xbox 1) build fix --- console/retroarch_console.c | 4 ---- console/retroarch_rom_ext.c | 4 ++++ xbox1/xinput_xbox_input.c | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/console/retroarch_console.c b/console/retroarch_console.c index 62ab43d73e..30497ba745 100644 --- a/console/retroarch_console.c +++ b/console/retroarch_console.c @@ -26,10 +26,6 @@ #include "retroarch_console.h" #include "../file.h" -#ifdef _WIN32 -#include "../compat/posix_string.h" -#endif - #define MAX_ARGS 32 default_paths_t default_paths; diff --git a/console/retroarch_rom_ext.c b/console/retroarch_rom_ext.c index eb4e3b163f..d49fa84a83 100644 --- a/console/retroarch_rom_ext.c +++ b/console/retroarch_rom_ext.c @@ -17,6 +17,10 @@ #include #include +#ifdef _WIN32 +#include "../compat/posix_string.h" +#endif + #include "../general.h" #include "console_settings.h" diff --git a/xbox1/xinput_xbox_input.c b/xbox1/xinput_xbox_input.c index c680c5072d..f9af267ba2 100644 --- a/xbox1/xinput_xbox_input.c +++ b/xbox1/xinput_xbox_input.c @@ -86,6 +86,7 @@ static void xinput_input_poll(void *data) { XINPUT_STATE state[4]; XINPUT_CAPABILITIES caps[4]; + (void)caps; real_state[i] = 0; // handle removed devices bRemoved[i] = (dwRemovals & (1< Date: Wed, 25 Jul 2012 23:31:15 +0200 Subject: [PATCH 11/19] (PS3) Small cleanup in ps3_audio.c --- ps3/ps3_audio.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/ps3/ps3_audio.c b/ps3/ps3_audio.c index 993906e0a4..7c53fde37f 100644 --- a/ps3/ps3_audio.c +++ b/ps3/ps3_audio.c @@ -136,9 +136,7 @@ static void *ps3_audio_init(const char *device, unsigned rate, unsigned latency) sys_lwmutex_attribute_t lock_attr; sys_lwmutex_attribute_t cond_lock_attr; sys_lwcond_attribute_t cond_attr; -#endif -#ifndef __PSL1GHT__ sys_lwmutex_attribute_initialize(lock_attr); sys_lwmutex_attribute_initialize(cond_lock_attr); sys_lwcond_attribute_initialize(cond_attr); From 19836d5f4c4eab0f7701075ef3053c62d5d1eed4 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Thu, 26 Jul 2012 00:35:51 +0200 Subject: [PATCH 12/19] (RGL) Tweaks --- console/rgl/ps3/device_ctx.cpp | 9 ++------- ps3/sdk_defines.h | 8 +++++++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/console/rgl/ps3/device_ctx.cpp b/console/rgl/ps3/device_ctx.cpp index cbd08e8c44..34e3b2757e 100644 --- a/console/rgl/ps3/device_ctx.cpp +++ b/console/rgl/ps3/device_ctx.cpp @@ -189,8 +189,6 @@ void _RGLFifoFinish( RGLFifo *fifo ) { if ( !_RGLFifoReferenceInUse( fifo, ref ) ) break; - - sys_timer_usleep( 10 ); } } @@ -225,7 +223,6 @@ static void _RGLFifoInit( RGLFifo *fifo, void *dmaControl, unsigned long dmaPush { if ( _RGLFifoReadReference( fifo ) == 0 ) break; - sys_timer_usleep( 10 ); } } fifo->dmaPushBufferGPU = dmaPushBuffer; @@ -521,7 +518,6 @@ int32_t _RGLOutOfSpaceCallback( struct CellGcmContextData* fifoContext, uint32_t || (get < fifo->dmaPushBufferOffset) || (get > fifo->dmaPushBufferOffset + fifo->dmaPushBufferSizeInWords*sizeof(uint32_t))) { - sys_timer_usleep(30); get = fifo->dmaControl->Get; } @@ -586,7 +582,7 @@ static int _RGLInitRM( RGLResource *gcmResource, unsigned int hostMemorySize, in gcmResource->semaphores = ( RGLSemaphoreMemory * )cellGcmGetLabelAddress( 0 ); gcmResource->dmaControl = ( char* ) cellGcmGetControlRegister() - (( char * ) & (( RGLControlDma* )0 )->Put - ( char * )0 ); - cellGcmFinish( 1 ); + cellGcmFinish(1); gcmResource->hostMemorySize -= dmaPushBufferSize + _RGL_DMA_PUSH_BUFFER_PREFETCH_PADDING; gcmResource->dmaPushBuffer = gcmResource->hostMemoryBase + gcmResource->hostMemorySize; @@ -1294,8 +1290,7 @@ static inline void _RGLUtilWaitForIdle (void) cellGcmSetWriteBackEndLabelInline( &_RGLState.fifo, RGL_UTIL_LABEL_INDEX, _RGLState.labelValue); cellGcmFlush(); - while( *(cellGcmGetLabelAddress( RGL_UTIL_LABEL_INDEX)) != _RGLState.labelValue) - sys_timer_usleep(30); + while( *(cellGcmGetLabelAddress( RGL_UTIL_LABEL_INDEX)) != _RGLState.labelValue); _RGLState.labelValue++; } diff --git a/ps3/sdk_defines.h b/ps3/sdk_defines.h index 0264488543..72c5570d95 100644 --- a/ps3/sdk_defines.h +++ b/ps3/sdk_defines.h @@ -413,7 +413,6 @@ #define CellVideoOutResolution videoResolution #define CellVideoOutState videoState -#define CellRescPalTemporalMode rescPalTemporalMode #define CellRescInitConfig rescInitConfig #define CellRescSrc rescSrc #define CellRescBufferMode rescBufferMode @@ -422,6 +421,8 @@ #define memoryFrequency memoryFreq #define coreFrequency coreFreq +#define cellGcmFinish rsxFinish + #define cellGcmGetFlipStatus gcmGetFlipStatus #define cellGcmResetFlipStatus gcmResetFlipStatus #define cellGcmSetWaitFlip gcmSetWaitFlip @@ -441,6 +442,11 @@ #define cellGcmSetTileInfo gcmSetTileInfo #define cellGcmAddressToOffset gcmAddressToOffset +#define cellRescCreateInterlaceTable rescCreateInterlaceTable +#define cellRescSetDisplayMode rescSetDisplayMode +#define cellRescGetNumColorBuffers rescGetNumColorBuffers +#define cellRescGetBufferSize rescGetBufferSize +#define cellRescSetBufferAddress rescSetBufferAddress #define cellRescGetFlipStatus rescGetFlipStatus #define cellRescResetFlipStatus rescResetFlipStatus #define cellRescSetConvertAndFlip rescSetConvertAndFlip From 61c5bef909a45c23b83edc97fe974fc0fa4dc95a Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Thu, 26 Jul 2012 00:49:09 +0200 Subject: [PATCH 13/19] (RGL PS3) Get rid of 30 microsecond sleep --- console/rgl/ps3/rgl.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/console/rgl/ps3/rgl.cpp b/console/rgl/ps3/rgl.cpp index a27fedf933..6c3ce76112 100644 --- a/console/rgl/ps3/rgl.cpp +++ b/console/rgl/ps3/rgl.cpp @@ -2414,8 +2414,6 @@ char *gmmIdToAddress(const uint32_t id) if (cachedLockValue == 0) break; - - sys_timer_usleep(30); }while(1); return (char *)pBaseBlock->address; From 8d7ec021f5f2fe2e65242af26100a1ac8a1a101c Mon Sep 17 00:00:00 2001 From: Toad King Date: Thu, 26 Jul 2012 01:28:57 -0400 Subject: [PATCH 14/19] (Wii) Lots of input work, interface is now ready for control rebinding Issues: * Wiimote with nunchuk attached has button holding issue, Classic Controller might have same issue * Have to decide how D-Pad emulation should work with Wiimotes and GC controllers * Add special cases for menu navigation for holding up/down/left/right --- console/retroarch_console.c | 128 +++++++++++--- console/retroarch_console_input.h | 95 +++++++++- wii/frontend/main.c | 69 +++++--- wii/input.c | 277 ++++++++++++++++++++++-------- wii/wii_input.h | 86 ++++++++++ 5 files changed, 530 insertions(+), 125 deletions(-) create mode 100644 wii/wii_input.h diff --git a/console/retroarch_console.c b/console/retroarch_console.c index 8bcd6b610e..bf02ab41b7 100644 --- a/console/retroarch_console.c +++ b/console/retroarch_console.c @@ -369,34 +369,91 @@ static const struct platform_bind platform_keys[] = { }; #elif defined(GEKKO) static const struct platform_bind platform_keys[] = { - { PAD_BUTTON_B, "(NGC) B button" }, - { PAD_BUTTON_A, "(NGC) A button" }, - { PAD_BUTTON_Y, "(NGC) Y button" }, - { PAD_BUTTON_X, "(NGC) X button" }, - { PAD_BUTTON_UP, "(NGC) D-Pad Up" }, - { PAD_BUTTON_DOWN, "(NGC) D-Pad Down" }, - { PAD_BUTTON_LEFT, "(NGC) D-Pad Left" }, - { PAD_BUTTON_RIGHT, "(NGC) D-Pad Right" }, - { PAD_TRIGGER_Z, "(NGC) Z trigger" }, - { PAD_BUTTON_START, "(NGC) Start button" }, - { PAD_TRIGGER_L, "(NGC) Left Trigger" }, - { PAD_TRIGGER_R, "(NGC) Right Trigger" }, + { WII_GC_A, "GC A button" }, + { WII_GC_B, "GC B button" }, + { WII_GC_X, "GC X button" }, + { WII_GC_Y, "GC Y button" }, + { WII_GC_UP, "GC D-Pad Up" }, + { WII_GC_DOWN, "GC D-Pad Down" }, + { WII_GC_LEFT, "GC D-Pad Left" }, + { WII_GC_RIGHT, "GC D-Pad Right" }, + { WII_GC_Z_TRIGGER, "GC Z Trigger" }, + { WII_GC_START, "GC Start button" }, + { WII_GC_L_TRIGGER, "GC Left Trigger" }, + { WII_GC_R_TRIGGER, "GC Right Trigger" }, + { WII_GC_LSTICK_LEFT, "GC Main Stick Left" }, + { WII_GC_LSTICK_RIGHT, "GC Main Stick Right" }, + { WII_GC_LSTICK_UP, "GC Main Stick Up" }, + { WII_GC_LSTICK_DOWN, "GC Main Stick Down" }, + { WII_GC_LSTICK_LEFT | WII_GC_LEFT, "GC Main Stick D-Pad Left" }, + { WII_GC_LSTICK_RIGHT | WII_GC_RIGHT, "GC Main Stick D-Pad Right" }, + { WII_GC_LSTICK_UP | WII_GC_UP, "GC Main Stick D-Pad Up" }, + { WII_GC_LSTICK_DOWN | WII_GC_DOWN, "GC Main Stick D-Pad Down" }, + { WII_GC_RSTICK_LEFT, "GC C-Stick Left" }, + { WII_GC_RSTICK_RIGHT, "GC C-Stick Right" }, + { WII_GC_RSTICK_UP, "GC C-Stick Up" }, + { WII_GC_RSTICK_DOWN, "GC C-Stick Down" }, + { WII_GC_RSTICK_LEFT | WII_GC_LEFT, "GC C-Stick D-Pad Left" }, + { WII_GC_RSTICK_RIGHT | WII_GC_RIGHT, "GC C-Stick D-Pad Right" }, + { WII_GC_RSTICK_UP | WII_GC_UP, "GC C-Stick D-Pad Up" }, + { WII_GC_RSTICK_DOWN | WII_GC_DOWN, "GC C-Stick D-Pad Down" }, + #ifdef HW_RVL - { WPAD_CLASSIC_BUTTON_B, "(Wii Classici) B button" }, - { WPAD_CLASSIC_BUTTON_A, "(Wii Classic) A button" }, - { WPAD_CLASSIC_BUTTON_Y, "(Wii Classic) Y button" }, - { WPAD_CLASSIC_BUTTON_X, "(Wii Classic) X button" }, - { WPAD_CLASSIC_BUTTON_UP, "(Wii Classic) D-Pad Up" }, - { WPAD_CLASSIC_BUTTON_DOWN, "(Wii Classic) D-Pad Down" }, - { WPAD_CLASSIC_BUTTON_LEFT, "(Wii Classic) D-Pad Left" }, - { WPAD_CLASSIC_BUTTON_RIGHT, "(Wii Classic) D-Pad Right" }, - { WPAD_CLASSIC_BUTTON_MINUS, "(Wii Classic) Select/Minus button" }, - { WPAD_CLASSIC_BUTTON_PLUS, "(Wii Classic) Start/Plus button" }, - { WPAD_CLASSIC_BUTTON_HOME, "(Wii Classic) Home button" }, - { WPAD_CLASSIC_BUTTON_FULL_L, "(Wii Classic) Left Trigger" }, - { WPAD_CLASSIC_BUTTON_FULL_R, "(Wii Classic) Right Trigger" }, - { WPAD_CLASSIC_BUTTON_ZL, "(Wii Classic) ZL button" }, - { WPAD_CLASSIC_BUTTON_ZR, "(Wii Classic) ZR button" }, + // CLASSIC CONTROLLER + { WII_CLASSIC_A, "Classic A button" }, + { WII_CLASSIC_B, "Classic B button" }, + { WII_CLASSIC_X, "Classic X button" }, + { WII_CLASSIC_Y, "Classic Y button" }, + { WII_CLASSIC_UP, "Classic D-Pad Up" }, + { WII_CLASSIC_DOWN, "Classic D-Pad Down" }, + { WII_CLASSIC_LEFT, "Classic D-Pad Left" }, + { WII_CLASSIC_RIGHT, "Classic D-Pad Right" }, + { WII_CLASSIC_PLUS, "Classic Plus button" }, + { WII_CLASSIC_MINUS, "Classic Minus button" }, + { WII_CLASSIC_HOME, "Classic Home button" }, + { WII_CLASSIC_L_TRIGGER, "Classic L Trigger" }, + { WII_CLASSIC_R_TRIGGER, "Classic R Trigger" }, + { WII_CLASSIC_ZL_TRIGGER, "Classic ZL Trigger" }, + { WII_CLASSIC_ZR_TRIGGER, "Classic ZR Trigger" }, + { WII_CLASSIC_LSTICK_LEFT, "Classic LStick Left" }, + { WII_CLASSIC_LSTICK_RIGHT, "Classic LStick Right" }, + { WII_CLASSIC_LSTICK_UP, "Classic LStick Up" }, + { WII_CLASSIC_LSTICK_DOWN, "Classic LStick Down" }, + { WII_CLASSIC_LSTICK_LEFT | WII_CLASSIC_LEFT, "Classic LStick D-Pad Left" }, + { WII_CLASSIC_LSTICK_RIGHT | WII_CLASSIC_RIGHT, "Classic LStick D-Pad Right" }, + { WII_CLASSIC_LSTICK_UP | WII_CLASSIC_UP, "Classic LStick D-Pad Up" }, + { WII_CLASSIC_LSTICK_DOWN | WII_CLASSIC_DOWN, "Classic LStick D-Pad Down" }, + { WII_CLASSIC_RSTICK_LEFT, "Classic RStick Left" }, + { WII_CLASSIC_RSTICK_RIGHT, "Classic RStick Right" }, + { WII_CLASSIC_RSTICK_UP, "Classic RStick Up" }, + { WII_CLASSIC_RSTICK_DOWN, "Classic RStick Down" }, + { WII_CLASSIC_RSTICK_LEFT | WII_CLASSIC_LEFT, "Classic RStick D-Pad Left" }, + { WII_CLASSIC_RSTICK_RIGHT | WII_CLASSIC_RIGHT, "Classic RStick D-Pad Right" }, + { WII_CLASSIC_RSTICK_UP | WII_CLASSIC_UP, "Classic RStick D-Pad Up" }, + { WII_CLASSIC_RSTICK_DOWN | WII_CLASSIC_DOWN, "Classic RStick D-Pad Down" }, + + // WIIMOTE (PLUS OPTIONAL NUNCHUK) + { WII_WIIMOTE_A, "Wiimote A button" }, + { WII_WIIMOTE_B, "Wiimote B button" }, + { WII_WIIMOTE_1, "Wiimote 1 button" }, + { WII_WIIMOTE_2, "Wiimote 2 button" }, + { WII_WIIMOTE_UP, "Wiimote D-Pad Up" }, + { WII_WIIMOTE_DOWN, "Wiimote D-Pad Down" }, + { WII_WIIMOTE_LEFT, "Wiimote D-Pad Left" }, + { WII_WIIMOTE_RIGHT, "Wiimote D-Pad Right" }, + { WII_WIIMOTE_PLUS, "Wiimote Plus button" }, + { WII_WIIMOTE_MINUS, "Wiimote Minus button" }, + { WII_WIIMOTE_HOME, "Wiimote Home button" }, + { WII_NUNCHUK_Z, "Nunchuk Z button" }, + { WII_NUNCHUK_C, "Nunchuk C button" }, + { WII_NUNCHUK_LEFT, "Nunchuk Stick Left" }, + { WII_NUNCHUK_RIGHT, "Nunchuk Stick Right" }, + { WII_NUNCHUK_UP, "Nunchuk Stick Up" }, + { WII_NUNCHUK_DOWN, "Nunchuk Stick Down" }, + { WII_NUNCHUK_LEFT | WII_WIIMOTE_LEFT, "Nunchuk Stick D-Pad Left" }, + { WII_NUNCHUK_RIGHT | WII_WIIMOTE_RIGHT, "Nunchuk Stick D-Pad Right" }, + { WII_NUNCHUK_UP | WII_WIIMOTE_UP, "Nunchuk Stick D-Pad Up" }, + { WII_NUNCHUK_DOWN | WII_WIIMOTE_DOWN, "Nunchuk Stick D-Pad Down" }, #endif }; #endif @@ -519,6 +576,23 @@ void rarch_input_set_controls_default (void) rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = platform_keys[XDK_DEVICE_ID_JOYPAD_RIGHT_TRIGGER].joykey; rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L3] = platform_keys[XDK_DEVICE_ID_LSTICK_THUMB].joykey; rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R3] = platform_keys[XDK_DEVICE_ID_RSTICK_THUMB].joykey; +#elif defined(GEKKO) + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_B] = platform_keys[WII_DEVICE_GC_ID_JOYPAD_B].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_Y] = platform_keys[WII_DEVICE_GC_ID_JOYPAD_Y].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_SELECT] = platform_keys[WII_DEVICE_GC_ID_JOYPAD_Z_TRIGGER].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_START] = platform_keys[WII_DEVICE_GC_ID_JOYPAD_START].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_UP] = platform_keys[WII_DEVICE_GC_ID_JOYPAD_UP].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_DOWN] = platform_keys[WII_DEVICE_GC_ID_JOYPAD_DOWN].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_LEFT] = platform_keys[WII_DEVICE_GC_ID_JOYPAD_LEFT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_RIGHT] = platform_keys[WII_DEVICE_GC_ID_JOYPAD_RIGHT].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_A] = platform_keys[WII_DEVICE_GC_ID_JOYPAD_A].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_X] = platform_keys[WII_DEVICE_GC_ID_JOYPAD_X].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L] = platform_keys[WII_DEVICE_GC_ID_JOYPAD_L_TRIGGER].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R] = platform_keys[WII_DEVICE_GC_ID_JOYPAD_R_TRIGGER].joykey; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = 0; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R2] = 0; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L3] = 0; + rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R3] = 0; #endif for(uint32_t x = 0; x < MAX_PLAYERS; x++) rarch_input_set_default_keybinds(x); diff --git a/console/retroarch_console_input.h b/console/retroarch_console_input.h index bf4af5ad86..a296df62a5 100644 --- a/console/retroarch_console_input.h +++ b/console/retroarch_console_input.h @@ -128,11 +128,102 @@ enum xdk_device_id #ifdef _XBOX1 #include "../xbox1/xinput_xbox_input.h" #endif + #elif defined(GEKKO) -#include +#include "../wii/wii_input.h" + +enum wii_device_id +{ + WII_DEVICE_GC_ID_JOYPAD_A = 0, + WII_DEVICE_GC_ID_JOYPAD_B, + WII_DEVICE_GC_ID_JOYPAD_X, + WII_DEVICE_GC_ID_JOYPAD_Y, + WII_DEVICE_GC_ID_JOYPAD_UP, + WII_DEVICE_GC_ID_JOYPAD_DOWN, + WII_DEVICE_GC_ID_JOYPAD_LEFT, + WII_DEVICE_GC_ID_JOYPAD_RIGHT, + WII_DEVICE_GC_ID_JOYPAD_Z_TRIGGER, + WII_DEVICE_GC_ID_JOYPAD_START, + WII_DEVICE_GC_ID_JOYPAD_L_TRIGGER, + WII_DEVICE_GC_ID_JOYPAD_R_TRIGGER, + WII_DEVICE_GC_ID_LSTICK_LEFT, + WII_DEVICE_GC_ID_LSTICK_RIGHT, + WII_DEVICE_GC_ID_LSTICK_UP, + WII_DEVICE_GC_ID_LSTICK_DOWN, + WII_DEVICE_GC_ID_LSTICK_LEFT_DPAD, + WII_DEVICE_GC_ID_LSTICK_RIGHT_DPAD, + WII_DEVICE_GC_ID_LSTICK_UP_DPAD, + WII_DEVICE_GC_ID_LSTICK_DOWN_DPAD, + WII_DEVICE_GC_ID_RSTICK_LEFT, + WII_DEVICE_GC_ID_RSTICK_RIGHT, + WII_DEVICE_GC_ID_RSTICK_UP, + WII_DEVICE_GC_ID_RSTICK_DOWN, + WII_DEVICE_GC_ID_RSTICK_LEFT_DPAD, + WII_DEVICE_GC_ID_RSTICK_RIGHT_DPAD, + WII_DEVICE_GC_ID_RSTICK_UP_DPAD, + WII_DEVICE_GC_ID_RSTICK_DOWN_DPAD, + #ifdef HW_RVL -#include + // CLASSIC CONTROLLER + WII_DEVICE_CLASSIC_ID_JOYPAD_A, + WII_DEVICE_CLASSIC_ID_JOYPAD_B, + WII_DEVICE_CLASSIC_ID_JOYPAD_X, + WII_DEVICE_CLASSIC_ID_JOYPAD_Y, + WII_DEVICE_CLASSIC_ID_JOYPAD_UP, + WII_DEVICE_CLASSIC_ID_JOYPAD_DOWN, + WII_DEVICE_CLASSIC_ID_JOYPAD_LEFT, + WII_DEVICE_CLASSIC_ID_JOYPAD_RIGHT, + WII_DEVICE_CLASSIC_ID_JOYPAD_PLUS, + WII_DEVICE_CLASSIC_ID_JOYPAD_MINUS, + WII_DEVICE_CLASSIC_ID_JOYPAD_HOME, + WII_DEVICE_CLASSIC_ID_JOYPAD_L_TRIGGER, + WII_DEVICE_CLASSIC_ID_JOYPAD_R_TRIGGER, + WII_DEVICE_CLASSIC_ID_JOYPAD_ZL_TRIGGER, + WII_DEVICE_CLASSIC_ID_JOYPAD_ZR_TRIGGER, + WII_DEVICE_CLASSIC_ID_LSTICK_LEFT, + WII_DEVICE_CLASSIC_ID_LSTICK_RIGHT, + WII_DEVICE_CLASSIC_ID_LSTICK_UP, + WII_DEVICE_CLASSIC_ID_LSTICK_DOWN, + WII_DEVICE_CLASSIC_ID_LSTICK_LEFT_DPAD, + WII_DEVICE_CLASSIC_ID_LSTICK_RIGHT_DPAD, + WII_DEVICE_CLASSIC_ID_LSTICK_UP_DPAD, + WII_DEVICE_CLASSIC_ID_LSTICK_DOWN_DPAD, + WII_DEVICE_CLASSIC_ID_RSTICK_LEFT, + WII_DEVICE_CLASSIC_ID_RSTICK_RIGHT, + WII_DEVICE_CLASSIC_ID_RSTICK_UP, + WII_DEVICE_CLASSIC_ID_RSTICK_DOWN, + WII_DEVICE_CLASSIC_ID_RSTICK_LEFT_DPAD, + WII_DEVICE_CLASSIC_ID_RSTICK_RIGHT_DPAD, + WII_DEVICE_CLASSIC_ID_RSTICK_UP_DPAD, + WII_DEVICE_CLASSIC_ID_RSTICK_DOWN_DPAD, + + // WIIMOTE (PLUS OPTIONAL NUNCHUK) + WII_DEVICE_WIIMOTE_ID_JOYPAD_A, + WII_DEVICE_WIIMOTE_ID_JOYPAD_B, + WII_DEVICE_WIIMOTE_ID_JOYPAD_1, + WII_DEVICE_WIIMOTE_ID_JOYPAD_2, + WII_DEVICE_WIIMOTE_ID_JOYPAD_UP, + WII_DEVICE_WIIMOTE_ID_JOYPAD_DOWN, + WII_DEVICE_WIIMOTE_ID_JOYPAD_LEFT, + WII_DEVICE_WIIMOTE_ID_JOYPAD_RIGHT, + WII_DEVICE_WIIMOTE_ID_JOYPAD_PLUS, + WII_DEVICE_WIIMOTE_ID_JOYPAD_MINUS, + WII_DEVICE_WIIMOTE_ID_JOYPAD_HOME, + WII_DEVICE_WIIMOTE_ID_JOYPAD_Z, + WII_DEVICE_WIIMOTE_ID_JOYPAD_C, + WII_DEVICE_WIIMOTE_ID_LSTICK_LEFT, + WII_DEVICE_WIIMOTE_ID_LSTICK_RIGHT, + WII_DEVICE_WIIMOTE_ID_LSTICK_UP, + WII_DEVICE_WIIMOTE_ID_LSTICK_DOWN, + WII_DEVICE_WIIMOTE_ID_LSTICK_LEFT_DPAD, + WII_DEVICE_WIIMOTE_ID_LSTICK_RIGHT_DPAD, + WII_DEVICE_WIIMOTE_ID_LSTICK_UP_DPAD, + WII_DEVICE_WIIMOTE_ID_LSTICK_DOWN_DPAD, #endif + + RARCH_LAST_PLATFORM_KEY +}; + #endif extern uint64_t rarch_default_keybind_lut[RARCH_FIRST_META_KEY]; diff --git a/wii/frontend/main.c b/wii/frontend/main.c index 40f7ebf039..941b6853be 100644 --- a/wii/frontend/main.c +++ b/wii/frontend/main.c @@ -20,6 +20,7 @@ #include "../../driver.h" #include "../../general.h" #include "../../libretro.h" +#include "../../console/retroarch_console_input.h" #include #include @@ -40,6 +41,31 @@ FILE * log_fp; static uint16_t menu_framebuf[RGUI_WIDTH * RGUI_HEIGHT]; +static const uint64_t wii_nav_buttons[9] = { + WII_GC_UP | WII_GC_LSTICK_UP | WII_GC_RSTICK_UP | WII_CLASSIC_UP | WII_CLASSIC_LSTICK_UP | WII_CLASSIC_RSTICK_UP | WII_WIIMOTE_UP | WII_NUNCHUK_UP, + WII_GC_DOWN | WII_GC_LSTICK_DOWN | WII_GC_RSTICK_DOWN | WII_CLASSIC_DOWN | WII_CLASSIC_LSTICK_DOWN | WII_CLASSIC_RSTICK_DOWN | WII_WIIMOTE_DOWN | WII_NUNCHUK_DOWN, + WII_GC_LEFT | WII_GC_LSTICK_LEFT | WII_GC_RSTICK_LEFT | WII_CLASSIC_LEFT | WII_CLASSIC_LSTICK_LEFT | WII_CLASSIC_RSTICK_LEFT | WII_WIIMOTE_LEFT | WII_NUNCHUK_LEFT, + WII_GC_RIGHT | WII_GC_LSTICK_RIGHT | WII_GC_RSTICK_RIGHT | WII_CLASSIC_RIGHT | WII_CLASSIC_LSTICK_RIGHT | WII_CLASSIC_RSTICK_RIGHT | WII_WIIMOTE_RIGHT | WII_NUNCHUK_RIGHT, + WII_GC_A | WII_CLASSIC_A | WII_WIIMOTE_A | WII_WIIMOTE_2, + WII_GC_B | WII_CLASSIC_B | WII_WIIMOTE_B | WII_WIIMOTE_1, + WII_GC_START | WII_CLASSIC_PLUS | WII_WIIMOTE_PLUS, + WII_GC_Z_TRIGGER | WII_CLASSIC_MINUS | WII_WIIMOTE_MINUS, + WII_WIIMOTE_HOME | WII_CLASSIC_HOME, +}; + +enum +{ + WII_DEVICE_NAV_UP = 0, + WII_DEVICE_NAV_DOWN, + WII_DEVICE_NAV_LEFT, + WII_DEVICE_NAV_RIGHT, + WII_DEVICE_NAV_A, + WII_DEVICE_NAV_B, + WII_DEVICE_NAV_START, + WII_DEVICE_NAV_SELECT, + WII_DEVICE_NAV_EXIT, +}; + static bool folder_cb(const char *directory, rgui_file_enum_cb_t file_cb, void *userdata, void *ctx) { @@ -92,40 +118,42 @@ static bool get_rom_path(rgui_handle_t *rgui) for (;;) { uint16_t input_state = 0; - input_wii.poll(NULL); + uint64_t input_poll = wii_input_update(0); - if (input_wii.key_pressed(NULL, RARCH_QUIT_KEY)) + for (unsigned i = 0; i < sizeof(wii_nav_buttons) / sizeof(wii_nav_buttons[0]); i++) { - if (can_quit) - return false; - } - else - can_quit = true; - - for (unsigned i = 0; i < RARCH_FIRST_META_KEY; i++) - { - input_state |= input_wii.input_state(NULL, NULL, false, - RETRO_DEVICE_JOYPAD, 0, i) ? (1 << i) : 0; + input_state |= input_poll & wii_nav_buttons[i] ? (1 << i) : 0; } uint16_t trigger_state = input_state & ~old_input_state; + if (!first) + { + if (trigger_state & (1 << WII_DEVICE_NAV_EXIT)) + { + if (can_quit) + return false; + } + else + can_quit = true; + } + rgui_action_t action = RGUI_ACTION_NOOP; - if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_B)) + if (trigger_state & (1 << WII_DEVICE_NAV_B)) action = RGUI_ACTION_CANCEL; - else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_A)) + else if (trigger_state & (1 << WII_DEVICE_NAV_A)) action = RGUI_ACTION_OK; - else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_UP)) + else if (trigger_state & (1 << WII_DEVICE_NAV_UP)) action = RGUI_ACTION_UP; - else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_DOWN)) + else if (trigger_state & (1 << WII_DEVICE_NAV_DOWN)) action = RGUI_ACTION_DOWN; - else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT)) + else if (trigger_state & (1 << WII_DEVICE_NAV_LEFT)) action = RGUI_ACTION_LEFT; - else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT)) + else if (trigger_state & (1 << WII_DEVICE_NAV_RIGHT)) action = RGUI_ACTION_RIGHT; - else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_START)) + else if (trigger_state & (1 << WII_DEVICE_NAV_START)) action = RGUI_ACTION_START; - else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_SELECT) && !first) // don't catch start+select+l+r when exiting + else if (trigger_state & (1 << WII_DEVICE_NAV_SELECT) && !first) // don't catch start+select+l+r when exiting action = RGUI_ACTION_SETTINGS; const char *ret = rgui_iterate(rgui, action); @@ -172,6 +200,7 @@ int main(void) wii_video_init(); input_wii.init(); + rarch_input_set_controls_default(); rgui_handle_t *rgui = rgui_init("", menu_framebuf, RGUI_WIDTH * sizeof(uint16_t), diff --git a/wii/input.c b/wii/input.c index f1a4ca8a52..75ad8955ae 100644 --- a/wii/input.c +++ b/wii/input.c @@ -20,16 +20,20 @@ #include #endif #include +#include +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327 +#endif + +#include "wii_input.h" #include "../driver.h" #include "../libretro.h" #include -static bool pad_state[5][RARCH_FIRST_META_KEY]; /* Gamecube pads */ -#ifdef HW_RVL -static bool wpad_state[5][RARCH_FIRST_META_KEY]; /* Wii Classic pads */ -#endif +#define JOYSTICK_THRESHOLD 64 +static uint64_t pad_state[4]; static bool g_quit; static int16_t wii_input_state(void *data, const struct retro_keybind **binds, @@ -37,16 +41,12 @@ static int16_t wii_input_state(void *data, const struct retro_keybind **binds, unsigned index, unsigned id) { (void)data; - (void)binds; (void)index; - unsigned player = port; + if (port >= 4 || device != RETRO_DEVICE_JOYPAD) + return 0; - return pad_state[player][id] -#ifdef HW_RVL - || wpad_state[player][id] -#endif - ; + return (binds[port][id].joykey & pad_state[port]) ? 1 : 0; } static void wii_free_input(void *data) @@ -59,6 +59,32 @@ static void reset_callback(void) g_quit = true; } +void wii_input_map_dpad_to_stick(uint32_t map_dpad_enum, uint32_t controller_id) +{ + // TODO: how do we choose a classic controller configuration over a gc controller one? + switch(map_dpad_enum) + { + case DPAD_EMULATION_NONE: + g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[WII_DEVICE_GC_ID_JOYPAD_UP].joykey; + g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[WII_DEVICE_GC_ID_JOYPAD_DOWN].joykey; + g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[WII_DEVICE_GC_ID_JOYPAD_LEFT].joykey; + g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[WII_DEVICE_GC_ID_JOYPAD_RIGHT].joykey; + break; + case DPAD_EMULATION_LSTICK: + g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[WII_DEVICE_GC_ID_LSTICK_UP_DPAD].joykey; + g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[WII_DEVICE_GC_ID_LSTICK_DOWN_DPAD].joykey; + g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[WII_DEVICE_GC_ID_LSTICK_LEFT_DPAD].joykey; + g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[WII_DEVICE_GC_ID_LSTICK_RIGHT_DPAD].joykey; + break; + case DPAD_EMULATION_RSTICK: + g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[WII_DEVICE_GC_ID_RSTICK_UP_DPAD].joykey; + g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[WII_DEVICE_GC_ID_RSTICK_DOWN_DPAD].joykey; + g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[WII_DEVICE_GC_ID_RSTICK_LEFT_DPAD].joykey; + g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[WII_DEVICE_GC_ID_RSTICK_RIGHT_DPAD].joykey; + break; + } +} + static void *wii_input_initialize(void) { PAD_Init(); @@ -67,63 +93,178 @@ static void *wii_input_initialize(void) #endif SYS_SetResetCallback(reset_callback); SYS_SetPowerCallback(reset_callback); + for(unsigned i = 0; i < 4; i++) + wii_input_map_dpad_to_stick(g_settings.input.dpad_emulation[i], i); return (void*)-1; } +#define wii_stick_x(x) ((s8)((sin((x).ang * M_PI / 180.0f)) * (x).mag * 128.0f)) +#define wii_stick_y(x) ((s8)((cos((x).ang * M_PI / 180.0f)) * (x).mag * 128.0f)) + +uint64_t wii_input_update(unsigned port) +{ + unsigned pads = PAD_ScanPads(); +#ifdef HW_RVL + unsigned wpads = WPAD_ScanPads(); +#endif + uint64_t state = 0; + if (port < pads) + { + uint16_t down = PAD_ButtonsHeld(port) | PAD_ButtonsDown(port); + down &= ~PAD_ButtonsUp(port); + + state |= (down & PAD_BUTTON_A) ? WII_GC_A : 0; + state |= (down & PAD_BUTTON_B) ? WII_GC_B : 0; + state |= (down & PAD_BUTTON_X) ? WII_GC_X : 0; + state |= (down & PAD_BUTTON_Y) ? WII_GC_Y : 0; + state |= (down & PAD_BUTTON_UP) ? WII_GC_UP : 0; + state |= (down & PAD_BUTTON_DOWN) ? WII_GC_DOWN : 0; + state |= (down & PAD_BUTTON_LEFT) ? WII_GC_LEFT : 0; + state |= (down & PAD_BUTTON_RIGHT) ? WII_GC_RIGHT : 0; + state |= (down & PAD_BUTTON_START) ? WII_GC_START : 0; + state |= (down & PAD_TRIGGER_Z) ? WII_GC_Z_TRIGGER : 0; + state |= (PAD_TriggerL(port) > 127) ? WII_GC_L_TRIGGER : 0; + state |= (PAD_TriggerR(port) > 127) ? WII_GC_R_TRIGGER : 0; + + s8 x = PAD_StickX(port); + s8 y = PAD_StickY(port); + + if (abs(x) > JOYSTICK_THRESHOLD) + { + state |= x > 0 ? WII_GC_LSTICK_RIGHT : WII_GC_LSTICK_LEFT; + } + if (abs(y) > JOYSTICK_THRESHOLD) + { + state |= y > 0 ? WII_GC_LSTICK_UP : WII_GC_LSTICK_DOWN; + } + + x = PAD_SubStickX(port); + y = PAD_SubStickY(port); + + if (abs(x) > JOYSTICK_THRESHOLD) + { + state |= x > 0 ? WII_GC_RSTICK_RIGHT : WII_GC_RSTICK_LEFT; + } + if (abs(y) > JOYSTICK_THRESHOLD) + { + state |= y > 0 ? WII_GC_RSTICK_UP : WII_GC_RSTICK_DOWN; + } + } + +#ifdef HW_RVL + if (port < wpads) + { + uint32_t down = WPAD_ButtonsHeld(port) | WPAD_ButtonsDown(port); + down &= ~WPAD_ButtonsUp(port); + + state |= (down & WPAD_BUTTON_A) ? WII_WIIMOTE_A : 0; + state |= (down & WPAD_BUTTON_B) ? WII_WIIMOTE_B : 0; + state |= (down & WPAD_BUTTON_1) ? WII_WIIMOTE_1 : 0; + state |= (down & WPAD_BUTTON_2) ? WII_WIIMOTE_2 : 0; + state |= (down & WPAD_BUTTON_PLUS) ? WII_WIIMOTE_PLUS : 0; + state |= (down & WPAD_BUTTON_MINUS) ? WII_WIIMOTE_MINUS : 0; + state |= (down & WPAD_BUTTON_HOME) ? WII_WIIMOTE_HOME : 0; + + expansion_t exp; + WPAD_Expansion(port, &exp); + switch (exp.type) + { + case WPAD_EXP_NUNCHUK: + { + // wiimote is held upright with nunchuk, do not change d-pad orientation + state |= (down & WPAD_BUTTON_UP) ? WII_WIIMOTE_UP : 0; + state |= (down & WPAD_BUTTON_DOWN) ? WII_WIIMOTE_DOWN : 0; + state |= (down & WPAD_BUTTON_LEFT) ? WII_WIIMOTE_LEFT : 0; + state |= (down & WPAD_BUTTON_RIGHT) ? WII_WIIMOTE_RIGHT : 0; + + state |= (down & WPAD_NUNCHUK_BUTTON_Z) ? WII_NUNCHUK_Z : 0; + state |= (down & WPAD_NUNCHUK_BUTTON_C) ? WII_NUNCHUK_C : 0; + + s8 x = wii_stick_x(exp.nunchuk.js); + s8 y = wii_stick_y(exp.nunchuk.js); + + if (abs(x) > JOYSTICK_THRESHOLD) + { + state |= x > 0 ? WII_NUNCHUK_RIGHT : WII_NUNCHUK_LEFT; + } + if (abs(y) > JOYSTICK_THRESHOLD) + { + state |= y > 0 ? WII_NUNCHUK_UP : WII_NUNCHUK_DOWN; + } + break; + } + case WPAD_EXP_CLASSIC: + { + state |= (down & WPAD_CLASSIC_BUTTON_A) ? WII_CLASSIC_A : 0; + state |= (down & WPAD_CLASSIC_BUTTON_B) ? WII_CLASSIC_B : 0; + state |= (down & WPAD_CLASSIC_BUTTON_X) ? WII_CLASSIC_X : 0; + state |= (down & WPAD_CLASSIC_BUTTON_Y) ? WII_CLASSIC_Y : 0; + state |= (down & WPAD_CLASSIC_BUTTON_PLUS) ? WII_CLASSIC_PLUS : 0; + state |= (down & WPAD_CLASSIC_BUTTON_MINUS) ? WII_CLASSIC_MINUS : 0; + state |= (down & WPAD_CLASSIC_BUTTON_HOME) ? WII_CLASSIC_HOME : 0; + state |= (down & WPAD_CLASSIC_BUTTON_FULL_L) ? WII_CLASSIC_L_TRIGGER : 0; + state |= (down & WPAD_CLASSIC_BUTTON_FULL_R) ? WII_CLASSIC_R_TRIGGER : 0; + state |= (down & WPAD_CLASSIC_BUTTON_ZL) ? WII_CLASSIC_ZL_TRIGGER : 0; + state |= (down & WPAD_CLASSIC_BUTTON_ZR) ? WII_CLASSIC_ZR_TRIGGER : 0; + + s8 x = wii_stick_x(exp.classic.ljs); + s8 y = wii_stick_y(exp.classic.ljs); + + if (abs(x) > JOYSTICK_THRESHOLD) + { + state |= x > 0 ? WII_CLASSIC_LSTICK_RIGHT : WII_CLASSIC_LSTICK_LEFT; + } + if (abs(y) > JOYSTICK_THRESHOLD) + { + state |= y > 0 ? WII_CLASSIC_LSTICK_UP : WII_CLASSIC_LSTICK_DOWN; + } + + x = wii_stick_x(exp.classic.rjs); + y = wii_stick_y(exp.classic.rjs); + + if (abs(x) > JOYSTICK_THRESHOLD) + { + state |= x > 0 ? WII_CLASSIC_RSTICK_RIGHT : WII_CLASSIC_RSTICK_LEFT; + } + if (abs(y) > JOYSTICK_THRESHOLD) + { + state |= y > 0 ? WII_CLASSIC_RSTICK_UP : WII_CLASSIC_RSTICK_DOWN; + } + // do not return, fall through for wiimote d-pad + } + default: + // rotated d-pad + state |= (down & WPAD_BUTTON_UP) ? WII_WIIMOTE_LEFT : 0; + state |= (down & WPAD_BUTTON_DOWN) ? WII_WIIMOTE_RIGHT : 0; + state |= (down & WPAD_BUTTON_LEFT) ? WII_WIIMOTE_DOWN : 0; + state |= (down & WPAD_BUTTON_RIGHT) ? WII_WIIMOTE_UP : 0; + break; + } + } +#endif + + if ((state & (WII_GC_START | WII_GC_Z_TRIGGER | WII_GC_L_TRIGGER | WII_GC_R_TRIGGER)) == (WII_GC_START | WII_GC_Z_TRIGGER | WII_GC_L_TRIGGER | WII_GC_R_TRIGGER)) + { + state |= WII_WIIMOTE_HOME; + } + + if (port == 0 && g_quit) + { + state |= WII_WIIMOTE_HOME; + g_quit = false; + } + + return state; +} + static void wii_input_poll(void *data) { (void)data; - unsigned pads = PAD_ScanPads(); -#ifdef HW_RVL - unsigned wpads = WPAD_ScanPads(); -#endif - - /* Gamecube controller */ - for (unsigned i = 0; i < pads; i++) + for (unsigned i = 0; i < 4; i++) { - uint16_t down = PAD_ButtonsHeld(i) | PAD_ButtonsDown(i); - down &= ~PAD_ButtonsUp(i); - - pad_state[i][RETRO_DEVICE_ID_JOYPAD_B] = down & PAD_BUTTON_B; - pad_state[i][RETRO_DEVICE_ID_JOYPAD_Y] = down & PAD_BUTTON_Y; - pad_state[i][RETRO_DEVICE_ID_JOYPAD_SELECT] = down & PAD_TRIGGER_Z; - pad_state[i][RETRO_DEVICE_ID_JOYPAD_START] = down & PAD_BUTTON_START; - pad_state[i][RETRO_DEVICE_ID_JOYPAD_UP] = down & PAD_BUTTON_UP; - pad_state[i][RETRO_DEVICE_ID_JOYPAD_DOWN] = down & PAD_BUTTON_DOWN; - pad_state[i][RETRO_DEVICE_ID_JOYPAD_LEFT] = down & PAD_BUTTON_LEFT; - pad_state[i][RETRO_DEVICE_ID_JOYPAD_RIGHT] = down & PAD_BUTTON_RIGHT; - pad_state[i][RETRO_DEVICE_ID_JOYPAD_A] = down & PAD_BUTTON_A; - pad_state[i][RETRO_DEVICE_ID_JOYPAD_X] = down & PAD_BUTTON_X; - pad_state[i][RETRO_DEVICE_ID_JOYPAD_L] = down & PAD_TRIGGER_L; - pad_state[i][RETRO_DEVICE_ID_JOYPAD_R] = down & PAD_TRIGGER_R; + pad_state[i] = wii_input_update(i); } - -#ifdef HW_RVL - /* Wii Classic controller */ - for (unsigned i = 0; i < wpads; i++) - { - uint32_t down = WPAD_ButtonsHeld(i) | WPAD_ButtonsDown(i); - down &= ~WPAD_ButtonsUp(i); - - wpad_state[i][RETRO_DEVICE_ID_JOYPAD_B] = down & (WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B); - wpad_state[i][RETRO_DEVICE_ID_JOYPAD_Y] = down & WPAD_CLASSIC_BUTTON_Y; - wpad_state[i][RETRO_DEVICE_ID_JOYPAD_SELECT] = down & (WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS); - wpad_state[i][RETRO_DEVICE_ID_JOYPAD_START] = down & (WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS); - wpad_state[i][RETRO_DEVICE_ID_JOYPAD_UP] = down & (WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_UP); - wpad_state[i][RETRO_DEVICE_ID_JOYPAD_DOWN] = down & (WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN); - wpad_state[i][RETRO_DEVICE_ID_JOYPAD_LEFT] = down & (WPAD_BUTTON_LEFT | WPAD_CLASSIC_BUTTON_LEFT); - wpad_state[i][RETRO_DEVICE_ID_JOYPAD_RIGHT] = down & (WPAD_BUTTON_RIGHT | WPAD_CLASSIC_BUTTON_RIGHT); - wpad_state[i][RETRO_DEVICE_ID_JOYPAD_A] = down & (WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A); - wpad_state[i][RETRO_DEVICE_ID_JOYPAD_X] = down & WPAD_CLASSIC_BUTTON_X; - wpad_state[i][RETRO_DEVICE_ID_JOYPAD_L] = down & WPAD_CLASSIC_BUTTON_FULL_L; - wpad_state[i][RETRO_DEVICE_ID_JOYPAD_R] = down & WPAD_CLASSIC_BUTTON_FULL_R; - - if (down & (WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME) && i == 0) - wpad_state[0][RETRO_DEVICE_ID_JOYPAD_L] = wpad_state[0][RETRO_DEVICE_ID_JOYPAD_R] = - wpad_state[0][RETRO_DEVICE_ID_JOYPAD_START] = wpad_state[0][RETRO_DEVICE_ID_JOYPAD_SELECT] = true; - } -#endif } static bool wii_key_pressed(void *data, int key) @@ -132,23 +273,7 @@ static bool wii_key_pressed(void *data, int key) switch (key) { case RARCH_QUIT_KEY: - { - bool r = g_quit || - (pad_state[0][RETRO_DEVICE_ID_JOYPAD_SELECT] && - pad_state[0][RETRO_DEVICE_ID_JOYPAD_START] && - pad_state[0][RETRO_DEVICE_ID_JOYPAD_L] && - pad_state[0][RETRO_DEVICE_ID_JOYPAD_R]) -#ifdef HW_RVL - || - (wpad_state[0][RETRO_DEVICE_ID_JOYPAD_SELECT] && - wpad_state[0][RETRO_DEVICE_ID_JOYPAD_START] && - wpad_state[0][RETRO_DEVICE_ID_JOYPAD_L] && - wpad_state[0][RETRO_DEVICE_ID_JOYPAD_R]) -#endif - ; - g_quit = false; - return r; - } + return pad_state[0] & (WII_CLASSIC_HOME | WII_WIIMOTE_HOME) ? true : false; default: return false; } diff --git a/wii/wii_input.h b/wii/wii_input.h new file mode 100644 index 0000000000..a7dae52d4f --- /dev/null +++ b/wii/wii_input.h @@ -0,0 +1,86 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2012 - Hans-Kristian Arntzen + * Copyright (C) 2011-2012 - Michael Lelli + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#ifndef _WII_INPUT_H +#define _WII_INPUT_H + +enum +{ + WII_GC_A = 1ULL << 0, + WII_GC_B = 1ULL << 1, + WII_GC_X = 1ULL << 2, + WII_GC_Y = 1ULL << 3, + WII_GC_START = 1ULL << 4, + WII_GC_Z_TRIGGER = 1ULL << 5, + WII_GC_L_TRIGGER = 1ULL << 6, + WII_GC_R_TRIGGER = 1ULL << 7, + WII_GC_UP = 1ULL << 8, + WII_GC_DOWN = 1ULL << 9, + WII_GC_LEFT = 1ULL << 10, + WII_GC_RIGHT = 1ULL << 11, + WII_GC_LSTICK_UP = 1ULL << 12, + WII_GC_LSTICK_DOWN = 1ULL << 13, + WII_GC_LSTICK_LEFT = 1ULL << 14, + WII_GC_LSTICK_RIGHT = 1ULL << 15, + WII_GC_RSTICK_UP = 1ULL << 16, + WII_GC_RSTICK_DOWN = 1ULL << 17, + WII_GC_RSTICK_LEFT = 1ULL << 18, + WII_GC_RSTICK_RIGHT = 1ULL << 19, + WII_CLASSIC_A = 1ULL << 20, + WII_CLASSIC_B = 1ULL << 21, + WII_CLASSIC_X = 1ULL << 22, + WII_CLASSIC_Y = 1ULL << 23, + WII_CLASSIC_PLUS = 1ULL << 24, + WII_CLASSIC_MINUS = 1ULL << 25, + WII_CLASSIC_HOME = 1ULL << 26, + WII_CLASSIC_L_TRIGGER = 1ULL << 27, + WII_CLASSIC_R_TRIGGER = 1ULL << 28, + WII_CLASSIC_ZL_TRIGGER = 1ULL << 29, + WII_CLASSIC_ZR_TRIGGER = 1ULL << 30, + WII_CLASSIC_UP = 1ULL << 31, + WII_CLASSIC_DOWN = 1ULL << 32, + WII_CLASSIC_LEFT = 1ULL << 33, + WII_CLASSIC_RIGHT = 1ULL << 34, + WII_CLASSIC_LSTICK_UP = 1ULL << 35, + WII_CLASSIC_LSTICK_DOWN = 1ULL << 36, + WII_CLASSIC_LSTICK_LEFT = 1ULL << 37, + WII_CLASSIC_LSTICK_RIGHT = 1ULL << 38, + WII_CLASSIC_RSTICK_UP = 1ULL << 39, + WII_CLASSIC_RSTICK_DOWN = 1ULL << 40, + WII_CLASSIC_RSTICK_LEFT = 1ULL << 41, + WII_CLASSIC_RSTICK_RIGHT = 1ULL << 42, + WII_WIIMOTE_A = 1ULL << 43, + WII_WIIMOTE_B = 1ULL << 44, + WII_WIIMOTE_1 = 1ULL << 45, + WII_WIIMOTE_2 = 1ULL << 46, + WII_WIIMOTE_PLUS = 1ULL << 47, + WII_WIIMOTE_MINUS = 1ULL << 48, + WII_WIIMOTE_HOME = 1ULL << 49, + WII_WIIMOTE_UP = 1ULL << 50, + WII_WIIMOTE_DOWN = 1ULL << 51, + WII_WIIMOTE_LEFT = 1ULL << 52, + WII_WIIMOTE_RIGHT = 1ULL << 53, + WII_NUNCHUK_Z = 1ULL << 54, + WII_NUNCHUK_C = 1ULL << 55, + WII_NUNCHUK_UP = 1ULL << 56, + WII_NUNCHUK_DOWN = 1ULL << 57, + WII_NUNCHUK_LEFT = 1ULL << 58, + WII_NUNCHUK_RIGHT = 1ULL << 59, +}; + +uint64_t wii_input_update(unsigned port); + +#endif From 468f7256df8ed278c45d6aa54eb702dbbf2b13f8 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Thu, 26 Jul 2012 13:08:08 +0200 Subject: [PATCH 15/19] (PS3) Add new ZIP extract mode - can extract ZIP to current directory now --- 360/frontend-xdk/menu.cpp | 15 +++++++++++---- console/console_settings.c | 15 ++++++++++++++- console/retroarch_config.c | 6 ++++++ console/retroarch_console.c | 15 +++++++++++++++ console/retroarch_console.h | 1 + console/retroarch_rzlib.c | 18 ++++++++++++------ console/retroarch_rzlib.h | 8 +++++++- general.h | 3 +++ ps3/frontend/menu-entries.h | 11 +++++++++++ ps3/frontend/menu.c | 30 +++++++++++++++++++++++++++++- ps3/frontend/menu.h | 1 + 11 files changed, 110 insertions(+), 13 deletions(-) diff --git a/360/frontend-xdk/menu.cpp b/360/frontend-xdk/menu.cpp index 3107092897..249ecfc48e 100644 --- a/360/frontend-xdk/menu.cpp +++ b/360/frontend-xdk/menu.cpp @@ -546,16 +546,23 @@ HRESULT CRetroArchFileBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandle const char *strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_romlist.GetText(index)); if(path_file_exists(browser->current_dir.list->elems[index].data)) { - char path_tmp[1024]; + char rom_path_temp[PATH_MAX]; + char dir_path_temp[PATH_MAX]; struct retro_system_info info; retro_get_system_info(&info); bool block_zip_extract = info.block_extract; - snprintf(path_tmp, sizeof(path_tmp), "%s\\%s", filebrowser_get_current_dir(browser), strbuffer); + snprintf(path_temp, sizeof(path_temp), "%s\\%s", filebrowser_get_current_dir(browser), strbuffer); + if((strstr(strbuffer, ".zip") || strstr(strbuffer, ".ZIP")) && !block_zip_extract) - rarch_extract_zipfile(path_tmp); + { + rarch_extract_directory(dir_path_temp, path_temp, sizeof(dir_path_temp)); + rarch_extract_zipfile(rom_path_temp, dir_path_temp); + } else - rarch_console_load_game(path_tmp); + { + rarch_console_load_game(path_temp); + } } else if(browser->current_dir.list->elems[index].attr.b) { diff --git a/console/console_settings.c b/console/console_settings.c index 8d5fe67323..1ebb221b6b 100644 --- a/console/console_settings.c +++ b/console/console_settings.c @@ -225,7 +225,17 @@ void rarch_settings_msg(unsigned setting, unsigned delay) snprintf(str, sizeof(str), "INFO - Press LEFT/RIGHT to change the controls, and press\n[RetroPad Start] to reset a button to default values."); break; case S_MSG_EXTRACTED_ZIPFILE: - snprintf(str, sizeof(str), "INFO - ZIP file successfully extracted to cache partition."); + switch(g_console.zip_extract_mode) + { + case ZIP_EXTRACT_TO_CURRENT_DIR: + snprintf(str, sizeof(str), "INFO - ZIP file successfully extracted to current directory."); + break; +#ifdef HAVE_HDD_CACHE_PARTITION + case ZIP_EXTRACT_TO_CACHE_DIR: + snprintf(str, sizeof(str), "INFO - ZIP file successfully extracted to cache partition."); + break; +#endif + } break; case S_MSG_LOADING_ROM: fill_pathname_base(tmp, g_console.rom_path, sizeof(tmp)); @@ -362,6 +372,9 @@ void rarch_settings_set_default (const input_driver_t *input) #ifdef _XBOX360 g_console.color_format = 0; #endif +#ifdef HAVE_ZLIB + g_console.zip_extract_mode = 0; +#endif // g_extern g_extern.state_slot = 0; diff --git a/console/retroarch_config.c b/console/retroarch_config.c index e8e71b3317..c3faa877a5 100644 --- a/console/retroarch_config.c +++ b/console/retroarch_config.c @@ -102,6 +102,9 @@ void rarch_config_load(const char * conf_name, const char * libretro_dir_path, c CONFIG_GET_INT_CONSOLE(viewports.custom_vp.height, "custom_viewport_height"); CONFIG_GET_INT_CONSOLE(screen_orientation, "screen_orientation"); CONFIG_GET_INT_CONSOLE(sound_mode, "sound_mode"); +#ifdef HAVE_ZLIB + CONFIG_GET_INT_CONSOLE(zip_extract_mode, "zip_extract_mode"); +#endif CONFIG_GET_STRING_CONSOLE(default_rom_startup_dir, "default_rom_startup_dir"); CONFIG_GET_FLOAT_CONSOLE(menu_font_size, "menu_font_size"); CONFIG_GET_FLOAT_CONSOLE(overscan_amount, "overscan_amount"); @@ -174,6 +177,9 @@ void rarch_config_save(const char * conf_name) config_set_string(conf, "default_rom_startup_dir", g_console.default_rom_startup_dir); config_set_float(conf, "menu_font_size", g_console.menu_font_size); config_set_float(conf, "overscan_amount", g_console.overscan_amount); +#ifdef HAVE_ZLIB + config_set_int(conf, "zip_extract_mode", g_console.zip_extract_mode); +#endif #endif // g_extern diff --git a/console/retroarch_console.c b/console/retroarch_console.c index 30497ba745..30142754f0 100644 --- a/console/retroarch_console.c +++ b/console/retroarch_console.c @@ -304,3 +304,18 @@ const char * rarch_convert_wchar_to_const_char(const wchar_t * wstr) wcstombs(str, wstr, sizeof(str)); return str; } + +void rarch_extract_directory(char *buf, const char *path, size_t size) +{ + strncpy(buf, path, size - 1); + buf[size - 1] = '\0'; + + char *base = strrchr(buf, '/'); + if (!base) + base = strrchr(buf, '\\'); + + if (base) + *base = '\0'; + else + buf[0] = '\0'; +} diff --git a/console/retroarch_console.h b/console/retroarch_console.h index 7931eac951..a96424f791 100644 --- a/console/retroarch_console.h +++ b/console/retroarch_console.h @@ -209,6 +209,7 @@ void rarch_console_rsound_stop(void); void rarch_convert_char_to_wchar(wchar_t *buf, const char * str, size_t size); const char * rarch_convert_wchar_to_const_char(const wchar_t * wstr); +void rarch_extract_directory(char *buf, const char *path, size_t size); enum { diff --git a/console/retroarch_rzlib.c b/console/retroarch_rzlib.c index 5576f0f97d..fe73feca5c 100644 --- a/console/retroarch_rzlib.c +++ b/console/retroarch_rzlib.c @@ -22,7 +22,7 @@ #include "retroarch_rzlib.h" -static int rarch_extract_currentfile_in_zip(unzFile uf) +static int rarch_extract_currentfile_in_zip(unzFile uf, const char *current_dir) { char filename_inzip[PATH_MAX]; FILE *file_out = NULL; @@ -48,9 +48,17 @@ static int rarch_extract_currentfile_in_zip(unzFile uf) char write_filename[PATH_MAX]; + switch(g_console.zip_extract_mode) + { + case ZIP_EXTRACT_TO_CURRENT_DIR: + snprintf(write_filename, sizeof(write_filename), "%s/%s", current_dir, filename_inzip); + break; #ifdef HAVE_HDD_CACHE_PARTITION - snprintf(write_filename, sizeof(write_filename), "%s%s", default_paths.cache_dir, filename_inzip); + case ZIP_EXTRACT_TO_CACHE_DIR: + snprintf(write_filename, sizeof(write_filename), "%s%s", default_paths.cache_dir, filename_inzip); + break; #endif + } err = unzOpenCurrentFile(uf); if (err != UNZ_OK) @@ -105,7 +113,7 @@ static int rarch_extract_currentfile_in_zip(unzFile uf) return err; } -int rarch_extract_zipfile(const char *zip_path) +int rarch_extract_zipfile(const char *zip_path, const char *current_dir) { unzFile uf = unzOpen(zip_path); @@ -116,7 +124,7 @@ int rarch_extract_zipfile(const char *zip_path) for (unsigned i = 0; i < gi.number_entry; i++) { - if (rarch_extract_currentfile_in_zip(uf) != UNZ_OK) + if (rarch_extract_currentfile_in_zip(uf, current_dir) != UNZ_OK) break; if ((i + 1) < gi.number_entry) @@ -130,10 +138,8 @@ int rarch_extract_zipfile(const char *zip_path) } } -#ifdef HAVE_HDD_CACHE_PARTITION if(g_console.info_msg_enable) rarch_settings_msg(S_MSG_EXTRACTED_ZIPFILE, S_DELAY_180); -#endif return 0; } diff --git a/console/retroarch_rzlib.h b/console/retroarch_rzlib.h index 440384d10a..98fd52c7bb 100644 --- a/console/retroarch_rzlib.h +++ b/console/retroarch_rzlib.h @@ -21,6 +21,12 @@ #define WRITEBUFFERSIZE (1024 * 512) -int rarch_extract_zipfile(const char *zip_path); +enum +{ + ZIP_EXTRACT_TO_CURRENT_DIR, + ZIP_EXTRACT_TO_CACHE_DIR +}; + +int rarch_extract_zipfile(const char *zip_path, const char *current_dir); #endif diff --git a/general.h b/general.h index f1c7ded0bd..b816b8a3cc 100644 --- a/general.h +++ b/general.h @@ -242,6 +242,9 @@ struct console_settings uint32_t control_timer_expiration_frame_count; uint32_t timer_expiration_frame_count; uint32_t input_loop; +#ifdef HAVE_ZLIB + uint32_t zip_extract_mode; +#endif #ifdef _XBOX uint32_t color_format; DWORD volume_device_type; diff --git a/ps3/frontend/menu-entries.h b/ps3/frontend/menu-entries.h index 650a8454d0..1a01c70661 100644 --- a/ps3/frontend/menu-entries.h +++ b/ps3/frontend/menu-entries.h @@ -269,6 +269,17 @@ item items_generalsettings[MAX_NO_OF_CONTROLS_SETTINGS] = WHITE, 0.83f, }, + { + SETTING_ZIP_EXTRACT, + "ZIP extract", + "", + 0.0f, + 0.0f, + YELLOW, + "INFO - Select the [ZIP Extract] mode. This setting controls how ZIP files are extracted.", + WHITE, + 0.83f, + }, { SETTING_RARCH_DEFAULT_EMU, "Default emulator core", diff --git a/ps3/frontend/menu.c b/ps3/frontend/menu.c index 26c02f5052..cf92b7e27f 100644 --- a/ps3/frontend/menu.c +++ b/ps3/frontend/menu.c @@ -222,6 +222,20 @@ static void set_setting_label(menu * menu_obj, unsigned currentsetting) snprintf(items_generalsettings[currentsetting].comment, sizeof(items_generalsettings[currentsetting].comment), "INFO - [Rewind] feature is set to 'OFF'."); } break; + case SETTING_ZIP_EXTRACT: + set_setting_label_color(g_console.zip_extract_mode == ZIP_EXTRACT_TO_CURRENT_DIR, currentsetting); + switch(g_console.zip_extract_mode) + { + case ZIP_EXTRACT_TO_CURRENT_DIR: + snprintf(items_generalsettings[currentsetting].setting_text, sizeof(items_generalsettings[currentsetting].setting_text), "Current dir"); + snprintf(items_generalsettings[currentsetting].comment, sizeof(items_generalsettings[currentsetting].comment), "INFO - [ZIP Extract Mode] is set to 'Current dir'.\nZIP files are extracted to the current directory."); + break; + case ZIP_EXTRACT_TO_CACHE_DIR: + snprintf(items_generalsettings[currentsetting].setting_text, sizeof(items_generalsettings[currentsetting].setting_text), "Cache dir"); + snprintf(items_generalsettings[currentsetting].comment, sizeof(items_generalsettings[currentsetting].comment), "INFO - [ZIP Extract Mode] is set to 'Cache dir'.\nZIP files are extracted to the cache directory (dev_hdd1)."); + break; + } + break; case SETTING_RARCH_DEFAULT_EMU: fill_pathname_base(fname, g_settings.libretro, sizeof(fname)); snprintf(items_generalsettings[currentsetting].setting_text, sizeof(items_generalsettings[currentsetting].setting_text), "%s", fname); @@ -1350,6 +1364,16 @@ static void producesettingentry(menu * menu_obj, unsigned switchvalue) if(input_state & (1 << RETRO_DEVICE_ID_JOYPAD_START)) g_settings.rewind_enable = false; break; + case SETTING_ZIP_EXTRACT: + if((input_state & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT)) || (input_state & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT)) || (input_state & (1 << RETRO_DEVICE_ID_JOYPAD_B))) + { + g_console.zip_extract_mode = g_console.zip_extract_mode == ZIP_EXTRACT_TO_CURRENT_DIR ? ZIP_EXTRACT_TO_CACHE_DIR : ZIP_EXTRACT_TO_CURRENT_DIR; + } + if(input_state & (1 << RETRO_DEVICE_ID_JOYPAD_START)) + { + g_console.zip_extract_mode = ZIP_EXTRACT_TO_CURRENT_DIR; + } + break; case SETTING_RARCH_DEFAULT_EMU: if((input_state & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT)) || (input_state & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT)) || (input_state & (1 << RETRO_DEVICE_ID_JOYPAD_B))) { @@ -1675,6 +1699,7 @@ static void menu_romselect_iterate(filebrowser_t *filebrowser, menu_romselect_ac else { char rom_path_temp[PATH_MAX]; + char dir_path_temp[PATH_MAX]; struct retro_system_info info; retro_get_system_info(&info); bool block_zip_extract = info.block_extract; @@ -1682,7 +1707,10 @@ static void menu_romselect_iterate(filebrowser_t *filebrowser, menu_romselect_ac snprintf(rom_path_temp, sizeof(rom_path_temp), filebrowser_get_current_path(filebrowser)); if((strstr(rom_path_temp, ".zip") || strstr(rom_path_temp, ".ZIP")) && !block_zip_extract) - rarch_extract_zipfile(rom_path_temp); + { + rarch_extract_directory(dir_path_temp, rom_path_temp, sizeof(dir_path_temp)); + rarch_extract_zipfile(rom_path_temp, dir_path_temp); + } else { rarch_console_load_game(filebrowser_get_current_path(filebrowser)); diff --git a/ps3/frontend/menu.h b/ps3/frontend/menu.h index f1aa52e8d9..5c891e45c6 100644 --- a/ps3/frontend/menu.h +++ b/ps3/frontend/menu.h @@ -101,6 +101,7 @@ enum SETTING_DEFAULT_AUDIO_ALL, SETTING_EMU_CURRENT_SAVE_STATE_SLOT, SETTING_EMU_SHOW_INFO_MSG, + SETTING_ZIP_EXTRACT, SETTING_RARCH_DEFAULT_EMU, SETTING_EMU_DEFAULT_ALL, SETTING_EMU_REWIND_ENABLED, From 02ee5b79482da766d794bc528963f3b042bbd42d Mon Sep 17 00:00:00 2001 From: Toad King Date: Thu, 26 Jul 2012 17:07:47 -0400 Subject: [PATCH 16/19] (Wii) use input driver for menu --- wii/frontend/main.c | 76 ++++++----- wii/input.c | 313 ++++++++++++++++++++++---------------------- wii/wii_input.h | 4 +- 3 files changed, 200 insertions(+), 193 deletions(-) diff --git a/wii/frontend/main.c b/wii/frontend/main.c index 8aa29ec551..3b132c0934 100644 --- a/wii/frontend/main.c +++ b/wii/frontend/main.c @@ -1,5 +1,6 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2010-2012 - Hans-Kristian Arntzen + * Copyright (C) 2012 - Michael Lelli * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- @@ -41,16 +42,20 @@ FILE * log_fp; static uint16_t menu_framebuf[RGUI_WIDTH * RGUI_HEIGHT]; -static const uint64_t wii_nav_buttons[9] = { - WII_GC_UP | WII_GC_LSTICK_UP | WII_GC_RSTICK_UP | WII_CLASSIC_UP | WII_CLASSIC_LSTICK_UP | WII_CLASSIC_RSTICK_UP | WII_WIIMOTE_UP | WII_NUNCHUK_UP, - WII_GC_DOWN | WII_GC_LSTICK_DOWN | WII_GC_RSTICK_DOWN | WII_CLASSIC_DOWN | WII_CLASSIC_LSTICK_DOWN | WII_CLASSIC_RSTICK_DOWN | WII_WIIMOTE_DOWN | WII_NUNCHUK_DOWN, - WII_GC_LEFT | WII_GC_LSTICK_LEFT | WII_GC_RSTICK_LEFT | WII_CLASSIC_LEFT | WII_CLASSIC_LSTICK_LEFT | WII_CLASSIC_RSTICK_LEFT | WII_WIIMOTE_LEFT | WII_NUNCHUK_LEFT, - WII_GC_RIGHT | WII_GC_LSTICK_RIGHT | WII_GC_RSTICK_RIGHT | WII_CLASSIC_RIGHT | WII_CLASSIC_LSTICK_RIGHT | WII_CLASSIC_RSTICK_RIGHT | WII_WIIMOTE_RIGHT | WII_NUNCHUK_RIGHT, - WII_GC_A | WII_CLASSIC_A | WII_WIIMOTE_A | WII_WIIMOTE_2, - WII_GC_B | WII_CLASSIC_B | WII_WIIMOTE_B | WII_WIIMOTE_1, - WII_GC_START | WII_CLASSIC_PLUS | WII_WIIMOTE_PLUS, - WII_GC_Z_TRIGGER | WII_CLASSIC_MINUS | WII_WIIMOTE_MINUS, - WII_WIIMOTE_HOME | WII_CLASSIC_HOME, +static const struct retro_keybind _wii_nav_binds[] = { + { 0, 0, 0, WII_GC_UP | WII_GC_LSTICK_UP | WII_GC_RSTICK_UP | WII_CLASSIC_UP | WII_CLASSIC_LSTICK_UP | WII_CLASSIC_RSTICK_UP | WII_WIIMOTE_UP | WII_NUNCHUK_UP, 0 }, + { 0, 0, 0, WII_GC_DOWN | WII_GC_LSTICK_DOWN | WII_GC_RSTICK_DOWN | WII_CLASSIC_DOWN | WII_CLASSIC_LSTICK_DOWN | WII_CLASSIC_RSTICK_DOWN | WII_WIIMOTE_DOWN | WII_NUNCHUK_DOWN, 0 }, + { 0, 0, 0, WII_GC_LEFT | WII_GC_LSTICK_LEFT | WII_GC_RSTICK_LEFT | WII_CLASSIC_LEFT | WII_CLASSIC_LSTICK_LEFT | WII_CLASSIC_RSTICK_LEFT | WII_WIIMOTE_LEFT | WII_NUNCHUK_LEFT, 0 }, + { 0, 0, 0, WII_GC_RIGHT | WII_GC_LSTICK_RIGHT | WII_GC_RSTICK_RIGHT | WII_CLASSIC_RIGHT | WII_CLASSIC_LSTICK_RIGHT | WII_CLASSIC_RSTICK_RIGHT | WII_WIIMOTE_RIGHT | WII_NUNCHUK_RIGHT, 0 }, + { 0, 0, 0, WII_GC_A | WII_CLASSIC_A | WII_WIIMOTE_A | WII_WIIMOTE_2, 0 }, + { 0, 0, 0, WII_GC_B | WII_CLASSIC_B | WII_WIIMOTE_B | WII_WIIMOTE_1, 0 }, + { 0, 0, 0, WII_GC_START | WII_CLASSIC_PLUS | WII_WIIMOTE_PLUS, 0 }, + { 0, 0, 0, WII_GC_Z_TRIGGER | WII_CLASSIC_MINUS | WII_WIIMOTE_MINUS, 0 }, + { 0, 0, 0, WII_WIIMOTE_HOME | WII_CLASSIC_HOME, 0 }, +}; + +static const struct retro_keybind *wii_nav_binds[] = { + _wii_nav_binds }; enum @@ -64,6 +69,7 @@ enum WII_DEVICE_NAV_START, WII_DEVICE_NAV_SELECT, WII_DEVICE_NAV_EXIT, + WII_DEVICE_NAV_LAST }; static bool folder_cb(const char *directory, rgui_file_enum_cb_t file_cb, @@ -118,15 +124,19 @@ static bool get_rom_path(rgui_handle_t *rgui) for (;;) { uint16_t input_state = 0; - uint64_t input_poll = wii_input_update(0); - for (unsigned i = 0; i < sizeof(wii_nav_buttons) / sizeof(wii_nav_buttons[0]); i++) + input_wii.poll(NULL); + + for (unsigned i = 0; i < WII_DEVICE_NAV_LAST; i++) { - input_state |= input_poll & wii_nav_buttons[i] ? (1 << i) : 0; + input_state |= input_wii.input_state(NULL, wii_nav_binds, 0, + RETRO_DEVICE_JOYPAD, 0, i) ? (1 << i) : 0; } uint16_t trigger_state = input_state & ~old_input_state; + rgui_action_t action = RGUI_ACTION_NOOP; + // don't run anything first frame, only capture held inputs for old_input_state if (!first) { if (trigger_state & (1 << WII_DEVICE_NAV_EXIT)) @@ -136,25 +146,28 @@ static bool get_rom_path(rgui_handle_t *rgui) } else can_quit = true; - } - rgui_action_t action = RGUI_ACTION_NOOP; - if (trigger_state & (1 << WII_DEVICE_NAV_B)) - action = RGUI_ACTION_CANCEL; - else if (trigger_state & (1 << WII_DEVICE_NAV_A)) - action = RGUI_ACTION_OK; - else if (trigger_state & (1 << WII_DEVICE_NAV_UP)) - action = RGUI_ACTION_UP; - else if (trigger_state & (1 << WII_DEVICE_NAV_DOWN)) - action = RGUI_ACTION_DOWN; - else if (trigger_state & (1 << WII_DEVICE_NAV_LEFT)) - action = RGUI_ACTION_LEFT; - else if (trigger_state & (1 << WII_DEVICE_NAV_RIGHT)) - action = RGUI_ACTION_RIGHT; - else if (trigger_state & (1 << WII_DEVICE_NAV_START)) - action = RGUI_ACTION_START; - else if (trigger_state & (1 << WII_DEVICE_NAV_SELECT) && !first) // don't catch start+select+l+r when exiting - action = RGUI_ACTION_SETTINGS; + if (trigger_state & (1 << WII_DEVICE_NAV_B)) + action = RGUI_ACTION_CANCEL; + else if (trigger_state & (1 << WII_DEVICE_NAV_A)) + action = RGUI_ACTION_OK; + else if (trigger_state & (1 << WII_DEVICE_NAV_UP)) + action = RGUI_ACTION_UP; + else if (trigger_state & (1 << WII_DEVICE_NAV_DOWN)) + action = RGUI_ACTION_DOWN; + else if (trigger_state & (1 << WII_DEVICE_NAV_LEFT)) + action = RGUI_ACTION_LEFT; + else if (trigger_state & (1 << WII_DEVICE_NAV_RIGHT)) + action = RGUI_ACTION_RIGHT; + else if (trigger_state & (1 << WII_DEVICE_NAV_START)) + action = RGUI_ACTION_START; + else if (trigger_state & (1 << WII_DEVICE_NAV_SELECT)) + action = RGUI_ACTION_SETTINGS; + } + else + { + first = false; + } const char *ret = rgui_iterate(rgui, action); video_wii.frame(NULL, menu_framebuf, @@ -170,7 +183,6 @@ static bool get_rom_path(rgui_handle_t *rgui) } old_input_state = input_state; - first = false; rarch_sleep(10); } } diff --git a/wii/input.c b/wii/input.c index 7a72591156..339f8dde19 100644 --- a/wii/input.c +++ b/wii/input.c @@ -1,5 +1,6 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2012 - Hans-Kristian Arntzen + * Copyright (C) 2012 - Michael Lelli * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- @@ -192,169 +193,165 @@ static void *wii_input_initialize(void) #define wii_stick_x(x) ((s8)((sin((x).ang * M_PI / 180.0f)) * (x).mag * 128.0f)) #define wii_stick_y(x) ((s8)((cos((x).ang * M_PI / 180.0f)) * (x).mag * 128.0f)) -uint64_t wii_input_update(unsigned port) -{ - unsigned pads = PAD_ScanPads(); -#ifdef HW_RVL - unsigned wpads = WPAD_ScanPads(); -#endif - uint64_t state = 0; - if (port < pads) - { - uint16_t down = PAD_ButtonsHeld(port) | PAD_ButtonsDown(port); - down &= ~PAD_ButtonsUp(port); - - state |= (down & PAD_BUTTON_A) ? WII_GC_A : 0; - state |= (down & PAD_BUTTON_B) ? WII_GC_B : 0; - state |= (down & PAD_BUTTON_X) ? WII_GC_X : 0; - state |= (down & PAD_BUTTON_Y) ? WII_GC_Y : 0; - state |= (down & PAD_BUTTON_UP) ? WII_GC_UP : 0; - state |= (down & PAD_BUTTON_DOWN) ? WII_GC_DOWN : 0; - state |= (down & PAD_BUTTON_LEFT) ? WII_GC_LEFT : 0; - state |= (down & PAD_BUTTON_RIGHT) ? WII_GC_RIGHT : 0; - state |= (down & PAD_BUTTON_START) ? WII_GC_START : 0; - state |= (down & PAD_TRIGGER_Z) ? WII_GC_Z_TRIGGER : 0; - state |= (PAD_TriggerL(port) > 127) ? WII_GC_L_TRIGGER : 0; - state |= (PAD_TriggerR(port) > 127) ? WII_GC_R_TRIGGER : 0; - - s8 x = PAD_StickX(port); - s8 y = PAD_StickY(port); - - if (abs(x) > JOYSTICK_THRESHOLD) - { - state |= x > 0 ? WII_GC_LSTICK_RIGHT : WII_GC_LSTICK_LEFT; - } - if (abs(y) > JOYSTICK_THRESHOLD) - { - state |= y > 0 ? WII_GC_LSTICK_UP : WII_GC_LSTICK_DOWN; - } - - x = PAD_SubStickX(port); - y = PAD_SubStickY(port); - - if (abs(x) > JOYSTICK_THRESHOLD) - { - state |= x > 0 ? WII_GC_RSTICK_RIGHT : WII_GC_RSTICK_LEFT; - } - if (abs(y) > JOYSTICK_THRESHOLD) - { - state |= y > 0 ? WII_GC_RSTICK_UP : WII_GC_RSTICK_DOWN; - } - } - -#ifdef HW_RVL - if (port < wpads) - { - uint32_t down = WPAD_ButtonsHeld(port) | WPAD_ButtonsDown(port); - down &= ~WPAD_ButtonsUp(port); - - state |= (down & WPAD_BUTTON_A) ? WII_WIIMOTE_A : 0; - state |= (down & WPAD_BUTTON_B) ? WII_WIIMOTE_B : 0; - state |= (down & WPAD_BUTTON_1) ? WII_WIIMOTE_1 : 0; - state |= (down & WPAD_BUTTON_2) ? WII_WIIMOTE_2 : 0; - state |= (down & WPAD_BUTTON_PLUS) ? WII_WIIMOTE_PLUS : 0; - state |= (down & WPAD_BUTTON_MINUS) ? WII_WIIMOTE_MINUS : 0; - state |= (down & WPAD_BUTTON_HOME) ? WII_WIIMOTE_HOME : 0; - - expansion_t exp; - WPAD_Expansion(port, &exp); - switch (exp.type) - { - case WPAD_EXP_NUNCHUK: - { - // wiimote is held upright with nunchuk, do not change d-pad orientation - state |= (down & WPAD_BUTTON_UP) ? WII_WIIMOTE_UP : 0; - state |= (down & WPAD_BUTTON_DOWN) ? WII_WIIMOTE_DOWN : 0; - state |= (down & WPAD_BUTTON_LEFT) ? WII_WIIMOTE_LEFT : 0; - state |= (down & WPAD_BUTTON_RIGHT) ? WII_WIIMOTE_RIGHT : 0; - - state |= (down & WPAD_NUNCHUK_BUTTON_Z) ? WII_NUNCHUK_Z : 0; - state |= (down & WPAD_NUNCHUK_BUTTON_C) ? WII_NUNCHUK_C : 0; - - s8 x = wii_stick_x(exp.nunchuk.js); - s8 y = wii_stick_y(exp.nunchuk.js); - - if (abs(x) > JOYSTICK_THRESHOLD) - { - state |= x > 0 ? WII_NUNCHUK_RIGHT : WII_NUNCHUK_LEFT; - } - if (abs(y) > JOYSTICK_THRESHOLD) - { - state |= y > 0 ? WII_NUNCHUK_UP : WII_NUNCHUK_DOWN; - } - break; - } - case WPAD_EXP_CLASSIC: - { - state |= (down & WPAD_CLASSIC_BUTTON_A) ? WII_CLASSIC_A : 0; - state |= (down & WPAD_CLASSIC_BUTTON_B) ? WII_CLASSIC_B : 0; - state |= (down & WPAD_CLASSIC_BUTTON_X) ? WII_CLASSIC_X : 0; - state |= (down & WPAD_CLASSIC_BUTTON_Y) ? WII_CLASSIC_Y : 0; - state |= (down & WPAD_CLASSIC_BUTTON_PLUS) ? WII_CLASSIC_PLUS : 0; - state |= (down & WPAD_CLASSIC_BUTTON_MINUS) ? WII_CLASSIC_MINUS : 0; - state |= (down & WPAD_CLASSIC_BUTTON_HOME) ? WII_CLASSIC_HOME : 0; - state |= (down & WPAD_CLASSIC_BUTTON_FULL_L) ? WII_CLASSIC_L_TRIGGER : 0; - state |= (down & WPAD_CLASSIC_BUTTON_FULL_R) ? WII_CLASSIC_R_TRIGGER : 0; - state |= (down & WPAD_CLASSIC_BUTTON_ZL) ? WII_CLASSIC_ZL_TRIGGER : 0; - state |= (down & WPAD_CLASSIC_BUTTON_ZR) ? WII_CLASSIC_ZR_TRIGGER : 0; - - s8 x = wii_stick_x(exp.classic.ljs); - s8 y = wii_stick_y(exp.classic.ljs); - - if (abs(x) > JOYSTICK_THRESHOLD) - { - state |= x > 0 ? WII_CLASSIC_LSTICK_RIGHT : WII_CLASSIC_LSTICK_LEFT; - } - if (abs(y) > JOYSTICK_THRESHOLD) - { - state |= y > 0 ? WII_CLASSIC_LSTICK_UP : WII_CLASSIC_LSTICK_DOWN; - } - - x = wii_stick_x(exp.classic.rjs); - y = wii_stick_y(exp.classic.rjs); - - if (abs(x) > JOYSTICK_THRESHOLD) - { - state |= x > 0 ? WII_CLASSIC_RSTICK_RIGHT : WII_CLASSIC_RSTICK_LEFT; - } - if (abs(y) > JOYSTICK_THRESHOLD) - { - state |= y > 0 ? WII_CLASSIC_RSTICK_UP : WII_CLASSIC_RSTICK_DOWN; - } - // do not return, fall through for wiimote d-pad - } - default: - // rotated d-pad - state |= (down & WPAD_BUTTON_UP) ? WII_WIIMOTE_LEFT : 0; - state |= (down & WPAD_BUTTON_DOWN) ? WII_WIIMOTE_RIGHT : 0; - state |= (down & WPAD_BUTTON_LEFT) ? WII_WIIMOTE_DOWN : 0; - state |= (down & WPAD_BUTTON_RIGHT) ? WII_WIIMOTE_UP : 0; - break; - } - } -#endif - - if ((state & (WII_GC_START | WII_GC_Z_TRIGGER | WII_GC_L_TRIGGER | WII_GC_R_TRIGGER)) == (WII_GC_START | WII_GC_Z_TRIGGER | WII_GC_L_TRIGGER | WII_GC_R_TRIGGER)) - { - state |= WII_WIIMOTE_HOME; - } - - if (port == 0 && g_quit) - { - state |= WII_WIIMOTE_HOME; - g_quit = false; - } - - return state; -} - static void wii_input_poll(void *data) { (void)data; - for (unsigned i = 0; i < 4; i++) + unsigned pads = PAD_ScanPads(); +#ifdef HW_RVL + unsigned wpads = WPAD_ScanPads(); +#endif + + for (unsigned port = 0; port < 4; port++) { - pad_state[i] = wii_input_update(i); + uint64_t state = 0; + if (port < pads) + { + uint16_t down = PAD_ButtonsHeld(port) | PAD_ButtonsDown(port); + down &= ~PAD_ButtonsUp(port); + + state |= (down & PAD_BUTTON_A) ? WII_GC_A : 0; + state |= (down & PAD_BUTTON_B) ? WII_GC_B : 0; + state |= (down & PAD_BUTTON_X) ? WII_GC_X : 0; + state |= (down & PAD_BUTTON_Y) ? WII_GC_Y : 0; + state |= (down & PAD_BUTTON_UP) ? WII_GC_UP : 0; + state |= (down & PAD_BUTTON_DOWN) ? WII_GC_DOWN : 0; + state |= (down & PAD_BUTTON_LEFT) ? WII_GC_LEFT : 0; + state |= (down & PAD_BUTTON_RIGHT) ? WII_GC_RIGHT : 0; + state |= (down & PAD_BUTTON_START) ? WII_GC_START : 0; + state |= (down & PAD_TRIGGER_Z) ? WII_GC_Z_TRIGGER : 0; + state |= (PAD_TriggerL(port) > 127) ? WII_GC_L_TRIGGER : 0; + state |= (PAD_TriggerR(port) > 127) ? WII_GC_R_TRIGGER : 0; + + s8 x = PAD_StickX(port); + s8 y = PAD_StickY(port); + + if (abs(x) > JOYSTICK_THRESHOLD) + { + state |= x > 0 ? WII_GC_LSTICK_RIGHT : WII_GC_LSTICK_LEFT; + } + if (abs(y) > JOYSTICK_THRESHOLD) + { + state |= y > 0 ? WII_GC_LSTICK_UP : WII_GC_LSTICK_DOWN; + } + + x = PAD_SubStickX(port); + y = PAD_SubStickY(port); + + if (abs(x) > JOYSTICK_THRESHOLD) + { + state |= x > 0 ? WII_GC_RSTICK_RIGHT : WII_GC_RSTICK_LEFT; + } + if (abs(y) > JOYSTICK_THRESHOLD) + { + state |= y > 0 ? WII_GC_RSTICK_UP : WII_GC_RSTICK_DOWN; + } + } + +#ifdef HW_RVL + if (port < wpads) + { + uint32_t down = WPAD_ButtonsHeld(port) | WPAD_ButtonsDown(port); + down &= ~WPAD_ButtonsUp(port); + + state |= (down & WPAD_BUTTON_A) ? WII_WIIMOTE_A : 0; + state |= (down & WPAD_BUTTON_B) ? WII_WIIMOTE_B : 0; + state |= (down & WPAD_BUTTON_1) ? WII_WIIMOTE_1 : 0; + state |= (down & WPAD_BUTTON_2) ? WII_WIIMOTE_2 : 0; + state |= (down & WPAD_BUTTON_PLUS) ? WII_WIIMOTE_PLUS : 0; + state |= (down & WPAD_BUTTON_MINUS) ? WII_WIIMOTE_MINUS : 0; + state |= (down & WPAD_BUTTON_HOME) ? WII_WIIMOTE_HOME : 0; + + expansion_t exp; + WPAD_Expansion(port, &exp); + switch (exp.type) + { + case WPAD_EXP_NUNCHUK: + { + // wiimote is held upright with nunchuk, do not change d-pad orientation + state |= (down & WPAD_BUTTON_UP) ? WII_WIIMOTE_UP : 0; + state |= (down & WPAD_BUTTON_DOWN) ? WII_WIIMOTE_DOWN : 0; + state |= (down & WPAD_BUTTON_LEFT) ? WII_WIIMOTE_LEFT : 0; + state |= (down & WPAD_BUTTON_RIGHT) ? WII_WIIMOTE_RIGHT : 0; + + state |= (down & WPAD_NUNCHUK_BUTTON_Z) ? WII_NUNCHUK_Z : 0; + state |= (down & WPAD_NUNCHUK_BUTTON_C) ? WII_NUNCHUK_C : 0; + + s8 x = wii_stick_x(exp.nunchuk.js); + s8 y = wii_stick_y(exp.nunchuk.js); + + if (abs(x) > JOYSTICK_THRESHOLD) + { + state |= x > 0 ? WII_NUNCHUK_RIGHT : WII_NUNCHUK_LEFT; + } + if (abs(y) > JOYSTICK_THRESHOLD) + { + state |= y > 0 ? WII_NUNCHUK_UP : WII_NUNCHUK_DOWN; + } + break; + } + case WPAD_EXP_CLASSIC: + { + state |= (down & WPAD_CLASSIC_BUTTON_A) ? WII_CLASSIC_A : 0; + state |= (down & WPAD_CLASSIC_BUTTON_B) ? WII_CLASSIC_B : 0; + state |= (down & WPAD_CLASSIC_BUTTON_X) ? WII_CLASSIC_X : 0; + state |= (down & WPAD_CLASSIC_BUTTON_Y) ? WII_CLASSIC_Y : 0; + state |= (down & WPAD_CLASSIC_BUTTON_PLUS) ? WII_CLASSIC_PLUS : 0; + state |= (down & WPAD_CLASSIC_BUTTON_MINUS) ? WII_CLASSIC_MINUS : 0; + state |= (down & WPAD_CLASSIC_BUTTON_HOME) ? WII_CLASSIC_HOME : 0; + state |= (down & WPAD_CLASSIC_BUTTON_FULL_L) ? WII_CLASSIC_L_TRIGGER : 0; + state |= (down & WPAD_CLASSIC_BUTTON_FULL_R) ? WII_CLASSIC_R_TRIGGER : 0; + state |= (down & WPAD_CLASSIC_BUTTON_ZL) ? WII_CLASSIC_ZL_TRIGGER : 0; + state |= (down & WPAD_CLASSIC_BUTTON_ZR) ? WII_CLASSIC_ZR_TRIGGER : 0; + + s8 x = wii_stick_x(exp.classic.ljs); + s8 y = wii_stick_y(exp.classic.ljs); + + if (abs(x) > JOYSTICK_THRESHOLD) + { + state |= x > 0 ? WII_CLASSIC_LSTICK_RIGHT : WII_CLASSIC_LSTICK_LEFT; + } + if (abs(y) > JOYSTICK_THRESHOLD) + { + state |= y > 0 ? WII_CLASSIC_LSTICK_UP : WII_CLASSIC_LSTICK_DOWN; + } + + x = wii_stick_x(exp.classic.rjs); + y = wii_stick_y(exp.classic.rjs); + + if (abs(x) > JOYSTICK_THRESHOLD) + { + state |= x > 0 ? WII_CLASSIC_RSTICK_RIGHT : WII_CLASSIC_RSTICK_LEFT; + } + if (abs(y) > JOYSTICK_THRESHOLD) + { + state |= y > 0 ? WII_CLASSIC_RSTICK_UP : WII_CLASSIC_RSTICK_DOWN; + } + // do not return, fall through for wiimote d-pad + } + default: + // rotated d-pad + state |= (down & WPAD_BUTTON_UP) ? WII_WIIMOTE_LEFT : 0; + state |= (down & WPAD_BUTTON_DOWN) ? WII_WIIMOTE_RIGHT : 0; + state |= (down & WPAD_BUTTON_LEFT) ? WII_WIIMOTE_DOWN : 0; + state |= (down & WPAD_BUTTON_RIGHT) ? WII_WIIMOTE_UP : 0; + break; + } + } +#endif + + if ((state & (WII_GC_START | WII_GC_Z_TRIGGER | WII_GC_L_TRIGGER | WII_GC_R_TRIGGER)) == (WII_GC_START | WII_GC_Z_TRIGGER | WII_GC_L_TRIGGER | WII_GC_R_TRIGGER)) + { + state |= WII_WIIMOTE_HOME; + } + + pad_state[port] = state; + } + + if (g_quit) + { + pad_state[0] |= WII_WIIMOTE_HOME; + g_quit = false; } } diff --git a/wii/wii_input.h b/wii/wii_input.h index fe02ed4a3b..0185e0316c 100644 --- a/wii/wii_input.h +++ b/wii/wii_input.h @@ -1,6 +1,6 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2010-2012 - Hans-Kristian Arntzen - * Copyright (C) 2011-2012 - Michael Lelli + * Copyright (C) 2012 - Michael Lelli * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- @@ -173,6 +173,4 @@ enum wii_device_id RARCH_LAST_PLATFORM_KEY }; -uint64_t wii_input_update(unsigned port); - #endif From 870f3a4b191b6aec4efbe26e66ea6dd9bbf08447 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Thu, 26 Jul 2012 23:11:52 +0200 Subject: [PATCH 17/19] (Wii) Rename wii input/audio/video drivers - add ToadKing to Wii port credits --- AUTHORS | 4 ++++ console/griffin/griffin.c | 6 +++--- wii/{audio.c => gx_audio.c} | 0 wii/{input.c => gx_input.c} | 5 +++-- wii/{wii_input.h => gx_input.h} | 1 + wii/{video.c => gx_video.c} | 0 6 files changed, 11 insertions(+), 5 deletions(-) rename wii/{audio.c => gx_audio.c} (100%) rename wii/{input.c => gx_input.c} (99%) rename wii/{wii_input.h => gx_input.h} (99%) rename wii/{video.c => gx_video.c} (100%) diff --git a/AUTHORS b/AUTHORS index 76833cba6b..d246b1733b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,5 +1,6 @@ Hans-Kristian Arntzen - - Main code, maintainer + - Gamecube/Wii libogc port Devin J. Pohly - - Joypad axis support @@ -10,7 +11,9 @@ Chris Moeller - Daniel De Matteis - - PlayStation 3 port - XBox 360 XDK port + - Libxenon port - XBox 1 port + - Gamecube/Wii libogc port David Reichelt - - XBox 1 port @@ -19,6 +22,7 @@ tukuyomi - - Cleanups in quickbuild Michael Lelli - + - Gamecube/Wii libogc port - Raspberry Pi video driver - Linux Raw keyboard input driver diff --git a/console/griffin/griffin.c b/console/griffin/griffin.c index 90ddaab09c..589edfa1fa 100644 --- a/console/griffin/griffin.c +++ b/console/griffin/griffin.c @@ -105,7 +105,7 @@ VIDEO DRIVER #elif defined(HAVE_OPENGLES20) #include "../../gfx/gles.c" #elif defined(GEKKO) -#include "../../wii/video.c" +#include "../../wii/gx_video.c" #endif #include "../../gfx/gfx_common.c" @@ -137,7 +137,7 @@ INPUT #if defined(__CELLOS_LV2__) #include "../../ps3/ps3_input.c" #elif defined(GEKKO) -#include "../../wii/input.c" +#include "../../wii/gx_input.c" #endif #ifdef _XBOX @@ -195,7 +195,7 @@ AUDIO #elif defined(_XBOX360) #include "../../360/xdk360_audio.cpp" #elif defined(GEKKO) -#include "../../wii/audio.c" +#include "../../wii/gx_audio.c" #endif #ifdef HAVE_DSOUND diff --git a/wii/audio.c b/wii/gx_audio.c similarity index 100% rename from wii/audio.c rename to wii/gx_audio.c diff --git a/wii/input.c b/wii/gx_input.c similarity index 99% rename from wii/input.c rename to wii/gx_input.c index 339f8dde19..cbcc279009 100644 --- a/wii/input.c +++ b/wii/gx_input.c @@ -1,5 +1,6 @@ /* RetroArch - A frontend for libretro. - * Copyright (C) 2012 - Hans-Kristian Arntzen + * Copyright (C) 2010-2012 - Hans-Kristian Arntzen + * Copyright (C) 2011-2012 - Daniel De Matteis * Copyright (C) 2012 - Michael Lelli * * RetroArch is free software: you can redistribute it and/or modify it under the terms @@ -27,7 +28,7 @@ #define M_PI 3.14159265358979323846264338327 #endif -#include "wii_input.h" +#include "gx_input.h" #include "../driver.h" #include "../libretro.h" #include diff --git a/wii/wii_input.h b/wii/gx_input.h similarity index 99% rename from wii/wii_input.h rename to wii/gx_input.h index 0185e0316c..6b15953db2 100644 --- a/wii/wii_input.h +++ b/wii/gx_input.h @@ -1,5 +1,6 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2010-2012 - Hans-Kristian Arntzen + * Copyright (C) 2011-2012 - Daniel De Matteis * Copyright (C) 2012 - Michael Lelli * * RetroArch is free software: you can redistribute it and/or modify it under the terms diff --git a/wii/video.c b/wii/gx_video.c similarity index 100% rename from wii/video.c rename to wii/gx_video.c From 3a661bff71930328e64dbe8bd3ea4b6a5df078c1 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Fri, 27 Jul 2012 14:31:16 +0200 Subject: [PATCH 18/19] (RARCH_CONSOLE) Add new load_game_wrap function that all console ports use - this abstracts away ZIP loading of ROMs too (PS3) Add new 'ZIP Extract' mode - 'Current dir and load first file' --- 360/frontend-xdk/menu.cpp | 17 +------ console/console_settings.c | 3 ++ console/libretro_mgmt.c | 16 +++++++ console/libretro_mgmt.h | 1 + console/retroarch_rom_ext.c | 59 ++++++++++++++++++++++++- console/retroarch_rom_ext.h | 2 +- console/retroarch_rzlib.c | 34 +++++++++++--- console/retroarch_rzlib.h | 3 +- file.h | 3 ++ file_path.c | 6 +-- ps3/frontend/menu.c | 35 ++++++--------- wii/frontend/rgui.c | 3 +- xbox1/frontend/RetroLaunch/MenuMain.cpp | 4 +- 13 files changed, 130 insertions(+), 56 deletions(-) diff --git a/360/frontend-xdk/menu.cpp b/360/frontend-xdk/menu.cpp index 249ecfc48e..e9b9168cb0 100644 --- a/360/frontend-xdk/menu.cpp +++ b/360/frontend-xdk/menu.cpp @@ -546,23 +546,8 @@ HRESULT CRetroArchFileBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandle const char *strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_romlist.GetText(index)); if(path_file_exists(browser->current_dir.list->elems[index].data)) { - char rom_path_temp[PATH_MAX]; - char dir_path_temp[PATH_MAX]; - struct retro_system_info info; - retro_get_system_info(&info); - bool block_zip_extract = info.block_extract; - snprintf(path_temp, sizeof(path_temp), "%s\\%s", filebrowser_get_current_dir(browser), strbuffer); - - if((strstr(strbuffer, ".zip") || strstr(strbuffer, ".ZIP")) && !block_zip_extract) - { - rarch_extract_directory(dir_path_temp, path_temp, sizeof(dir_path_temp)); - rarch_extract_zipfile(rom_path_temp, dir_path_temp); - } - else - { - rarch_console_load_game(path_temp); - } + rarch_console_load_game_wrap(path_temp, S_DELAY_45); } else if(browser->current_dir.list->elems[index].attr.b) { diff --git a/console/console_settings.c b/console/console_settings.c index 1ebb221b6b..c9f01e0f65 100644 --- a/console/console_settings.c +++ b/console/console_settings.c @@ -230,6 +230,9 @@ void rarch_settings_msg(unsigned setting, unsigned delay) case ZIP_EXTRACT_TO_CURRENT_DIR: snprintf(str, sizeof(str), "INFO - ZIP file successfully extracted to current directory."); break; + case ZIP_EXTRACT_TO_CURRENT_DIR_AND_LOAD_FIRST_FILE: + snprintf(str, sizeof(str), "INFO - ZIP file successfully extracted, now loading first file."); + break; #ifdef HAVE_HDD_CACHE_PARTITION case ZIP_EXTRACT_TO_CACHE_DIR: snprintf(str, sizeof(str), "INFO - ZIP file successfully extracted to cache partition."); diff --git a/console/libretro_mgmt.c b/console/libretro_mgmt.c index 87844ef4e3..64af4adc22 100644 --- a/console/libretro_mgmt.c +++ b/console/libretro_mgmt.c @@ -152,3 +152,19 @@ void rarch_configure_libretro(const input_driver_t *input, const char *path_pref rarch_config_load(default_paths.config_file, path_prefix, extension, find_libretro_file); init_libretro_sym(); } + +bool rarch_manage_libretro_extension_supported(const char *filename) +{ + bool ext_supported = false; + struct string_list *ext_list = NULL; + const char *file_ext = path_get_extension(filename); + const char *ext = rarch_console_get_rom_ext(); + + if (ext) + ext_list = string_split(ext, "|"); + + if (ext_list && string_list_find_elem(ext_list, file_ext)) + ext_supported = true; + + return ext_supported; +} diff --git a/console/libretro_mgmt.h b/console/libretro_mgmt.h index 07e486e8df..589152fc63 100644 --- a/console/libretro_mgmt.h +++ b/console/libretro_mgmt.h @@ -30,5 +30,6 @@ enum void rarch_manage_libretro_set_first_file(char *first_file, size_t size_of_first_file, const char *libretro_path, const char * exe_ext); void rarch_configure_libretro(const input_driver_t *input, const char *path_prefix, const char * extension); +bool rarch_manage_libretro_extension_supported(const char *filename); #endif diff --git a/console/retroarch_rom_ext.c b/console/retroarch_rom_ext.c index d49fa84a83..37849ff97c 100644 --- a/console/retroarch_rom_ext.c +++ b/console/retroarch_rom_ext.c @@ -22,17 +22,72 @@ #endif #include "../general.h" +#include "../file.h" #include "console_settings.h" - +#include "retroarch_console.h" #include "retroarch_rom_ext.h" -void rarch_console_load_game(const char *path) +#ifdef HAVE_ZLIB +#include "retroarch_rzlib.h" +#endif + +static void rarch_console_load_game(const char *path) { snprintf(g_console.rom_path, sizeof(g_console.rom_path), path); rarch_settings_change(S_START_RARCH); } +void rarch_console_load_game_wrap(const char *path, unsigned delay) +{ + const char *game_to_load; + char first_file[PATH_MAX]; + char rom_path_temp[PATH_MAX]; + char dir_path_temp[PATH_MAX]; + struct retro_system_info info; + bool block_zip_extract = false; + + retro_get_system_info(&info); + block_zip_extract = info.block_extract; + + snprintf(rom_path_temp, sizeof(rom_path_temp), path); + +#ifdef HAVE_ZLIB + bool extract_zip_cond = (strstr(rom_path_temp, ".zip") || strstr(rom_path_temp, ".ZIP")) + && !block_zip_extract; + bool extract_zip_and_load_game_cond = (extract_zip_cond && + g_console.zip_extract_mode == ZIP_EXTRACT_TO_CURRENT_DIR_AND_LOAD_FIRST_FILE && first_file); + bool load_game = (extract_zip_and_load_game_cond) || (!extract_zip_cond); +#else + bool extract_zip_cond = false; + bool extract_zip_and_load_game_cond = false; + bool load_game = !extract_zip_cond; +#endif + +#ifdef HAVE_ZLIB + if(extract_zip_cond) + { + rarch_extract_directory(dir_path_temp, rom_path_temp, sizeof(dir_path_temp)); + rarch_extract_zipfile(rom_path_temp, dir_path_temp, first_file, sizeof(first_file)); + } +#endif + +#ifdef HAVE_ZLIB + if(extract_zip_and_load_game_cond) + game_to_load = first_file; + else +#endif + game_to_load = path; + + if(load_game) + { + rarch_console_load_game(game_to_load); + + if (g_console.info_msg_enable) + rarch_settings_msg(S_MSG_LOADING_ROM, delay); + } +} + const char *rarch_console_get_rom_ext(void) { const char *retval = NULL; diff --git a/console/retroarch_rom_ext.h b/console/retroarch_rom_ext.h index 92a56a5e32..b0e3fe7721 100644 --- a/console/retroarch_rom_ext.h +++ b/console/retroarch_rom_ext.h @@ -17,7 +17,7 @@ #ifndef RARCH_ROM_EXT_H__ #define RARCH_ROM_EXT_H__ -void rarch_console_load_game(const char *path); +void rarch_console_load_game_wrap(const char *path, unsigned delay); // Get rom extensions for current library. // Returns NULL if library doesn't have any preferences in particular. diff --git a/console/retroarch_rzlib.c b/console/retroarch_rzlib.c index fe73feca5c..ff49cb519d 100644 --- a/console/retroarch_rzlib.c +++ b/console/retroarch_rzlib.c @@ -22,7 +22,7 @@ #include "retroarch_rzlib.h" -static int rarch_extract_currentfile_in_zip(unzFile uf, const char *current_dir) +static int rarch_extract_currentfile_in_zip(unzFile uf, const char *current_dir, char *slash, char *write_filename, size_t write_filename_size) { char filename_inzip[PATH_MAX]; FILE *file_out = NULL; @@ -46,16 +46,15 @@ static int rarch_extract_currentfile_in_zip(unzFile uf, const char *current_dir) return UNZ_INTERNALERROR; } - char write_filename[PATH_MAX]; - switch(g_console.zip_extract_mode) { case ZIP_EXTRACT_TO_CURRENT_DIR: - snprintf(write_filename, sizeof(write_filename), "%s/%s", current_dir, filename_inzip); + case ZIP_EXTRACT_TO_CURRENT_DIR_AND_LOAD_FIRST_FILE: + snprintf(write_filename, write_filename_size, "%s%s%s", current_dir, slash, filename_inzip); break; #ifdef HAVE_HDD_CACHE_PARTITION case ZIP_EXTRACT_TO_CACHE_DIR: - snprintf(write_filename, sizeof(write_filename), "%s%s", default_paths.cache_dir, filename_inzip); + snprintf(write_filename, write_filename_size, "%s%s", default_paths.cache_dir, filename_inzip); break; #endif } @@ -113,8 +112,9 @@ static int rarch_extract_currentfile_in_zip(unzFile uf, const char *current_dir) return err; } -int rarch_extract_zipfile(const char *zip_path, const char *current_dir) +int rarch_extract_zipfile(const char *zip_path, const char *current_dir, char *first_file, size_t first_file_size) { + bool found_first_file = false; unzFile uf = unzOpen(zip_path); unz_global_info gi; @@ -124,8 +124,28 @@ int rarch_extract_zipfile(const char *zip_path, const char *current_dir) for (unsigned i = 0; i < gi.number_entry; i++) { - if (rarch_extract_currentfile_in_zip(uf, current_dir) != UNZ_OK) + static char write_filename[PATH_MAX]; + char slash[6]; +#ifdef _XBOX + snprintf(slash, sizeof(slash), "\0"); +#else + snprintf(slash, sizeof(slash), "/"); +#endif + if (rarch_extract_currentfile_in_zip(uf, current_dir, slash, write_filename, sizeof(write_filename)) != UNZ_OK) + { + RARCH_ERR("Failed to extract current file from ZIP archive.\n"); break; + } + else + { + if(!found_first_file) + { + found_first_file = rarch_manage_libretro_extension_supported(write_filename); + + if(found_first_file) + snprintf(first_file, first_file_size, write_filename); + } + } if ((i + 1) < gi.number_entry) { diff --git a/console/retroarch_rzlib.h b/console/retroarch_rzlib.h index 98fd52c7bb..74ab32d866 100644 --- a/console/retroarch_rzlib.h +++ b/console/retroarch_rzlib.h @@ -24,9 +24,10 @@ enum { ZIP_EXTRACT_TO_CURRENT_DIR, + ZIP_EXTRACT_TO_CURRENT_DIR_AND_LOAD_FIRST_FILE, ZIP_EXTRACT_TO_CACHE_DIR }; -int rarch_extract_zipfile(const char *zip_path, const char *current_dir); +int rarch_extract_zipfile(const char *zip_path, const char *current_dir, char *first_file, size_t first_file_size); #endif diff --git a/file.h b/file.h index 467f5b75a8..29d8e51887 100644 --- a/file.h +++ b/file.h @@ -60,9 +60,12 @@ struct string_list struct string_list *dir_list_new(const char *dir, const char *ext, bool include_dirs); void dir_list_sort(struct string_list *list, bool dir_first); void dir_list_free(struct string_list *list); +bool string_list_find_elem(const struct string_list *list, const char *elem); +struct string_list *string_split(const char *str, const char *delim); bool path_is_directory(const char *path); bool path_file_exists(const char *path); +const char *path_get_extension(const char *path); // Path-name operations. // If any of these operation are detected to overflow, the application will be terminated. diff --git a/file_path.c b/file_path.c index e5338bae97..854f79969f 100644 --- a/file_path.c +++ b/file_path.c @@ -103,7 +103,7 @@ static bool string_list_append(struct string_list *list, const char *elem, union return true; } -static struct string_list *string_split(const char *str, const char *delim) +struct string_list *string_split(const char *str, const char *delim) { char *copy = NULL; const char *tmp = NULL; @@ -138,7 +138,7 @@ error: return NULL; } -static bool string_list_find_elem(const struct string_list *list, const char *elem) +bool string_list_find_elem(const struct string_list *list, const char *elem) { if (!list) return false; @@ -152,7 +152,7 @@ static bool string_list_find_elem(const struct string_list *list, const char *el return false; } -static const char *path_get_extension(const char *path) +const char *path_get_extension(const char *path) { const char *ext = strrchr(path, '.'); if (ext) diff --git a/ps3/frontend/menu.c b/ps3/frontend/menu.c index cf92b7e27f..664e668f6d 100644 --- a/ps3/frontend/menu.c +++ b/ps3/frontend/menu.c @@ -230,6 +230,10 @@ static void set_setting_label(menu * menu_obj, unsigned currentsetting) snprintf(items_generalsettings[currentsetting].setting_text, sizeof(items_generalsettings[currentsetting].setting_text), "Current dir"); snprintf(items_generalsettings[currentsetting].comment, sizeof(items_generalsettings[currentsetting].comment), "INFO - [ZIP Extract Mode] is set to 'Current dir'.\nZIP files are extracted to the current directory."); break; + case ZIP_EXTRACT_TO_CURRENT_DIR_AND_LOAD_FIRST_FILE: + snprintf(items_generalsettings[currentsetting].setting_text, sizeof(items_generalsettings[currentsetting].setting_text), "Current dir and load first file"); + snprintf(items_generalsettings[currentsetting].comment, sizeof(items_generalsettings[currentsetting].comment), "INFO - [ZIP Extract Mode] is set to 'Current dir and load first file'.\nZIP files are extracted to the current directory, and the first game is automatically loaded."); + break; case ZIP_EXTRACT_TO_CACHE_DIR: snprintf(items_generalsettings[currentsetting].setting_text, sizeof(items_generalsettings[currentsetting].setting_text), "Cache dir"); snprintf(items_generalsettings[currentsetting].comment, sizeof(items_generalsettings[currentsetting].comment), "INFO - [ZIP Extract Mode] is set to 'Cache dir'.\nZIP files are extracted to the cache directory (dev_hdd1)."); @@ -1365,9 +1369,15 @@ static void producesettingentry(menu * menu_obj, unsigned switchvalue) g_settings.rewind_enable = false; break; case SETTING_ZIP_EXTRACT: - if((input_state & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT)) || (input_state & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT)) || (input_state & (1 << RETRO_DEVICE_ID_JOYPAD_B))) + if((input_state & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT))) { - g_console.zip_extract_mode = g_console.zip_extract_mode == ZIP_EXTRACT_TO_CURRENT_DIR ? ZIP_EXTRACT_TO_CACHE_DIR : ZIP_EXTRACT_TO_CURRENT_DIR; + if(g_console.zip_extract_mode > 0) + g_console.zip_extract_mode--; + } + if((input_state & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT)) || (input_state & (1 << RETRO_DEVICE_ID_JOYPAD_B))) + { + if(g_console.zip_extract_mode < ZIP_EXTRACT_TO_CACHE_DIR) + g_console.zip_extract_mode++; } if(input_state & (1 << RETRO_DEVICE_ID_JOYPAD_START)) { @@ -1697,26 +1707,7 @@ static void menu_romselect_iterate(filebrowser_t *filebrowser, menu_romselect_ac filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_OK); } else - { - char rom_path_temp[PATH_MAX]; - char dir_path_temp[PATH_MAX]; - struct retro_system_info info; - retro_get_system_info(&info); - bool block_zip_extract = info.block_extract; - - snprintf(rom_path_temp, sizeof(rom_path_temp), filebrowser_get_current_path(filebrowser)); - - if((strstr(rom_path_temp, ".zip") || strstr(rom_path_temp, ".ZIP")) && !block_zip_extract) - { - rarch_extract_directory(dir_path_temp, rom_path_temp, sizeof(dir_path_temp)); - rarch_extract_zipfile(rom_path_temp, dir_path_temp); - } - else - { - rarch_console_load_game(filebrowser_get_current_path(filebrowser)); - rarch_settings_msg(S_MSG_LOADING_ROM, S_DELAY_45); - } - } + rarch_console_load_game_wrap(filebrowser_get_current_path(filebrowser), S_DELAY_45); break; case MENU_ROMSELECT_ACTION_GOTO_SETTINGS: menu_stack_increment(); diff --git a/wii/frontend/rgui.c b/wii/frontend/rgui.c index c99368c9fe..aa3e2337ec 100644 --- a/wii/frontend/rgui.c +++ b/wii/frontend/rgui.c @@ -480,8 +480,7 @@ const char *rgui_iterate(rgui_handle_t *rgui, rgui_action_t action) else { snprintf(rgui->path_buf, sizeof(rgui->path_buf), "%s/%s", dir, path); - rarch_console_load_game(rgui->path_buf); - rarch_settings_msg(S_MSG_LOADING_ROM, S_DELAY_1); + rarch_console_load_game_wrap(rgui->path_buf, S_DELAY_1); found = true; } break; diff --git a/xbox1/frontend/RetroLaunch/MenuMain.cpp b/xbox1/frontend/RetroLaunch/MenuMain.cpp index eed2cad4f9..62617bafd3 100644 --- a/xbox1/frontend/RetroLaunch/MenuMain.cpp +++ b/xbox1/frontend/RetroLaunch/MenuMain.cpp @@ -213,9 +213,9 @@ void CMenuMain::ProcessInput() } } - // Press A to launch, selected rom filename is saved into T:\\tmp.retro + // Press A to launch if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_B) || trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_START)) - rarch_console_load_game(g_romList.GetRomAt(m_romListSelectedRom)->GetFileName().c_str()); + rarch_console_load_game_wrap(g_romList.GetRomAt(m_romListSelectedRom)->GetFileName().c_str(), S_DELAY_1); if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_R3)) { From 243944ac62c81d97fb1ab36c039270258233b2a1 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 27 Jul 2012 14:59:45 +0200 Subject: [PATCH 19/19] (360) Build fix (XDK) Fix system_dir setting --- 360/frontend-xdk/menu.cpp | 4 ++-- console/retroarch_rzlib.c | 2 +- xdk/frontend/main.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/360/frontend-xdk/menu.cpp b/360/frontend-xdk/menu.cpp index e9b9168cb0..541ca58c69 100644 --- a/360/frontend-xdk/menu.cpp +++ b/360/frontend-xdk/menu.cpp @@ -546,8 +546,8 @@ HRESULT CRetroArchFileBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandle const char *strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_romlist.GetText(index)); if(path_file_exists(browser->current_dir.list->elems[index].data)) { - snprintf(path_temp, sizeof(path_temp), "%s\\%s", filebrowser_get_current_dir(browser), strbuffer); - rarch_console_load_game_wrap(path_temp, S_DELAY_45); + snprintf(path, sizeof(path), "%s\\%s", filebrowser_get_current_dir(browser), strbuffer); + rarch_console_load_game_wrap(path, S_DELAY_45); } else if(browser->current_dir.list->elems[index].attr.b) { diff --git a/console/retroarch_rzlib.c b/console/retroarch_rzlib.c index ff49cb519d..1fd379f5db 100644 --- a/console/retroarch_rzlib.c +++ b/console/retroarch_rzlib.c @@ -127,7 +127,7 @@ int rarch_extract_zipfile(const char *zip_path, const char *current_dir, char *f static char write_filename[PATH_MAX]; char slash[6]; #ifdef _XBOX - snprintf(slash, sizeof(slash), "\0"); + snprintf(slash, sizeof(slash), "\\"); #else snprintf(slash, sizeof(slash), "/"); #endif diff --git a/xdk/frontend/main.c b/xdk/frontend/main.c index 82baaaba7e..7d7ba6585f 100644 --- a/xdk/frontend/main.c +++ b/xdk/frontend/main.c @@ -103,7 +103,7 @@ static void get_environment_settings (void) #if defined(_XBOX1) /* FIXME: Hardcoded */ strlcpy(default_paths.config_file, "D:\\retroarch.cfg", sizeof(default_paths.config_file)); - strlcpy(g_settings.system_directory, "D:\\system\\", sizeof(g_settings.system_directory)); + strlcpy(default_paths.system_dir, "D:\\system\\", sizeof(default_paths.system_dir)); strlcpy(default_paths.filesystem_root_dir, "D:\\", sizeof(default_paths.filesystem_root_dir)); strlcpy(default_paths.executable_extension, ".xbe", sizeof(default_paths.executable_extension)); #elif defined(_XBOX360) @@ -113,7 +113,7 @@ static void get_environment_settings (void) strlcpy(default_paths.filesystem_root_dir, "game:\\", sizeof(default_paths.filesystem_root_dir)); strlcpy(default_paths.shader_file, "game:\\media\\shaders\\stock.cg", sizeof(default_paths.shader_file)); strlcpy(default_paths.config_file, "game:\\retroarch.cfg", sizeof(default_paths.config_file)); - strlcpy(g_settings.system_directory, "game:\\system\\", sizeof(g_settings.system_directory)); + strlcpy(default_paths.system_dir, "game:\\system\\", sizeof(default_paths.system_dir)); strlcpy(default_paths.executable_extension, ".xex", sizeof(default_paths.executable_extension)); #endif }