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