| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- namespace Ryujinx.HLE.Input
- {
- public class HidNpadController : HidControllerBase
- {
- private (NpadColor Left, NpadColor Right) NpadBodyColors;
- private (NpadColor Left, NpadColor Right) NpadButtonColors;
- private HidControllerLayouts CurrentLayout;
- private bool IsHalf;
- public HidNpadController(
- HidControllerType ControllerType,
- Switch Device,
- (NpadColor, NpadColor) NpadBodyColors,
- (NpadColor, NpadColor) NpadButtonColors) : base(ControllerType, Device)
- {
- this.NpadBodyColors = NpadBodyColors;
- this.NpadButtonColors = NpadButtonColors;
- CurrentLayout = HidControllerLayouts.Handheld_Joined;
- switch (ControllerType)
- {
- case HidControllerType.NpadLeft:
- CurrentLayout = HidControllerLayouts.Left;
- break;
- case HidControllerType.NpadRight:
- CurrentLayout = HidControllerLayouts.Right;
- break;
- case HidControllerType.NpadPair:
- CurrentLayout = HidControllerLayouts.Joined;
- break;
- }
- }
- public override void Connect(HidControllerId ControllerId)
- {
- if(HidControllerType != HidControllerType.NpadLeft && HidControllerType != HidControllerType.NpadRight)
- {
- IsHalf = false;
- }
- base.Connect(CurrentLayout == HidControllerLayouts.Handheld_Joined ? HidControllerId.CONTROLLER_HANDHELD : ControllerId);
- HidControllerColorDesc SingleColorDesc =
- HidControllerColorDesc.ColorDesc_ColorsNonexistent;
- HidControllerColorDesc SplitColorDesc = 0;
- NpadColor SingleColorBody = NpadColor.Black;
- NpadColor SingleColorButtons = NpadColor.Black;
- Device.Memory.WriteInt32(Offset + 0x04, IsHalf ? 1 : 0);
- if (IsHalf)
- {
- Device.Memory.WriteInt32(Offset + 0x08, (int)SingleColorDesc);
- Device.Memory.WriteInt32(Offset + 0x0c, (int)SingleColorBody);
- Device.Memory.WriteInt32(Offset + 0x10, (int)SingleColorButtons);
- Device.Memory.WriteInt32(Offset + 0x14, (int)SplitColorDesc);
- }
- else
- {
- Device.Memory.WriteInt32(Offset + 0x18, (int)NpadBodyColors.Left);
- Device.Memory.WriteInt32(Offset + 0x1c, (int)NpadButtonColors.Left);
- Device.Memory.WriteInt32(Offset + 0x20, (int)NpadBodyColors.Right);
- Device.Memory.WriteInt32(Offset + 0x24, (int)NpadButtonColors.Right);
- }
- Connected = true;
- }
- public override void SendInput
- (HidControllerButtons Buttons,
- HidJoystickPosition LeftStick,
- HidJoystickPosition RightStick)
- {
- long ControllerOffset = WriteInput(Buttons, LeftStick, RightStick, CurrentLayout);
- Device.Memory.WriteInt64(ControllerOffset + 0x28,
- (Connected ? (uint)HidControllerConnState.Controller_State_Connected : 0) |
- (CurrentLayout == HidControllerLayouts.Handheld_Joined ? (uint)HidControllerConnState.Controller_State_Wired : 0));
- }
- }
- }
|