ScpControl/ScpCore/GlobalConfiguration.cs (378 lines of code) (raw):
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using PropertyChanged;
using ScpControl.Bluetooth;
using ScpControl.Bluetooth.Ds4;
using ScpControl.Properties;
namespace ScpControl.ScpCore
{
[ImplementPropertyChanged]
public class GlobalConfiguration : ICloneable
{
#region Private fields
private static readonly string WorkingDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
private static readonly Lazy<GlobalConfiguration> LazyInstance =
new Lazy<GlobalConfiguration>(() => new GlobalConfiguration());
private static readonly byte[] MBdLink =
{
0x56, 0xE8, 0x81, 0x38, 0x08, 0x06, 0x51, 0x41, 0xC0, 0x7F, 0x12, 0xAA,
0xD9, 0x66, 0x3C, 0xCE
};
#endregion
#region Singleton
private GlobalConfiguration()
{
}
public static GlobalConfiguration Instance
{
get { return LazyInstance.Value; }
}
#endregion
#region Const vars
public static int IdleTimeoutMultiplier
{
get { return 60000; }
}
public static int LatencyMultiplier
{
get { return 16; }
}
#endregion
public object Clone()
{
return (GlobalConfiguration)MemberwiseClone();
}
public static void Load()
{
Settings.Default.Reload();
}
public static void Save()
{
Settings.Default.Save();
}
public static GlobalConfiguration Request()
{
return (GlobalConfiguration)Instance.Clone();
}
public static void Submit(GlobalConfiguration configuration)
{
foreach (
var propertyInfo in
typeof(GlobalConfiguration).GetProperties().Where(propertyInfo => propertyInfo.CanWrite))
{
propertyInfo.SetValue(Instance, propertyInfo.GetValue(configuration));
}
}
#region Public properties
/// <summary>
/// Gets the root directory of the ScpToolkit installation.
/// </summary>
public static string AppDirectory { get { return WorkingDirectory; } }
public bool FlipLX
{
get { return Settings.Default.FlipAxisLx; }
set { Settings.Default.FlipAxisLx = value; }
}
public bool FlipLY
{
get { return Settings.Default.FlipAxisLy; }
set { Settings.Default.FlipAxisLy = value; }
}
public bool FlipRX
{
get { return Settings.Default.FlipAxisRx; }
set { Settings.Default.FlipAxisRx = value; }
}
public bool FlipRY
{
get { return Settings.Default.FlipAxisRy; }
set { Settings.Default.FlipAxisRy = value; }
}
public bool DisableRumble
{
get { return Settings.Default.DisableRumble; }
set { Settings.Default.DisableRumble = value; }
}
public bool SwapTriggers
{
get { return Settings.Default.SwapTriggers; }
set { Settings.Default.SwapTriggers = value; }
}
public bool IsLightBarDisabled
{
get { return Settings.Default.Ds4LightBarBrightness == 0; }
}
public bool IdleDisconnect
{
get { return Settings.Default.IdleTimeout != 0; }
}
public int IdleTimeout
{
get { return Settings.Default.IdleTimeout; }
set { Settings.Default.IdleTimeout = value; }
}
public int Latency
{
get { return Settings.Default.Ds3RumbleLatency; }
set { Settings.Default.Ds3RumbleLatency = value; }
}
public byte DeadZoneL
{
get { return Settings.Default.DeadZoneL; }
set { Settings.Default.DeadZoneL = value; }
}
public byte DeadZoneR
{
get { return Settings.Default.DeadZoneR; }
set { Settings.Default.DeadZoneR = value; }
}
public bool DisableNative
{
get { return Settings.Default.DisableNativeFeed; }
set { Settings.Default.DisableNativeFeed = value; }
}
public bool DisableSSP
{
get { return Settings.Default.DisableSecureSimplePairing; }
set { Settings.Default.DisableSecureSimplePairing = value; }
}
public bool UseAsyncHidReportProcessing
{
get { return Settings.Default.UseAsyncHidReportProcessing; }
set { Settings.Default.UseAsyncHidReportProcessing = value; }
}
public byte Brightness
{
get { return Settings.Default.Ds4LightBarBrightness; }
set { Settings.Default.Ds4LightBarBrightness = value; }
}
public int Bus
{
get { return Settings.Default.BusId; }
set { Settings.Default.BusId = value; }
}
public bool Repair
{
get { return Settings.Default.Ds4Repair; }
set { Settings.Default.Ds4Repair = value; }
}
public bool Ds4ShowBatteryInfo
{
get { return Settings.Default.Ds4ShowBatteryInfo; }
set { Settings.Default.Ds4ShowBatteryInfo = value; }
}
public uint Ds4ColorFull
{
get { return Settings.Default.Ds4ColorFull; }
set { Settings.Default.Ds4ColorFull = value; }
}
public uint Ds4ColorHigh
{
get { return Settings.Default.Ds4ColorHigh; }
set { Settings.Default.Ds4ColorHigh = value; }
}
public uint Ds4ColorMedium
{
get { return Settings.Default.Ds4ColorMedium; }
set { Settings.Default.Ds4ColorMedium = value; }
}
public uint Ds4ColorLow
{
get { return Settings.Default.Ds4ColorLow; }
set { Settings.Default.Ds4ColorLow = value; }
}
public uint Ds4ColorDying
{
get { return Settings.Default.Ds4ColorDying; }
set { Settings.Default.Ds4ColorDying = value; }
}
public byte[] BdLink
{
get { return MBdLink; }
}
public Ds4UpdateRate Ds4InputUpdateDelay
{
get { return (Ds4UpdateRate)Settings.Default.Ds4InputUpdateDelay; }
set
{
if (Enum.IsDefined(typeof(Ds4UpdateRate), value))
Settings.Default.Ds4InputUpdateDelay = (byte)value;
}
}
public bool ProfilesEnabled
{
get { return Settings.Default.ProfilesEnabled; }
set { Settings.Default.ProfilesEnabled = value; }
}
#region Service settings
public bool ForceBluetoothDriverReinstallation
{
get { return Settings.Default.ForceBluetoothDriverReinstallation; }
set { Settings.Default.ForceBluetoothDriverReinstallation = value; }
}
public bool ForceDs3DriverReinstallation
{
get { return Settings.Default.ForceDs3DriverReinstallation; }
set { Settings.Default.ForceDs3DriverReinstallation = value; }
}
public bool ForceDs4DriverReinstallation
{
get { return Settings.Default.ForceDs4DriverReinstallation; }
set { Settings.Default.ForceDs4DriverReinstallation = value; }
}
public bool IsVBusDisabled
{
get { return Settings.Default.IsVBusDisabled; }
set { Settings.Default.IsVBusDisabled = value; }
}
public bool AlwaysUnPlugVirtualBusDevice
{
get { return Settings.Default.AlwaysUnPlugVirtualBusDevice; }
set { Settings.Default.AlwaysUnPlugVirtualBusDevice = value; }
}
public bool ReservePadSlot
{
get { return Settings.Default.ReservePadSlot; }
set { Settings.Default.ReservePadSlot = value; }
}
public ProcessPriorityClass ServiceProcessPriority
{
get { return Settings.Default.ServiceProcessPriority; }
set { Settings.Default.ServiceProcessPriority = value; }
}
#endregion
#region Sound settings
public bool SoundsEnabled
{
get { return Settings.Default.SoundsEnabled; }
set { Settings.Default.SoundsEnabled = value; }
}
public string StartupSoundFile
{
get
{
return Path.IsPathRooted(Settings.Default.StartupSoundFile)
? Settings.Default.StartupSoundFile
: Path.Combine(WorkingDirectory, Settings.Default.StartupSoundFile);
}
set { Settings.Default.StartupSoundFile = value; }
}
public string UsbConnectSoundFile
{
get
{
return Path.IsPathRooted(Settings.Default.UsbConnectSoundFile)
? Settings.Default.UsbConnectSoundFile
: Path.Combine(WorkingDirectory, Settings.Default.UsbConnectSoundFile);
}
set { Settings.Default.UsbConnectSoundFile = value; }
}
public string UsbDisconnectSoundFile
{
get
{
return Path.IsPathRooted(Settings.Default.UsbDisconnectSoundFile)
? Settings.Default.UsbDisconnectSoundFile
: Path.Combine(WorkingDirectory, Settings.Default.UsbDisconnectSoundFile);
}
set { Settings.Default.UsbDisconnectSoundFile = value; }
}
public string BluetoothConnectSoundFile
{
get
{
return Path.IsPathRooted(Settings.Default.BluetoothConnectSoundFile)
? Settings.Default.BluetoothConnectSoundFile
: Path.Combine(WorkingDirectory, Settings.Default.BluetoothConnectSoundFile);
}
set { Settings.Default.BluetoothConnectSoundFile = value; }
}
public string BluetoothDisconnectSoundFile
{
get
{
return Path.IsPathRooted(Settings.Default.BluetoothDisconnectSoundFile)
? Settings.Default.BluetoothDisconnectSoundFile
: Path.Combine(WorkingDirectory, Settings.Default.BluetoothDisconnectSoundFile);
}
set { Settings.Default.BluetoothDisconnectSoundFile = value; }
}
public bool IsStartupSoundEnabled
{
get { return Settings.Default.IsStartupSoundEnabled; }
set { Settings.Default.IsStartupSoundEnabled = value; }
}
public bool IsUsbConnectSoundEnabled
{
get { return Settings.Default.IsUsbConnectSoundEnabled; }
set { Settings.Default.IsUsbConnectSoundEnabled = value; }
}
public bool IsUsbDisconnectSoundEnabled
{
get { return Settings.Default.IsUsbDisconnectSoundEnabled; }
set { Settings.Default.IsUsbDisconnectSoundEnabled = value; }
}
public bool IsBluetoothConnectSoundEnabled
{
get { return Settings.Default.IsBluetoothConnectSoundEnabled; }
set { Settings.Default.IsBluetoothConnectSoundEnabled = value; }
}
public bool IsBluetoothDisconnectSoundEnabled
{
get { return Settings.Default.IsBluetoothDisconnectSoundEnabled; }
set { Settings.Default.IsBluetoothDisconnectSoundEnabled = value; }
}
#endregion
#region DS3 LED settings
public int Ds3LEDsPeriod
{
get { return Settings.Default.Ds3LEDsFlashingPeriod; }
set { Settings.Default.Ds3LEDsFlashingPeriod = value; }
}
public int Ds3LEDsFunc
{
get { return Settings.Default.Ds3LEDsFunction; }
set { Settings.Default.Ds3LEDsFunction = value; }
}
public bool Ds3PadIDLEDsFlashCharging
{
get { return Settings.Default.Ds3PadIDLEDsFlashCharging; }
set { Settings.Default.Ds3PadIDLEDsFlashCharging = value; }
}
public bool Ds3LEDsCustom1
{
get { return Settings.Default.Ds3LEDsCustom1; }
set { Settings.Default.Ds3LEDsCustom1 = value; }
}
public bool Ds3LEDsCustom2
{
get { return Settings.Default.Ds3LEDsCustom2; }
set { Settings.Default.Ds3LEDsCustom2 = value; }
}
public bool Ds3LEDsCustom3
{
get { return Settings.Default.Ds3LEDsCustom3; }
set { Settings.Default.Ds3LEDsCustom3 = value; }
}
public bool Ds3LEDsCustom4
{
get { return Settings.Default.Ds3LEDsCustom4; }
set { Settings.Default.Ds3LEDsCustom4 = value; }
}
#endregion
#region PCSX2 settings
public string Pcsx2RootPath
{
get { return Settings.Default.Pcsx2RootPath; }
set { Settings.Default.Pcsx2RootPath = value; }
}
public bool? IsPressureSensitivityModEnabled
{
get { return Settings.Default.IsPressureSensitivityModEnabled; }
set { Settings.Default.IsPressureSensitivityModEnabled = (value == true); }
}
#endregion
#endregion
}
}