aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/Input/HidProController.cs
blob: e30e91722e8c3f64d5a393505c30c9a3c19cd945 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
namespace Ryujinx.HLE.Input
{
    public class HidProController : HidControllerBase
    {
        bool _wired = false;

        public HidProController(Switch device) : base(HidControllerType.ProController, device)
        {
            _wired = true;
        }

        public override void Connect(HidControllerId controllerId)
        {
            base.Connect(controllerId);

            HidControllerColorDesc singleColorDesc =
                HidControllerColorDesc.ColorDescColorsNonexistent;

            HidControllerColorDesc splitColorDesc = 0;

            NpadColor singleColorBody    = NpadColor.Black;
            NpadColor singleColorButtons = NpadColor.Black;

            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);

            Connected = true;
        }

        public override void SendInput(
            HidControllerButtons buttons,
            HidJoystickPosition  leftStick,
            HidJoystickPosition  rightStick)
        {
            long controllerOffset = WriteInput(buttons, leftStick, rightStick, HidControllerLayouts.ProController);

            Device.Memory.WriteInt64(controllerOffset + 0x28,
              (Connected ? (uint)HidControllerConnState.ControllerStateConnected : 0) |
              (_wired ? (uint)HidControllerConnState.ControllerStateWired : 0));

            controllerOffset = WriteInput(buttons, leftStick, rightStick, HidControllerLayouts.Main);

            Device.Memory.WriteInt64(controllerOffset + 0x28,
              (Connected ? (uint)HidControllerConnState.ControllerStateWired : 0) |
              (uint)HidControllerConnState.ControllerStateWired);
        }
    }
}