This commit is contained in:
Narr the Reg 2023-09-07 10:09:54 -06:00
parent 6a0ef7de68
commit a7306fb589
4 changed files with 99 additions and 67 deletions

View File

@ -241,7 +241,7 @@ void IHidServer::CreateAppletResource(HLERequestContext& ctx) {
if (applet_resource == nullptr) {
applet_resource = std::make_shared<IAppletResource>(system);
applet_resource->Initialize();
// applet_resource->Initialize();
}
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
@ -1250,16 +1250,17 @@ void IHidServer::SetSupportedNpadStyleSet(HLERequestContext& ctx) {
parameters.supported_style_set, parameters.applet_resource_user_id);
const auto npad = GetResourceManager()->GetNpad();
const auto result = npad->SetSupportedNpadStyleSet(parameters.applet_resource_user_id,
const Result result = npad->SetSupportedNpadStyleSet(parameters.applet_resource_user_id,
parameters.supported_style_set);
if (result.IsSuccess()) {
// NpadStyleTag style_tag{parameters.supported_style_set};
// u32 aruid_index = GetResourceManager()->GetValue(parameters.applet_resource_user_id);
// if (style_tag.gamecube != 0 && aruid_index < 3) {
// const auto palma = GetResourceManager()->GetPalma();
// palma->EnablePalmaBoostMode(parameters.applet_resource_user_id, true);
// }
NpadStyleTag style_tag{parameters.supported_style_set};
const auto revision = npad->GetNpadRevision(parameters.applet_resource_user_id);
if (style_tag.gamecube != 0 && revision < NpadRevision::Revision3) {
GetResourceManager()->GetPalma()->EnablePalmaBoostMode(
parameters.applet_resource_user_id, true);
}
}
IPC::ResponseBuilder rb{ctx, 2};
@ -1292,7 +1293,7 @@ void IHidServer::SetSupportedNpadIdType(HLERequestContext& ctx) {
memcpy(npad_list.data(), buffer.data(), buffer.size());
const auto npad = GetResourceManager()->GetNpad();
const auto result = npad->SetSupportedNpadIdType(applet_resource_user_id, npad_list);
const Result result = npad->SetSupportedNpadIdType(applet_resource_user_id, npad_list);
LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
@ -1308,7 +1309,7 @@ void IHidServer::ActivateNpad(HLERequestContext& ctx) {
const auto npad = GetResourceManager()->GetNpad();
npad->ActivateWithRevision(applet_resource_user_id, NpadRevision::Revision0);
const auto result = npad->Activate(applet_resource_user_id);
const Result result = npad->Activate(applet_resource_user_id);
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(result);
@ -2128,11 +2129,11 @@ void IHidServer::ActivateConsoleSixAxisSensor(HLERequestContext& ctx) {
Result result = ResultSuccess;
auto sixaxis = GetResourceManager()->GetConsoleSixAxis();
if (IsDeviceManaged()) {
result = sixaxis->Activate(applet_resource_user_id);
} else {
result = sixaxis->Activate();
}
//if (IsDeviceManaged()) {
// result = sixaxis->Activate(applet_resource_user_id);
//} else {
// result = sixaxis->Activate();
//}
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(result);
@ -2177,11 +2178,11 @@ void IHidServer::ActivateSevenSixAxisSensor(HLERequestContext& ctx) {
Result result = ResultSuccess;
auto sixaxis = GetResourceManager()->GetConsoleSixAxis();
if (IsDeviceManaged()) {
result = sixaxis->Activate(applet_resource_user_id);
} else {
result = sixaxis->Activate();
}
//if (IsDeviceManaged()) {
// result = sixaxis->Activate(applet_resource_user_id);
//} else {
// result = sixaxis->Activate();
//}
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(result);
@ -2194,18 +2195,18 @@ void IHidServer::StartSevenSixAxisSensor(HLERequestContext& ctx) {
LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}",
applet_resource_user_id);
std::shared_ptr<SixAxisSensorState> state = nullptr;
const auto sixaxis = GetResourceManager()->GetSevenSixAxis();
Result result = sixaxis->GetSensorState(state, parameters.applet_resource_user_id,
parameters.sixaxis_handle);
//std::shared_ptr<SixAxisSensorState> state = nullptr;
//const auto sixaxis = GetResourceManager()->GetSevenSixAxis();
//Result result = sixaxis->GetSensorState(state, parameters.applet_resource_user_id,
// parameters.sixaxis_handle);
if (result.IsSuccess()) {
result = GetResourceManager()->GetConsoleSixAxis()->ResetSevenSixAxisSensorTimestamp();
}
//if (result.IsSuccess()) {
// result = GetResourceManager()->GetConsoleSixAxis()->ResetSevenSixAxisSensorTimestamp();
//}
if (result.IsSuccess()) {
state->SetRunningState(true);
}
//if (result.IsSuccess()) {
// state->SetRunningState(true);
//}
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
@ -2223,24 +2224,25 @@ void IHidServer::FinalizeSevenSixAxisSensor(HLERequestContext& ctx) {
std::shared_ptr<SixAxisSensorState> state = nullptr;
const auto sixaxis = GetResourceManager()->GetSevenSixAxis();
Result result = sixaxis->GetSensorState(state, parameters.applet_resource_user_id,
parameters.sixaxis_handle);
//Result result = sixaxis->GetSensorState(state, parameters.applet_resource_user_id,
// parameters.sixaxis_handle);
if (result.IsSuccess()) {
state->SetRunningState(false);
}
//if (result.IsSuccess()) {
// state->SetRunningState(false);
//}
result = GetResourceManager()->GetConsoleSixAxis()->FinalizeSevenSixAxisSensor();
// result = GetResourceManager()->GetConsoleSixAxis()->FinalizeSevenSixAxisSensor();
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
}
void IHidServer::ResetSevenSixAxisSensorTimestamp(HLERequestContext& ctx) {}
void IHidServer::IsUsbFullKeyControllerEnabled(HLERequestContext& ctx) {}
void IHidServer::SetSevenSixAxisSensorFusionStrength(HLERequestContext& ctx) {}
void IHidServer::GetSevenSixAxisSensorFusionStrength(HLERequestContext& ctx) {}
void IHidServer::ResetSevenSixAxisSensorTimestamp(HLERequestContext& ctx) {}
void IHidServer::IsUsbFullKeyControllerEnabled(HLERequestContext& ctx) {
IPC::RequestParser rp{ctx};
const bool is_enabled = false;
@ -2823,11 +2825,11 @@ void IHidServer::SetTouchScreenConfiguration(HLERequestContext& ctx) {
touchscreen_mode.mode = TouchScreenModeForNx::UseSystemSetting;
}
const Result result =
GetResourceManager()->GetTouchScreen()->SetTouchScreenConfiguration(touchscreen_mode);
//const Result result =
// GetResourceManager()->GetTouchScreen()->SetTouchScreenConfiguration(touchscreen_mode);
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(result);
//IPC::ResponseBuilder rb{ctx, 2};
//rb.Push(result);
}
void IHidServer::IsFirmwareUpdateNeededForNotification(HLERequestContext& ctx) {

View File

@ -51,7 +51,7 @@ IHidSystemServer::IHidSystemServer(Core::System& system_, std::shared_ptr<Resour
{317, nullptr, "GetNpadLeftRightInterfaceType"},
{318, nullptr, "HasBattery"},
{319, nullptr, "HasLeftRightBattery"},
{321, &IHidSystemServer::GetUniquePadsFromNpad, "GetUniquePadsFromNpad"},
{321, nullptr/*&IHidSystemServer::GetUniquePadsFromNpad*/, "GetUniquePadsFromNpad"},
{322, nullptr, "GetIrSensorState"},
{323, nullptr, "GetXcdHandleForNpadWithIrSensor"},
{324, nullptr, "GetUniquePadButtonSet"},
@ -93,7 +93,7 @@ IHidSystemServer::IHidSystemServer(Core::System& system_, std::shared_ptr<Resour
{700, nullptr, "ActivateUniquePad"},
{702, nullptr, "AcquireUniquePadConnectionEventHandle"},
{703, nullptr, "GetUniquePadIds"},
{751, &IHidSystemServer::AcquireJoyDetachOnBluetoothOffEventHandle, "AcquireJoyDetachOnBluetoothOffEventHandle"},
{751, nullptr/*&IHidSystemServer::AcquireJoyDetachOnBluetoothOffEventHandle*/, "AcquireJoyDetachOnBluetoothOffEventHandle"},
{800, nullptr, "ListSixAxisSensorHandles"},
{801, nullptr, "IsSixAxisSensorUserCalibrationSupported"},
{802, nullptr, "ResetSixAxisSensorCalibrationValues"},
@ -119,7 +119,7 @@ IHidSystemServer::IHidSystemServer(Core::System& system_, std::shared_ptr<Resour
{830, nullptr, "SetNotificationLedPattern"},
{831, nullptr, "SetNotificationLedPatternWithTimeout"},
{832, nullptr, "PrepareHidsForNotificationWake"},
{850, &IHidSystemServer::IsUsbFullKeyControllerEnabled, "IsUsbFullKeyControllerEnabled"},
{850, nullptr/*&IHidSystemServer::IsUsbFullKeyControllerEnabled*/, "IsUsbFullKeyControllerEnabled"},
{851, nullptr, "EnableUsbFullKeyController"},
{852, nullptr, "IsUsbConnected"},
{870, nullptr, "IsHandheldButtonPressedOnConsoleMode"},
@ -266,7 +266,7 @@ void IHidSystemServer::GetLastActiveNpad(HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 3};
rb.Push(result);
rb.PushEnum(ResultSuccess);
// rb.PushEnum(ResultSuccess);
}
void IHidSystemServer::ApplyNpadSystemCommonPolicyFull(HLERequestContext& ctx) {
@ -365,34 +365,34 @@ void IHidSystemServer::SetTouchScreenDefaultConfiguration(HLERequestContext& ctx
break;
default:
touch_screen_configuration.mode = TouchScreenModeForNx::UseSystemSetting;
}
}/*
const Result result = GetResourceManager()->GetTouchScreen()->SetTouchScreenConfiguration(
touch_screen_configuration);
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(result);
rb.Push(result);*/
}
void IHidSystemServer::GetTouchScreenDefaultConfiguration(HLERequestContext& ctx) {
LOG_WARNING(Service_HID, "(STUBBED) called");
TouchScreenConfigurationForNx touch_screen_configuration{};
const Result result = GetResourceManager()->GetTouchScreen()->GetTouchScreenConfiguration(
touch_screen_configuration.mode);
//TouchScreenConfigurationForNx touch_screen_configuration{};
//const Result result = GetResourceManager()->GetTouchScreen()->GetTouchScreenConfiguration(
// touch_screen_configuration.mode);
switch (touch_screen_configuration.mode) {
case TouchScreenModeForNx::UseSystemSetting:
case TouchScreenModeForNx::Finger:
case TouchScreenModeForNx::Heat2:
break;
default:
touch_screen_configuration.mode = TouchScreenModeForNx::UseSystemSetting;
}
//switch (touch_screen_configuration.mode) {
//case TouchScreenModeForNx::UseSystemSetting:
//case TouchScreenModeForNx::Finger:
//case TouchScreenModeForNx::Heat2:
// break;
//default:
// touch_screen_configuration.mode = TouchScreenModeForNx::UseSystemSetting;
//}
IPC::ResponseBuilder rb{ctx, 6};
rb.Push(ResultSuccess);
rb.PushRaw(touch_screen_configuration);
//IPC::ResponseBuilder rb{ctx, 6};
//rb.Push(ResultSuccess);
//rb.PushRaw(touch_screen_configuration);
}
std::shared_ptr<ResourceManager> IHidSystemServer::GetResourceManager() {

View File

@ -18,7 +18,7 @@ AbstractNpadState::AbstractNpadState() {}
AbstractNpadState::~AbstractNpadState() = default;
Result AbstractNpadState::ActivateNpad(const u64 aruid) {
Result result{}; // UpdateSpecial Controller State
Result result = ActivateUnknown();
if (result.IsSuccess()) {
result = UpdateNpadLifo(aruid);
if (result.IsError()) {
@ -33,6 +33,10 @@ Result AbstractNpadState::ActivateNpad(const u64 aruid) {
return result;
}
Result AbstractNpadState::ActivateUnknown() {
return ResultSuccess;
}
Result AbstractNpadState::UpdateNpadLifo(const u64 aruid) {
return ResultSuccess;
}
@ -184,7 +188,7 @@ Result Npad::SetSupportedNpadIdType(const u64 aruid, std::span<const NpadIdType>
}
Result Npad::SetSupportedNpadIdTypeImpl(const u64 aruid, std::span<const NpadIdType> list) {
if (list.size() >= SUPPORTED_NPAD_TYPES_MAX) {
if (list.size() > SUPPORTED_NPAD_TYPES_MAX) {
return ResultInvalidArraySize;
}
@ -222,11 +226,12 @@ Result Npad::SetSupportedNpadStyleSetImpl(const u64 aruid, const NpadStyleSet su
return ResultNpadNotConnected;
}
npad_state[index]->SetSupportedNpadStyleSet(supported_style_set);
auto& state = npad_state[index];
state->SetSupportedNpadStyleSet(supported_style_set);
if (active_aruid == aruid) {
active_npad_state->SetSupportedNpadStyleSet(supported_style_set);
active_npad_state->SetNpadJoyHoldType(npad_state[index]->GetNpadJoyHoldType());
active_npad_state->SetNpadJoyHoldType(state->GetNpadJoyHoldType());
}
return ResultSuccess;
@ -269,7 +274,7 @@ bool Npad::IsFirmwareUpdateAvailableForSixAxisSensor(const SixAxisSensorHandle&
Result Npad::ResetIsSixAxisSensorDeviceNewlyAssigned(const u64 aruid,
const SixAxisSensorHandle& handle) {
// auto npad_index = NpadIdTypeToIndex(static_cast<NpadIdType>(handle.device_index));
//auto npad_index = NpadIdTypeToIndex(static_cast<NpadIdType>(handle.device_index));
// TODO: Implement this part
@ -868,6 +873,16 @@ Result Npad::GetLastActiveNpad(NpadIdType& out_npad_id) const {
return result;
}
NpadRevision Npad::GetNpadRevision(const u64 aruid) const {
const auto index = GetIndexFromAruid(aruid);
if (index >= ARUID_MAX) {
return NpadRevision::Revision0;
}
return npad_state[index]->GetNpadRevision();
}
std::shared_ptr<AbstractNpadState> Npad::GetAbstractNpad(const NpadIdType npad_id) {
return abstract_npad_state[NpadIdTypeToIndex(npad_id)];
}

View File

@ -65,6 +65,17 @@ private:
};
static_assert(sizeof(BatteryState) == 0x40, "BatteryState is an invalid size");
struct Unknown0x88 {
};
struct AbstractState {
INSERT_PADDING_BYTES(0x88);
Unknown0x88 unknown_0x88{};
};
Result ActivateUnknown();
Result UpdateNpadLifo(const u64 aruid);
Result UpdateSixaxisLifo(const u64 aruid);
Result UpdateBatteryLifo(const u64 aruid);
@ -73,6 +84,8 @@ private:
NpadInternalState& internal_state);
void UpdateBatteryLifoImpl(const BatteryState& battery_state,
NpadInternalState& internal_state);
AbstractState state{};
};
class Npad final : public BaseResource {
@ -145,6 +158,8 @@ public:
bool IsFirmwareUpdateNeededForNotification(const u64 aruid, const s32 unknown) const;
Result GetLastActiveNpad(NpadIdType& out_npad_id) const;
NpadRevision GetNpadRevision(const u64 aruid) const;
std::shared_ptr<AbstractNpadState> GetAbstractNpad(const NpadIdType npad_id);
private: