Support other switch controller types (#487)
* Make controllers modular, support changing controller type * return readable events * signal hid events * fix style
This commit is contained in:
parent
0c36835f6d
commit
dc02ac08ca
24 changed files with 574 additions and 409 deletions
|
@ -23,7 +23,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
private bool UsbFullKeyControllerEnabled;
|
||||
|
||||
private HidNpadJoyHoldType NpadJoyHoldType;
|
||||
private HidNpadStyle NpadStyleTag;
|
||||
private HidNpadStyle NpadStyleSet;
|
||||
private HidNpadJoyAssignmentMode NpadJoyAssignmentMode;
|
||||
private HidNpadHandheldActivationMode NpadHandheldActivationMode;
|
||||
private HidGyroscopeZeroDriftMode GyroscopeZeroDriftMode;
|
||||
|
@ -153,7 +153,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
PalmaOperationCompleteEvent = new KEvent(System);
|
||||
|
||||
NpadJoyHoldType = HidNpadJoyHoldType.Vertical;
|
||||
NpadStyleTag = HidNpadStyle.FullKey | HidNpadStyle.Dual | HidNpadStyle.Left | HidNpadStyle.Right;
|
||||
NpadStyleSet = HidNpadStyle.FullKey | HidNpadStyle.Dual | HidNpadStyle.Left | HidNpadStyle.Right | HidNpadStyle.Handheld;
|
||||
NpadJoyAssignmentMode = HidNpadJoyAssignmentMode.Dual;
|
||||
NpadHandheldActivationMode = HidNpadHandheldActivationMode.Dual;
|
||||
GyroscopeZeroDriftMode = HidGyroscopeZeroDriftMode.Standard;
|
||||
|
@ -161,6 +161,9 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
SensorFusionParams = new HidSensorFusionParameters();
|
||||
AccelerometerParams = new HidAccelerometerParameters();
|
||||
VibrationValue = new HidVibrationValue();
|
||||
|
||||
// TODO: signal event at right place
|
||||
XpadIdEvent.ReadableEvent.Signal();
|
||||
}
|
||||
|
||||
// CreateAppletResource(nn::applet::AppletResourceUserId) -> object<nn::hid::IAppletResource>
|
||||
|
@ -218,7 +221,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
{
|
||||
long XpadId = Context.RequestData.ReadInt64();
|
||||
|
||||
if (Context.Process.HandleTable.GenerateHandle(XpadIdEvent, out XpadIdEventHandle) != KernelResult.Success)
|
||||
if (Context.Process.HandleTable.GenerateHandle(XpadIdEvent.ReadableEvent, out XpadIdEventHandle) != KernelResult.Success)
|
||||
{
|
||||
throw new InvalidOperationException("Out of handles!");
|
||||
}
|
||||
|
@ -652,12 +655,14 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
// SetSupportedNpadStyleSet(nn::applet::AppletResourceUserId, nn::hid::NpadStyleTag)
|
||||
public long SetSupportedNpadStyleSet(ServiceCtx Context)
|
||||
{
|
||||
NpadStyleTag = (HidNpadStyle)Context.RequestData.ReadInt32();
|
||||
NpadStyleSet = (HidNpadStyle)Context.RequestData.ReadInt32();
|
||||
|
||||
long AppletResourceUserId = Context.RequestData.ReadInt64();
|
||||
|
||||
Logger.PrintStub(LogClass.ServiceHid, $"Stubbed. AppletResourceUserId: {AppletResourceUserId} - " +
|
||||
$"NpadStyleTag: {NpadStyleTag}");
|
||||
$"NpadStyleSet: {NpadStyleSet}");
|
||||
|
||||
NpadStyleSetUpdateEvent.ReadableEvent.Signal();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -667,10 +672,10 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
{
|
||||
long AppletResourceUserId = Context.RequestData.ReadInt64();
|
||||
|
||||
Context.ResponseData.Write((int)NpadStyleTag);
|
||||
Context.ResponseData.Write((int)NpadStyleSet);
|
||||
|
||||
Logger.PrintStub(LogClass.ServiceHid, $"Stubbed. AppletResourceUserId: {AppletResourceUserId} - " +
|
||||
$"NpadStyleTag: {NpadStyleTag}");
|
||||
$"NpadStyleSet: {NpadStyleSet}");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -714,7 +719,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
int NpadId = Context.RequestData.ReadInt32();
|
||||
long NpadStyleSet = Context.RequestData.ReadInt64();
|
||||
|
||||
if (Context.Process.HandleTable.GenerateHandle(NpadStyleSetUpdateEvent, out int Handle) != KernelResult.Success)
|
||||
if (Context.Process.HandleTable.GenerateHandle(NpadStyleSetUpdateEvent.ReadableEvent, out int Handle) != KernelResult.Success)
|
||||
{
|
||||
throw new InvalidOperationException("Out of handles!");
|
||||
}
|
||||
|
@ -1348,6 +1353,8 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
|
||||
Logger.PrintStub(LogClass.ServiceHid, $"Stubbed. PalmaConnectionHandle: {PalmaConnectionHandle}");
|
||||
|
||||
PalmaOperationCompleteEvent.ReadableEvent.Signal();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1356,7 +1363,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
{
|
||||
int PalmaConnectionHandle = Context.RequestData.ReadInt32();
|
||||
|
||||
if (Context.Process.HandleTable.GenerateHandle(PalmaOperationCompleteEvent, out int Handle) != KernelResult.Success)
|
||||
if (Context.Process.HandleTable.GenerateHandle(PalmaOperationCompleteEvent.ReadableEvent, out int Handle) != KernelResult.Success)
|
||||
{
|
||||
throw new InvalidOperationException("Out of handles!");
|
||||
}
|
||||
|
@ -1392,6 +1399,8 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
Logger.PrintStub(LogClass.ServiceHid, $"Stubbed. PalmaConnectionHandle: {PalmaConnectionHandle} - " +
|
||||
$"Unknown0: {Unknown0}");
|
||||
|
||||
PalmaOperationCompleteEvent.ReadableEvent.Signal();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1404,6 +1413,8 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
Logger.PrintStub(LogClass.ServiceHid, $"Stubbed. PalmaConnectionHandle: {PalmaConnectionHandle} - " +
|
||||
$"FrModeType: {FrModeType}");
|
||||
|
||||
PalmaOperationCompleteEvent.ReadableEvent.Signal();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1426,6 +1437,8 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
Logger.PrintStub(LogClass.ServiceHid, $"Stubbed. PalmaConnectionHandle: {PalmaConnectionHandle} - " +
|
||||
$"EnabledPalmaStep: {EnabledPalmaStep}");
|
||||
|
||||
PalmaOperationCompleteEvent.ReadableEvent.Signal();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1436,6 +1449,8 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
|
||||
Logger.PrintStub(LogClass.ServiceHid, $"Stubbed. PalmaConnectionHandle: {PalmaConnectionHandle}");
|
||||
|
||||
PalmaOperationCompleteEvent.ReadableEvent.Signal();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1446,6 +1461,8 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
|
||||
Logger.PrintStub(LogClass.ServiceHid, $"Stubbed. PalmaConnectionHandle: {PalmaConnectionHandle}");
|
||||
|
||||
PalmaOperationCompleteEvent.ReadableEvent.Signal();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1475,6 +1492,8 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
$"Unknown0: {Unknown0} - " +
|
||||
$"Unknown1: {Unknown1}");
|
||||
|
||||
PalmaOperationCompleteEvent.ReadableEvent.Signal();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue