@ -116,6 +116,31 @@ u32 Controller_NPad::IndexToNPad(std::size_t index) {
}
}
bool Controller_NPad : : IsNpadIdValid ( u32 npad_id ) {
switch ( npad_id ) {
case 0 :
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
case 6 :
case 7 :
case NPAD_UNKNOWN :
case NPAD_HANDHELD :
return true ;
default :
LOG_ERROR ( Service_HID , " Invalid npad id {} " , npad_id ) ;
return false ;
}
}
bool Controller_NPad : : IsDeviceHandleValid ( const DeviceHandle & device_handle ) {
return IsNpadIdValid ( device_handle . npad_id ) & &
device_handle . npad_type < NpadType : : MaxNpadType & &
device_handle . device_index < DeviceIndex : : MaxDeviceIndex ;
}
Controller_NPad : : Controller_NPad ( Core : : System & system ) : ControllerBase ( system ) , system ( system ) { }
Controller_NPad : : ~ Controller_NPad ( ) {
@ -742,6 +767,10 @@ bool Controller_NPad::VibrateControllerAtIndex(std::size_t npad_index, std::size
void Controller_NPad : : VibrateController ( const DeviceHandle & vibration_device_handle ,
const VibrationValue & vibration_value ) {
if ( ! IsDeviceHandleValid ( vibration_device_handle ) ) {
return ;
}
if ( ! Settings : : values . vibration_enabled . GetValue ( ) & & ! permit_vibration_session_enabled ) {
return ;
}
@ -798,12 +827,20 @@ void Controller_NPad::VibrateControllers(const std::vector<DeviceHandle>& vibrat
Controller_NPad : : VibrationValue Controller_NPad : : GetLastVibration (
const DeviceHandle & vibration_device_handle ) const {
if ( ! IsDeviceHandleValid ( vibration_device_handle ) ) {
return { } ;
}
const auto npad_index = NPadIdToIndex ( vibration_device_handle . npad_id ) ;
const auto device_index = static_cast < std : : size_t > ( vibration_device_handle . device_index ) ;
return latest_vibration_values [ npad_index ] [ device_index ] ;
}
void Controller_NPad : : InitializeVibrationDevice ( const DeviceHandle & vibration_device_handle ) {
if ( ! IsDeviceHandleValid ( vibration_device_handle ) ) {
return ;
}
const auto npad_index = NPadIdToIndex ( vibration_device_handle . npad_id ) ;
const auto device_index = static_cast < std : : size_t > ( vibration_device_handle . device_index ) ;
InitializeVibrationDeviceAtIndex ( npad_index , device_index ) ;
@ -824,6 +861,10 @@ void Controller_NPad::SetPermitVibrationSession(bool permit_vibration_session) {
}
bool Controller_NPad : : IsVibrationDeviceMounted ( const DeviceHandle & vibration_device_handle ) const {
if ( ! IsDeviceHandleValid ( vibration_device_handle ) ) {
return false ;
}
const auto npad_index = NPadIdToIndex ( vibration_device_handle . npad_id ) ;
const auto device_index = static_cast < std : : size_t > ( vibration_device_handle . device_index ) ;
return vibration_devices_mounted [ npad_index ] [ device_index ] ;