Merged Electrobrain's beta 10: this tool now uses ScpVBus devices 11-14, so other vitrual xinput tools don't have conflict

Also slight reorganization for context menu
This commit is contained in:
jays2kings 2014-04-29 23:54:41 -04:00
parent 335a411230
commit b2aef9a984
5 changed files with 51 additions and 22 deletions

View File

@ -77,7 +77,7 @@ namespace DS4Control
touchPad[ind] = new Mouse(ind, device);
DS4Color color = Global.loadColor(ind);
device.LightBarColor = color;
x360Bus.Plugin(ind + 1);
x360Bus.Plugin(ind);
device.Report += this.On_Report;
//m_switcher.setMode(Global.getInitialMode(ind));
TouchPadOn(ind, device);
@ -111,10 +111,9 @@ namespace DS4Control
if (DS4Controllers[i] != null)
{
CurrentState[i].Battery = PreviousState[i].Battery = 0; // Reset for the next connection's initial status change.
x360Bus.Unplug(i + 1);
x360Bus.Unplug(i);
anyUnplugged = true;
DS4Controllers[i] = null;
//modeSwitcher[i] = null;
touchPad[i] = null;
}
}
@ -164,7 +163,7 @@ namespace DS4Control
touchPad[Index] = new Mouse(Index, device);
device.LightBarColor = Global.loadColor(Index);
device.Report += this.On_Report;
x360Bus.Plugin(Index + 1);
x360Bus.Plugin(Index);
//m_switcher.setMode(Global.getInitialMode(Index));
TouchPadOn(Index, device);
LogDebug("Controller: " + device.MacAddress + " is ready to use");
@ -253,7 +252,7 @@ namespace DS4Control
if (ind != -1)
{
CurrentState[ind].Battery = PreviousState[ind].Battery = 0; // Reset for the next connection's initial status change.
x360Bus.Unplug(ind + 1);
x360Bus.Unplug(ind);
LogDebug("Controller " + device.MacAddress + " was removed or lost connection");
Log.LogToTray("Controller " + device.MacAddress + " was removed or lost connection");
System.Threading.Thread.Sleep(XINPUT_UNPLUG_SETTLE_TIME);

View File

@ -10,9 +10,18 @@ namespace DS4Control
{
public partial class X360Device : ScpDevice
{
public const String DS3_BUS_CLASS_GUID = "{F679F562-3164-42CE-A4DB-E7DDBE723909}";
private const String DS3_BUS_CLASS_GUID = "{F679F562-3164-42CE-A4DB-E7DDBE723909}";
private const int CONTROLLER_OFFSET = 1 + 10; // Device 0 is the virtual USB hub itself, and we leave devices 1-10 available for other software (like the Scarlet.Crush DualShock driver itself)
protected virtual Int32 Scale(Int32 Value, Boolean Flip)
private int firstController = 1 + 10;
// Device 0 is the virtual USB hub itself, and we can leave more available for other software (like the Scarlet.Crush DualShock driver)
public int FirstController
{
get { return firstController; }
set { firstController = value > 0 ? value : 1; }
}
protected Int32 Scale(Int32 Value, Boolean Flip)
{
Value -= 0x80;
@ -38,14 +47,14 @@ namespace DS4Control
}
public override Boolean Open(int Instance = 0)
/* public override Boolean Open(int Instance = 0)
{
if (base.Open(Instance))
{
}
return true;
}
} */
public override Boolean Open(String DevicePath)
{
@ -90,10 +99,10 @@ namespace DS4Control
}
public virtual void Parse(DS4State state, Byte[] Output, int device)
public void Parse(DS4State state, Byte[] Output, int device)
{
Output[0] = 0x1C;
Output[4] = (Byte)(device + 1);
Output[4] = (Byte)(device + firstController);
Output[9] = 0x14;
for (int i = 10; i < Output.Length; i++)
@ -141,7 +150,7 @@ namespace DS4Control
Output[21] = (Byte)((ThumbRY >> 8) & 0xFF);
}
public virtual Boolean Plugin(Int32 Serial)
public Boolean Plugin(Int32 Serial)
{
if (IsActive)
{
@ -153,6 +162,7 @@ namespace DS4Control
Buffer[2] = 0x00;
Buffer[3] = 0x00;
Serial += firstController;
Buffer[4] = (Byte)((Serial >> 0) & 0xFF);
Buffer[5] = (Byte)((Serial >> 8) & 0xFF);
Buffer[6] = (Byte)((Serial >> 16) & 0xFF);
@ -164,7 +174,7 @@ namespace DS4Control
return false;
}
public virtual Boolean Unplug(Int32 Serial)
public Boolean Unplug(Int32 Serial)
{
if (IsActive)
{
@ -176,6 +186,7 @@ namespace DS4Control
Buffer[2] = 0x00;
Buffer[3] = 0x00;
Serial += firstController;
Buffer[4] = (Byte)((Serial >> 0) & 0xFF);
Buffer[5] = (Byte)((Serial >> 8) & 0xFF);
Buffer[6] = (Byte)((Serial >> 16) & 0xFF);
@ -187,8 +198,26 @@ namespace DS4Control
return false;
}
public Boolean UnplugAll() //not yet implemented, not sure if will
{
if (IsActive)
{
Int32 Transfered = 0;
Byte[] Buffer = new Byte[16];
public virtual Boolean Report(Byte[] Input, Byte[] Output)
Buffer[0] = 0x10;
Buffer[1] = 0x00;
Buffer[2] = 0x00;
Buffer[3] = 0x00;
return DeviceIoControl(m_FileHandle, 0x2A4004, Buffer, Buffer.Length, null, 0, ref Transfered, IntPtr.Zero);
}
return false;
}
public Boolean Report(Byte[] Input, Byte[] Output)
{
if (IsActive)
{

View File

@ -656,7 +656,8 @@ namespace ScpServer
private void Options_Closed(object sender, FormClosedEventArgs e)
{
Global.LoadProfile(device);
for (int i = 0; i < 4; i++)
Global.LoadProfile(i); //Refreshes all profiles in case other controllers are using the same profile
mainWin.RefreshProfiles();
}

View File

@ -524,15 +524,15 @@
// cMTaskbar
//
this.cMTaskbar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.openToolStripMenuItem,
this.toolStripSeparator1,
this.editProfileForController1ToolStripMenuItem,
this.editProfileForController2ToolStripMenuItem,
this.editProfileForController3ToolStripMenuItem,
this.editProfileForController4ToolStripMenuItem,
this.toolStripSeparator1,
this.openToolStripMenuItem,
this.exitToolStripMenuItem});
this.cMTaskbar.Name = "cMTaskbar";
this.cMTaskbar.Size = new System.Drawing.Size(215, 142);
this.cMTaskbar.Size = new System.Drawing.Size(215, 164);
this.cMTaskbar.Tag = "25";
//
// openToolStripMenuItem

View File

@ -86,10 +86,10 @@ namespace ScpServer
dbns = new Button[4] { bnDeleteC1, bnDeleteC2, bnDeleteC3, bnDeleteC4 };
protexts = new Label[4] { lbSelPro1, lbSelPro2, lbSelPro3, lbSelPro4 };
shortcuts = new ToolStripMenuItem[4] { (ToolStripMenuItem)notifyIcon1.ContextMenuStrip.Items[2],
(ToolStripMenuItem)notifyIcon1.ContextMenuStrip.Items[3],
(ToolStripMenuItem)notifyIcon1.ContextMenuStrip.Items[4],
(ToolStripMenuItem)notifyIcon1.ContextMenuStrip.Items[5] };
shortcuts = new ToolStripMenuItem[4] { (ToolStripMenuItem)notifyIcon1.ContextMenuStrip.Items[0],
(ToolStripMenuItem)notifyIcon1.ContextMenuStrip.Items[1],
(ToolStripMenuItem)notifyIcon1.ContextMenuStrip.Items[2],
(ToolStripMenuItem)notifyIcon1.ContextMenuStrip.Items[3] };
foreach (ToolStripMenuItem t in shortcuts)
t.DropDownItemClicked += Profile_Changed_Menu;