mirror of https://github.com/PCSX2/pcsx2.git
General cleanup of various linux pad code. (#4281)
* Headers cleanup. * Remove stray Windows code. * Rename Gamepad.* to Device.*. * Rename ini.cpp to Config.cpp. Get rid of controller.cpp, moving code to controller.h. * Change controller.h to Config.h. More cleanup. * More header cleanup. * Switch things over to the InputManager. Didn't move the update code there for now. * Move to pragma once. Move update code to InputManager. * Reformatted files. Rearranged some includes and defines. * Not sure how I missed this... * It's 2021. * clang-format: make sure the formatting changes are correct Co-authored-by: Gauvain 'GovanifY' Roussel-Tarbouriech <gauvain@govanify.com>
This commit is contained in:
parent
2feaa8adf7
commit
0f917c24a5
|
@ -516,8 +516,8 @@ add_custom_command(
|
|||
|
||||
# PAD/Linux sources
|
||||
set(pcsx2PADSources
|
||||
PAD/Linux/controller.cpp
|
||||
PAD/Linux/GamePad.cpp
|
||||
PAD/Linux/Device.cpp
|
||||
PAD/Linux/InputManager.cpp
|
||||
PAD/Linux/SDL/joystick.cpp
|
||||
PAD/Linux/keyboard.cpp
|
||||
PAD/Linux/KeyStatus.cpp
|
||||
|
@ -527,7 +527,7 @@ set(pcsx2PADSources
|
|||
PAD/Linux/wx_dialog/opPanel.cpp
|
||||
PAD/Linux/wx_dialog/GamepadConfiguration.cpp
|
||||
PAD/Linux/wx_dialog/JoystickConfiguration.cpp
|
||||
PAD/Linux/ini.cpp
|
||||
PAD/Linux/Config.cpp
|
||||
PAD/Linux/linux.cpp
|
||||
${CMAKE_BINARY_DIR}/pcsx2/PAD/Linux/resources_pad.cpp
|
||||
)
|
||||
|
@ -535,8 +535,10 @@ set(pcsx2PADSources
|
|||
# PAD/Linux headers
|
||||
set(pcsx2PADHeaders
|
||||
PAD/Linux/bitwise.h
|
||||
PAD/Linux/controller.h
|
||||
PAD/Linux/GamePad.h
|
||||
PAD/Linux/Config.h
|
||||
PAD/Linux/Device.h
|
||||
PAD/Linux/Global.h
|
||||
PAD/Linux/InputManager.h
|
||||
PAD/Linux/SDL/joystick.h
|
||||
PAD/Linux/keyboard.h
|
||||
PAD/Linux/KeyStatus.h
|
||||
|
|
|
@ -13,12 +13,10 @@
|
|||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "GamePad.h"
|
||||
#include "Global.h"
|
||||
#include "Device.h"
|
||||
#include "keyboard.h"
|
||||
#include "AppConfig.h"
|
||||
#include "PAD.h"
|
||||
|
||||
void DefaultKeyboardValues()
|
||||
{
|
||||
|
@ -59,7 +57,7 @@ void PADSaveConfig()
|
|||
fprintf(f, "uid[0] = %zu\n", g_conf.get_joy_uid(0));
|
||||
fprintf(f, "uid[1] = %zu\n", g_conf.get_joy_uid(1));
|
||||
|
||||
for (int pad = 0; pad < GAMEPAD_NUMBER; pad++)
|
||||
for (u32 pad = 0; pad < GAMEPAD_NUMBER; pad++)
|
||||
for (auto const& it : g_conf.keysym_map[pad])
|
||||
fprintf(f, "PAD %d:KEYSYM 0x%x = %d\n", pad, it.first, it.second);
|
||||
|
||||
|
@ -80,7 +78,7 @@ void PADLoadConfig()
|
|||
wxString iniName(L"PAD.ini");
|
||||
const std::string iniFile = std::string(GetSettingsFolder().Combine(iniName).GetFullPath()); // default path, just in case
|
||||
f = fopen(iniFile.c_str(), "r");
|
||||
if (f == NULL)
|
||||
if (f == nullptr)
|
||||
{
|
||||
printf("OnePAD: failed to load ini %s\n", iniFile.c_str());
|
||||
PADSaveConfig(); //save and return
|
||||
|
@ -113,6 +111,7 @@ void PADLoadConfig()
|
|||
u32 pad;
|
||||
u32 keysym;
|
||||
u32 index;
|
||||
|
||||
while (fscanf(f, "PAD %u:KEYSYM 0x%x = %u\n", &pad, &keysym, &index) == 3)
|
||||
{
|
||||
set_keyboard_key(pad & 1, keysym, index);
|
|
@ -14,12 +14,8 @@
|
|||
*/
|
||||
|
||||
#pragma once
|
||||
#include <string.h> // for memset
|
||||
#define MAX_KEYS 24
|
||||
|
||||
extern void set_keyboard_key(int pad, int keysym, int index);
|
||||
extern int get_keyboard_key(int pad, int keysym);
|
||||
extern bool IsAnalogKey(int index);
|
||||
#include "Global.h"
|
||||
|
||||
class PADconf
|
||||
{
|
||||
|
@ -58,7 +54,7 @@ public:
|
|||
packed_options = 0;
|
||||
ff_intensity = 0x7FFF; // set it at max value by default
|
||||
sensibility = 100;
|
||||
for (int pad = 0; pad < GAMEPAD_NUMBER; pad++)
|
||||
for (u32 pad = 0; pad < GAMEPAD_NUMBER; pad++)
|
||||
{
|
||||
keysym_map[pad].clear();
|
||||
}
|
||||
|
@ -123,3 +119,19 @@ public:
|
|||
}
|
||||
};
|
||||
extern PADconf g_conf;
|
||||
|
||||
static __forceinline void set_keyboard_key(int pad, int keysym, int index)
|
||||
{
|
||||
g_conf.keysym_map[pad][keysym] = index;
|
||||
}
|
||||
|
||||
static __forceinline int get_keyboard_key(int pad, int keysym)
|
||||
{
|
||||
// You must use find instead of []
|
||||
// [] will create an element if the key does not exist and return 0
|
||||
std::map<u32, u32>::iterator it = g_conf.keysym_map[pad].find(keysym);
|
||||
if (it != g_conf.keysym_map[pad].end())
|
||||
return it->second;
|
||||
else
|
||||
return -1;
|
||||
}
|
|
@ -13,60 +13,48 @@
|
|||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "GamePad.h"
|
||||
#include "Device.h"
|
||||
#ifdef SDL_BUILD
|
||||
#include "SDL/joystick.h"
|
||||
#endif
|
||||
|
||||
std::vector<std::unique_ptr<GamePad>> s_vgamePad;
|
||||
|
||||
/**
|
||||
* Following static methods are just forwarders to their backend
|
||||
* This is where link between agnostic and specific code is done
|
||||
**/
|
||||
|
||||
/**
|
||||
* Find every interesting devices and create right structure for them(depend on backend)
|
||||
**/
|
||||
void GamePad::EnumerateGamePads(std::vector<std::unique_ptr<GamePad>>& vgamePad)
|
||||
{
|
||||
#ifdef SDL_BUILD
|
||||
JoystickInfo::EnumerateJoysticks(vgamePad);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Safely dispatch to the Rumble method above
|
||||
**/
|
||||
void GamePad::DoRumble(unsigned type, unsigned pad)
|
||||
void Device::DoRumble(unsigned type, unsigned pad)
|
||||
{
|
||||
int index = uid_to_index(pad);
|
||||
if (index >= 0)
|
||||
s_vgamePad[index]->Rumble(type, pad);
|
||||
device_manager->devices[index]->Rumble(type, pad);
|
||||
}
|
||||
|
||||
size_t GamePad::index_to_uid(int index)
|
||||
size_t Device::index_to_uid(int index)
|
||||
{
|
||||
if ((index >= 0) && (index < (int)s_vgamePad.size()))
|
||||
return s_vgamePad[index]->GetUniqueIdentifier();
|
||||
if ((index >= 0) && (index < (int)device_manager->devices.size()))
|
||||
return device_manager->devices[index]->GetUniqueIdentifier();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GamePad::uid_to_index(int pad)
|
||||
int Device::uid_to_index(int pad)
|
||||
{
|
||||
size_t uid = g_conf.get_joy_uid(pad);
|
||||
|
||||
for (int i = 0; i < (int)s_vgamePad.size(); ++i)
|
||||
for (int i = 0; i < (int)device_manager->devices.size(); ++i)
|
||||
{
|
||||
if (s_vgamePad[i]->GetUniqueIdentifier() == uid)
|
||||
if (device_manager->devices[i]->GetUniqueIdentifier() == uid)
|
||||
return i;
|
||||
}
|
||||
|
||||
// Current uid wasn't found maybe the pad was unplugged. Or
|
||||
// user didn't select it. Fallback to 1st pad for
|
||||
// 1st player. And 2nd pad for 2nd player.
|
||||
if ((int)s_vgamePad.size() > pad)
|
||||
if ((int)device_manager->devices.size() > pad)
|
||||
return pad;
|
||||
|
||||
return -1;
|
|
@ -15,38 +15,52 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "PAD.h"
|
||||
#include "controller.h"
|
||||
#include "Global.h"
|
||||
#include "InputManager.h"
|
||||
|
||||
#ifdef SDL_BUILD
|
||||
#include <SDL.h>
|
||||
#endif
|
||||
|
||||
class GamePad
|
||||
enum DeviceAPI
|
||||
{
|
||||
NO_API = 0,
|
||||
KEYBOARD_API = 16,
|
||||
SDL_AUTO = 17
|
||||
};
|
||||
|
||||
enum DeviceType
|
||||
{
|
||||
NO_DEVICE = 0,
|
||||
KEYBOARD = 1,
|
||||
MOUSE = 2,
|
||||
OTHER = 3
|
||||
};
|
||||
|
||||
class Device
|
||||
{
|
||||
public:
|
||||
GamePad()
|
||||
: m_deadzone(1500)
|
||||
Device()
|
||||
: m_unique_id(0)
|
||||
, m_device_name("")
|
||||
, api(NO_API)
|
||||
, type(NO_DEVICE)
|
||||
, m_deadzone(1500)
|
||||
, m_no_error(false)
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~GamePad()
|
||||
virtual ~Device()
|
||||
{
|
||||
}
|
||||
|
||||
GamePad(const GamePad&); // copy constructor
|
||||
GamePad& operator=(const GamePad&); // assignment
|
||||
|
||||
/*
|
||||
* Find every interesting devices and create right structure for them(depend on backend)
|
||||
*/
|
||||
static void EnumerateGamePads(std::vector<std::unique_ptr<GamePad>>& vgamePad);
|
||||
Device(const Device&); // copy constructor
|
||||
Device& operator=(const Device&); // assignment
|
||||
|
||||
/*
|
||||
* Update state of every attached devices
|
||||
*/
|
||||
virtual void UpdateGamePadState() = 0;
|
||||
virtual void UpdateDeviceState() = 0;
|
||||
|
||||
/*
|
||||
* Causes devices to rumble
|
||||
|
@ -82,9 +96,12 @@ public:
|
|||
return m_no_error;
|
||||
}
|
||||
|
||||
size_t m_unique_id;
|
||||
std::string m_device_name;
|
||||
DeviceAPI api;
|
||||
DeviceType type;
|
||||
|
||||
protected:
|
||||
int m_deadzone;
|
||||
bool m_no_error;
|
||||
};
|
||||
|
||||
extern std::vector<std::unique_ptr<GamePad>> s_vgamePad;
|
|
@ -0,0 +1,109 @@
|
|||
/* PCSX2 - PS2 Emulator for PCs
|
||||
* Copyright (C) 2002-2021 PCSX2 Dev Team
|
||||
*
|
||||
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU Lesser General Public License as published by the Free Software Found-
|
||||
* ation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* PCSX2 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 PCSX2.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <array>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <queue>
|
||||
|
||||
#include "Pcsx2Defs.h"
|
||||
#include "bitwise.h"
|
||||
|
||||
#include "Utilities/pxStreams.h"
|
||||
#include "Utilities/Console.h"
|
||||
#include "App.h"
|
||||
#include "DebugTools/Debug.h"
|
||||
|
||||
#define PADdefs
|
||||
|
||||
static const u32 GAMEPAD_NUMBER = 2;
|
||||
static const u32 MAX_KEYS = 24;
|
||||
|
||||
#include "Config.h"
|
||||
|
||||
enum gamePadValues
|
||||
{
|
||||
PAD_L2 = 0, // L2 button
|
||||
PAD_R2, // R2 button
|
||||
PAD_L1, // L1 button
|
||||
PAD_R1, // R1 button
|
||||
PAD_TRIANGLE, // Triangle button ▲
|
||||
PAD_CIRCLE, // Circle button ●
|
||||
PAD_CROSS, // Cross button ✖
|
||||
PAD_SQUARE, // Square button ■
|
||||
PAD_SELECT, // Select button
|
||||
PAD_L3, // Left joystick button (L3)
|
||||
PAD_R3, // Right joystick button (R3)
|
||||
PAD_START, // Start button
|
||||
PAD_UP, // Directional pad ↑
|
||||
PAD_RIGHT, // Directional pad →
|
||||
PAD_DOWN, // Directional pad ↓
|
||||
PAD_LEFT, // Directional pad ←
|
||||
PAD_L_UP, // Left joystick (Up) ↑
|
||||
PAD_L_RIGHT, // Left joystick (Right) →
|
||||
PAD_L_DOWN, // Left joystick (Down) ↓
|
||||
PAD_L_LEFT, // Left joystick (Left) ←
|
||||
PAD_R_UP, // Right joystick (Up) ↑
|
||||
PAD_R_RIGHT, // Right joystick (Right) →
|
||||
PAD_R_DOWN, // Right joystick (Down) ↓
|
||||
PAD_R_LEFT // Right joystick (Left) ←
|
||||
};
|
||||
|
||||
static const std::array<gamePadValues, MAX_KEYS> all_keys =
|
||||
{
|
||||
PAD_L2, // L2 button
|
||||
PAD_R2, // R2 button
|
||||
PAD_L1, // L1 button
|
||||
PAD_R1, // R1 button
|
||||
PAD_TRIANGLE, // Triangle button ▲
|
||||
PAD_CIRCLE, // Circle button ●
|
||||
PAD_CROSS, // Cross button ✖
|
||||
PAD_SQUARE, // Square button ■
|
||||
PAD_SELECT, // Select button
|
||||
PAD_L3, // Left joystick button (L3)
|
||||
PAD_R3, // Right joystick button (R3)
|
||||
PAD_START, // Start button
|
||||
PAD_UP, // Directional pad ↑
|
||||
PAD_RIGHT, // Directional pad →
|
||||
PAD_DOWN, // Directional pad ↓
|
||||
PAD_LEFT, // Directional pad ←
|
||||
PAD_L_UP, // Left joystick (Up) ↑
|
||||
PAD_L_RIGHT, // Left joystick (Right) →
|
||||
PAD_L_DOWN, // Left joystick (Down) ↓
|
||||
PAD_L_LEFT, // Left joystick (Left) ←
|
||||
PAD_R_UP, // Right joystick (Up) ↑
|
||||
PAD_R_RIGHT, // Right joystick (Right) →
|
||||
PAD_R_DOWN, // Right joystick (Down) ↓
|
||||
PAD_R_LEFT // Right joystick (Left) ←
|
||||
|
||||
};
|
||||
|
||||
static bool IsAnalogKey(int index)
|
||||
{
|
||||
return ((index >= PAD_L_UP) && (index <= PAD_R_LEFT));
|
||||
}
|
||||
|
||||
#include "KeyStatus.h"
|
||||
|
||||
void __LogToConsole(const char* fmt, ...);
|
||||
void PADLoadConfig();
|
||||
void PADSaveConfig();
|
|
@ -0,0 +1,88 @@
|
|||
/* PCSX2 - PS2 Emulator for PCs
|
||||
* Copyright (C) 2002-2021 PCSX2 Dev Team
|
||||
*
|
||||
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU Lesser General Public License as published by the Free Software Found-
|
||||
* ation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* PCSX2 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 PCSX2.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "InputManager.h"
|
||||
#include "Device.h"
|
||||
#include "keyboard.h"
|
||||
#include "state_management.h"
|
||||
|
||||
#ifdef SDL_BUILD
|
||||
#include "SDL/joystick.h"
|
||||
#endif
|
||||
|
||||
std::unique_ptr<InputDeviceManager> device_manager(new InputDeviceManager);
|
||||
|
||||
InputDeviceManager::InputDeviceManager()
|
||||
{
|
||||
}
|
||||
|
||||
InputDeviceManager::~InputDeviceManager()
|
||||
{
|
||||
device_manager->devices.clear();
|
||||
}
|
||||
|
||||
// Needs to be moved to individual device code, as does the keyboard input.
|
||||
void PollForJoystickInput(int cpad)
|
||||
{
|
||||
int index = Device::uid_to_index(cpad);
|
||||
if (index < 0)
|
||||
return;
|
||||
|
||||
auto& gamePad = device_manager->devices[index];
|
||||
|
||||
gamePad->UpdateDeviceState();
|
||||
|
||||
for (u32 i = 0; i < MAX_KEYS; i++)
|
||||
{
|
||||
s32 value = gamePad->GetInput((gamePadValues)i);
|
||||
if (value != 0)
|
||||
g_key_status.press(cpad, i, value);
|
||||
else
|
||||
g_key_status.release(cpad, i);
|
||||
}
|
||||
}
|
||||
|
||||
void InputDeviceManager::Update()
|
||||
{
|
||||
// Poll keyboard/mouse event. There is currently no way to separate pad0 from pad1 event.
|
||||
// So we will populate both pad in the same time
|
||||
for (u32 cpad = 0; cpad < GAMEPAD_NUMBER; cpad++)
|
||||
{
|
||||
g_key_status.keyboard_state_acces(cpad);
|
||||
}
|
||||
UpdateKeyboardInput();
|
||||
|
||||
// Get joystick state + Commit
|
||||
for (u32 cpad = 0; cpad < GAMEPAD_NUMBER; cpad++)
|
||||
{
|
||||
g_key_status.joystick_state_acces(cpad);
|
||||
|
||||
PollForJoystickInput(cpad);
|
||||
|
||||
g_key_status.commit_status(cpad);
|
||||
}
|
||||
|
||||
Pad::rumble_all();
|
||||
}
|
||||
|
||||
/*
|
||||
* Find and set up joysticks, potentially other devices.
|
||||
*/
|
||||
void EnumerateDevices()
|
||||
{
|
||||
#ifdef SDL_BUILD
|
||||
JoystickInfo::EnumerateJoysticks(device_manager->devices);
|
||||
#endif
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/* PCSX2 - PS2 Emulator for PCs
|
||||
* Copyright (C) 2002-2020 PCSX2 Dev Team
|
||||
* Copyright (C) 2002-2021 PCSX2 Dev Team
|
||||
*
|
||||
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU Lesser General Public License as published by the Free Software Found-
|
||||
|
@ -13,26 +13,26 @@
|
|||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "PAD.h"
|
||||
#include "controller.h"
|
||||
#pragma once
|
||||
|
||||
__forceinline void set_keyboard_key(int pad, int keysym, int index)
|
||||
{
|
||||
g_conf.keysym_map[pad][keysym] = index;
|
||||
}
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
|
||||
__forceinline int get_keyboard_key(int pad, int keysym)
|
||||
{
|
||||
// You must use find instead of []
|
||||
// [] will create an element if the key does not exist and return 0
|
||||
std::map<u32, u32>::iterator it = g_conf.keysym_map[pad].find(keysym);
|
||||
if (it != g_conf.keysym_map[pad].end())
|
||||
return it->second;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
class Device;
|
||||
|
||||
__forceinline bool IsAnalogKey(int index)
|
||||
class InputDeviceManager
|
||||
{
|
||||
return ((index >= PAD_L_UP) && (index <= PAD_R_LEFT));
|
||||
}
|
||||
public:
|
||||
InputDeviceManager();
|
||||
~InputDeviceManager();
|
||||
void Update();
|
||||
|
||||
std::vector<std::unique_ptr<Device>> devices;
|
||||
};
|
||||
|
||||
extern std::unique_ptr<InputDeviceManager> device_manager;
|
||||
|
||||
/*
|
||||
* Find every interesting device and create right structure for them(depends on backend)
|
||||
*/
|
||||
extern void EnumerateDevices();
|
|
@ -14,17 +14,18 @@
|
|||
*/
|
||||
|
||||
#include "KeyStatus.h"
|
||||
#include "Config.h"
|
||||
|
||||
void KeyStatus::Init()
|
||||
{
|
||||
for (int pad = 0; pad < GAMEPAD_NUMBER; pad++)
|
||||
for (u32 pad = 0; pad < GAMEPAD_NUMBER; pad++)
|
||||
{
|
||||
m_button[pad] = 0xFFFF;
|
||||
m_internal_button_kbd[pad] = 0xFFFF;
|
||||
m_internal_button_joy[pad] = 0xFFFF;
|
||||
m_state_acces[pad] = false;
|
||||
|
||||
for (int index = 0; index < MAX_KEYS; index++)
|
||||
for (u32 index = 0; index < MAX_KEYS; index++)
|
||||
{
|
||||
m_button_pressure[pad][index] = 0xFF;
|
||||
m_internal_button_pressure[pad][index] = 0xFF;
|
||||
|
@ -193,7 +194,7 @@ void KeyStatus::commit_status(u32 pad)
|
|||
{
|
||||
m_button[pad] = m_internal_button_kbd[pad] & m_internal_button_joy[pad];
|
||||
|
||||
for (int index = 0; index < MAX_KEYS; index++)
|
||||
for (u32 index = 0; index < MAX_KEYS; index++)
|
||||
m_button_pressure[pad][index] = m_internal_button_pressure[pad][index];
|
||||
|
||||
m_analog[pad].lx = analog_merge(m_internal_analog_kbd[pad].lx, m_internal_analog_joy[pad].lx);
|
||||
|
|
|
@ -13,10 +13,9 @@
|
|||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __KEYSTATUS_H__
|
||||
#define __KEYSTATUS_H__
|
||||
#pragma once
|
||||
|
||||
#include "PAD.h"
|
||||
#include "Global.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -70,5 +69,3 @@ public:
|
|||
};
|
||||
|
||||
extern KeyStatus g_key_status;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -16,20 +16,19 @@
|
|||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "Utilities/pxStreams.h"
|
||||
#include "keyboard.h"
|
||||
#include "PAD.h"
|
||||
#include "state_management.h"
|
||||
|
||||
#if defined(__unix__) || defined(__APPLE__)
|
||||
#include "Device.h"
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#ifdef _MSC_VER
|
||||
#define snprintf sprintf_s
|
||||
#endif
|
||||
|
||||
const u32 revision = 3;
|
||||
const u32 build = 0; // increase that with each version
|
||||
|
@ -118,7 +117,7 @@ s32 PADopen(void* pDsp)
|
|||
g_ev_fifo.reset();
|
||||
|
||||
#if defined(__unix__) || defined(__APPLE__)
|
||||
GamePad::EnumerateGamePads(s_vgamePad);
|
||||
EnumerateDevices();
|
||||
#endif
|
||||
return _PADopen(pDsp);
|
||||
}
|
||||
|
@ -252,7 +251,7 @@ keyEvent* PADkeyEvent()
|
|||
{
|
||||
case SDL_CONTROLLERDEVICEADDED:
|
||||
case SDL_CONTROLLERDEVICEREMOVED:
|
||||
GamePad::EnumerateGamePads(s_vgamePad);
|
||||
EnumerateDevices();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -274,10 +273,10 @@ keyEvent* PADkeyEvent()
|
|||
// PAD_LOG("Returning Event. Event Type: %d, Key: %d\n", s_event.evt, s_event.key);
|
||||
return &s_event;
|
||||
#else // MacOS
|
||||
s_event = event;
|
||||
event.evt = 0;
|
||||
event.key = 0;
|
||||
return &s_event;
|
||||
s_event = event;
|
||||
event.evt = 0;
|
||||
event.key = 0;
|
||||
return &s_event;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -15,41 +15,8 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#define GAMEPAD_NUMBER 2 // numbers of gamepad
|
||||
|
||||
#include <wx/string.h>
|
||||
#include <wx/tokenzr.h>
|
||||
#include <wx/intl.h>
|
||||
#include <wx/log.h>
|
||||
#include <wx/filename.h>
|
||||
#include "Utilities/pxStreams.h"
|
||||
#include "Utilities/Console.h"
|
||||
#include "App.h"
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
|
||||
#else
|
||||
/*
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/keysym.h>
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
||||
#include <array>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <queue>
|
||||
|
||||
#define PADdefs
|
||||
#include "Global.h"
|
||||
#include "mt_queue.h"
|
||||
|
||||
enum PadOptions
|
||||
{
|
||||
|
@ -62,63 +29,9 @@ enum PadOptions
|
|||
PADOPTION_MOUSE_R = 0x40,
|
||||
};
|
||||
|
||||
enum PadCommands
|
||||
{
|
||||
CMD_SET_VREF_PARAM = 0x40,
|
||||
CMD_QUERY_DS2_ANALOG_MODE = 0x41,
|
||||
CMD_READ_DATA_AND_VIBRATE = 0x42,
|
||||
CMD_CONFIG_MODE = 0x43,
|
||||
CMD_SET_MODE_AND_LOCK = 0x44,
|
||||
CMD_QUERY_MODEL_AND_MODE = 0x45,
|
||||
CMD_QUERY_ACT = 0x46, // ??
|
||||
CMD_QUERY_COMB = 0x47, // ??
|
||||
CMD_QUERY_MODE = 0x4C, // QUERY_MODE ??
|
||||
CMD_VIBRATION_TOGGLE = 0x4D,
|
||||
CMD_SET_DS2_NATIVE_MODE = 0x4F // SET_DS2_NATIVE_MODE
|
||||
};
|
||||
|
||||
enum gamePadValues
|
||||
{
|
||||
PAD_L2 = 0, // L2 button
|
||||
PAD_R2, // R2 button
|
||||
PAD_L1, // L1 button
|
||||
PAD_R1, // R1 button
|
||||
PAD_TRIANGLE, // Triangle button ▲
|
||||
PAD_CIRCLE, // Circle button ●
|
||||
PAD_CROSS, // Cross button ✖
|
||||
PAD_SQUARE, // Square button ■
|
||||
PAD_SELECT, // Select button
|
||||
PAD_L3, // Left joystick button (L3)
|
||||
PAD_R3, // Right joystick button (R3)
|
||||
PAD_START, // Start button
|
||||
PAD_UP, // Directional pad ↑
|
||||
PAD_RIGHT, // Directional pad →
|
||||
PAD_DOWN, // Directional pad ↓
|
||||
PAD_LEFT, // Directional pad ←
|
||||
PAD_L_UP, // Left joystick (Up) ↑
|
||||
PAD_L_RIGHT, // Left joystick (Right) →
|
||||
PAD_L_DOWN, // Left joystick (Down) ↓
|
||||
PAD_L_LEFT, // Left joystick (Left) ←
|
||||
PAD_R_UP, // Right joystick (Up) ↑
|
||||
PAD_R_RIGHT, // Right joystick (Right) →
|
||||
PAD_R_DOWN, // Right joystick (Down) ↓
|
||||
PAD_R_LEFT // Right joystick (Left) ←
|
||||
};
|
||||
|
||||
#if defined(__unix__) || defined(__APPLE__)
|
||||
#include "GamePad.h"
|
||||
#endif
|
||||
#include "bitwise.h"
|
||||
#include "controller.h"
|
||||
#include "KeyStatus.h"
|
||||
#include "mt_queue.h"
|
||||
|
||||
extern FILE* padLog;
|
||||
extern void initLogging();
|
||||
|
||||
//#define PAD_LOG __Log
|
||||
//#define PAD_LOG __LogToConsole
|
||||
|
||||
extern keyEvent event;
|
||||
extern MtQueue<keyEvent> g_ev_fifo;
|
||||
|
||||
|
@ -126,10 +39,6 @@ s32 _PADopen(void* pDsp);
|
|||
void _PADclose();
|
||||
void PADsetMode(int pad, int mode);
|
||||
|
||||
void __LogToConsole(const char* fmt, ...);
|
||||
void PADLoadConfig();
|
||||
void PADSaveConfig();
|
||||
|
||||
void SysMessage(char* fmt, ...);
|
||||
|
||||
s32 PADinit();
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
//////////////////////////
|
||||
|
||||
// opens handles to all possible joysticks
|
||||
void JoystickInfo::EnumerateJoysticks(std::vector<std::unique_ptr<GamePad>>& vjoysticks)
|
||||
void JoystickInfo::EnumerateJoysticks(std::vector<std::unique_ptr<Device>>& vjoysticks)
|
||||
{
|
||||
uint32_t flag = SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_EVENTS | SDL_INIT_GAMECONTROLLER;
|
||||
|
||||
|
@ -66,7 +66,7 @@ void JoystickInfo::EnumerateJoysticks(std::vector<std::unique_ptr<GamePad>>& vjo
|
|||
|
||||
for (int i = 0; i < SDL_NumJoysticks(); ++i)
|
||||
{
|
||||
vjoysticks.push_back(std::unique_ptr<GamePad>(new JoystickInfo(i)));
|
||||
vjoysticks.push_back(std::unique_ptr<Device>(new JoystickInfo(i)));
|
||||
// Something goes wrong in the init, let's drop it
|
||||
if (!vjoysticks.back()->IsProperlyInitialized())
|
||||
vjoysticks.pop_back();
|
||||
|
@ -116,7 +116,7 @@ JoystickInfo::~JoystickInfo()
|
|||
}
|
||||
|
||||
JoystickInfo::JoystickInfo(int id)
|
||||
: GamePad()
|
||||
: Device()
|
||||
, m_controller(nullptr)
|
||||
, m_haptic(nullptr)
|
||||
, m_unique_id(0)
|
||||
|
@ -168,7 +168,7 @@ JoystickInfo::JoystickInfo(int id)
|
|||
// Collect Device Information
|
||||
char guid[64];
|
||||
SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(joy), guid, 64);
|
||||
const char* devname = SDL_JoystickNameForIndex(id);
|
||||
m_device_name = SDL_JoystickNameForIndex(id);
|
||||
|
||||
if (m_controller == nullptr)
|
||||
{
|
||||
|
@ -176,7 +176,7 @@ JoystickInfo::JoystickInfo(int id)
|
|||
"You can use SDL2 Gamepad Tool (https://www.generalarcade.com/gamepadtool/) or Steam to configure your joystick\n"
|
||||
"The mapping can be stored in PAD.ini as 'SDL2 = <...mapping description...>'\n"
|
||||
"Please post the new generated mapping to (https://github.com/gabomdq/SDL_GameControllerDB) so it can be added to the database.",
|
||||
devname, guid);
|
||||
m_device_name.c_str(), guid);
|
||||
|
||||
#if SDL_MINOR_VERSION >= 4 // Version before 2.0.4 are bugged, JoystickClose crashes randomly
|
||||
SDL_JoystickClose(joy);
|
||||
|
@ -242,7 +242,7 @@ JoystickInfo::JoystickInfo(int id)
|
|||
}
|
||||
|
||||
fprintf(stdout, "PAD: controller (%s) detected%s, GUID:%s\n",
|
||||
devname, m_haptic ? " with rumble support" : "", guid);
|
||||
m_device_name.c_str(), m_haptic ? " with rumble support" : "", guid);
|
||||
|
||||
m_no_error = true;
|
||||
}
|
||||
|
@ -299,7 +299,7 @@ int JoystickInfo::GetInput(gamePadValues input)
|
|||
return value ? 0xFF : 0; // Max pressure
|
||||
}
|
||||
|
||||
void JoystickInfo::UpdateGamePadState()
|
||||
void JoystickInfo::UpdateDeviceState()
|
||||
{
|
||||
SDL_GameControllerUpdate();
|
||||
}
|
||||
|
|
|
@ -18,12 +18,13 @@
|
|||
#include <SDL.h>
|
||||
#include <SDL_haptic.h>
|
||||
|
||||
#include "PAD/Linux/GamePad.h"
|
||||
#include "PAD/Linux/PAD.h"
|
||||
#include "PAD/Linux/controller.h"
|
||||
#include "../Global.h"
|
||||
#include "../Device.h"
|
||||
|
||||
#define NB_EFFECT 2 // Don't use more than two, ps2 only has one for big motor and one for small(like most systems)
|
||||
|
||||
// holds all joystick info
|
||||
class JoystickInfo : public GamePad
|
||||
class JoystickInfo : public Device
|
||||
{
|
||||
public:
|
||||
JoystickInfo(int id);
|
||||
|
@ -34,7 +35,7 @@ public:
|
|||
|
||||
|
||||
// opens handles to all possible joysticks
|
||||
static void EnumerateJoysticks(std::vector<std::unique_ptr<GamePad>>& vjoysticks);
|
||||
static void EnumerateJoysticks(std::vector<std::unique_ptr<Device>>& vjoysticks);
|
||||
|
||||
void Rumble(unsigned type, unsigned pad) override;
|
||||
|
||||
|
@ -44,7 +45,7 @@ public:
|
|||
|
||||
int GetInput(gamePadValues input) final;
|
||||
|
||||
void UpdateGamePadState() final;
|
||||
void UpdateDeviceState() final;
|
||||
|
||||
size_t GetUniqueIdentifier() final;
|
||||
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
template <class T>
|
||||
static void __forceinline set_bit(T& value, int bit)
|
||||
{
|
||||
|
|
|
@ -18,24 +18,12 @@
|
|||
* Pragmatically, event handing's going in here too.
|
||||
*/
|
||||
|
||||
#if defined(__unix__)
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#elif defined(__APPLE__)
|
||||
#include <Carbon/Carbon.h>
|
||||
#endif
|
||||
|
||||
#include "Global.h"
|
||||
#include "keyboard.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
char* KeysymToChar(int keysym)
|
||||
{
|
||||
LPWORD temp;
|
||||
|
||||
ToAscii((UINT)keysym, NULL, NULL, temp, NULL);
|
||||
return (char*)temp;
|
||||
}
|
||||
#endif
|
||||
#include "mt_queue.h"
|
||||
extern keyEvent event;
|
||||
extern MtQueue<keyEvent> g_ev_fifo;
|
||||
|
||||
/// g_key_status.press but with proper handling for analog buttons
|
||||
static void PressButton(u32 pad, u32 button)
|
||||
|
@ -76,7 +64,7 @@ static void PressButton(u32 pad, u32 button)
|
|||
|
||||
void UpdateKeyboardInput()
|
||||
{
|
||||
for (int pad = 0; pad < GAMEPAD_NUMBER; pad++)
|
||||
for (u32 pad = 0; pad < GAMEPAD_NUMBER; pad++)
|
||||
{
|
||||
const auto& map = g_conf.keysym_map[pad];
|
||||
// If we loop over all keys press/release based on current state,
|
||||
|
@ -135,7 +123,7 @@ void AnalyzeKeyEvent(keyEvent& evt)
|
|||
int pad = 0;
|
||||
int index = -1;
|
||||
|
||||
for (int cpad = 0; cpad < GAMEPAD_NUMBER; cpad++)
|
||||
for (u32 cpad = 0; cpad < GAMEPAD_NUMBER; cpad++)
|
||||
{
|
||||
int tmp_index = get_keyboard_key(cpad, key);
|
||||
if (tmp_index != -1)
|
||||
|
@ -321,73 +309,4 @@ bool PollForNewKeyboardKeys(u32& pkey)
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
#else
|
||||
LRESULT WINAPI PADwndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static bool lbutton = false, rbutton = false;
|
||||
for (int pad = 0; pad < GAMEPAD_NUMBER; ++pad)
|
||||
{
|
||||
g_key_status.keyboard_state_acces(pad);
|
||||
}
|
||||
|
||||
switch (msg)
|
||||
{
|
||||
case WM_KEYDOWN:
|
||||
if (lParam & 0x40000000)
|
||||
return TRUE;
|
||||
|
||||
for (int pad = 0; pad < GAMEPAD_NUMBER; ++pad)
|
||||
{
|
||||
for (int i = 0; i < MAX_KEYS; i++)
|
||||
{
|
||||
assert(0);
|
||||
#if 0
|
||||
if (wParam == get_key(pad, i)) {
|
||||
g_key_status.press(pad, i);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
event.evt = KEYPRESS;
|
||||
event.key = wParam;
|
||||
break;
|
||||
|
||||
case WM_KEYUP:
|
||||
for (int pad = 0; pad < GAMEPAD_NUMBER; ++pad)
|
||||
{
|
||||
for (int i = 0; i < MAX_KEYS; i++)
|
||||
{
|
||||
assert(0);
|
||||
#if 0
|
||||
if (wParam == get_key(pad, i)) {
|
||||
g_key_status.release(pad, i);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
event.evt = KEYRELEASE;
|
||||
event.key = wParam;
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
case WM_QUIT:
|
||||
event.evt = KEYPRESS;
|
||||
event.key = VK_ESCAPE;
|
||||
return GSwndProc(hWnd, msg, wParam, lParam);
|
||||
|
||||
default:
|
||||
return GSwndProc(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
for (int pad = 0; pad < GAMEPAD_NUMBER; ++pad)
|
||||
g_key_status.commit_status(pad);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -13,33 +13,32 @@
|
|||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __KEYBOARD_H__
|
||||
#define __KEYBOARD_H__
|
||||
#pragma once
|
||||
|
||||
#include "PAD.h"
|
||||
#include "Pcsx2Defs.h"
|
||||
#include "App.h"
|
||||
|
||||
#if defined(__unix__) || defined(__APPLE__)
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/keysym.h>
|
||||
|
||||
// x11 is dumb like that
|
||||
#undef DisableScreenSaver
|
||||
|
||||
extern void AnalyzeKeyEvent(keyEvent& evt);
|
||||
extern void UpdateKeyboardInput();
|
||||
extern bool PollForNewKeyboardKeys(u32& pkey);
|
||||
#ifndef __APPLE__
|
||||
#endif
|
||||
|
||||
#if defined(__unix__)
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
|
||||
extern Display* GSdsp;
|
||||
extern Window GSwin;
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
extern char* KeysymToChar(int keysym);
|
||||
extern WNDPROC GSwndProc;
|
||||
extern HWND GShwnd;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#elif defined(__APPLE__)
|
||||
#include <Carbon/Carbon.h>
|
||||
#endif
|
||||
|
|
|
@ -13,13 +13,12 @@
|
|||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "Global.h"
|
||||
#include "AppCoreThread.h"
|
||||
#include "GamePad.h"
|
||||
#include "PAD.h"
|
||||
#include "Device.h"
|
||||
#include "keyboard.h"
|
||||
#include "state_management.h"
|
||||
|
||||
#include <string.h>
|
||||
#include "wx_dialog/dialog.h"
|
||||
|
||||
#ifndef __APPLE__
|
||||
|
@ -55,27 +54,7 @@ s32 _PADopen(void* pDsp)
|
|||
|
||||
void _PADclose()
|
||||
{
|
||||
s_vgamePad.clear();
|
||||
}
|
||||
|
||||
void PollForJoystickInput(int cpad)
|
||||
{
|
||||
int index = GamePad::uid_to_index(cpad);
|
||||
if (index < 0)
|
||||
return;
|
||||
|
||||
auto& gamePad = s_vgamePad[index];
|
||||
|
||||
gamePad->UpdateGamePadState();
|
||||
|
||||
for (int i = 0; i < MAX_KEYS; i++)
|
||||
{
|
||||
s32 value = gamePad->GetInput((gamePadValues)i);
|
||||
if (value != 0)
|
||||
g_key_status.press(cpad, i, value);
|
||||
else
|
||||
g_key_status.release(cpad, i);
|
||||
}
|
||||
device_manager->devices.clear();
|
||||
}
|
||||
|
||||
void PADupdate(int pad)
|
||||
|
@ -95,26 +74,7 @@ void PADupdate(int pad)
|
|||
|
||||
// Actually PADupdate is always call with pad == 0. So you need to update both
|
||||
// pads -- Gregory
|
||||
|
||||
// Poll keyboard/mouse event. There is currently no way to separate pad0 from pad1 event.
|
||||
// So we will populate both pad in the same time
|
||||
for (int cpad = 0; cpad < GAMEPAD_NUMBER; cpad++)
|
||||
{
|
||||
g_key_status.keyboard_state_acces(cpad);
|
||||
}
|
||||
UpdateKeyboardInput();
|
||||
|
||||
// Get joystick state + Commit
|
||||
for (int cpad = 0; cpad < GAMEPAD_NUMBER; cpad++)
|
||||
{
|
||||
g_key_status.joystick_state_acces(cpad);
|
||||
|
||||
PollForJoystickInput(cpad);
|
||||
|
||||
g_key_status.commit_status(cpad);
|
||||
}
|
||||
|
||||
Pad::rumble_all();
|
||||
device_manager->Update();
|
||||
}
|
||||
|
||||
void PADconfigure()
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*/
|
||||
|
||||
#include "state_management.h"
|
||||
#include "GamePad.h"
|
||||
#include "Device.h"
|
||||
|
||||
// Typical packet response on the bus
|
||||
static const u8 ConfigExit[7] = {0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
|
@ -112,7 +112,7 @@ void Pad::rumble(unsigned port)
|
|||
{
|
||||
currentVibrate[motor] = nextVibrate[motor];
|
||||
|
||||
GamePad::DoRumble(motor, port);
|
||||
Device::DoRumble(motor, port);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,12 +13,29 @@
|
|||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "PAD.h"
|
||||
#pragma once
|
||||
|
||||
#include "Global.h"
|
||||
|
||||
#define MODE_DIGITAL 0x41
|
||||
#define MODE_ANALOG 0x73
|
||||
#define MODE_DS2_NATIVE 0x79
|
||||
|
||||
enum PadCommands
|
||||
{
|
||||
CMD_SET_VREF_PARAM = 0x40,
|
||||
CMD_QUERY_DS2_ANALOG_MODE = 0x41,
|
||||
CMD_READ_DATA_AND_VIBRATE = 0x42,
|
||||
CMD_CONFIG_MODE = 0x43,
|
||||
CMD_SET_MODE_AND_LOCK = 0x44,
|
||||
CMD_QUERY_MODEL_AND_MODE = 0x45,
|
||||
CMD_QUERY_ACT = 0x46, // ??
|
||||
CMD_QUERY_COMB = 0x47, // ??
|
||||
CMD_QUERY_MODE = 0x4C, // QUERY_MODE ??
|
||||
CMD_VIBRATION_TOGGLE = 0x4D,
|
||||
CMD_SET_DS2_NATIVE_MODE = 0x4F // SET_DS2_NATIVE_MODE
|
||||
};
|
||||
|
||||
// The state of the PS2 bus
|
||||
struct QueryInfo
|
||||
{
|
||||
|
|
|
@ -17,14 +17,14 @@
|
|||
|
||||
GamepadConfiguration::GamepadConfiguration(int pad, wxWindow* parent)
|
||||
: wxDialog(parent, wxID_ANY, _T("Gamepad"), wxDefaultPosition, wxDefaultSize,
|
||||
wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN)
|
||||
wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN)
|
||||
{
|
||||
m_pad_id = pad;
|
||||
|
||||
wxBoxSizer* gamepad_box = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
wxArrayString choices;
|
||||
for (const auto& j : s_vgamePad)
|
||||
for (const auto& j : device_manager->devices)
|
||||
{
|
||||
choices.Add(j->GetName());
|
||||
}
|
||||
|
@ -34,11 +34,11 @@ GamepadConfiguration::GamepadConfiguration(int pad, wxWindow* parent)
|
|||
|
||||
wxStaticBoxSizer* rumble_box = new wxStaticBoxSizer(wxVERTICAL, this, wxT("Rumble intensity"));
|
||||
m_sl_rumble_intensity = new wxSlider(this, rumble_slider_id, 0, 0, 0x7FFF, wxDefaultPosition, wxDefaultSize,
|
||||
wxSL_HORIZONTAL | wxSL_LABELS | wxSL_BOTTOM);
|
||||
wxSL_HORIZONTAL | wxSL_LABELS | wxSL_BOTTOM);
|
||||
|
||||
wxStaticBoxSizer* joy_box = new wxStaticBoxSizer(wxVERTICAL, this, wxT("Joystick sensibility"));
|
||||
m_sl_joystick_sensibility = new wxSlider(this, joy_slider_id, 0, 0, 200, wxDefaultPosition, wxDefaultSize,
|
||||
wxSL_HORIZONTAL | wxSL_LABELS | wxSL_BOTTOM);
|
||||
wxSL_HORIZONTAL | wxSL_LABELS | wxSL_BOTTOM);
|
||||
|
||||
gamepad_box->Add(m_joy_map, wxSizerFlags().Expand().Border(wxALL, 5));
|
||||
gamepad_box->Add(m_cb_rumble, wxSizerFlags().Expand());
|
||||
|
@ -70,9 +70,9 @@ void GamepadConfiguration::InitGamepadConfiguration()
|
|||
* Check if there exist at least one pad available
|
||||
* if the pad id is 0, you need at least 1 gamepad connected,
|
||||
* if the pad id is 1, you need at least 2 gamepads connected,
|
||||
* Prevent to use a none initialized value on s_vgamePad (core dump)
|
||||
* Prevent to use a non-initialized value (core dump)
|
||||
*/
|
||||
if (s_vgamePad.size() >= m_pad_id + 1)
|
||||
if (device_manager->devices.size() >= m_pad_id + 1)
|
||||
{
|
||||
/*
|
||||
* Determine if the device can use rumble
|
||||
|
@ -81,7 +81,7 @@ void GamepadConfiguration::InitGamepadConfiguration()
|
|||
*/
|
||||
|
||||
// Bad idea. Some connected devices might support rumble but not all connected devices.
|
||||
// if (!s_vgamePad[m_pad_id]->TestForce(0.001f)) {
|
||||
// if (!device_manager->devices[m_pad_id]->TestForce(0.001f)) {
|
||||
// wxMessageBox(L"Rumble is not available for your device.");
|
||||
// m_cb_rumble->Disable(); // disable the rumble checkbox
|
||||
// m_sl_rumble_intensity->Disable(); // disable the rumble intensity slider
|
||||
|
@ -114,7 +114,7 @@ void GamepadConfiguration::OnSliderReleased(wxCommandEvent& event)
|
|||
|
||||
// convert in a float value between 0 and 1, and run rumble feedback.
|
||||
// 0 to 1 scales to 0x0 to 0x7FFF
|
||||
s_vgamePad[m_joy_map->GetSelection()]->TestForce(m_sl_rumble_intensity->GetValue() / (float)0x7FFF);
|
||||
device_manager->devices[m_pad_id]->TestForce(m_sl_rumble_intensity->GetValue() / (float)0x7FFF);
|
||||
}
|
||||
else if (sl_id == joy_slider_id)
|
||||
{
|
||||
|
@ -135,7 +135,7 @@ void GamepadConfiguration::OnCheckboxChange(wxCommandEvent& event)
|
|||
g_conf.pad_options[m_pad_id].forcefeedback = (m_cb_rumble->GetValue()) ? (u32)1 : (u32)0;
|
||||
if (m_cb_rumble->GetValue())
|
||||
{
|
||||
s_vgamePad[m_joy_map->GetSelection()]->TestForce();
|
||||
device_manager->devices[m_pad_id]->TestForce();
|
||||
m_sl_rumble_intensity->Enable();
|
||||
}
|
||||
else
|
||||
|
@ -154,7 +154,7 @@ void GamepadConfiguration::OnChoiceChange(wxCommandEvent& event)
|
|||
int id = choice_tmp->GetSelection();
|
||||
if (id != wxNOT_FOUND)
|
||||
{
|
||||
g_conf.set_joy_uid(m_pad_id, GamePad::index_to_uid(id));
|
||||
g_conf.set_joy_uid(m_pad_id, Device::index_to_uid(id));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -170,7 +170,7 @@ void GamepadConfiguration::repopulate()
|
|||
m_sl_rumble_intensity->SetValue(g_conf.get_ff_intensity());
|
||||
m_sl_joystick_sensibility->SetValue(g_conf.get_sensibility());
|
||||
|
||||
u32 joyid = GamePad::uid_to_index(m_pad_id);
|
||||
u32 joyid = Device::uid_to_index(m_pad_id);
|
||||
if (joyid < m_joy_map->GetCount() && !m_joy_map->IsEmpty())
|
||||
m_joy_map->SetSelection(joyid);
|
||||
|
||||
|
|
|
@ -15,14 +15,11 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __GAMEPADCONFIGURATION_H__
|
||||
#define __GAMEPADCONFIGURATION_H__
|
||||
|
||||
#include <wx/wx.h>
|
||||
|
||||
#include "PAD/Linux/GamePad.h"
|
||||
#include "PAD/Linux/keyboard.h"
|
||||
#include "PAD/Linux/PAD.h"
|
||||
#include "../Device.h"
|
||||
#include "../keyboard.h"
|
||||
#include "../Global.h"
|
||||
|
||||
static const s32 rumble_slider_id = wxID_HIGHEST + 200 + 1;
|
||||
static const s32 joy_slider_id = wxID_HIGHEST + 200 + 2;
|
||||
|
@ -48,5 +45,3 @@ public:
|
|||
GamepadConfiguration(int, wxWindow*);
|
||||
void InitGamepadConfiguration();
|
||||
};
|
||||
|
||||
#endif // __GAMEPADCONFIGURATION_H__
|
||||
|
|
|
@ -22,7 +22,7 @@ static const s32 joy_check_id = wxID_HIGHEST + 100 + 3;
|
|||
// Constructor of JoystickConfiguration
|
||||
JoystickConfiguration::JoystickConfiguration(int pad, bool left, wxWindow* parent)
|
||||
: wxDialog(parent, wxID_ANY, _T("Joystick configuration"), wxDefaultPosition, wxDefaultSize,
|
||||
wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN)
|
||||
wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN)
|
||||
{
|
||||
m_pad_id = pad;
|
||||
m_isForLeftJoystick = left;
|
||||
|
@ -62,11 +62,11 @@ void JoystickConfiguration::InitJoystickConfiguration()
|
|||
* Check if there exist at least one pad available
|
||||
* if the pad id is 0, you need at least 1 gamepad connected,
|
||||
* if the pad id is 1, you need at least 2 gamepads connected,
|
||||
* Prevent to use a none initialized value on s_vgamePad (core dump)
|
||||
* Prevent using a non-initialized value (core dump)
|
||||
*/
|
||||
if (s_vgamePad.size() < m_pad_id + 1)
|
||||
if (device_manager->devices.size() < m_pad_id + 1)
|
||||
{
|
||||
if (s_vgamePad.empty())
|
||||
if (device_manager->devices.empty())
|
||||
wxMessageBox(L"No gamepad detected.");
|
||||
else
|
||||
wxMessageBox(L"No second gamepad detected.");
|
||||
|
|
|
@ -15,14 +15,11 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __JOYSTICKCONFIGURATION_H__
|
||||
#define __JOYSTICKCONFIGURATION_H__
|
||||
|
||||
#include <wx/wx.h>
|
||||
|
||||
#include "PAD/Linux/GamePad.h"
|
||||
#include "PAD/Linux/keyboard.h"
|
||||
#include "PAD/Linux/PAD.h"
|
||||
#include "../Global.h"
|
||||
#include "../Device.h"
|
||||
#include "../keyboard.h"
|
||||
|
||||
class JoystickConfiguration : public wxDialog
|
||||
{
|
||||
|
@ -43,5 +40,3 @@ public:
|
|||
JoystickConfiguration(int, bool, wxWindow*);
|
||||
void InitJoystickConfiguration();
|
||||
};
|
||||
|
||||
#endif // __JOYSTICKCONFIGURATION_H__
|
||||
|
|
|
@ -36,9 +36,10 @@ static std::string KeyName(int pad, int key, int keysym)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// clang-format off
|
||||
switch (keysym)
|
||||
{
|
||||
// clang-format off
|
||||
case kVK_ANSI_A: return "A";
|
||||
case kVK_ANSI_B: return "B";
|
||||
case kVK_ANSI_C: return "C";
|
||||
|
@ -159,8 +160,8 @@ static std::string KeyName(int pad, int key, int keysym)
|
|||
case kVK_JIS_Eisu: return "英数";
|
||||
case kVK_JIS_Kana: return "かな";
|
||||
default: return "Key " + std::to_string(keysym);
|
||||
// clang-format on
|
||||
}
|
||||
// clang-format on
|
||||
}
|
||||
#else
|
||||
static std::string KeyName(int pad, int key, int keysym)
|
||||
|
@ -191,7 +192,7 @@ static std::string KeyName(int pad, int key, int keysym)
|
|||
PADDialog::PADDialog()
|
||||
: wxDialog(NULL, // Parent
|
||||
wxID_ANY, // ID
|
||||
_T("GamePad configuration"), // Title
|
||||
_T("GamePad configuration"), // Title
|
||||
wxDefaultPosition, // Position
|
||||
wxSize(DEFAULT_WIDTH, DEFAULT_HEIGHT), // Width + Lenght
|
||||
// Style
|
||||
|
@ -404,7 +405,7 @@ PADDialog::PADDialog()
|
|||
|
||||
// create a new Notebook
|
||||
m_tab_gamepad = new wxNotebook(this, wxID_ANY);
|
||||
for (int i = 0; i < GAMEPAD_NUMBER; ++i)
|
||||
for (u32 i = 0; i < GAMEPAD_NUMBER; ++i)
|
||||
{
|
||||
// Tabs panels
|
||||
m_pan_tabs[i] = new opPanel(
|
||||
|
@ -449,7 +450,7 @@ PADDialog::PADDialog()
|
|||
|
||||
Bind(wxEVT_BUTTON, &PADDialog::OnButtonClicked, this);
|
||||
|
||||
for (int i = 0; i < GAMEPAD_NUMBER; ++i)
|
||||
for (u32 i = 0; i < GAMEPAD_NUMBER; ++i)
|
||||
{
|
||||
for (int j = 0; j < NB_IMG; ++j)
|
||||
{
|
||||
|
@ -460,9 +461,9 @@ PADDialog::PADDialog()
|
|||
|
||||
void PADDialog::InitDialog()
|
||||
{
|
||||
GamePad::EnumerateGamePads(s_vgamePad); // activate gamepads
|
||||
PADLoadConfig(); // Load configuration from the ini file
|
||||
repopulate(); // Set label and fit simulated key array
|
||||
EnumerateDevices(); // activate gamepads
|
||||
PADLoadConfig(); // Load configuration from the ini file
|
||||
repopulate(); // Set label and fit simulated key array
|
||||
}
|
||||
|
||||
/****************************************/
|
||||
|
@ -504,7 +505,7 @@ void PADDialog::OnButtonClicked(wxCommandEvent& event)
|
|||
}
|
||||
else if (bt_id == Set_all)
|
||||
{ // If the button ID is equals to the Set_all button ID
|
||||
for (int i = 0; i < MAX_KEYS; ++i)
|
||||
for (u32 i = 0; i < MAX_KEYS; ++i)
|
||||
{
|
||||
bt_tmp = m_bt_gamepad[gamepad_id][i];
|
||||
switch (i)
|
||||
|
@ -632,7 +633,7 @@ void PADDialog::clear_key(int pad, int key)
|
|||
// Set button values
|
||||
void PADDialog::repopulate()
|
||||
{
|
||||
for (int gamepad_id = 0; gamepad_id < GAMEPAD_NUMBER; ++gamepad_id)
|
||||
for (u32 gamepad_id = 0; gamepad_id < GAMEPAD_NUMBER; ++gamepad_id)
|
||||
{
|
||||
// keyboard/mouse key
|
||||
for (const auto& it : g_conf.keysym_map[gamepad_id])
|
||||
|
|
|
@ -15,9 +15,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __DIALOG_H__
|
||||
#define __DIALOG_H__
|
||||
|
||||
#include <wx/wx.h>
|
||||
#include <wx/notebook.h>
|
||||
#include <wx/frame.h>
|
||||
|
@ -28,12 +25,11 @@
|
|||
#include <wx/graphics.h>
|
||||
#include <wx/timer.h>
|
||||
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
#include "PAD/Linux/GamePad.h"
|
||||
#include "PAD/Linux/keyboard.h"
|
||||
#include "PAD/Linux/PAD.h"
|
||||
#include "../InputManager.h"
|
||||
#include "../keyboard.h"
|
||||
#include "../Global.h"
|
||||
#include "opPanel.h"
|
||||
|
||||
#include "GamepadConfiguration.h"
|
||||
|
@ -41,7 +37,7 @@
|
|||
|
||||
// Allow to found quickly button id
|
||||
// e.g L2 → 0, triangle → 4, ...
|
||||
// see PAD.h for more details about gamepad button id
|
||||
// see Global.h for more details about gamepad button id
|
||||
|
||||
enum gui_buttons
|
||||
{
|
||||
|
@ -91,5 +87,3 @@ public:
|
|||
};
|
||||
|
||||
extern void DisplayDialog(); // Main function
|
||||
|
||||
#endif // __DIALOG_H__
|
||||
|
|
|
@ -15,9 +15,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef __OPPANEL_H__
|
||||
#define __OPPANEL_H__
|
||||
|
||||
#include <wx/wx.h>
|
||||
|
||||
#include "EmbeddedImage.h"
|
||||
|
@ -70,5 +67,3 @@ public:
|
|||
void ShowImg(int);
|
||||
void MoveJoystick(int, int);
|
||||
};
|
||||
|
||||
#endif // __OPPANEL_H__
|
||||
|
|
Loading…
Reference in New Issue