aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libui_sdl/main.cpp57
1 files changed, 45 insertions, 12 deletions
diff --git a/src/libui_sdl/main.cpp b/src/libui_sdl/main.cpp
index 981496a..0f202fa 100644
--- a/src/libui_sdl/main.cpp
+++ b/src/libui_sdl/main.cpp
@@ -279,6 +279,23 @@ void MicCallback(void* data, Uint8* stream, int len)
MicBufferWritePos &= (kMicBufferSize-1);
}
+bool JoyButtonPressed(int btnid, int njoybuttons, Uint8* joybuttons, Uint32 hat)
+{
+ bool pressed;
+ if (btnid == 0x101) // up
+ pressed = (hat & SDL_HAT_UP);
+ else if (btnid == 0x104) // down
+ pressed = (hat & SDL_HAT_DOWN);
+ else if (btnid == 0x102) // right
+ pressed = (hat & SDL_HAT_RIGHT);
+ else if (btnid == 0x108) // left
+ pressed = (hat & SDL_HAT_LEFT);
+ else
+ pressed = (btnid < njoybuttons) ? joybuttons[btnid] : false;
+
+ return pressed;
+}
+
int EmuThreadFunc(void* burp)
{
NDS::Init();
@@ -294,6 +311,13 @@ int EmuThreadFunc(void* burp)
LidCommand = false;
LidStatus = false;
+ Uint8* joybuttons = NULL; int njoybuttons = 0;
+ if (Joystick)
+ {
+ njoybuttons = SDL_JoystickNumButtons(Joystick);
+ if (njoybuttons) joybuttons = new Uint8[njoybuttons];
+ }
+
u32 nframes = 0;
u32 starttick = SDL_GetTicks();
u32 lasttick = starttick;
@@ -319,22 +343,15 @@ int EmuThreadFunc(void* burp)
Sint16 axisX = SDL_JoystickGetAxis(Joystick, 0);
Sint16 axisY = SDL_JoystickGetAxis(Joystick, 1);
+ for (int i = 0; i < njoybuttons; i++)
+ joybuttons[i] = SDL_JoystickGetButton(Joystick, i);
+
for (int i = 0; i < 12; i++)
{
int btnid = Config::JoyMapping[i];
if (btnid < 0) continue;
- bool pressed;
- if (btnid == 0x101) // up
- pressed = (hat & SDL_HAT_UP);
- else if (btnid == 0x104) // down
- pressed = (hat & SDL_HAT_DOWN);
- else if (btnid == 0x102) // right
- pressed = (hat & SDL_HAT_RIGHT);
- else if (btnid == 0x108) // left
- pressed = (hat & SDL_HAT_LEFT);
- else
- pressed = SDL_JoystickGetButton(Joystick, btnid);
+ bool pressed = JoyButtonPressed(btnid, njoybuttons, joybuttons, hat);
if (i == 4) // right
pressed = pressed || (axisX >= 16384);
@@ -347,6 +364,16 @@ int EmuThreadFunc(void* burp)
if (pressed) joymask &= ~(1<<i);
}
+
+ if (JoyButtonPressed(Config::HKJoyMapping[HK_Lid], njoybuttons, joybuttons, hat))
+ {
+ LidStatus = !LidStatus;
+ LidCommand = true;
+ }
+ if (JoyButtonPressed(Config::HKJoyMapping[HK_Mic], njoybuttons, joybuttons, hat))
+ {
+ // microphone shit here
+ }
}
NDS::SetKeyMask(keymask & joymask);
@@ -480,6 +507,8 @@ int EmuThreadFunc(void* burp)
EmuStatus = 0;
+ if (joybuttons) delete[] joybuttons;
+
NDS::DeInit();
return 44203;
@@ -629,11 +658,15 @@ int OnAreaKeyEvent(uiAreaHandler* handler, uiArea* area, uiAreaKeyEvent* evt)
if (evt->Scancode == Config::KeyMapping[i])
KeyInputMask &= ~(1<<i);
- if (evt->Scancode == 0x44) // F10, test
+ if (evt->Scancode == Config::HKKeyMapping[HK_Lid])
{
LidStatus = !LidStatus;
LidCommand = true;
}
+ if (evt->Scancode == Config::HKKeyMapping[HK_Mic])
+ {
+ // microphone shit here
+ }
if (evt->Scancode == 0x57) // F11
NDS::debug(0);