From e6535c873331a54a21435d8e9450b09a596a6874 Mon Sep 17 00:00:00 2001 From: "coadde [Márcio Alexandre Silva Delgado]" Date: Sun, 23 Aug 2015 22:25:37 -0300 Subject: pcr/reicast{,-multilib}-git --- .../enable_joystick_support_old.patch | 346 +++++++++++++++++++++ 1 file changed, 346 insertions(+) create mode 100644 pcr/reicast-multilib-git/enable_joystick_support_old.patch (limited to 'pcr/reicast-multilib-git/enable_joystick_support_old.patch') diff --git a/pcr/reicast-multilib-git/enable_joystick_support_old.patch b/pcr/reicast-multilib-git/enable_joystick_support_old.patch new file mode 100644 index 000000000..0fbb59ac7 --- /dev/null +++ b/pcr/reicast-multilib-git/enable_joystick_support_old.patch @@ -0,0 +1,346 @@ +diff -Nur reicast-emulator.orig/core/linux-dist/main.cpp reicast-emulator/core/linux-dist/main.cpp +--- reicast-emulator.orig/core/linux-dist/main.cpp 2015-06-29 21:42:22.674278849 -0300 ++++ reicast-emulator/core/linux-dist/main.cpp 2015-06-29 22:08:38.780500620 -0300 +@@ -22,6 +22,7 @@ + #include + #include + #include ++ #include + + #if !defined(GLES) + #include +@@ -49,6 +50,34 @@ + #endif + #define WINDOW_HEIGHT 480 + ++/*****************************************************************/ ++/****************** Configure Controls ***************************/ ++/*****************************************************************/ ++ ++// Use XEV in terminal window to find keycodes to configure buttons. ++#define XANA_UP (25) ++#define XANA_DOWN (39) ++#define XANA_LEFT (38) ++#define XANA_RIGHT (40) ++#define XANA_LT (79) ++#define XANA_RT (81) ++#define XDPAD_UP (31) ++#define XDPAD_DOWN (45) ++#define XDPAD_LEFT (44) ++#define XDPAD_RIGHT (46) ++#define XBTN_Y (80) ++#define XBTN_X (83) ++#define XBTN_B (85) ++#define XBTN_A (84) ++#define XBTN_START (36) ++ ++/*******************************************************************/ ++ ++u8 temp_joyx = 0; ++u8 temp_joyy = 0; ++u8 temp_lt = 0; ++u8 temp_rt = 0; ++ + void* x11_win=0,* x11_disp=0; + void* libPvr_GetRenderTarget() + { +@@ -124,8 +153,8 @@ + { Btn_A,Btn_B,Btn_X,Btn_Y,0,0,0,Btn_Start,0,0 }; + + const u32 JMapAxis_360[MAP_SIZE] = +- { Axis_X,Axis_Y,Axis_LT,0,0,Axis_RT,DPad_Left,DPad_Up,0,0 }; +- ++ //{ Axis_X,Axis_Y,Axis_LT,0,0,Axis_RT,DPad_Left,DPad_Up,0,0 }; ++ { Axis_X,Axis_Y,0,0,Axis_RT,Axis_LT,DPad_Left,DPad_Up,0,0 }; + const u32* JMapBtn=JMapBtn_USB; + const u32* JMapAxis=JMapAxis_USB; + +@@ -180,7 +209,7 @@ + + printf("SDK: Found '%s' joystick with %d axis and %d buttons\n",Name,AxisCount,ButtonCount); + +- if (strcmp(Name,"Microsoft X-Box 360 pad")==0) ++ if (strcmp(Name,"Microsoft X-Box 360 pad")==0 || strcmp(Name,"Xbox Gamepad (userspace driver)")==0) + { + JMapBtn=JMapBtn_360; + JMapAxis=JMapAxis_360; +@@ -414,9 +443,20 @@ + { + static char key = 0; + +- kcode[port]= x11_dc_buttons; +- rt[port]=0; +- lt[port]=0; ++ if (cfgLoadInt("config","usejoypad",0)==1) ++ { ++ HandleJoystick(port); ++ return; ++ } ++ else ++ { ++ kcode[port]= x11_dc_buttons; ++ joyx[0] = temp_joyx; ++ joyy[0] = temp_joyy; ++ lt[0] = temp_lt; ++ rt[0] = temp_rt; ++ return; ++ } + + #if defined(TARGET_GCW0) || defined(TARGET_PANDORA) + HandleJoystick(port); +@@ -472,7 +512,13 @@ + void os_DoEvents() + { + #if defined(SUPPORT_X11) +- if (x11_win) { ++ ++ static bool ana_up = false; ++ static bool ana_down = false; ++ static bool ana_left = false; ++ static bool ana_right = false; ++ ++ if (x11_win) { + //Handle X11 + XEvent e; + if(XCheckWindowEvent((Display*)x11_disp, (Window)x11_win, KeyPressMask | KeyReleaseMask, &e)) +@@ -483,6 +529,103 @@ + case KeyPress: + case KeyRelease: + { ++ ++ //Detect up press ++ if(e.xkey.keycode == XANA_UP) ++ { ++ if(e.type == KeyPress) ++ { ++ ana_up = true; ++ } ++ else if(e.type == KeyRelease) ++ { ++ ana_up = false; ++ } ++ else ++ { ++ } ++ } ++ ++ //Detect down Press ++ if(e.xkey.keycode == XANA_DOWN) ++ { ++ if(e.type == KeyPress) ++ { ++ ana_down = true; ++ } ++ else if(e.type == KeyRelease) ++ { ++ ana_down = false; ++ } ++ else ++ { ++ } ++ } ++ ++ //Detect left press ++ if(e.xkey.keycode == XANA_LEFT) ++ { ++ if(e.type == KeyPress) ++ { ++ ana_left = true; ++ } ++ else if(e.type == KeyRelease) ++ { ++ ana_left = false; ++ } ++ else ++ { ++ } ++ } ++ ++ //Detect right Press ++ if(e.xkey.keycode == XANA_RIGHT) ++ { ++ if(e.type == KeyPress) ++ { ++ ana_right = true; ++ } ++ else if(e.type == KeyRelease) ++ { ++ ana_right = false; ++ } ++ else ++ { ++ } ++ } ++ ++ //detect LT press ++ if (e.xkey.keycode == XANA_LT) ++ { ++ if (e.type == KeyPress) ++ { ++ temp_lt = 255; ++ } ++ else if (e.type == KeyRelease) ++ { ++ temp_lt = 0; ++ } ++ else ++ { ++ } ++ } ++ ++ //detect RT press ++ if (e.xkey.keycode == XANA_RT) ++ { ++ if (e.type == KeyPress) ++ { ++ temp_rt = 255; ++ } ++ else if (e.type == KeyRelease) ++ { ++ temp_rt = 0; ++ } ++ else ++ { ++ } ++ } ++ + int dc_key = x11_keymap[e.xkey.keycode]; + + if (e.type == KeyPress) +@@ -494,14 +637,44 @@ + } + break; + +- ++ default: + { + printf("KEYRELEASE\n"); + } + break; + + } +- } ++ } ++ ++ /* Check analogue control states (up/down) */ ++ if((ana_up == true) && (ana_down == false)) ++ { ++ temp_joyy = -127; ++ } ++ else if((ana_up == false) && (ana_down == true)) ++ { ++ temp_joyy = 127; ++ } ++ else ++ { ++ /* Either both pressed simultaniously or neither pressed */ ++ temp_joyy = 0; ++ } ++ ++ /* Check analogue control states (left/right) */ ++ if((ana_left == true) && (ana_right == false)) ++ { ++ temp_joyx = -127; ++ } ++ else if((ana_left == false) && (ana_right == true)) ++ { ++ temp_joyx = 127; ++ } ++ else ++ { ++ /* Either both pressed simultaniously or neither pressed */ ++ temp_joyx = 0; ++ } + } + #endif + } +@@ -527,6 +700,9 @@ + void os_CreateWindow() + { + #if defined(SUPPORT_X11) ++ ++ Bool ar_set, ar_supp = false; ++ + if (cfgLoadInt("pvr","nox11",0)==0) + { + XInitThreads(); +@@ -636,7 +812,8 @@ + int height=cfgLoadInt("x11","height", WINDOW_HEIGHT); + #endif + +- if (width==-1) ++ //if (width==-1) ++ if (cfgLoadInt("x11","fullscreen",0)==1) + { + width=XDisplayWidth(x11Display,x11Screen); + height=XDisplayHeight(x11Display,x11Screen); +@@ -653,8 +830,21 @@ + + XMapRaised(x11Display, x11Window); + #else +- XMapWindow(x11Display, x11Window); +- ++ ++ if (cfgLoadInt("x11","fullscreen",0)==1) ++ { ++ // fullscreen ++ Atom wmState = XInternAtom(x11Display, "_NET_WM_STATE", False); ++ Atom wmFullscreen = XInternAtom(x11Display, "_NET_WM_STATE_FULLSCREEN", False); ++ XChangeProperty(x11Display, x11Window, wmState, XA_ATOM, 32, PropModeReplace, (unsigned char *)&wmFullscreen, 1); ++ } ++ ++ XMapWindow(x11Display, x11Window); ++ ++ //This 1 second delay is important. Without it the GLX code can execute before the window ++ //resize completes causing a black border at the top of the screen.... ++ sleep(1); ++ + #if !defined(GLES) + + #define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 +@@ -690,6 +880,11 @@ + //(EGLNativeDisplayType)x11Display; + x11_disp=(void*)x11Display; + x11_win=(void*)x11Window; ++ ++ ar_set = XkbSetDetectableAutoRepeat(x11Display, True, &ar_supp); ++ printf("XkbSetDetectableAutoRepeat returns %u, supported = %u\n",ar_set, ar_supp); ++ ++ + } + else + printf("Not creating X11 window ..\n"); +@@ -805,16 +1000,16 @@ + #endif + + #if defined(SUPPORT_X11) +- x11_keymap[113] = DPad_Left; +- x11_keymap[114] = DPad_Right; ++ x11_keymap[XDPAD_LEFT] = DPad_Left; ++ x11_keymap[XDPAD_RIGHT] = DPad_Right; + +- x11_keymap[111] = DPad_Up; +- x11_keymap[116] = DPad_Down; ++ x11_keymap[XDPAD_UP] = DPad_Up; ++ x11_keymap[XDPAD_DOWN] = DPad_Down; + +- x11_keymap[52] = Btn_Y; +- x11_keymap[53] = Btn_X; +- x11_keymap[54] = Btn_B; +- x11_keymap[55] = Btn_A; ++ x11_keymap[XBTN_Y] = Btn_Y; ++ x11_keymap[XBTN_X] = Btn_X; ++ x11_keymap[XBTN_B] = Btn_B; ++ x11_keymap[XBTN_A] = Btn_A; + + /* + //TODO: Fix sliders +@@ -822,7 +1017,7 @@ + x11_keymap[39] = DPad_Down; + */ + +- x11_keymap[36] = Btn_Start; ++ x11_keymap[XBTN_START] = Btn_Start; + #endif + + printf("Home dir is: %s\n",GetPath("/").c_str()); -- cgit v1.2.3