mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-06 06:51:26 +12:00
remove old config compat, do not save config on reset
This commit is contained in:
parent
861b46bf83
commit
d77a48c88c
4 changed files with 43 additions and 144 deletions
|
@ -159,20 +159,6 @@ static bool sdl_joysticks_equal(std::map<u64, std::vector<SDL_Joystick*>>& left,
|
|||
return true;
|
||||
}
|
||||
|
||||
static std::map<u64, std::vector<SDL_Joystick*>> get_sdl_joysticks_v1(std::map<u64, std::vector<SDL_Joystick*>>& v2)
|
||||
{
|
||||
std::map<u64, std::vector<SDL_Joystick*>> v1;
|
||||
|
||||
for (const auto& [v2_key, joysticks] : v2)
|
||||
{
|
||||
const u64 v1_key = v2_key & 0xFFFFFFFF;
|
||||
// this only works with wheels that worked with v1, and that's okay, Fanatec users need to re-map anyway
|
||||
v1[v1_key] = joysticks;
|
||||
}
|
||||
|
||||
return v1;
|
||||
}
|
||||
|
||||
static inline logitech_g27_sdl_mapping get_runtime_mapping()
|
||||
{
|
||||
logitech_g27_sdl_mapping mapping {};
|
||||
|
@ -280,11 +266,7 @@ void usb_device_logitech_g27::sdl_refresh()
|
|||
joysticks_of_type->second.push_back(cur_joystick);
|
||||
}
|
||||
|
||||
u64 joystick_type_id_for_ffb = joystick_type_id;
|
||||
if (emulated_g27_device_type_id::is_v1(ffb_device_type_id))
|
||||
joystick_type_id_for_ffb = joystick_type_id & 0xFFFFFFFF;
|
||||
|
||||
if (joystick_type_id_for_ffb == ffb_device_type_id && new_haptic_handle == nullptr)
|
||||
if (joystick_type_id == ffb_device_type_id && new_haptic_handle == nullptr)
|
||||
{
|
||||
SDL_Haptic* cur_haptic = SDL_OpenHapticFromJoystick(cur_joystick);
|
||||
if (cur_haptic == nullptr)
|
||||
|
@ -297,11 +279,7 @@ void usb_device_logitech_g27::sdl_refresh()
|
|||
}
|
||||
}
|
||||
|
||||
u64 joystick_type_id_for_led = joystick_type_id;
|
||||
if (emulated_g27_device_type_id::is_v1(led_device_type_id))
|
||||
joystick_type_id_for_led = joystick_type_id & 0xFFFFFFFF;
|
||||
|
||||
if (joystick_type_id_for_led == led_device_type_id && new_led_joystick_handle == nullptr)
|
||||
if (joystick_type_id == led_device_type_id && new_led_joystick_handle == nullptr)
|
||||
{
|
||||
new_led_joystick_handle = cur_joystick;
|
||||
}
|
||||
|
@ -346,7 +324,6 @@ void usb_device_logitech_g27::sdl_refresh()
|
|||
// finally clear out previous joystick handles
|
||||
clear_sdl_joysticks(m_joysticks);
|
||||
m_joysticks = new_joysticks;
|
||||
m_joysticks_v1 = get_sdl_joysticks_v1(new_joysticks);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -604,7 +581,7 @@ static s16 fetch_sdl_as_axis(SDL_Joystick* joystick, const sdl_mapping& mapping)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static s16 fetch_sdl_axis_avg(std::map<u64, std::vector<SDL_Joystick*>>& joysticks, std::map<u64, std::vector<SDL_Joystick*>>& joysticks_v1, const sdl_mapping& mapping)
|
||||
static s16 fetch_sdl_axis_avg(std::map<u64, std::vector<SDL_Joystick*>>& joysticks, const sdl_mapping& mapping)
|
||||
{
|
||||
constexpr s16 MAX = 0x7FFF;
|
||||
constexpr s16 MIN = -0x8000;
|
||||
|
@ -612,9 +589,7 @@ static s16 fetch_sdl_axis_avg(std::map<u64, std::vector<SDL_Joystick*>>& joystic
|
|||
auto joysticks_of_type = joysticks.find(mapping.device_type_id);
|
||||
if (joysticks_of_type == joysticks.end())
|
||||
{
|
||||
joysticks_of_type = joysticks_v1.find(mapping.device_type_id);
|
||||
if (joysticks_of_type == joysticks_v1.end())
|
||||
return mapping.reverse ? MAX : MIN;
|
||||
return mapping.reverse ? MAX : MIN;
|
||||
}
|
||||
|
||||
if (joysticks_of_type->second.empty())
|
||||
|
@ -632,14 +607,12 @@ static s16 fetch_sdl_axis_avg(std::map<u64, std::vector<SDL_Joystick*>>& joystic
|
|||
return std::clamp<s16>(sdl_joysticks_total_value / static_cast<s32>(joysticks_of_type->second.size()), MIN, MAX);
|
||||
}
|
||||
|
||||
static bool sdl_to_logitech_g27_button(std::map<u64, std::vector<SDL_Joystick*>>& joysticks, std::map<u64, std::vector<SDL_Joystick*>>& joysticks_v1, const sdl_mapping& mapping)
|
||||
static bool sdl_to_logitech_g27_button(std::map<u64, std::vector<SDL_Joystick*>>& joysticks, const sdl_mapping& mapping)
|
||||
{
|
||||
auto joysticks_of_type = joysticks.find(mapping.device_type_id);
|
||||
if (joysticks_of_type == joysticks.end())
|
||||
{
|
||||
joysticks_of_type = joysticks_v1.find(mapping.device_type_id);
|
||||
if (joysticks_of_type == joysticks_v1.end())
|
||||
return mapping.reverse;
|
||||
return mapping.reverse;
|
||||
}
|
||||
|
||||
if (joysticks_of_type->second.empty())
|
||||
|
@ -655,16 +628,16 @@ static bool sdl_to_logitech_g27_button(std::map<u64, std::vector<SDL_Joystick*>>
|
|||
return pressed;
|
||||
}
|
||||
|
||||
static u16 sdl_to_logitech_g27_steering(std::map<u64, std::vector<SDL_Joystick*>>& joysticks, std::map<u64, std::vector<SDL_Joystick*>>& joysticks_v1, const sdl_mapping& mapping)
|
||||
static u16 sdl_to_logitech_g27_steering(std::map<u64, std::vector<SDL_Joystick*>>& joysticks, const sdl_mapping& mapping)
|
||||
{
|
||||
const s16 avg = fetch_sdl_axis_avg(joysticks, joysticks_v1, mapping);
|
||||
const s16 avg = fetch_sdl_axis_avg(joysticks, mapping);
|
||||
const u16 unsigned_avg = avg + 0x8000;
|
||||
return unsigned_avg * (0xFFFF >> 2) / 0xFFFF;
|
||||
}
|
||||
|
||||
static u8 sdl_to_logitech_g27_pedal(std::map<u64, std::vector<SDL_Joystick*>>& joysticks, std::map<u64, std::vector<SDL_Joystick*>>& joysticks_v1, const sdl_mapping& mapping)
|
||||
static u8 sdl_to_logitech_g27_pedal(std::map<u64, std::vector<SDL_Joystick*>>& joysticks, const sdl_mapping& mapping)
|
||||
{
|
||||
const s16 avg = fetch_sdl_axis_avg(joysticks, joysticks_v1, mapping);
|
||||
const s16 avg = fetch_sdl_axis_avg(joysticks, mapping);
|
||||
const u16 unsigned_avg = avg + 0x8000;
|
||||
return unsigned_avg * 0xFF / 0xFFFF;
|
||||
}
|
||||
|
@ -704,44 +677,44 @@ void usb_device_logitech_g27::interrupt_transfer(u32 buf_size, u8* buf, u32 endp
|
|||
|
||||
// Fetch input states from SDL
|
||||
m_sdl_handles_mutex.lock();
|
||||
const u16 steering = sdl_to_logitech_g27_steering(m_joysticks, m_joysticks_v1, m_mapping.steering);
|
||||
const u8 throttle = sdl_to_logitech_g27_pedal(m_joysticks, m_joysticks_v1, m_mapping.throttle);
|
||||
const u8 brake = sdl_to_logitech_g27_pedal(m_joysticks, m_joysticks_v1, m_mapping.brake);
|
||||
const u8 clutch = sdl_to_logitech_g27_pedal(m_joysticks, m_joysticks_v1, m_mapping.clutch);
|
||||
const bool shift_up = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.shift_up);
|
||||
const bool shift_down = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.shift_down);
|
||||
const u16 steering = sdl_to_logitech_g27_steering(m_joysticks, m_mapping.steering);
|
||||
const u8 throttle = sdl_to_logitech_g27_pedal(m_joysticks, m_mapping.throttle);
|
||||
const u8 brake = sdl_to_logitech_g27_pedal(m_joysticks, m_mapping.brake);
|
||||
const u8 clutch = sdl_to_logitech_g27_pedal(m_joysticks, m_mapping.clutch);
|
||||
const bool shift_up = sdl_to_logitech_g27_button(m_joysticks, m_mapping.shift_up);
|
||||
const bool shift_down = sdl_to_logitech_g27_button(m_joysticks, m_mapping.shift_down);
|
||||
|
||||
const bool up = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.up);
|
||||
const bool down = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.down);
|
||||
const bool left = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.left);
|
||||
const bool right = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.right);
|
||||
const bool up = sdl_to_logitech_g27_button(m_joysticks, m_mapping.up);
|
||||
const bool down = sdl_to_logitech_g27_button(m_joysticks, m_mapping.down);
|
||||
const bool left = sdl_to_logitech_g27_button(m_joysticks, m_mapping.left);
|
||||
const bool right = sdl_to_logitech_g27_button(m_joysticks, m_mapping.right);
|
||||
|
||||
const bool triangle = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.triangle);
|
||||
const bool cross = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.cross);
|
||||
const bool square = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.square);
|
||||
const bool circle = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.circle);
|
||||
const bool triangle = sdl_to_logitech_g27_button(m_joysticks, m_mapping.triangle);
|
||||
const bool cross = sdl_to_logitech_g27_button(m_joysticks, m_mapping.cross);
|
||||
const bool square = sdl_to_logitech_g27_button(m_joysticks, m_mapping.square);
|
||||
const bool circle = sdl_to_logitech_g27_button(m_joysticks, m_mapping.circle);
|
||||
|
||||
const bool l2 = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.l2);
|
||||
const bool l3 = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.l3);
|
||||
const bool r2 = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.r2);
|
||||
const bool r3 = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.r3);
|
||||
const bool l2 = sdl_to_logitech_g27_button(m_joysticks, m_mapping.l2);
|
||||
const bool l3 = sdl_to_logitech_g27_button(m_joysticks, m_mapping.l3);
|
||||
const bool r2 = sdl_to_logitech_g27_button(m_joysticks, m_mapping.r2);
|
||||
const bool r3 = sdl_to_logitech_g27_button(m_joysticks, m_mapping.r3);
|
||||
|
||||
const bool plus = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.plus);
|
||||
const bool minus = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.minus);
|
||||
const bool plus = sdl_to_logitech_g27_button(m_joysticks, m_mapping.plus);
|
||||
const bool minus = sdl_to_logitech_g27_button(m_joysticks, m_mapping.minus);
|
||||
|
||||
const bool dial_clockwise = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.dial_clockwise);
|
||||
const bool dial_anticlockwise = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.dial_anticlockwise);
|
||||
const bool dial_clockwise = sdl_to_logitech_g27_button(m_joysticks, m_mapping.dial_clockwise);
|
||||
const bool dial_anticlockwise = sdl_to_logitech_g27_button(m_joysticks, m_mapping.dial_anticlockwise);
|
||||
|
||||
const bool select = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.select);
|
||||
const bool pause = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.pause);
|
||||
const bool select = sdl_to_logitech_g27_button(m_joysticks, m_mapping.select);
|
||||
const bool pause = sdl_to_logitech_g27_button(m_joysticks, m_mapping.pause);
|
||||
|
||||
const bool shifter_1 = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.shifter_1);
|
||||
const bool shifter_2 = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.shifter_2);
|
||||
const bool shifter_3 = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.shifter_3);
|
||||
const bool shifter_4 = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.shifter_4);
|
||||
const bool shifter_5 = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.shifter_5);
|
||||
const bool shifter_6 = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.shifter_6);
|
||||
const bool shifter_r = sdl_to_logitech_g27_button(m_joysticks, m_joysticks_v1, m_mapping.shifter_r);
|
||||
const bool shifter_1 = sdl_to_logitech_g27_button(m_joysticks, m_mapping.shifter_1);
|
||||
const bool shifter_2 = sdl_to_logitech_g27_button(m_joysticks, m_mapping.shifter_2);
|
||||
const bool shifter_3 = sdl_to_logitech_g27_button(m_joysticks, m_mapping.shifter_3);
|
||||
const bool shifter_4 = sdl_to_logitech_g27_button(m_joysticks, m_mapping.shifter_4);
|
||||
const bool shifter_5 = sdl_to_logitech_g27_button(m_joysticks, m_mapping.shifter_5);
|
||||
const bool shifter_6 = sdl_to_logitech_g27_button(m_joysticks, m_mapping.shifter_6);
|
||||
const bool shifter_r = sdl_to_logitech_g27_button(m_joysticks, m_mapping.shifter_r);
|
||||
m_sdl_handles_mutex.unlock();
|
||||
|
||||
// populate buffer
|
||||
|
|
|
@ -121,7 +121,6 @@ private:
|
|||
SDL_Joystick* m_led_joystick_handle = nullptr;
|
||||
SDL_Haptic* m_haptic_handle = nullptr;
|
||||
std::map<u64, std::vector<SDL_Joystick*>> m_joysticks;
|
||||
std::map<u64, std::vector<SDL_Joystick*>> m_joysticks_v1;
|
||||
bool m_fixed_loop = false;
|
||||
u16 m_wheel_range = 200;
|
||||
std::array<logitech_g27_ffb_slot, 4> m_effect_slots {};
|
||||
|
|
|
@ -40,30 +40,6 @@ struct emulated_g27_device_type_id
|
|||
value |= (num_buttons & ((1 << 10) - 1)) << 52;
|
||||
return value;
|
||||
}
|
||||
|
||||
bool is_v1()
|
||||
{
|
||||
return !num_axes && !num_hats && !num_buttons;
|
||||
}
|
||||
|
||||
static emulated_g27_device_type_id from_u64(u64 data)
|
||||
{
|
||||
const emulated_g27_device_type_id id =
|
||||
{
|
||||
.product_id = static_cast<u64>(data & 0xFFFF),
|
||||
.vendor_id = static_cast<u64>((data >> 16) & 0xFFFF),
|
||||
.num_axes = static_cast<u64>((data >> 32) & ((1 << 10) - 1)),
|
||||
.num_hats = static_cast<u64>((data >> 42) & ((1 << 10) - 1)),
|
||||
.num_buttons = static_cast<u64>((data >> 52) & ((1 << 10) - 1))
|
||||
};
|
||||
return id;
|
||||
}
|
||||
|
||||
static bool is_v1(u64 data)
|
||||
{
|
||||
emulated_g27_device_type_id id = from_u64(data);
|
||||
return id.is_v1();
|
||||
}
|
||||
};
|
||||
|
||||
struct emulated_logitech_g27_mapping : cfg::node
|
||||
|
|
|
@ -525,46 +525,6 @@ void emulated_logitech_g27_settings_dialog::save_ui_state_to_config()
|
|||
}
|
||||
}
|
||||
|
||||
static void migrate_device_type_id(emulated_g27_device_type_id& device_type_id_struct)
|
||||
{
|
||||
if (!device_type_id_struct.is_v1())
|
||||
return;
|
||||
|
||||
sdl_instance::get_instance().pump_events();
|
||||
int joystick_count = 0;
|
||||
SDL_JoystickID* joystick_ids = SDL_GetJoysticks(&joystick_count);
|
||||
|
||||
if (!joystick_ids)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < joystick_count; i++)
|
||||
{
|
||||
SDL_Joystick* cur_joystick = SDL_OpenJoystick(joystick_ids[i]);
|
||||
if (!cur_joystick)
|
||||
continue;
|
||||
|
||||
const u16 vendor_id = SDL_GetJoystickVendor(cur_joystick);
|
||||
const u16 product_id = SDL_GetJoystickProduct(cur_joystick);
|
||||
if (vendor_id == device_type_id_struct.vendor_id && product_id == device_type_id_struct.product_id)
|
||||
{
|
||||
device_type_id_struct.num_axes = SDL_GetNumJoystickAxes(cur_joystick);
|
||||
device_type_id_struct.num_hats = SDL_GetNumJoystickHats(cur_joystick);
|
||||
device_type_id_struct.num_buttons = SDL_GetNumJoystickButtons(cur_joystick);
|
||||
SDL_CloseJoystick(cur_joystick);
|
||||
break;
|
||||
}
|
||||
SDL_CloseJoystick(cur_joystick);
|
||||
}
|
||||
SDL_free(joystick_ids);
|
||||
}
|
||||
|
||||
static u64 migrate_device_type_id(u64 old_id)
|
||||
{
|
||||
emulated_g27_device_type_id old_id_struct = emulated_g27_device_type_id::from_u64(old_id);
|
||||
migrate_device_type_id(old_id_struct);
|
||||
return old_id_struct.as_u64();
|
||||
}
|
||||
|
||||
void emulated_logitech_g27_settings_dialog::load_ui_state_from_config()
|
||||
{
|
||||
const auto load_mapping = [this](const emulated_logitech_g27_mapping& mapping, Mapping* ui_mapping, mapping_device_choice device_choice)
|
||||
|
@ -579,18 +539,10 @@ void emulated_logitech_g27_settings_dialog::load_ui_state_from_config()
|
|||
.positive_axis = false
|
||||
};
|
||||
|
||||
if (m_sdl_initialized)
|
||||
m.device_type_id = migrate_device_type_id(m.device_type_id);
|
||||
|
||||
ui_mapping->set_mapping(m);
|
||||
|
||||
u64 ffb_device_type_id = g_cfg_logitech_g27.ffb_device_type_id.get();
|
||||
u64 led_device_type_id = g_cfg_logitech_g27.led_device_type_id.get();
|
||||
if (m_sdl_initialized)
|
||||
{
|
||||
ffb_device_type_id = migrate_device_type_id(ffb_device_type_id);
|
||||
led_device_type_id = migrate_device_type_id(led_device_type_id);
|
||||
}
|
||||
const u64 ffb_device_type_id = g_cfg_logitech_g27.ffb_device_type_id.get();
|
||||
const u64 led_device_type_id = g_cfg_logitech_g27.led_device_type_id.get();
|
||||
|
||||
if (ffb_device_type_id == m.device_type_id && m_ffb_device->get_device_choice() == mapping_device_choice::NONE)
|
||||
{
|
||||
|
@ -682,7 +634,6 @@ emulated_logitech_g27_settings_dialog::emulated_logitech_g27_settings_dialog(QWi
|
|||
if (QMessageBox::question(this, tr("Confirm Reset"), tr("Reset all?")) != QMessageBox::Yes)
|
||||
return;
|
||||
g_cfg_logitech_g27.reset();
|
||||
g_cfg_logitech_g27.save();
|
||||
load_ui_state_from_config();
|
||||
}
|
||||
else if (button == buttons->button(QDialogButtonBox::Cancel))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue