Beispiel #1
0
        public void DeviceArrived(IDualShockDevice device)
        {
            Log.Information("Device {Device} got attached", device);

            var target = _client.CreateDualShock4Controller();

            target.AutoSubmitReport = false;

            _deviceMap.Add(device, target);

            target.FeedbackReceived += (sender, args) =>
            {
                var source = _deviceMap.First(m => m.Value.Equals(sender)).Key;

                RumbleRequestReceived?.Invoke(source, new RumbleRequestEventArgs(args.LargeMotor, args.SmallMotor));
            };

            try
            {
                Log.Information("Connecting ViGEm target {Target}", target);
                target.Connect();
                Log.Information("ViGEm target {Target} connected successfully", target);
            }
            catch (Exception ex)
            {
                Log.Error("Failed to connect target {@Target}: {Exception}", target, ex);
            }
        }
 public ControllerHelper()
 {
     controller = new Controller(UserIndex.One);
     client     = new ViGEmClient();
     xinput     = client.CreateDualShock4Controller();
     xinput.Connect();
     timer = new Timer(obj => Update());
 }
Beispiel #3
0
        public BaseHIDController(HidDevice device, HidStream stream, ViGEmClient client, int index)
        {
            _device = device;
            _stream = stream;
            _client = client;
            _index  = index;
            running = true;

            target360 = _client.CreateXbox360Controller();
            targetDS4 = _client.CreateDualShock4Controller();
            target360.AutoSubmitReport = false;
            targetDS4.AutoSubmitReport = false;
        }
Beispiel #4
0
        public StadiaController(HidDevice device, HidStream stream, ViGEmClient client, int index)
        {
            _device = device;
            _stream = stream;
            _client = client;
            _index  = index;
            running = true;

            target360 = _client.CreateXbox360Controller();
            targetDS4 = _client.CreateDualShock4Controller();
            target360.AutoSubmitReport  = false;
            targetDS4.AutoSubmitReport  = false;
            target360.FeedbackReceived += this.Target360_FeedbackReceived;
            targetDS4.FeedbackReceived += this.TargetDS4_FeedbackReceived;

            inputThread          = new Thread(() => input_thread());
            inputThread.Priority = ThreadPriority.AboveNormal;
            inputThread.Name     = "Controller #" + index + " Input";
            inputThread.Start();
        }
Beispiel #5
0
 public DS4OutDevice(ViGEmClient client)
 {
     cont = client.CreateDualShock4Controller();
     //cont = client.CreateDualShock4Controller(0x054C, 0x09CC);
     cont.AutoSubmitReport = false;
 }
        public async Task Start(IPAddress iPAddress)
        {
            _controller = MainWindow.Instance.Settings.TargetType == TargetType.Xbox360 ? (IVirtualGamepad)_viGEmClient.CreateXbox360Controller() : _viGEmClient.CreateDualShock4Controller();
            _controller.AutoSubmitReport = false;
            _controller.Connect();

            _dummy = new Dummy(iPAddress)
            {
                Running = true
            };

            _connectToken = new CancellationTokenSource();

            Dummy.ConnectedHandler handler = (d) => _connectToken.Cancel();
            _dummy.Connected    += handler;
            _dummy.StateChanged += OnStateChanged;

            _ = Task.Run(() => _dummy.HandleLoop());

            await Task.Delay(-1, _connectToken.Token).ContinueWith((t) => { });

            _dummy.Connected -= handler;
        }
Beispiel #7
0
        public Ds4Device CreateDs4Device()
        {
            var controller = client.CreateDualShock4Controller();

            return(new ViGEmDs4Device(controller));
        }
 private void Start_controller()
 {
     Log.Information("VigemInternals.Start_controller");
     controller = vigemClient.CreateDualShock4Controller(VENDOR_ID, PRODUCT_ID);
     controller.Connect();
 }
