mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 19:45:20 +00:00
Partial commit: IO
This commit is contained in:
parent
984aa44220
commit
766f1b2b01
23 changed files with 405 additions and 439 deletions
170
rpcs3/BasicKeyboardHandler.cpp
Normal file
170
rpcs3/BasicKeyboardHandler.cpp
Normal file
|
@ -0,0 +1,170 @@
|
|||
#include "stdafx.h"
|
||||
#include "stdafx_gui.h"
|
||||
#include "rpcs3.h"
|
||||
#include "BasicKeyboardHandler.h"
|
||||
|
||||
void BasicKeyboardHandler::Init(const u32 max_connect)
|
||||
{
|
||||
for (u32 i = 0; i<max_connect; i++)
|
||||
{
|
||||
m_keyboards.emplace_back(Keyboard());
|
||||
}
|
||||
|
||||
LoadSettings();
|
||||
memset(&m_info, 0, sizeof(KbInfo));
|
||||
m_info.max_connect = max_connect;
|
||||
m_info.now_connect = std::min<size_t>(m_keyboards.size(), max_connect);
|
||||
m_info.info = 0; // Ownership of keyboard data: 0=Application, 1=System
|
||||
m_info.status[0] = CELL_KB_STATUS_CONNECTED; // (TODO: Support for more keyboards)
|
||||
}
|
||||
|
||||
BasicKeyboardHandler::BasicKeyboardHandler()
|
||||
{
|
||||
wxGetApp().Bind(wxEVT_KEY_DOWN, &BasicKeyboardHandler::KeyDown, this);
|
||||
wxGetApp().Bind(wxEVT_KEY_UP, &BasicKeyboardHandler::KeyUp, this);
|
||||
}
|
||||
|
||||
void BasicKeyboardHandler::KeyDown(wxKeyEvent& event)
|
||||
{
|
||||
Key(event.GetKeyCode(), 1);
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void BasicKeyboardHandler::KeyUp(wxKeyEvent& event)
|
||||
{
|
||||
Key(event.GetKeyCode(), 0);
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void BasicKeyboardHandler::LoadSettings()
|
||||
{
|
||||
// Meta Keys
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_CONTROL, CELL_KB_MKEY_L_CTRL);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_SHIFT, CELL_KB_MKEY_L_SHIFT);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_ALT, CELL_KB_MKEY_L_ALT);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_WINDOWS_LEFT, CELL_KB_MKEY_L_WIN);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_COMMAND, CELL_KB_MKEY_L_WIN);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KB_MKEY_R_CTRL);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KB_MKEY_R_SHIFT);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KB_MKEY_R_ALT);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_WINDOWS_RIGHT, CELL_KB_MKEY_R_WIN);
|
||||
|
||||
// CELL_KB_RAWDAT
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_NO_EVENT);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_E_ROLLOVER);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_E_POSTFAIL);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_E_UNDEF);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_ESCAPE, CELL_KEYC_ESCAPE);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_106_KANJI);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_CAPITAL, CELL_KEYC_CAPS_LOCK);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F1, CELL_KEYC_F1);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F2, CELL_KEYC_F2);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F3, CELL_KEYC_F3);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F4, CELL_KEYC_F4);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F5, CELL_KEYC_F5);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F6, CELL_KEYC_F6);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F7, CELL_KEYC_F7);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F8, CELL_KEYC_F8);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F9, CELL_KEYC_F9);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F10, CELL_KEYC_F10);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F11, CELL_KEYC_F11);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F12, CELL_KEYC_F12);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_PRINT, CELL_KEYC_PRINTSCREEN);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_SCROLL, CELL_KEYC_SCROLL_LOCK);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_PAUSE, CELL_KEYC_PAUSE);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_INSERT, CELL_KEYC_INSERT);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_HOME);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_PAGEUP, CELL_KEYC_PAGE_UP);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_DELETE, CELL_KEYC_DELETE);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_END, CELL_KEYC_END);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_PAGEDOWN, CELL_KEYC_PAGE_DOWN);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_RIGHT, CELL_KEYC_RIGHT_ARROW);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_LEFT, CELL_KEYC_LEFT_ARROW);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_DOWN, CELL_KEYC_DOWN_ARROW);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_UP, CELL_KEYC_UP_ARROW);
|
||||
//m_keyboards[0].m_buttons.emplace_back(WXK_NUMLOCK, CELL_KEYC_NUM_LOCK);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_APPLICATION);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_KANA);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_HENKAN);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_MUHENKAN);
|
||||
|
||||
// CELL_KB_KEYPAD
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMLOCK, CELL_KEYC_KPAD_NUMLOCK);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD_DIVIDE, CELL_KEYC_KPAD_SLASH);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD_MULTIPLY, CELL_KEYC_KPAD_ASTERISK);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD_SUBTRACT, CELL_KEYC_KPAD_MINUS);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD_ADD, CELL_KEYC_KPAD_PLUS);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD_ENTER, CELL_KEYC_KPAD_ENTER);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD1, CELL_KEYC_KPAD_1);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD2, CELL_KEYC_KPAD_2);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD3, CELL_KEYC_KPAD_3);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD4, CELL_KEYC_KPAD_4);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD5, CELL_KEYC_KPAD_5);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD6, CELL_KEYC_KPAD_6);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD7, CELL_KEYC_KPAD_7);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD8, CELL_KEYC_KPAD_8);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD9, CELL_KEYC_KPAD_9);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD0, CELL_KEYC_KPAD_0);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD_DELETE, CELL_KEYC_KPAD_PERIOD);
|
||||
|
||||
// ASCII Printable characters
|
||||
m_keyboards[0].m_buttons.emplace_back('A', CELL_KEYC_A);
|
||||
m_keyboards[0].m_buttons.emplace_back('B', CELL_KEYC_B);
|
||||
m_keyboards[0].m_buttons.emplace_back('C', CELL_KEYC_C);
|
||||
m_keyboards[0].m_buttons.emplace_back('D', CELL_KEYC_D);
|
||||
m_keyboards[0].m_buttons.emplace_back('E', CELL_KEYC_E);
|
||||
m_keyboards[0].m_buttons.emplace_back('F', CELL_KEYC_F);
|
||||
m_keyboards[0].m_buttons.emplace_back('G', CELL_KEYC_G);
|
||||
m_keyboards[0].m_buttons.emplace_back('H', CELL_KEYC_H);
|
||||
m_keyboards[0].m_buttons.emplace_back('I', CELL_KEYC_I);
|
||||
m_keyboards[0].m_buttons.emplace_back('J', CELL_KEYC_J);
|
||||
m_keyboards[0].m_buttons.emplace_back('K', CELL_KEYC_K);
|
||||
m_keyboards[0].m_buttons.emplace_back('L', CELL_KEYC_L);
|
||||
m_keyboards[0].m_buttons.emplace_back('M', CELL_KEYC_M);
|
||||
m_keyboards[0].m_buttons.emplace_back('N', CELL_KEYC_N);
|
||||
m_keyboards[0].m_buttons.emplace_back('O', CELL_KEYC_O);
|
||||
m_keyboards[0].m_buttons.emplace_back('P', CELL_KEYC_P);
|
||||
m_keyboards[0].m_buttons.emplace_back('Q', CELL_KEYC_Q);
|
||||
m_keyboards[0].m_buttons.emplace_back('R', CELL_KEYC_R);
|
||||
m_keyboards[0].m_buttons.emplace_back('S', CELL_KEYC_S);
|
||||
m_keyboards[0].m_buttons.emplace_back('T', CELL_KEYC_T);
|
||||
m_keyboards[0].m_buttons.emplace_back('U', CELL_KEYC_U);
|
||||
m_keyboards[0].m_buttons.emplace_back('V', CELL_KEYC_V);
|
||||
m_keyboards[0].m_buttons.emplace_back('W', CELL_KEYC_W);
|
||||
m_keyboards[0].m_buttons.emplace_back('X', CELL_KEYC_X);
|
||||
m_keyboards[0].m_buttons.emplace_back('Y', CELL_KEYC_Y);
|
||||
m_keyboards[0].m_buttons.emplace_back('Z', CELL_KEYC_Z);
|
||||
|
||||
m_keyboards[0].m_buttons.emplace_back('1', CELL_KEYC_1);
|
||||
m_keyboards[0].m_buttons.emplace_back('2', CELL_KEYC_2);
|
||||
m_keyboards[0].m_buttons.emplace_back('3', CELL_KEYC_3);
|
||||
m_keyboards[0].m_buttons.emplace_back('4', CELL_KEYC_4);
|
||||
m_keyboards[0].m_buttons.emplace_back('5', CELL_KEYC_5);
|
||||
m_keyboards[0].m_buttons.emplace_back('6', CELL_KEYC_6);
|
||||
m_keyboards[0].m_buttons.emplace_back('7', CELL_KEYC_7);
|
||||
m_keyboards[0].m_buttons.emplace_back('8', CELL_KEYC_8);
|
||||
m_keyboards[0].m_buttons.emplace_back('9', CELL_KEYC_9);
|
||||
m_keyboards[0].m_buttons.emplace_back('0', CELL_KEYC_0);
|
||||
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_RETURN, CELL_KEYC_ENTER);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_ESC);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_TAB, CELL_KEYC_TAB);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_SPACE, CELL_KEYC_SPACE);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_SUBTRACT, CELL_KEYC_MINUS);
|
||||
m_keyboards[0].m_buttons.emplace_back('=', CELL_KEYC_EQUAL_101);
|
||||
m_keyboards[0].m_buttons.emplace_back('^', CELL_KEYC_ACCENT_CIRCONFLEX_106);
|
||||
//m_keyboards[0].m_buttons.emplace_back('(', CELL_KEYC_LEFT_BRACKET_101);
|
||||
m_keyboards[0].m_buttons.emplace_back('@', CELL_KEYC_ATMARK_106);
|
||||
//m_keyboards[0].m_buttons.emplace_back(')', CELL_KEYC_RIGHT_BRACKET_101);
|
||||
m_keyboards[0].m_buttons.emplace_back('(', CELL_KEYC_LEFT_BRACKET_106);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_BACKSLASH_101);
|
||||
m_keyboards[0].m_buttons.emplace_back('(', CELL_KEYC_RIGHT_BRACKET_106);
|
||||
m_keyboards[0].m_buttons.emplace_back(';', CELL_KEYC_SEMICOLON);
|
||||
m_keyboards[0].m_buttons.emplace_back('"', CELL_KEYC_QUOTATION_101);
|
||||
m_keyboards[0].m_buttons.emplace_back(':', CELL_KEYC_COLON_106);
|
||||
m_keyboards[0].m_buttons.emplace_back(',', CELL_KEYC_COMMA);
|
||||
m_keyboards[0].m_buttons.emplace_back('.', CELL_KEYC_PERIOD);
|
||||
m_keyboards[0].m_buttons.emplace_back('/', CELL_KEYC_SLASH);
|
||||
m_keyboards[0].m_buttons.emplace_back('\\', CELL_KEYC_BACKSLASH_106);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_YEN_106);
|
||||
}
|
15
rpcs3/BasicKeyboardHandler.h
Normal file
15
rpcs3/BasicKeyboardHandler.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
#pragma once
|
||||
|
||||
#include "Emu/Io/KeyboardHandler.h"
|
||||
|
||||
class BasicKeyboardHandler final : public KeyboardHandlerBase, public wxWindow
|
||||
{
|
||||
public:
|
||||
virtual void Init(const u32 max_connect) override;
|
||||
|
||||
BasicKeyboardHandler();
|
||||
|
||||
void KeyDown(wxKeyEvent& event);
|
||||
void KeyUp(wxKeyEvent& event);
|
||||
void LoadSettings();
|
||||
};
|
57
rpcs3/BasicMouseHandler.cpp
Normal file
57
rpcs3/BasicMouseHandler.cpp
Normal file
|
@ -0,0 +1,57 @@
|
|||
#include "stdafx.h"
|
||||
#include "stdafx_gui.h"
|
||||
#include "rpcs3.h"
|
||||
#include "BasicMouseHandler.h"
|
||||
|
||||
void BasicMouseHandler::Init(const u32 max_connect)
|
||||
{
|
||||
m_mice.emplace_back(Mouse());
|
||||
memset(&m_info, 0, sizeof(MouseInfo));
|
||||
m_info.max_connect = max_connect;
|
||||
m_info.now_connect = std::min(m_mice.size(), (size_t)max_connect);
|
||||
m_info.info = 0; // Ownership of mouse data: 0=Application, 1=System
|
||||
m_info.status[0] = CELL_MOUSE_STATUS_CONNECTED; // (TODO: Support for more mice)
|
||||
for (u32 i = 1; i<max_connect; i++) m_info.status[i] = CELL_MOUSE_STATUS_DISCONNECTED;
|
||||
m_info.vendor_id[0] = 0x1234;
|
||||
m_info.product_id[0] = 0x1234;
|
||||
}
|
||||
|
||||
BasicMouseHandler::BasicMouseHandler()
|
||||
{
|
||||
wxGetApp().Bind(wxEVT_LEFT_DOWN, &BasicMouseHandler::MouseButtonDown, this);
|
||||
wxGetApp().Bind(wxEVT_RIGHT_DOWN, &BasicMouseHandler::MouseButtonDown, this);
|
||||
wxGetApp().Bind(wxEVT_MIDDLE_DOWN, &BasicMouseHandler::MouseButtonDown, this);
|
||||
wxGetApp().Bind(wxEVT_LEFT_UP, &BasicMouseHandler::MouseButtonUp, this);
|
||||
wxGetApp().Bind(wxEVT_RIGHT_UP, &BasicMouseHandler::MouseButtonUp, this);
|
||||
wxGetApp().Bind(wxEVT_MIDDLE_UP, &BasicMouseHandler::MouseButtonUp, this);
|
||||
wxGetApp().Bind(wxEVT_MOUSEWHEEL, &BasicMouseHandler::MouseScroll, this);
|
||||
wxGetApp().Bind(wxEVT_MOTION, &BasicMouseHandler::MouseMove, this);
|
||||
}
|
||||
|
||||
void BasicMouseHandler::MouseButtonDown(wxMouseEvent& event)
|
||||
{
|
||||
if (event.LeftDown()) MouseHandlerBase::Button(CELL_MOUSE_BUTTON_1, 1);
|
||||
else if (event.RightDown()) MouseHandlerBase::Button(CELL_MOUSE_BUTTON_2, 1);
|
||||
else if (event.MiddleDown()) MouseHandlerBase::Button(CELL_MOUSE_BUTTON_3, 1);
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void BasicMouseHandler::MouseButtonUp(wxMouseEvent& event)
|
||||
{
|
||||
if (event.LeftUp()) MouseHandlerBase::Button(CELL_MOUSE_BUTTON_1, 0);
|
||||
else if (event.RightUp()) MouseHandlerBase::Button(CELL_MOUSE_BUTTON_2, 0);
|
||||
else if (event.MiddleUp()) MouseHandlerBase::Button(CELL_MOUSE_BUTTON_3, 0);
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void BasicMouseHandler::MouseScroll(wxMouseEvent& event)
|
||||
{
|
||||
MouseHandlerBase::Scroll(event.GetWheelRotation());
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void BasicMouseHandler::MouseMove(wxMouseEvent& event)
|
||||
{
|
||||
MouseHandlerBase::Move(event.m_x, event.m_y);
|
||||
event.Skip();
|
||||
}
|
16
rpcs3/BasicMouseHandler.h
Normal file
16
rpcs3/BasicMouseHandler.h
Normal file
|
@ -0,0 +1,16 @@
|
|||
#pragma once
|
||||
|
||||
#include "Emu/Io/MouseHandler.h"
|
||||
|
||||
class BasicMouseHandler final : public MouseHandlerBase, public wxWindow
|
||||
{
|
||||
public:
|
||||
virtual void Init(const u32 max_connect) override;
|
||||
|
||||
BasicMouseHandler();
|
||||
|
||||
void MouseButtonDown(wxMouseEvent& event);
|
||||
void MouseButtonUp(wxMouseEvent& event);
|
||||
void MouseScroll(wxMouseEvent& event);
|
||||
void MouseMove(wxMouseEvent& event);
|
||||
};
|
|
@ -1,15 +0,0 @@
|
|||
#include "stdafx.h"
|
||||
#include "Emu/System.h"
|
||||
|
||||
#include "Keyboard.h"
|
||||
|
||||
void KeyboardManager::Init(u32 max_connect)
|
||||
{
|
||||
m_keyboard_handler = Emu.GetCallbacks().get_kb_handler();
|
||||
m_keyboard_handler->Init(max_connect);
|
||||
}
|
||||
|
||||
void KeyboardManager::Close()
|
||||
{
|
||||
m_keyboard_handler.reset();
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "KeyboardHandler.h"
|
||||
|
||||
class KeyboardManager
|
||||
{
|
||||
std::unique_ptr<KeyboardHandlerBase> m_keyboard_handler;
|
||||
|
||||
public:
|
||||
void Init(u32 max_connect);
|
||||
void Close();
|
||||
|
||||
std::vector<Keyboard>& GetKeyboards() { return m_keyboard_handler->GetKeyboards(); }
|
||||
KbInfo& GetInfo() { return m_keyboard_handler->GetInfo(); }
|
||||
std::vector<KbButton>& GetButtons(const u32 keyboard) { return m_keyboard_handler->GetButtons(keyboard); }
|
||||
KbData& GetData(const u32 keyboard) { return m_keyboard_handler->GetData(keyboard); }
|
||||
KbConfig& GetConfig(const u32 keyboard) { return m_keyboard_handler->GetConfig(keyboard); }
|
||||
|
||||
bool IsInited() const { return m_keyboard_handler.operator bool(); }
|
||||
};
|
|
@ -1,5 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
// TODO: HLE info (constants, structs, etc.) should not be available here
|
||||
|
||||
extern u16 cellKbCnvRawCode(u32 arrange, u32 mkey, u32 led, u16 rawcode); // (TODO: Can it be problematic to place SysCalls in middle of nowhere?)
|
||||
|
||||
enum KbPortStatus
|
||||
|
@ -263,8 +265,7 @@ protected:
|
|||
std::vector<Keyboard> m_keyboards;
|
||||
|
||||
public:
|
||||
virtual void Init(const u32 max_connect)=0;
|
||||
virtual void Close()=0;
|
||||
virtual void Init(const u32 max_connect) = 0;
|
||||
virtual ~KeyboardHandlerBase() = default;
|
||||
|
||||
void Key(const u32 code, bool pressed)
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
#include "stdafx.h"
|
||||
#include "Emu/System.h"
|
||||
|
||||
#include "Mouse.h"
|
||||
|
||||
void MouseManager::Init(u32 max_connect)
|
||||
{
|
||||
m_mouse_handler = Emu.GetCallbacks().get_mouse_handler();
|
||||
m_mouse_handler->Init(max_connect);
|
||||
}
|
||||
|
||||
void MouseManager::Close()
|
||||
{
|
||||
m_mouse_handler.reset();
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "MouseHandler.h"
|
||||
|
||||
class MouseManager
|
||||
{
|
||||
std::unique_ptr<MouseHandlerBase> m_mouse_handler;
|
||||
|
||||
public:
|
||||
void Init(u32 max_connect);
|
||||
void Close();
|
||||
|
||||
std::vector<Mouse>& GetMice() { return m_mouse_handler->GetMice(); }
|
||||
MouseInfo& GetInfo() { return m_mouse_handler->GetInfo(); }
|
||||
MouseData& GetData(const u32 mouse) { return m_mouse_handler->GetData(mouse); }
|
||||
MouseRawData& GetRawData(const u32 mouse) { return m_mouse_handler->GetRawData(mouse); }
|
||||
|
||||
bool IsInited() const { return m_mouse_handler.operator bool(); }
|
||||
};
|
|
@ -1,5 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
// TODO: HLE info (constants, structs, etc.) should not be available here
|
||||
|
||||
enum MousePortStatus
|
||||
{
|
||||
CELL_MOUSE_STATUS_DISCONNECTED = 0x00000000,
|
||||
|
@ -104,8 +106,7 @@ protected:
|
|||
std::vector<Mouse> m_mice;
|
||||
|
||||
public:
|
||||
virtual void Init(const u32 max_connect)=0;
|
||||
virtual void Close()=0;
|
||||
virtual void Init(const u32 max_connect) = 0;
|
||||
virtual ~MouseHandlerBase() = default;
|
||||
|
||||
void Button(u8 button, bool pressed)
|
||||
|
|
|
@ -5,11 +5,7 @@
|
|||
class NullKeyboardHandler final : public KeyboardHandlerBase
|
||||
{
|
||||
public:
|
||||
NullKeyboardHandler()
|
||||
{
|
||||
}
|
||||
|
||||
virtual void Init(const u32 max_connect)
|
||||
void Init(const u32 max_connect) override
|
||||
{
|
||||
memset(&m_info, 0, sizeof(KbInfo));
|
||||
m_info.max_connect = max_connect;
|
||||
|
@ -19,10 +15,4 @@ public:
|
|||
m_keyboards.emplace_back(Keyboard());
|
||||
}
|
||||
}
|
||||
|
||||
virtual void Close()
|
||||
{
|
||||
memset(&m_info, 0, sizeof(KbInfo));
|
||||
m_keyboards.clear();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
|
@ -5,20 +5,10 @@
|
|||
class NullMouseHandler final : public MouseHandlerBase
|
||||
{
|
||||
public:
|
||||
NullMouseHandler()
|
||||
{
|
||||
}
|
||||
|
||||
virtual void Init(const u32 max_connect)
|
||||
void Init(const u32 max_connect) override
|
||||
{
|
||||
memset(&m_info, 0, sizeof(MouseInfo));
|
||||
m_info.max_connect = max_connect;
|
||||
m_mice.clear();
|
||||
}
|
||||
|
||||
virtual void Close()
|
||||
{
|
||||
memset(&m_info, 0, sizeof(MouseInfo));
|
||||
m_mice.clear();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
|
@ -5,20 +5,10 @@
|
|||
class NullPadHandler final : public PadHandlerBase
|
||||
{
|
||||
public:
|
||||
NullPadHandler()
|
||||
{
|
||||
}
|
||||
|
||||
virtual void Init(const u32 max_connect)
|
||||
void Init(const u32 max_connect) override
|
||||
{
|
||||
memset(&m_info, 0, sizeof(PadInfo));
|
||||
m_info.max_connect = max_connect;
|
||||
m_pads.clear();
|
||||
}
|
||||
|
||||
virtual void Close()
|
||||
{
|
||||
memset(&m_info, 0, sizeof(PadInfo));
|
||||
m_pads.clear();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
#include "stdafx.h"
|
||||
#include "Emu/System.h"
|
||||
|
||||
#include "Pad.h"
|
||||
|
||||
void PadManager::Init(u32 max_connect)
|
||||
{
|
||||
m_pad_handler = Emu.GetCallbacks().get_pad_handler();
|
||||
m_pad_handler->Init(max_connect);
|
||||
}
|
||||
|
||||
void PadManager::Close()
|
||||
{
|
||||
m_pad_handler.reset();
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "PadHandler.h"
|
||||
|
||||
class PadManager
|
||||
{
|
||||
std::unique_ptr<PadHandlerBase> m_pad_handler;
|
||||
|
||||
public:
|
||||
void Init(u32 max_connect);
|
||||
void Close();
|
||||
|
||||
std::vector<Pad>& GetPads() { return m_pad_handler->GetPads(); }
|
||||
PadInfo& GetInfo() { return m_pad_handler->GetInfo(); }
|
||||
std::vector<Button>& GetButtons(const u32 pad) { return m_pad_handler->GetButtons(pad); }
|
||||
|
||||
bool IsInited() const { return m_pad_handler.operator bool(); }
|
||||
};
|
|
@ -1,5 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
// TODO: HLE info (constants, structs, etc.) should not be available here
|
||||
|
||||
enum PortStatus
|
||||
{
|
||||
CELL_PAD_STATUS_DISCONNECTED = 0x00000000,
|
||||
|
@ -213,8 +215,7 @@ protected:
|
|||
std::vector<Pad> m_pads;
|
||||
|
||||
public:
|
||||
virtual void Init(const u32 max_connect)=0;
|
||||
virtual void Close()=0;
|
||||
virtual void Init(const u32 max_connect) = 0;
|
||||
virtual ~PadHandlerBase() = default;
|
||||
|
||||
//Set value to set pressure/axi to certain level, otherwise 0/255 default
|
||||
|
|
|
@ -1,171 +0,0 @@
|
|||
#pragma once
|
||||
#include "Emu/Io/KeyboardHandler.h"
|
||||
|
||||
class WindowsKeyboardHandler final
|
||||
: public wxWindow
|
||||
, public KeyboardHandlerBase
|
||||
{
|
||||
public:
|
||||
WindowsKeyboardHandler() : wxWindow()
|
||||
{
|
||||
wxGetApp().Bind(wxEVT_KEY_DOWN, &WindowsKeyboardHandler::KeyDown, this);
|
||||
wxGetApp().Bind(wxEVT_KEY_UP, &WindowsKeyboardHandler::KeyUp, this);
|
||||
}
|
||||
|
||||
virtual void KeyDown(wxKeyEvent& event) { Key(event.GetKeyCode(), 1); event.Skip(); }
|
||||
virtual void KeyUp(wxKeyEvent& event) { Key(event.GetKeyCode(), 0); event.Skip(); }
|
||||
|
||||
virtual void Init(const u32 max_connect)
|
||||
{
|
||||
for(u32 i=0; i<max_connect; i++)
|
||||
{
|
||||
m_keyboards.emplace_back(Keyboard());
|
||||
}
|
||||
|
||||
LoadSettings();
|
||||
memset(&m_info, 0, sizeof(KbInfo));
|
||||
m_info.max_connect = max_connect;
|
||||
m_info.now_connect = std::min<size_t>(m_keyboards.size(), max_connect);
|
||||
m_info.info = 0; // Ownership of keyboard data: 0=Application, 1=System
|
||||
m_info.status[0] = CELL_KB_STATUS_CONNECTED; // (TODO: Support for more keyboards)
|
||||
}
|
||||
|
||||
virtual void Close()
|
||||
{
|
||||
memset(&m_info, 0, sizeof(KbInfo));
|
||||
m_keyboards.clear();
|
||||
}
|
||||
|
||||
void LoadSettings()
|
||||
{
|
||||
// Meta Keys
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_CONTROL, CELL_KB_MKEY_L_CTRL);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_SHIFT, CELL_KB_MKEY_L_SHIFT);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_ALT, CELL_KB_MKEY_L_ALT);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_WINDOWS_LEFT, CELL_KB_MKEY_L_WIN);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_COMMAND, CELL_KB_MKEY_L_WIN);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KB_MKEY_R_CTRL);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KB_MKEY_R_SHIFT);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KB_MKEY_R_ALT);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_WINDOWS_RIGHT, CELL_KB_MKEY_R_WIN);
|
||||
|
||||
// CELL_KB_RAWDAT
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_NO_EVENT);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_E_ROLLOVER);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_E_POSTFAIL);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_E_UNDEF);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_ESCAPE, CELL_KEYC_ESCAPE);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_106_KANJI);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_CAPITAL, CELL_KEYC_CAPS_LOCK);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F1, CELL_KEYC_F1);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F2, CELL_KEYC_F2);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F3, CELL_KEYC_F3);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F4, CELL_KEYC_F4);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F5, CELL_KEYC_F5);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F6, CELL_KEYC_F6);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F7, CELL_KEYC_F7);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F8, CELL_KEYC_F8);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F9, CELL_KEYC_F9);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F10, CELL_KEYC_F10);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F11, CELL_KEYC_F11);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_F12, CELL_KEYC_F12);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_PRINT, CELL_KEYC_PRINTSCREEN);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_SCROLL, CELL_KEYC_SCROLL_LOCK);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_PAUSE, CELL_KEYC_PAUSE);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_INSERT, CELL_KEYC_INSERT);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_HOME);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_PAGEUP, CELL_KEYC_PAGE_UP);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_DELETE, CELL_KEYC_DELETE);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_END, CELL_KEYC_END);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_PAGEDOWN, CELL_KEYC_PAGE_DOWN);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_RIGHT, CELL_KEYC_RIGHT_ARROW);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_LEFT, CELL_KEYC_LEFT_ARROW);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_DOWN, CELL_KEYC_DOWN_ARROW);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_UP, CELL_KEYC_UP_ARROW);
|
||||
//m_keyboards[0].m_buttons.emplace_back(WXK_NUMLOCK, CELL_KEYC_NUM_LOCK);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_APPLICATION);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_KANA);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_HENKAN);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_MUHENKAN);
|
||||
|
||||
// CELL_KB_KEYPAD
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMLOCK, CELL_KEYC_KPAD_NUMLOCK);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD_DIVIDE, CELL_KEYC_KPAD_SLASH);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD_MULTIPLY, CELL_KEYC_KPAD_ASTERISK);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD_SUBTRACT, CELL_KEYC_KPAD_MINUS);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD_ADD, CELL_KEYC_KPAD_PLUS);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD_ENTER, CELL_KEYC_KPAD_ENTER);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD1, CELL_KEYC_KPAD_1);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD2, CELL_KEYC_KPAD_2);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD3, CELL_KEYC_KPAD_3);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD4, CELL_KEYC_KPAD_4);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD5, CELL_KEYC_KPAD_5);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD6, CELL_KEYC_KPAD_6);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD7, CELL_KEYC_KPAD_7);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD8, CELL_KEYC_KPAD_8);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD9, CELL_KEYC_KPAD_9);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD0, CELL_KEYC_KPAD_0);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_NUMPAD_DELETE, CELL_KEYC_KPAD_PERIOD);
|
||||
|
||||
// ASCII Printable characters
|
||||
m_keyboards[0].m_buttons.emplace_back('A', CELL_KEYC_A);
|
||||
m_keyboards[0].m_buttons.emplace_back('B', CELL_KEYC_B);
|
||||
m_keyboards[0].m_buttons.emplace_back('C', CELL_KEYC_C);
|
||||
m_keyboards[0].m_buttons.emplace_back('D', CELL_KEYC_D);
|
||||
m_keyboards[0].m_buttons.emplace_back('E', CELL_KEYC_E);
|
||||
m_keyboards[0].m_buttons.emplace_back('F', CELL_KEYC_F);
|
||||
m_keyboards[0].m_buttons.emplace_back('G', CELL_KEYC_G);
|
||||
m_keyboards[0].m_buttons.emplace_back('H', CELL_KEYC_H);
|
||||
m_keyboards[0].m_buttons.emplace_back('I', CELL_KEYC_I);
|
||||
m_keyboards[0].m_buttons.emplace_back('J', CELL_KEYC_J);
|
||||
m_keyboards[0].m_buttons.emplace_back('K', CELL_KEYC_K);
|
||||
m_keyboards[0].m_buttons.emplace_back('L', CELL_KEYC_L);
|
||||
m_keyboards[0].m_buttons.emplace_back('M', CELL_KEYC_M);
|
||||
m_keyboards[0].m_buttons.emplace_back('N', CELL_KEYC_N);
|
||||
m_keyboards[0].m_buttons.emplace_back('O', CELL_KEYC_O);
|
||||
m_keyboards[0].m_buttons.emplace_back('P', CELL_KEYC_P);
|
||||
m_keyboards[0].m_buttons.emplace_back('Q', CELL_KEYC_Q);
|
||||
m_keyboards[0].m_buttons.emplace_back('R', CELL_KEYC_R);
|
||||
m_keyboards[0].m_buttons.emplace_back('S', CELL_KEYC_S);
|
||||
m_keyboards[0].m_buttons.emplace_back('T', CELL_KEYC_T);
|
||||
m_keyboards[0].m_buttons.emplace_back('U', CELL_KEYC_U);
|
||||
m_keyboards[0].m_buttons.emplace_back('V', CELL_KEYC_V);
|
||||
m_keyboards[0].m_buttons.emplace_back('W', CELL_KEYC_W);
|
||||
m_keyboards[0].m_buttons.emplace_back('X', CELL_KEYC_X);
|
||||
m_keyboards[0].m_buttons.emplace_back('Y', CELL_KEYC_Y);
|
||||
m_keyboards[0].m_buttons.emplace_back('Z', CELL_KEYC_Z);
|
||||
|
||||
m_keyboards[0].m_buttons.emplace_back('1', CELL_KEYC_1);
|
||||
m_keyboards[0].m_buttons.emplace_back('2', CELL_KEYC_2);
|
||||
m_keyboards[0].m_buttons.emplace_back('3', CELL_KEYC_3);
|
||||
m_keyboards[0].m_buttons.emplace_back('4', CELL_KEYC_4);
|
||||
m_keyboards[0].m_buttons.emplace_back('5', CELL_KEYC_5);
|
||||
m_keyboards[0].m_buttons.emplace_back('6', CELL_KEYC_6);
|
||||
m_keyboards[0].m_buttons.emplace_back('7', CELL_KEYC_7);
|
||||
m_keyboards[0].m_buttons.emplace_back('8', CELL_KEYC_8);
|
||||
m_keyboards[0].m_buttons.emplace_back('9', CELL_KEYC_9);
|
||||
m_keyboards[0].m_buttons.emplace_back('0', CELL_KEYC_0);
|
||||
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_RETURN, CELL_KEYC_ENTER);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_ESC);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_TAB, CELL_KEYC_TAB);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_SPACE, CELL_KEYC_SPACE);
|
||||
m_keyboards[0].m_buttons.emplace_back(WXK_SUBTRACT, CELL_KEYC_MINUS);
|
||||
m_keyboards[0].m_buttons.emplace_back('=', CELL_KEYC_EQUAL_101);
|
||||
m_keyboards[0].m_buttons.emplace_back('^', CELL_KEYC_ACCENT_CIRCONFLEX_106);
|
||||
//m_keyboards[0].m_buttons.emplace_back('(', CELL_KEYC_LEFT_BRACKET_101);
|
||||
m_keyboards[0].m_buttons.emplace_back('@', CELL_KEYC_ATMARK_106);
|
||||
//m_keyboards[0].m_buttons.emplace_back(')', CELL_KEYC_RIGHT_BRACKET_101);
|
||||
m_keyboards[0].m_buttons.emplace_back('(', CELL_KEYC_LEFT_BRACKET_106);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_BACKSLASH_101);
|
||||
m_keyboards[0].m_buttons.emplace_back('(', CELL_KEYC_RIGHT_BRACKET_106);
|
||||
m_keyboards[0].m_buttons.emplace_back(';', CELL_KEYC_SEMICOLON);
|
||||
m_keyboards[0].m_buttons.emplace_back('"', CELL_KEYC_QUOTATION_101);
|
||||
m_keyboards[0].m_buttons.emplace_back(':', CELL_KEYC_COLON_106);
|
||||
m_keyboards[0].m_buttons.emplace_back(',', CELL_KEYC_COMMA);
|
||||
m_keyboards[0].m_buttons.emplace_back('.', CELL_KEYC_PERIOD);
|
||||
m_keyboards[0].m_buttons.emplace_back('/', CELL_KEYC_SLASH);
|
||||
m_keyboards[0].m_buttons.emplace_back('\\', CELL_KEYC_BACKSLASH_106);
|
||||
//m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_YEN_106);
|
||||
}
|
||||
};
|
|
@ -1,56 +0,0 @@
|
|||
#pragma once
|
||||
#include "Emu/Io/MouseHandler.h"
|
||||
|
||||
class WindowsMouseHandler final
|
||||
: public wxWindow
|
||||
, public MouseHandlerBase
|
||||
{
|
||||
public:
|
||||
WindowsMouseHandler() : wxWindow()
|
||||
{
|
||||
wxGetApp().Bind(wxEVT_LEFT_DOWN, &WindowsMouseHandler::MouseButtonDown, this);
|
||||
wxGetApp().Bind(wxEVT_RIGHT_DOWN, &WindowsMouseHandler::MouseButtonDown, this);
|
||||
wxGetApp().Bind(wxEVT_MIDDLE_DOWN, &WindowsMouseHandler::MouseButtonDown, this);
|
||||
wxGetApp().Bind(wxEVT_LEFT_UP, &WindowsMouseHandler::MouseButtonUp, this);
|
||||
wxGetApp().Bind(wxEVT_RIGHT_UP, &WindowsMouseHandler::MouseButtonUp, this);
|
||||
wxGetApp().Bind(wxEVT_MIDDLE_UP, &WindowsMouseHandler::MouseButtonUp, this);
|
||||
wxGetApp().Bind(wxEVT_MOUSEWHEEL, &WindowsMouseHandler::MouseScroll, this);
|
||||
wxGetApp().Bind(wxEVT_MOTION, &WindowsMouseHandler::MouseMove, this);
|
||||
}
|
||||
|
||||
virtual void MouseButtonDown(wxMouseEvent& event)
|
||||
{
|
||||
if (event.LeftDown()) MouseHandlerBase::Button(CELL_MOUSE_BUTTON_1, 1);
|
||||
else if (event.RightDown()) MouseHandlerBase::Button(CELL_MOUSE_BUTTON_2, 1);
|
||||
else if (event.MiddleDown()) MouseHandlerBase::Button(CELL_MOUSE_BUTTON_3, 1);
|
||||
event.Skip();
|
||||
}
|
||||
virtual void MouseButtonUp(wxMouseEvent& event)
|
||||
{
|
||||
if (event.LeftUp()) MouseHandlerBase::Button(CELL_MOUSE_BUTTON_1, 0);
|
||||
else if (event.RightUp()) MouseHandlerBase::Button(CELL_MOUSE_BUTTON_2, 0);
|
||||
else if (event.MiddleUp()) MouseHandlerBase::Button(CELL_MOUSE_BUTTON_3, 0);
|
||||
event.Skip();
|
||||
}
|
||||
virtual void MouseScroll(wxMouseEvent& event) { MouseHandlerBase::Scroll(event.GetWheelRotation()); event.Skip(); }
|
||||
virtual void MouseMove(wxMouseEvent& event) { MouseHandlerBase::Move(event.m_x, event.m_y); event.Skip(); }
|
||||
|
||||
virtual void Init(const u32 max_connect)
|
||||
{
|
||||
m_mice.emplace_back(Mouse());
|
||||
memset(&m_info, 0, sizeof(MouseInfo));
|
||||
m_info.max_connect = max_connect;
|
||||
m_info.now_connect = std::min(m_mice.size(), (size_t)max_connect);
|
||||
m_info.info = 0; // Ownership of mouse data: 0=Application, 1=System
|
||||
m_info.status[0] = CELL_MOUSE_STATUS_CONNECTED; // (TODO: Support for more mice)
|
||||
for(u32 i=1; i<max_connect; i++) m_info.status[i] = CELL_MOUSE_STATUS_DISCONNECTED;
|
||||
m_info.vendor_id[0] = 0x1234;
|
||||
m_info.product_id[0] = 0x1234;
|
||||
}
|
||||
|
||||
virtual void Close()
|
||||
{
|
||||
memset(&m_info, 0, sizeof(MouseInfo));
|
||||
m_mice.clear();
|
||||
}
|
||||
};
|
|
@ -1,65 +0,0 @@
|
|||
#pragma once
|
||||
#include "Emu/Io/PadHandler.h"
|
||||
#include "Emu/state.h"
|
||||
|
||||
class WindowsPadHandler final
|
||||
: public wxWindow
|
||||
, public PadHandlerBase
|
||||
{
|
||||
public:
|
||||
WindowsPadHandler() : wxWindow()
|
||||
{
|
||||
wxGetApp().Bind(wxEVT_KEY_DOWN, &WindowsPadHandler::KeyDown, this);
|
||||
wxGetApp().Bind(wxEVT_KEY_UP, &WindowsPadHandler::KeyUp, this);
|
||||
}
|
||||
|
||||
virtual void KeyDown(wxKeyEvent& event) { Key(event.GetKeyCode(), 1); event.Skip(); }
|
||||
virtual void KeyUp(wxKeyEvent& event) { Key(event.GetKeyCode(), 0); event.Skip(); }
|
||||
|
||||
virtual void Init(const u32 max_connect)
|
||||
{
|
||||
memset(&m_info, 0, sizeof(PadInfo));
|
||||
m_info.max_connect = max_connect;
|
||||
LoadSettings();
|
||||
m_info.now_connect = std::min(m_pads.size(), (size_t)max_connect);
|
||||
}
|
||||
|
||||
virtual void Close()
|
||||
{
|
||||
memset(&m_info, 0, sizeof(PadInfo));
|
||||
m_pads.clear();
|
||||
}
|
||||
|
||||
void LoadSettings()
|
||||
{
|
||||
//Fixed assign change, default is both sensor and press off
|
||||
m_pads.emplace_back(
|
||||
CELL_PAD_STATUS_CONNECTED | CELL_PAD_STATUS_ASSIGN_CHANGES,
|
||||
CELL_PAD_SETTING_PRESS_OFF | CELL_PAD_SETTING_SENSOR_OFF,
|
||||
CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE,
|
||||
CELL_PAD_DEV_TYPE_STANDARD);
|
||||
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, rpcs3::config.io.pad.left.value(), CELL_PAD_CTRL_LEFT);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, rpcs3::config.io.pad.down.value(), CELL_PAD_CTRL_DOWN);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, rpcs3::config.io.pad.right.value(), CELL_PAD_CTRL_RIGHT);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, rpcs3::config.io.pad.up.value(), CELL_PAD_CTRL_UP);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, rpcs3::config.io.pad.start.value(), CELL_PAD_CTRL_START);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, rpcs3::config.io.pad.r3.value(), CELL_PAD_CTRL_R3);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, rpcs3::config.io.pad.l3.value(), CELL_PAD_CTRL_L3);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, rpcs3::config.io.pad.select.value(), CELL_PAD_CTRL_SELECT);
|
||||
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, rpcs3::config.io.pad.square.value(), CELL_PAD_CTRL_SQUARE);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, rpcs3::config.io.pad.cross.value(), CELL_PAD_CTRL_CROSS);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, rpcs3::config.io.pad.circle.value(), CELL_PAD_CTRL_CIRCLE);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, rpcs3::config.io.pad.triangle.value(), CELL_PAD_CTRL_TRIANGLE);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, rpcs3::config.io.pad.r1.value(), CELL_PAD_CTRL_R1);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, rpcs3::config.io.pad.l1.value(), CELL_PAD_CTRL_L1);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, rpcs3::config.io.pad.r2.value(), CELL_PAD_CTRL_R2);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, rpcs3::config.io.pad.l2.value(), CELL_PAD_CTRL_L2);
|
||||
|
||||
m_pads[0].m_sticks.emplace_back(CELL_PAD_BTN_OFFSET_ANALOG_LEFT_X, rpcs3::config.io.pad.left_stick_left.value(), rpcs3::config.io.pad.left_stick_right.value());
|
||||
m_pads[0].m_sticks.emplace_back(CELL_PAD_BTN_OFFSET_ANALOG_LEFT_Y, rpcs3::config.io.pad.left_stick_up.value(), rpcs3::config.io.pad.left_stick_down.value());
|
||||
m_pads[0].m_sticks.emplace_back(CELL_PAD_BTN_OFFSET_ANALOG_RIGHT_X, rpcs3::config.io.pad.right_stick_left.value(), rpcs3::config.io.pad.right_stick_right.value());
|
||||
m_pads[0].m_sticks.emplace_back(CELL_PAD_BTN_OFFSET_ANALOG_RIGHT_Y, rpcs3::config.io.pad.right_stick_up.value(), rpcs3::config.io.pad.right_stick_down.value());
|
||||
}
|
||||
};
|
68
rpcs3/KeyboardPadHandler.cpp
Normal file
68
rpcs3/KeyboardPadHandler.cpp
Normal file
|
@ -0,0 +1,68 @@
|
|||
#include "stdafx.h"
|
||||
#include "stdafx_gui.h"
|
||||
#include "rpcs3.h"
|
||||
|
||||
#include "KeyboardPadHandler.h"
|
||||
|
||||
KeyboardPadConfig g_kbpad_config;
|
||||
|
||||
void KeyboardPadHandler::Init(const u32 max_connect)
|
||||
{
|
||||
memset(&m_info, 0, sizeof(PadInfo));
|
||||
m_info.max_connect = max_connect;
|
||||
LoadSettings();
|
||||
m_info.now_connect = std::min(m_pads.size(), (size_t)max_connect);
|
||||
}
|
||||
|
||||
KeyboardPadHandler::KeyboardPadHandler()
|
||||
{
|
||||
wxGetApp().Bind(wxEVT_KEY_DOWN, &KeyboardPadHandler::KeyDown, this);
|
||||
wxGetApp().Bind(wxEVT_KEY_UP, &KeyboardPadHandler::KeyUp, this);
|
||||
}
|
||||
|
||||
void KeyboardPadHandler::KeyDown(wxKeyEvent& event)
|
||||
{
|
||||
Key(event.GetKeyCode(), 1);
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void KeyboardPadHandler::KeyUp(wxKeyEvent& event)
|
||||
{
|
||||
Key(event.GetKeyCode(), 0);
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void KeyboardPadHandler::LoadSettings()
|
||||
{
|
||||
g_kbpad_config.load();
|
||||
|
||||
//Fixed assign change, default is both sensor and press off
|
||||
m_pads.emplace_back(
|
||||
CELL_PAD_STATUS_CONNECTED | CELL_PAD_STATUS_ASSIGN_CHANGES,
|
||||
CELL_PAD_SETTING_PRESS_OFF | CELL_PAD_SETTING_SENSOR_OFF,
|
||||
CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE,
|
||||
CELL_PAD_DEV_TYPE_STANDARD);
|
||||
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.left, CELL_PAD_CTRL_LEFT);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.down, CELL_PAD_CTRL_DOWN);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.right, CELL_PAD_CTRL_RIGHT);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.up, CELL_PAD_CTRL_UP);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.start, CELL_PAD_CTRL_START);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.r3, CELL_PAD_CTRL_R3);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.l3, CELL_PAD_CTRL_L3);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.select, CELL_PAD_CTRL_SELECT);
|
||||
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.square, CELL_PAD_CTRL_SQUARE);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.cross, CELL_PAD_CTRL_CROSS);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.circle, CELL_PAD_CTRL_CIRCLE);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.triangle, CELL_PAD_CTRL_TRIANGLE);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.r1, CELL_PAD_CTRL_R1);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.l1, CELL_PAD_CTRL_L1);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.r2, CELL_PAD_CTRL_R2);
|
||||
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.l2, CELL_PAD_CTRL_L2);
|
||||
|
||||
m_pads[0].m_sticks.emplace_back(CELL_PAD_BTN_OFFSET_ANALOG_LEFT_X, g_kbpad_config.left_stick_left, g_kbpad_config.left_stick_right);
|
||||
m_pads[0].m_sticks.emplace_back(CELL_PAD_BTN_OFFSET_ANALOG_LEFT_Y, g_kbpad_config.left_stick_up, g_kbpad_config.left_stick_down);
|
||||
m_pads[0].m_sticks.emplace_back(CELL_PAD_BTN_OFFSET_ANALOG_RIGHT_X, g_kbpad_config.right_stick_left, g_kbpad_config.right_stick_right);
|
||||
m_pads[0].m_sticks.emplace_back(CELL_PAD_BTN_OFFSET_ANALOG_RIGHT_Y, g_kbpad_config.right_stick_up, g_kbpad_config.right_stick_down);
|
||||
}
|
61
rpcs3/KeyboardPadHandler.h
Normal file
61
rpcs3/KeyboardPadHandler.h
Normal file
|
@ -0,0 +1,61 @@
|
|||
#pragma once
|
||||
|
||||
#include "Utilities/Config.h"
|
||||
#include "Emu/Io/PadHandler.h"
|
||||
|
||||
struct KeyboardPadConfig final : cfg::node
|
||||
{
|
||||
const std::string cfg_name = fs::get_config_dir() + "/config_kbpad.yml";
|
||||
|
||||
cfg::int32_entry left_stick_left{ *this, "Left Analog Stick Left", static_cast<int>('A') };
|
||||
cfg::int32_entry left_stick_down{ *this, "Left Analog Stick Down", static_cast<int>('S') };
|
||||
cfg::int32_entry left_stick_right{ *this, "Left Analog Stick Right", static_cast<int>('D') };
|
||||
cfg::int32_entry left_stick_up{ *this, "Left Analog Stick Up", static_cast<int>('W') };
|
||||
cfg::int32_entry right_stick_left{ *this, "Right Analog Stick Left", 313 };
|
||||
cfg::int32_entry right_stick_down{ *this, "Right Analog Stick Down", 367 };
|
||||
cfg::int32_entry right_stick_right{ *this, "Right Analog Stick Right", 312 };
|
||||
cfg::int32_entry right_stick_up{ *this, "Right Analog Stick Up", 366 };
|
||||
cfg::int32_entry start{ *this, "Start", 13 };
|
||||
cfg::int32_entry select{ *this, "Select", 32 };
|
||||
cfg::int32_entry square{ *this, "Square", static_cast<int>('Z') };
|
||||
cfg::int32_entry cross{ *this, "Cross", static_cast<int>('X') };
|
||||
cfg::int32_entry circle{ *this, "Circle", static_cast<int>('C') };
|
||||
cfg::int32_entry triangle{ *this, "Triangle", static_cast<int>('V') };
|
||||
cfg::int32_entry left{ *this, "Left", 314 };
|
||||
cfg::int32_entry down{ *this, "Down", 317 };
|
||||
cfg::int32_entry right{ *this, "Right", 316 };
|
||||
cfg::int32_entry up{ *this, "Up", 315 };
|
||||
cfg::int32_entry r1{ *this, "R1", static_cast<int>('E') };
|
||||
cfg::int32_entry r2{ *this, "R2", static_cast<int>('T') };
|
||||
cfg::int32_entry r3{ *this, "R3", static_cast<int>('G') };
|
||||
cfg::int32_entry l1{ *this, "L1", static_cast<int>('Q') };
|
||||
cfg::int32_entry l2{ *this, "L2", static_cast<int>('R') };
|
||||
cfg::int32_entry l3{ *this, "L3", static_cast<int>('F') };
|
||||
|
||||
bool load()
|
||||
{
|
||||
if (fs::file cfg_file{ cfg_name, fs::read })
|
||||
{
|
||||
return from_string(cfg_file.to_string());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void save()
|
||||
{
|
||||
fs::file(cfg_name, fs::rewrite).write(to_string());
|
||||
}
|
||||
};
|
||||
|
||||
class KeyboardPadHandler final : public PadHandlerBase, public wxWindow
|
||||
{
|
||||
public:
|
||||
virtual void Init(const u32 max_connect) override;
|
||||
|
||||
KeyboardPadHandler();
|
||||
|
||||
void KeyDown(wxKeyEvent& event);
|
||||
void KeyUp(wxKeyEvent& event);
|
||||
void LoadSettings();
|
||||
};
|
|
@ -178,4 +178,4 @@ DWORD WINAPI XInputPadHandler::ThreadProcProxy(LPVOID parameter)
|
|||
return reinterpret_cast<XInputPadHandler *>(parameter)->ThreadProcedure();
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -3,14 +3,14 @@
|
|||
#include "Emu/Io/PadHandler.h"
|
||||
#include <Xinput.h>
|
||||
|
||||
class XInputPadHandler : public PadHandlerBase
|
||||
class XInputPadHandler final : public PadHandlerBase
|
||||
{
|
||||
public:
|
||||
XInputPadHandler();
|
||||
~XInputPadHandler();
|
||||
|
||||
void Init(const u32 max_connect) override;
|
||||
void Close() override;
|
||||
void Close();
|
||||
|
||||
private:
|
||||
typedef void (WINAPI * PFN_XINPUTENABLE)(BOOL);
|
Loading…
Add table
Reference in a new issue