From ecedbc38ecf50a3ac760f85d4fd3749c4d00d8a0 Mon Sep 17 00:00:00 2001 From: Florin9doi Date: Wed, 15 May 2024 22:06:35 +0300 Subject: [PATCH] Consolidate input products in a single place --- rpcs3/CMakeLists.txt | 1 + rpcs3/Emu/Cell/Modules/cellPad.cpp | 34 +--- rpcs3/Input/product_info.cpp | 235 ++++++++++++++++++++++ rpcs3/Input/product_info.h | 308 +---------------------------- rpcs3/rpcs3.vcxproj | 1 + rpcs3/rpcs3.vcxproj.filters | 3 + 6 files changed, 247 insertions(+), 335 deletions(-) create mode 100644 rpcs3/Input/product_info.cpp diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index aa89b50970..4be00dca2f 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -76,6 +76,7 @@ target_sources(rpcs3 Input/keyboard_pad_handler.cpp Input/mm_joystick_handler.cpp Input/pad_thread.cpp + Input/product_info.cpp Input/raw_mouse_handler.cpp Input/sdl_pad_handler.cpp Input/skateboard_pad_handler.cpp diff --git a/rpcs3/Emu/Cell/Modules/cellPad.cpp b/rpcs3/Emu/Cell/Modules/cellPad.cpp index c2cfba1248..3e0d338ffd 100644 --- a/rpcs3/Emu/Cell/Modules/cellPad.cpp +++ b/rpcs3/Emu/Cell/Modules/cellPad.cpp @@ -129,38 +129,8 @@ void cellPad_NotifyStateChange(usz index, u64 /*state*/, bool locked) if (pad->m_vendor_id == 0 || pad->m_product_id == 0) { // Fallback to defaults - - input::product_info product; - - switch (pad->m_class_type) - { - case CELL_PAD_PCLASS_TYPE_GUITAR: - product = input::get_product_info(input::product_type::red_octane_gh_guitar); - break; - case CELL_PAD_PCLASS_TYPE_DRUM: - product = input::get_product_info(input::product_type::red_octane_gh_drum_kit); - break; - case CELL_PAD_PCLASS_TYPE_DJ: - product = input::get_product_info(input::product_type::dj_hero_turntable); - break; - case CELL_PAD_PCLASS_TYPE_DANCEMAT: - product = input::get_product_info(input::product_type::dance_dance_revolution_mat); - break; - case CELL_PAD_PCLASS_TYPE_NAVIGATION: - product = input::get_product_info(input::product_type::ps_move_navigation); - break; - case CELL_PAD_PCLASS_TYPE_SKATEBOARD: - product = input::get_product_info(input::product_type::ride_skateboard); - break; - case CELL_PAD_FAKE_TYPE_GUNCON3: - product = input::get_product_info(input::product_type::guncon_3); - break; - case CELL_PAD_PCLASS_TYPE_STANDARD: - default: - product = input::get_product_info(input::product_type::playstation_3_controller); - break; - } - + const std::vector input_products = input::get_products_by_class(pad->m_class_type); + const input::product_info& product = ::at32(input_products, 0); reported_info.vendor_id = product.vendor_id; reported_info.product_id = product.product_id; } diff --git a/rpcs3/Input/product_info.cpp b/rpcs3/Input/product_info.cpp new file mode 100644 index 0000000000..3757239be3 --- /dev/null +++ b/rpcs3/Input/product_info.cpp @@ -0,0 +1,235 @@ +#include "Input/product_info.h" + +namespace input +{ + static const std::map input_products = { + { + product_type::playstation_3_controller, + { + .type = product_type::playstation_3_controller, + .class_id = CELL_PAD_PCLASS_TYPE_STANDARD, + .vendor_id = vendor_id::sony_corp, + .product_id = product_id::playstation_3_controller, + .pclass_profile = 0x0, + .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE + } + }, + { + product_type::red_octane_gh_guitar, + { + .type = product_type::red_octane_gh_guitar, + .class_id = CELL_PAD_PCLASS_TYPE_GUITAR, + .vendor_id = vendor_id::sony_cea, + .product_id = product_id::red_octane_gh_guitar, + .pclass_profile = + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_1 | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_2 | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_3 | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_4 | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_5 | + CELL_PAD_PCLASS_PROFILE_GUITAR_STRUM_UP | + CELL_PAD_PCLASS_PROFILE_GUITAR_STRUM_DOWN | + CELL_PAD_PCLASS_PROFILE_GUITAR_WHAMMYBAR, + .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE + } + }, + { + product_type::harmonix_rockband_guitar, + { + .type = product_type::harmonix_rockband_guitar, + .class_id = CELL_PAD_PCLASS_TYPE_GUITAR, + .vendor_id = vendor_id::sony_cea, + .product_id = product_id::harmonix_rockband_guitar, + .pclass_profile = + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_1 | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_2 | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_3 | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_4 | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_5 | + CELL_PAD_PCLASS_PROFILE_GUITAR_STRUM_UP | + CELL_PAD_PCLASS_PROFILE_GUITAR_STRUM_DOWN | + CELL_PAD_PCLASS_PROFILE_GUITAR_WHAMMYBAR | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_H1 | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_H2 | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_H3 | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_H4 | + CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_H5 | + CELL_PAD_PCLASS_PROFILE_GUITAR_5WAY_EFFECT | + CELL_PAD_PCLASS_PROFILE_GUITAR_TILT_SENS, + .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE + } + }, + { + product_type::red_octane_gh_drum_kit, + { + .type = product_type::red_octane_gh_drum_kit, + .class_id = CELL_PAD_PCLASS_TYPE_DRUM, + .vendor_id = vendor_id::sony_cea, + .product_id = product_id::red_octane_gh_drum_kit, + .pclass_profile = + CELL_PAD_PCLASS_PROFILE_DRUM_SNARE | + CELL_PAD_PCLASS_PROFILE_DRUM_TOM | + CELL_PAD_PCLASS_PROFILE_DRUM_TOM_FLOOR | + CELL_PAD_PCLASS_PROFILE_DRUM_KICK | + CELL_PAD_PCLASS_PROFILE_DRUM_CYM_HiHAT | + CELL_PAD_PCLASS_PROFILE_DRUM_CYM_RIDE, + .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE + } + }, + { + product_type::harmonix_rockband_drum_kit, + { + .type = product_type::harmonix_rockband_drum_kit, + .class_id = CELL_PAD_PCLASS_TYPE_DRUM, + .vendor_id = vendor_id::sony_cea, + .product_id = product_id::harmonix_rockband_drum_kit, + .pclass_profile = + CELL_PAD_PCLASS_PROFILE_DRUM_SNARE | + CELL_PAD_PCLASS_PROFILE_DRUM_TOM | + CELL_PAD_PCLASS_PROFILE_DRUM_TOM2 | + CELL_PAD_PCLASS_PROFILE_DRUM_TOM_FLOOR | + CELL_PAD_PCLASS_PROFILE_DRUM_KICK | + CELL_PAD_PCLASS_PROFILE_DRUM_CYM_HiHAT | + CELL_PAD_PCLASS_PROFILE_DRUM_CYM_CRASH | + CELL_PAD_PCLASS_PROFILE_DRUM_CYM_RIDE, + .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE + } + }, + { + product_type::harmonix_rockband_drum_kit_2, + { + .type = product_type::harmonix_rockband_drum_kit_2, + .class_id = CELL_PAD_PCLASS_TYPE_DRUM, + .vendor_id = vendor_id::sony_cea, + .product_id = product_id::harmonix_rockband_drum_kit_2, + .pclass_profile = + CELL_PAD_PCLASS_PROFILE_DRUM_SNARE | + CELL_PAD_PCLASS_PROFILE_DRUM_TOM | + CELL_PAD_PCLASS_PROFILE_DRUM_TOM2 | + CELL_PAD_PCLASS_PROFILE_DRUM_TOM_FLOOR | + CELL_PAD_PCLASS_PROFILE_DRUM_KICK | + CELL_PAD_PCLASS_PROFILE_DRUM_CYM_HiHAT | + CELL_PAD_PCLASS_PROFILE_DRUM_CYM_RIDE, + .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE + } + }, + { + product_type::rock_revolution_drum_kit, + { + .type = product_type::rock_revolution_drum_kit, + .class_id = CELL_PAD_PCLASS_TYPE_DRUM, + .vendor_id = vendor_id::sony_cea, + .product_id = product_id::rock_revolution_drum_kit, + .pclass_profile = + CELL_PAD_PCLASS_PROFILE_DRUM_SNARE | + CELL_PAD_PCLASS_PROFILE_DRUM_TOM | + CELL_PAD_PCLASS_PROFILE_DRUM_TOM_FLOOR | + CELL_PAD_PCLASS_PROFILE_DRUM_KICK | + CELL_PAD_PCLASS_PROFILE_DRUM_CYM_HiHAT | + CELL_PAD_PCLASS_PROFILE_DRUM_CYM_CRASH | + CELL_PAD_PCLASS_PROFILE_DRUM_CYM_RIDE, + .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE + } + }, + { + product_type::dj_hero_turntable, + { + .type = product_type::dj_hero_turntable, + .class_id = CELL_PAD_PCLASS_TYPE_DJ, + .vendor_id = vendor_id::sony_cea, + .product_id = product_id::dj_hero_turntable, + .pclass_profile = + CELL_PAD_PCLASS_PROFILE_DJ_MIXER_ATTACK | + CELL_PAD_PCLASS_PROFILE_DJ_MIXER_CROSSFADER | + CELL_PAD_PCLASS_PROFILE_DJ_MIXER_DSP_DIAL | + CELL_PAD_PCLASS_PROFILE_DJ_DECK1_STREAM1 | + CELL_PAD_PCLASS_PROFILE_DJ_DECK1_STREAM2 | + CELL_PAD_PCLASS_PROFILE_DJ_DECK1_STREAM3 | + CELL_PAD_PCLASS_PROFILE_DJ_DECK1_PLATTER | + CELL_PAD_PCLASS_PROFILE_DJ_DECK2_STREAM1 | + CELL_PAD_PCLASS_PROFILE_DJ_DECK2_STREAM2 | + CELL_PAD_PCLASS_PROFILE_DJ_DECK2_STREAM3 | + CELL_PAD_PCLASS_PROFILE_DJ_DECK2_PLATTER, + .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE + } + }, + { + product_type::dance_dance_revolution_mat, + { + .type = product_type::dance_dance_revolution_mat, + .class_id = CELL_PAD_PCLASS_TYPE_DANCEMAT, + .vendor_id = vendor_id::konami_de, + .product_id = product_id::dance_dance_revolution_mat, + .pclass_profile = + CELL_PAD_PCLASS_PROFILE_DANCEMAT_CIRCLE | + CELL_PAD_PCLASS_PROFILE_DANCEMAT_CROSS | + CELL_PAD_PCLASS_PROFILE_DANCEMAT_TRIANGLE | + CELL_PAD_PCLASS_PROFILE_DANCEMAT_SQUARE | + CELL_PAD_PCLASS_PROFILE_DANCEMAT_RIGHT | + CELL_PAD_PCLASS_PROFILE_DANCEMAT_LEFT | + CELL_PAD_PCLASS_PROFILE_DANCEMAT_UP | + CELL_PAD_PCLASS_PROFILE_DANCEMAT_DOWN, + .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE + } + }, + { + product_type::ps_move_navigation, + { + .type = product_type::ps_move_navigation, + .class_id = CELL_PAD_PCLASS_TYPE_NAVIGATION, + .vendor_id = vendor_id::sony_corp, + .product_id = product_id::ps_move_navigation, + .pclass_profile = 0x0, + .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE + } + }, + { + product_type::ride_skateboard, + { + .type = product_type::ride_skateboard, + .class_id = CELL_PAD_PCLASS_TYPE_SKATEBOARD, + .vendor_id = vendor_id::sony_cea, + .product_id = product_id::ride_skateboard, + .pclass_profile = 0x0, + .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_SENSOR_MODE + } + }, + { + product_type::guncon_3, + { + .type = product_type::guncon_3, + .class_id = CELL_PAD_FAKE_TYPE_GUNCON3, + .vendor_id = vendor_id::namco, + .product_id = product_id::guncon_3, + .pclass_profile = 0x0, + .capabilites = 0x0 + } + } + }; + + product_info get_product_info(product_type type) + { + return input_products.at(type); + } + + product_type get_product_by_vid_pid(u16 vendor_id, u16 product_id) + { + for (const auto& [type, product] : input_products) + { + if (product.vendor_id == vendor_id && product.product_id == product_id) + return type; + } + return product_type::playstation_3_controller; + } + + std::vector get_products_by_class(int class_id) + { + std::vector ret; + for (const auto& [type, product] : input_products) + { + if (product.class_id == class_id) + ret.push_back(product); + } + return ret; + } +} diff --git a/rpcs3/Input/product_info.h b/rpcs3/Input/product_info.h index 4350dfbac5..2ae8a937ec 100644 --- a/rpcs3/Input/product_info.h +++ b/rpcs3/Input/product_info.h @@ -48,312 +48,14 @@ namespace input struct product_info { product_type type; + u16 class_id; u16 vendor_id; u16 product_id; u32 pclass_profile; // See CELL_PAD_PCLASS_PROFILE flags u32 capabilites; // See CELL_PAD_CAPABILITY flags }; - inline product_info get_product_info(product_type type) - { - switch (type) - { - case product_type::dance_dance_revolution_mat: - { - constexpr u32 profile = - CELL_PAD_PCLASS_PROFILE_DANCEMAT_CIRCLE | - CELL_PAD_PCLASS_PROFILE_DANCEMAT_CROSS | - CELL_PAD_PCLASS_PROFILE_DANCEMAT_TRIANGLE | - CELL_PAD_PCLASS_PROFILE_DANCEMAT_SQUARE | - CELL_PAD_PCLASS_PROFILE_DANCEMAT_RIGHT | - CELL_PAD_PCLASS_PROFILE_DANCEMAT_LEFT | - CELL_PAD_PCLASS_PROFILE_DANCEMAT_UP | - CELL_PAD_PCLASS_PROFILE_DANCEMAT_DOWN; - return product_info{ - .type = type, - .vendor_id = vendor_id::konami_de, - .product_id = product_id::dance_dance_revolution_mat, - .pclass_profile = profile, - .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE - }; - } - case product_type::dj_hero_turntable: - { - constexpr u32 profile = - CELL_PAD_PCLASS_PROFILE_DJ_MIXER_ATTACK | - CELL_PAD_PCLASS_PROFILE_DJ_MIXER_CROSSFADER | - CELL_PAD_PCLASS_PROFILE_DJ_MIXER_DSP_DIAL | - CELL_PAD_PCLASS_PROFILE_DJ_DECK1_STREAM1 | - CELL_PAD_PCLASS_PROFILE_DJ_DECK1_STREAM2 | - CELL_PAD_PCLASS_PROFILE_DJ_DECK1_STREAM3 | - CELL_PAD_PCLASS_PROFILE_DJ_DECK1_PLATTER | - CELL_PAD_PCLASS_PROFILE_DJ_DECK2_STREAM1 | - CELL_PAD_PCLASS_PROFILE_DJ_DECK2_STREAM2 | - CELL_PAD_PCLASS_PROFILE_DJ_DECK2_STREAM3 | - CELL_PAD_PCLASS_PROFILE_DJ_DECK2_PLATTER; - return product_info{ - .type = type, - .vendor_id = vendor_id::sony_cea, - .product_id = product_id::dj_hero_turntable, - .pclass_profile = profile, - .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE - }; - } - case product_type::harmonix_rockband_drum_kit: - { - constexpr u32 profile = - CELL_PAD_PCLASS_PROFILE_DRUM_SNARE | - CELL_PAD_PCLASS_PROFILE_DRUM_TOM | - CELL_PAD_PCLASS_PROFILE_DRUM_TOM2 | - CELL_PAD_PCLASS_PROFILE_DRUM_TOM_FLOOR | - CELL_PAD_PCLASS_PROFILE_DRUM_KICK | - CELL_PAD_PCLASS_PROFILE_DRUM_CYM_HiHAT | - CELL_PAD_PCLASS_PROFILE_DRUM_CYM_CRASH | - CELL_PAD_PCLASS_PROFILE_DRUM_CYM_RIDE; - return product_info{ - .type = type, - .vendor_id = vendor_id::sony_cea, - .product_id = product_id::harmonix_rockband_drum_kit, - .pclass_profile = profile, - .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE - }; - } - case product_type::harmonix_rockband_drum_kit_2: - { - constexpr u32 profile = - CELL_PAD_PCLASS_PROFILE_DRUM_SNARE | - CELL_PAD_PCLASS_PROFILE_DRUM_TOM | - CELL_PAD_PCLASS_PROFILE_DRUM_TOM2 | - CELL_PAD_PCLASS_PROFILE_DRUM_TOM_FLOOR | - CELL_PAD_PCLASS_PROFILE_DRUM_KICK | - CELL_PAD_PCLASS_PROFILE_DRUM_CYM_HiHAT | - CELL_PAD_PCLASS_PROFILE_DRUM_CYM_RIDE; - return product_info{ - .type = type, - .vendor_id = vendor_id::sony_cea, - .product_id = product_id::harmonix_rockband_drum_kit_2, - .pclass_profile = profile, - .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE - }; - } - case product_type::harmonix_rockband_guitar: - { - constexpr u32 profile = - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_1 | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_2 | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_3 | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_4 | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_5 | - CELL_PAD_PCLASS_PROFILE_GUITAR_STRUM_UP | - CELL_PAD_PCLASS_PROFILE_GUITAR_STRUM_DOWN | - CELL_PAD_PCLASS_PROFILE_GUITAR_WHAMMYBAR | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_H1 | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_H2 | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_H3 | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_H4 | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_H5 | - CELL_PAD_PCLASS_PROFILE_GUITAR_5WAY_EFFECT | - CELL_PAD_PCLASS_PROFILE_GUITAR_TILT_SENS; - return product_info{ - .type = type, - .vendor_id = vendor_id::sony_cea, - .product_id = product_id::harmonix_rockband_guitar, - .pclass_profile = profile, - .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE - }; - } - case product_type::red_octane_gh_drum_kit: - { - constexpr u32 profile = - CELL_PAD_PCLASS_PROFILE_DRUM_SNARE | - CELL_PAD_PCLASS_PROFILE_DRUM_TOM | - CELL_PAD_PCLASS_PROFILE_DRUM_TOM_FLOOR | - CELL_PAD_PCLASS_PROFILE_DRUM_KICK | - CELL_PAD_PCLASS_PROFILE_DRUM_CYM_HiHAT | - CELL_PAD_PCLASS_PROFILE_DRUM_CYM_RIDE; - return product_info{ - .type = type, - .vendor_id = vendor_id::sony_cea, - .product_id = product_id::red_octane_gh_drum_kit, - .pclass_profile = profile, - .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE - }; - } - case product_type::red_octane_gh_guitar: - { - constexpr u32 profile = - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_1 | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_2 | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_3 | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_4 | - CELL_PAD_PCLASS_PROFILE_GUITAR_FRET_5 | - CELL_PAD_PCLASS_PROFILE_GUITAR_STRUM_UP | - CELL_PAD_PCLASS_PROFILE_GUITAR_STRUM_DOWN | - CELL_PAD_PCLASS_PROFILE_GUITAR_WHAMMYBAR; - return product_info{ - .type = type, - .vendor_id = vendor_id::sony_cea, - .product_id = product_id::red_octane_gh_guitar, - .pclass_profile = profile, - .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE - }; - } - case product_type::rock_revolution_drum_kit: - { - constexpr u32 profile = - CELL_PAD_PCLASS_PROFILE_DRUM_SNARE | - CELL_PAD_PCLASS_PROFILE_DRUM_TOM | - CELL_PAD_PCLASS_PROFILE_DRUM_TOM_FLOOR | - CELL_PAD_PCLASS_PROFILE_DRUM_KICK | - CELL_PAD_PCLASS_PROFILE_DRUM_CYM_HiHAT | - CELL_PAD_PCLASS_PROFILE_DRUM_CYM_CRASH | - CELL_PAD_PCLASS_PROFILE_DRUM_CYM_RIDE; - return product_info{ - .type = type, - .vendor_id = vendor_id::sony_cea, - .product_id = product_id::rock_revolution_drum_kit, - .pclass_profile = profile, - .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE - }; - } - case product_type::ps_move_navigation: - { - return product_info{ - .type = type, - .vendor_id = vendor_id::sony_corp, - .product_id = product_id::ps_move_navigation, - .pclass_profile = 0x0, - .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE - }; - } - case product_type::ride_skateboard: - { - return product_info{ - .type = type, - .vendor_id = vendor_id::sony_cea, - .product_id = product_id::ride_skateboard, - .pclass_profile = 0x0, - .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_SENSOR_MODE - }; - } - case product_type::guncon_3: - { - return product_info{ - .type = type, - .vendor_id = vendor_id::namco, - .product_id = product_id::guncon_3, - .pclass_profile = 0x0, - .capabilites = 0x0 - }; - } - case product_type::playstation_3_controller: - default: // GCC doesn't like it when there is no return value if if all enum values are covered - { - return product_info{ - .type = type, - .vendor_id = vendor_id::sony_corp, - .product_id = product_id::playstation_3_controller, - .pclass_profile = 0x0, - .capabilites = CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE | CELL_PAD_CAPABILITY_HP_ANALOG_STICK | CELL_PAD_CAPABILITY_ACTUATOR | CELL_PAD_CAPABILITY_SENSOR_MODE - }; - } - } - } - - inline product_type get_product_by_vid_pid(u16 vid, u16 pid) - { - if (vid == vendor_id::konami_de && pid == product_id::dance_dance_revolution_mat) - return product_type::dance_dance_revolution_mat; - if (vid == vendor_id::sony_cea && pid == product_id::dj_hero_turntable) - return product_type::dj_hero_turntable; - if (vid == vendor_id::sony_cea && pid == product_id::harmonix_rockband_drum_kit) - return product_type::harmonix_rockband_drum_kit; - if (vid == vendor_id::sony_cea && pid == product_id::harmonix_rockband_drum_kit_2) - return product_type::harmonix_rockband_drum_kit_2; - if (vid == vendor_id::sony_cea && pid == product_id::harmonix_rockband_guitar) - return product_type::harmonix_rockband_guitar; - if (vid == vendor_id::sony_cea && pid == product_id::red_octane_gh_drum_kit) - return product_type::red_octane_gh_drum_kit; - if (vid == vendor_id::sony_cea && pid == product_id::red_octane_gh_guitar) - return product_type::red_octane_gh_guitar; - if (vid == vendor_id::sony_cea && pid == product_id::rock_revolution_drum_kit) - return product_type::rock_revolution_drum_kit; - if (vid == vendor_id::sony_corp && pid == product_id::ps_move_navigation) - return product_type::ps_move_navigation; - if (vid == vendor_id::sony_cea && pid == product_id::ride_skateboard) - return product_type::ride_skateboard; - if (vid == vendor_id::namco && pid == product_id::guncon_3) - return product_type::guncon_3; - if (vid == vendor_id::sony_corp && pid == product_id::playstation_3_controller) - return product_type::playstation_3_controller; - return product_type::playstation_3_controller; - } - - inline std::vector get_products_by_class(int class_id) - { - switch (class_id) - { - default: - case CELL_PAD_PCLASS_TYPE_STANDARD: - { - return - { - get_product_info(product_type::playstation_3_controller) - }; - } - case CELL_PAD_PCLASS_TYPE_GUITAR: - { - return - { - get_product_info(product_type::red_octane_gh_guitar), - get_product_info(product_type::harmonix_rockband_guitar) - }; - } - case CELL_PAD_PCLASS_TYPE_DRUM: - { - return - { - get_product_info(product_type::red_octane_gh_drum_kit), - get_product_info(product_type::harmonix_rockband_drum_kit), - get_product_info(product_type::harmonix_rockband_drum_kit_2), - get_product_info(product_type::rock_revolution_drum_kit) - }; - } - case CELL_PAD_PCLASS_TYPE_DJ: - { - return - { - get_product_info(product_type::dj_hero_turntable) - }; - } - case CELL_PAD_PCLASS_TYPE_DANCEMAT: - { - return - { - get_product_info(product_type::dance_dance_revolution_mat) - }; - } - case CELL_PAD_PCLASS_TYPE_NAVIGATION: - { - return - { - get_product_info(product_type::ps_move_navigation) - }; - } - case CELL_PAD_PCLASS_TYPE_SKATEBOARD: - { - return - { - get_product_info(product_type::ride_skateboard) - }; - } - case CELL_PAD_FAKE_TYPE_GUNCON3: - { - return - { - get_product_info(product_type::guncon_3) - }; - } - } - } -}; + product_info get_product_info(product_type type); + product_type get_product_by_vid_pid(u16 vid, u16 pid); + std::vector get_products_by_class(int class_id); +} diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index b4d2117adb..6ede5df310 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -192,6 +192,7 @@ + true diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index 0db0fce5d5..65fbb3d3b0 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -345,6 +345,9 @@ Io + + Io + Gui\misc dialogs