diff --git a/rpcs3/Emu/Io/LogitechG27.cpp b/rpcs3/Emu/Io/LogitechG27.cpp index 3be192382c..bf894e2b9e 100644 --- a/rpcs3/Emu/Io/LogitechG27.cpp +++ b/rpcs3/Emu/Io/LogitechG27.cpp @@ -159,20 +159,6 @@ static bool sdl_joysticks_equal(std::map>& left, return true; } -static std::map> get_sdl_joysticks_v1(std::map>& v2) -{ - std::map> 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>& joysticks, std::map>& joysticks_v1, const sdl_mapping& mapping) +static s16 fetch_sdl_axis_avg(std::map>& 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>& 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>& joystic return std::clamp(sdl_joysticks_total_value / static_cast(joysticks_of_type->second.size()), MIN, MAX); } -static bool sdl_to_logitech_g27_button(std::map>& joysticks, std::map>& joysticks_v1, const sdl_mapping& mapping) +static bool sdl_to_logitech_g27_button(std::map>& 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> return pressed; } -static u16 sdl_to_logitech_g27_steering(std::map>& joysticks, std::map>& joysticks_v1, const sdl_mapping& mapping) +static u16 sdl_to_logitech_g27_steering(std::map>& 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>& joysticks, std::map>& joysticks_v1, const sdl_mapping& mapping) +static u8 sdl_to_logitech_g27_pedal(std::map>& 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 diff --git a/rpcs3/Emu/Io/LogitechG27.h b/rpcs3/Emu/Io/LogitechG27.h index 31040b7742..a20ebb3a4b 100644 --- a/rpcs3/Emu/Io/LogitechG27.h +++ b/rpcs3/Emu/Io/LogitechG27.h @@ -121,7 +121,6 @@ private: SDL_Joystick* m_led_joystick_handle = nullptr; SDL_Haptic* m_haptic_handle = nullptr; std::map> m_joysticks; - std::map> m_joysticks_v1; bool m_fixed_loop = false; u16 m_wheel_range = 200; std::array m_effect_slots {}; diff --git a/rpcs3/Emu/Io/LogitechG27Config.h b/rpcs3/Emu/Io/LogitechG27Config.h index b2844d4917..3c7db72ffd 100644 --- a/rpcs3/Emu/Io/LogitechG27Config.h +++ b/rpcs3/Emu/Io/LogitechG27Config.h @@ -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(data & 0xFFFF), - .vendor_id = static_cast((data >> 16) & 0xFFFF), - .num_axes = static_cast((data >> 32) & ((1 << 10) - 1)), - .num_hats = static_cast((data >> 42) & ((1 << 10) - 1)), - .num_buttons = static_cast((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 diff --git a/rpcs3/rpcs3qt/emulated_logitech_g27_settings_dialog.cpp b/rpcs3/rpcs3qt/emulated_logitech_g27_settings_dialog.cpp index 456d2f8b96..5289ccb8ce 100644 --- a/rpcs3/rpcs3qt/emulated_logitech_g27_settings_dialog.cpp +++ b/rpcs3/rpcs3qt/emulated_logitech_g27_settings_dialog.cpp @@ -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))