protected override void WndProc(ref Message m) { try { if (m.Msg == ScpDevice.WM_DEVICECHANGE) { string Path; ScpDevice.DEV_BROADCAST_HDR hdr; var Type = m.WParam.ToInt32(); hdr = (ScpDevice.DEV_BROADCAST_HDR) Marshal.PtrToStructure(m.LParam, typeof(ScpDevice.DEV_BROADCAST_HDR)); if (hdr.dbch_devicetype == ScpDevice.DBT_DEVTYP_DEVICEINTERFACE) { ScpDevice.DEV_BROADCAST_DEVICEINTERFACE_M deviceInterface; deviceInterface = (ScpDevice.DEV_BROADCAST_DEVICEINTERFACE_M) Marshal.PtrToStructure(m.LParam, typeof(ScpDevice.DEV_BROADCAST_DEVICEINTERFACE_M)); Path = new string(deviceInterface.dbcc_name); Path = Path.Substring(0, Path.IndexOf('\0')).ToUpper(); switch (Type) { case ScpDevice.DBT_DEVICEARRIVAL: if (usbDevice.State != DsState.Connected) { usbDevice.Close(); usbDevice = new UsbDs3(); if (usbDevice.Open(Path)) { usbDevice.Start(); } } break; case ScpDevice.DBT_DEVICEREMOVECOMPLETE: if (Path == usbDevice.Path && usbDevice.State == DsState.Connected) { usbDevice.Close(); } break; } } } } catch { } base.WndProc(ref m); }
protected override void WndProc(ref Message m) { try { if (m.Msg == ScpDevice.WM_DEVICECHANGE) { String Path; ScpDevice.DEV_BROADCAST_HDR hdr; Int32 Type = m.WParam.ToInt32(); hdr = (ScpDevice.DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam, typeof(ScpDevice.DEV_BROADCAST_HDR)); if (hdr.dbch_devicetype == ScpDevice.DBT_DEVTYP_DEVICEINTERFACE) { ScpDevice.DEV_BROADCAST_DEVICEINTERFACE_M deviceInterface; deviceInterface = (ScpDevice.DEV_BROADCAST_DEVICEINTERFACE_M)Marshal.PtrToStructure(m.LParam, typeof(ScpDevice.DEV_BROADCAST_DEVICEINTERFACE_M)); Path = new String(deviceInterface.dbcc_name); Path = Path.Substring(0, Path.IndexOf('\0')).ToUpper(); switch (Type) { case ScpDevice.DBT_DEVICEARRIVAL: if (usbDevice.State != DsState.Connected) { usbDevice.Close(); usbDevice = new UsbDs3(); if (usbDevice.Open(Path)) usbDevice.Start(); } break; case ScpDevice.DBT_DEVICEREMOVECOMPLETE: if (Path == usbDevice.Path && usbDevice.State == DsState.Connected) { usbDevice.Close(); } break; } } } } catch { } base.WndProc(ref m); }
public override bool Start() { m_Started = true; byte index = 0; // enumerate DS4 devices for (byte instance = 0; instance < _devices.Length && index < _devices.Length; instance++) { try { UsbDevice current = new UsbDs4(); current.PadId = (DsPadId)index; if (current.Open(instance)) { if (LogArrival(current)) { current.HidReportReceived += OnHidReportReceived; _devices[index++] = current; } else { current.Close(); } } else { current.Close(); } } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); break; } } // enumerate DS3 devices for (byte instance = 0; instance < _devices.Length && index < _devices.Length; instance++) { try { UsbDevice current = new UsbDs3(); current.PadId = (DsPadId)index; if (current.Open(instance)) { if (!Apply3RdPartyWorkaroundsForDs3(ref current, instance)) { continue; } // notify bus of new device if (LogArrival(current)) { // listen for HID reports current.HidReportReceived += OnHidReportReceived; _devices[index++] = current; } else { current.Close(); } } else { current.Close(); } } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); break; } } var hidDevices = UsbGenericGamepad.LocalHidDevices; // enumerate generic devices for (byte instance = 0; instance < hidDevices.Count && index < _devices.Length; instance++) { try { // try to create supported gamepad var current = UsbGenericGamepad.DeviceFactory(hidDevices[instance].DevicePath); // try next on fail if (current == null) { continue; } // try next if opening failed if (!current.Open(hidDevices[instance].DevicePath)) { continue; } current.PadId = (DsPadId)index; // notify bus of new device if (LogArrival(current)) { // listen for HID reports current.HidReportReceived += OnHidReportReceived; current.Start(); _devices[index++] = current; } else { current.Close(); } } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); break; } } try { for (index = 0; index < _devices.Length; index++) { if (_devices[index].State == DsState.Reserved) { _devices[index].Start(); } } } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); } return(base.Start()); }
public override bool Start() { m_Started = true; byte index = 0; // enumerate DS4 devices for (byte instance = 0; instance < _devices.Length && index < _devices.Length; instance++) { try { UsbDevice current = new UsbDs4(); current.PadId = (DsPadId) index; if (current.Open(instance)) { if (LogArrival(current)) { current.HidReportReceived += OnHidReportReceived; _devices[index++] = current; } else current.Close(); } else current.Close(); } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); break; } } // enumerate DS3 devices for (byte instance = 0; instance < _devices.Length && index < _devices.Length; instance++) { try { UsbDevice current = new UsbDs3(); current.PadId = (DsPadId) index; if (current.Open(instance)) { if (!Apply3RdPartyWorkaroundsForDs3(ref current, instance)) continue; // notify bus of new device if (LogArrival(current)) { // listen for HID reports current.HidReportReceived += OnHidReportReceived; _devices[index++] = current; } else current.Close(); } else current.Close(); } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); break; } } try { for (index = 0; index < _devices.Length; index++) { if (_devices[index].State == DsState.Reserved) { _devices[index].Start(); } } } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); } return base.Start(); }
public override bool Start() { m_Started = true; byte index = 0; // enumerate DS4 devices for (byte instance = 0; instance < _devices.Length && index < _devices.Length; instance++) { try { UsbDevice current = new UsbDs4(); current.PadId = (DsPadId)index; if (current.Open(instance)) { if (LogArrival(current)) { current.HidReportReceived += OnHidReportReceived; _devices[index++] = current; } else current.Close(); } else current.Close(); } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); break; } } // enumerate DS3 devices for (byte instance = 0; instance < _devices.Length && index < _devices.Length; instance++) { try { UsbDevice current = new UsbDs3(); current.PadId = (DsPadId)index; if (current.Open(instance)) { if (!Apply3RdPartyWorkaroundsForDs3(ref current, instance)) continue; // notify bus of new device if (LogArrival(current)) { // listen for HID reports current.HidReportReceived += OnHidReportReceived; _devices[index++] = current; } else current.Close(); } else current.Close(); } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); break; } } var hidDevices = UsbGenericGamepad.LocalHidDevices; // enumerate generic devices for (byte instance = 0; instance < hidDevices.Count && index < _devices.Length; instance++) { try { // try to create supported gamepad var current = UsbGenericGamepad.DeviceFactory(hidDevices[instance].DevicePath); // try next on fail if (current == null) continue; // try next if opening failed if (!current.Open(hidDevices[instance].DevicePath)) continue; current.PadId = (DsPadId) index; // notify bus of new device if (LogArrival(current)) { // listen for HID reports current.HidReportReceived += OnHidReportReceived; current.Start(); _devices[index++] = current; } else current.Close(); } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); break; } } try { // enumerate disconnected but reserved devices for (index = 0; index < _devices.Length; index++) { if (_devices[index].State == DsState.Reserved) { _devices[index].Start(); } } } catch (Exception ex) { Log.ErrorFormat("Unexpected error: {0}", ex); } return base.Start(); }