ScpControl/ScpUtil.cs (94 lines of code) (raw):

using System; using System.Net.NetworkInformation; using ScpControl.Bluetooth; using ScpControl.Shared.Core; namespace ScpControl { public interface IDsDevice { DsPadId PadId { get; set; } uint? XInputSlot { get; set; } DsConnection Connection { get; } DsState State { get; } DsBattery Battery { get; } DsModel Model { get; } PhysicalAddress DeviceAddress { get; } PhysicalAddress HostAddress { get; } bool Start(); bool Rumble(byte large, byte small); bool Pair(PhysicalAddress master); bool Disconnect(); ScpHidReport NewHidReport(); } public interface IBthDevice { int HCI_Disconnect(BthHandle handle); int HID_Command(byte[] handle, byte[] channel, byte[] data); } public class DsNull : IDsDevice { public DsNull(DsPadId padId) { PadId = padId; } public DsPadId PadId { get; set; } public DsConnection Connection { get { return DsConnection.None; } } public DsState State { get { return DsState.Disconnected; } } public DsBattery Battery { get { return DsBattery.None; } } public DsModel Model { get { return DsModel.None; } } public PhysicalAddress DeviceAddress { get { return PhysicalAddress.None; } } public bool Start() { return true; } public bool Rumble(byte large, byte small) { return true; } public bool Disconnect() { return true; } public ScpHidReport NewHidReport() { return new ScpHidReport(); } public PhysicalAddress HostAddress { get { return PhysicalAddress.None; } } public bool Pair(PhysicalAddress master) { return true; } public uint? XInputSlot { get; set; } public override string ToString() { return string.Format("Pad {0} : {1}", 1 + (int) PadId, DsState.Disconnected); } } public class ArrivalEventArgs : EventArgs { public ArrivalEventArgs(IDsDevice device) { Device = device; } public IDsDevice Device { get; private set; } public bool Handled { get; set; } } }