Beispiel #9
0
        private void Form1_Load(object sender, EventArgs e)
        {
            tcpClient  = new TcpClient("192.168.0.10", 18196);
            iPEndPoint = new IPEndPoint(IPAddress.Any, 18197);
            udpSocket.Bind(iPEndPoint);
            tcpStream = tcpClient.GetStream();

            StreamWriter sw = new StreamWriter(tcpStream);

            System.Threading.Thread.Sleep(1000);

            sw.Write("ps2pad");
            sw.Flush();


            btnInfo = (ButtonInfo)Marshal.PtrToStructure(ptPoit, typeof(ButtonInfo));

            udpThread = new Thread(new ThreadStart(delegate()
            {
                ViGEmClient viGEmClient = new ViGEmClient();
                var ctrl = viGEmClient.CreateDualShock4Controller();
                ctrl.Connect();
                while (true)
                {
                    if (udpSocket.Available < 32)
                    {
                        System.Threading.Thread.Sleep(10);
                        continue;
                    }

                    udpSocket.Receive(data, 32, SocketFlags.None);

                    Marshal.Copy(data, 0, ptPoit, 32);
                    btnInfo = (ButtonInfo)Marshal.PtrToStructure(ptPoit, typeof(ButtonInfo));

                    ctrl.SetAxisValue(DualShock4Axis.LeftThumbX, btnInfo.ljoy_h);
                    ctrl.SetAxisValue(DualShock4Axis.LeftThumbY, btnInfo.ljoy_v);

                    ctrl.SetAxisValue(DualShock4Axis.RightThumbX, btnInfo.rjoy_h);
                    ctrl.SetAxisValue(DualShock4Axis.RightThumbY, btnInfo.rjoy_v);

                    ctrl.SetButtonState(DualShock4Button.Cross, btnInfo.cross_p > 20);
                    ctrl.SetButtonState(DualShock4Button.Circle, btnInfo.circle_p > 20);
                    ctrl.SetButtonState(DualShock4Button.Triangle, btnInfo.triangle_p > 20);
                    ctrl.SetButtonState(DualShock4Button.Square, btnInfo.square_p > 20);

                    ctrl.SetButtonState(DualShock4Button.ThumbRight, (btnInfo.btns & 4) == 0);
                    ctrl.SetButtonState(DualShock4Button.ThumbLeft, (btnInfo.btns & 2) == 0);

                    ctrl.SetButtonState(DualShock4Button.Options, (btnInfo.btns & 1) == 0);
                    ctrl.SetButtonState(DualShock4Button.Share, (btnInfo.btns & 8) == 0);

                    ctrl.SetButtonState(DualShock4Button.ShoulderLeft, btnInfo.l1_p > 20);
                    ctrl.SetButtonState(DualShock4Button.TriggerLeft, btnInfo.l2_p > 20);

                    ctrl.SetButtonState(DualShock4Button.ShoulderRight, btnInfo.r1_p > 20);
                    ctrl.SetButtonState(DualShock4Button.TriggerRight, btnInfo.r2_p > 20);

                    System.Threading.Thread.Sleep(10);

                    bool DPUP    = (btnInfo.btns & 16) == 0;
                    bool DPRIGHT = (btnInfo.btns & 32) == 0;
                    bool DPDOWN  = (btnInfo.btns & 64) == 0;
                    bool DPLEFT  = (btnInfo.btns & 128) == 0;

                    if (DPUP)
                    {
                        if (DPRIGHT)
                        {
                            ctrl.SetDPadDirection(DualShock4DPadDirection.Northeast);
                        }
                        else if (DPLEFT)
                        {
                            ctrl.SetDPadDirection(DualShock4DPadDirection.Northwest);
                        }
                        else
                        {
                            ctrl.SetDPadDirection(DualShock4DPadDirection.North);
                        }
                    }
                    else if (DPDOWN)
                    {
                        if (DPRIGHT)
                        {
                            ctrl.SetDPadDirection(DualShock4DPadDirection.Southeast);
                        }
                        else if (DPLEFT)
                        {
                            ctrl.SetDPadDirection(DualShock4DPadDirection.Southwest);
                        }
                        else
                        {
                            ctrl.SetDPadDirection(DualShock4DPadDirection.South);
                        }
                    }
                    else if (DPLEFT)
                    {
                        ctrl.SetDPadDirection(DualShock4DPadDirection.West);
                    }
                    else if (DPRIGHT)
                    {
                        ctrl.SetDPadDirection(DualShock4DPadDirection.East);
                    }
                    else
                    {
                        ctrl.SetDPadDirection(DualShock4DPadDirection.None);
                    }
                }
            }));

            udpThread.Start();
        }