# HG changeset patch
# User StephaneLenclud
# Date 1426602958 -3600
# Node ID 2d5955694057865e75856f638bd406c4537c6572
# Parent 312160defeac87de35bf6150b560db20c45d0389
Switch solution to 2013.
Event repeat now a Handler option.
Handler now deregisters devices when disposed.
Adding Thinkpad custom usages.
diff -r 312160defeac -r 2d5955694057 Hid/HidEvent.cs
--- a/Hid/HidEvent.cs Sun Mar 15 21:26:51 2015 +0100
+++ b/Hid/HidEvent.cs Tue Mar 17 15:35:58 2015 +0100
@@ -115,7 +115,7 @@
/// Initialize an HidEvent from a WM_INPUT message
///
/// Device Handle as provided by RAWINPUTHEADER.hDevice, typically accessed as rawinput.header.hDevice
- public Event(Message aMessage, HidEventRepeatDelegate aRepeatDelegate)
+ public Event(Message aMessage, HidEventRepeatDelegate aRepeatDelegate, bool aRepeat)
{
RepeatCount = 0;
IsValid = false;
@@ -236,10 +236,10 @@
}
//
- if (IsButtonDown)
+ if (IsButtonDown && aRepeat)
{
//TODO: Make this optional
- //StartRepeatTimer(iRepeatDelay);
+ StartRepeatTimer(iRepeatDelay);
}
IsValid = true;
@@ -527,20 +527,12 @@
}
UsagePage usagePage = (UsagePage)UsagePage;
- switch (usagePage)
+ string name = Enum.GetName(Utils.UsageType(usagePage), usage);
+ if (name == null)
{
- case Hid.UsagePage.Consumer:
- usageText += ((ConsumerControl)usage).ToString();
- break;
-
- case Hid.UsagePage.WindowsMediaCenterRemoteControl:
- usageText += ((WindowsMediaCenterRemoteControl)usage).ToString();
- break;
-
- default:
- usageText += usage.ToString("X2");
- break;
+ name += usage.ToString("X2");
}
+ usageText += name;
}
//If we are a gamepad display axis and dpad values
diff -r 312160defeac -r 2d5955694057 Hid/HidHandler.cs
--- a/Hid/HidHandler.cs Sun Mar 15 21:26:51 2015 +0100
+++ b/Hid/HidHandler.cs Tue Mar 17 15:35:58 2015 +0100
@@ -33,19 +33,40 @@
///
/// Our HID handler manages raw input registrations, processes WM_INPUT messages and broadcasts HID events in return.
///
- public class Handler
+ public class Handler : IDisposable
{
public delegate void HidEventHandler(object aSender, Event aHidEvent);
public event HidEventHandler OnHidEvent;
List iHidEvents;
+ RAWINPUTDEVICE[] iRawInputDevices;
public bool IsRegistered { get; private set; }
+ public bool ManageRepeats { get; private set; }
- public Handler(RAWINPUTDEVICE[] aRawInputDevices)
+ public Handler(RAWINPUTDEVICE[] aRawInputDevices, bool aManageRepeats=false)
{
- iHidEvents=new List();
- IsRegistered = Function.RegisterRawInputDevices(aRawInputDevices, (uint)aRawInputDevices.Length, (uint)Marshal.SizeOf(aRawInputDevices[0]));
+ iRawInputDevices = aRawInputDevices;
+ iHidEvents = new List();
+ IsRegistered = Function.RegisterRawInputDevices(iRawInputDevices, (uint)iRawInputDevices.Length, (uint)Marshal.SizeOf(iRawInputDevices[0]));
+ ManageRepeats = aManageRepeats;
+ }
+
+ ///
+ /// Will de-register devices.
+ ///
+ public void Dispose()
+ {
+ //Setup device removal
+ for (int i=0; i
@@ -60,7 +81,7 @@
return;
}
- Event hidEvent = new Event(aMessage, OnHidEventRepeat);
+ Event hidEvent = new Event(aMessage, OnHidEventRepeat, ManageRepeats);
hidEvent.DebugWrite();
if (!hidEvent.IsValid || !hidEvent.IsGeneric)
@@ -70,23 +91,26 @@
}
//
- if (hidEvent.IsButtonUp)
+ if (ManageRepeats)
{
- //This is a key up event
- //We need to discard any events belonging to the same page and collection
- for (int i = (iHidEvents.Count-1); i >= 0; i--)
+ if (hidEvent.IsButtonUp)
{
- if (iHidEvents[i].UsageId == hidEvent.UsageId)
+ //This is a key up event
+ //We need to discard any events belonging to the same page and collection
+ for (int i = (iHidEvents.Count - 1); i >= 0; i--)
{
- iHidEvents[i].Dispose();
- iHidEvents.RemoveAt(i);
+ if (iHidEvents[i].UsageId == hidEvent.UsageId)
+ {
+ iHidEvents[i].Dispose();
+ iHidEvents.RemoveAt(i);
+ }
}
}
- }
- else
- {
- //Keep that event until we get a key up message
- iHidEvents.Add(hidEvent);
+ else
+ {
+ //Keep that event until we get a key up message
+ iHidEvents.Add(hidEvent);
+ }
}
//Broadcast our events
diff -r 312160defeac -r 2d5955694057 Hid/HidUsageTables.cs
--- a/Hid/HidUsageTables.cs Sun Mar 15 21:26:51 2015 +0100
+++ b/Hid/HidUsageTables.cs Tue Mar 17 15:35:58 2015 +0100
@@ -22,7 +22,7 @@
///
/// From USB HID usage tables.
/// http://www.usb.org/developers/hidpage#HID_Usage
- /// http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf
+ /// http://www.usb.org/developers/hidpage/Hut1_12v2.pdf
///
public enum UsagePage : ushort
{
@@ -322,6 +322,19 @@
Microphone = 0x04,
Headphone = 0x05,
GraphicEqualizer = 0x06,
+ ThinkPadMicrophoneMute = 0x10, //Custom
+ ThinkPadVantage = 0x11, //Custom
+ ThinkPadSystemLock = 0x12, //Custom
+ ThinkPadPowerManagement = 0x13, //Custom
+ ThinkPadWirelessNetwork = 0x14, //Custom
+ ThinkPadCamera = 0x15, //Custom
+ ThinkPadDisplayScheme = 0x16, //Custom
+ ThinkPadMouseProperties = 0x17, //Custom
+ ThinkPadEject = 0x18, //Custom
+ ThinkPadSystemHibernate = 0x19, //Custom
+ ThinkPadBrightnessIncrement = 0x1A, //Custom
+ ThinkPadBrightnessDecrement = 0x1B, //Custom
+ ThinkPadFullscreenMagnifier = 0x1D, //Custom
Plus10 = 0x20,
Plus100 = 0x21,
AmPm = 0x22,
diff -r 312160defeac -r 2d5955694057 MainForm.Designer.cs
--- a/MainForm.Designer.cs Sun Mar 15 21:26:51 2015 +0100
+++ b/MainForm.Designer.cs Tue Mar 17 15:35:58 2015 +0100
@@ -51,6 +51,7 @@
this.textBoxTests = new System.Windows.Forms.TextBox();
this.statusStrip = new System.Windows.Forms.StatusStrip();
this.toolStripStatusLabelDevice = new System.Windows.Forms.ToolStripStatusLabel();
+ this.checkBoxRepeat = new System.Windows.Forms.CheckBox();
this.tabControl.SuspendLayout();
this.tabPageMessages.SuspendLayout();
this.tabPageDevices.SuspendLayout();
@@ -83,6 +84,7 @@
//
// tabPageMessages
//
+ this.tabPageMessages.Controls.Add(this.checkBoxRepeat);
this.tabPageMessages.Controls.Add(this.listViewEvents);
this.tabPageMessages.Controls.Add(this.buttonClear);
this.tabPageMessages.Location = new System.Drawing.Point(4, 22);
@@ -231,6 +233,17 @@
this.toolStripStatusLabelDevice.Size = new System.Drawing.Size(61, 17);
this.toolStripStatusLabelDevice.Text = "No Device";
//
+ // checkBoxRepeat
+ //
+ this.checkBoxRepeat.AutoSize = true;
+ this.checkBoxRepeat.Location = new System.Drawing.Point(813, 46);
+ this.checkBoxRepeat.Name = "checkBoxRepeat";
+ this.checkBoxRepeat.Size = new System.Drawing.Size(61, 17);
+ this.checkBoxRepeat.TabIndex = 4;
+ this.checkBoxRepeat.Text = "Repeat";
+ this.checkBoxRepeat.UseVisualStyleBackColor = true;
+ this.checkBoxRepeat.CheckedChanged += new System.EventHandler(this.checkBoxRepeat_CheckedChanged);
+ //
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
@@ -243,6 +256,7 @@
this.Load += new System.EventHandler(this.MainForm_Load);
this.tabControl.ResumeLayout(false);
this.tabPageMessages.ResumeLayout(false);
+ this.tabPageMessages.PerformLayout();
this.tabPageDevices.ResumeLayout(false);
this.tabPageTests.ResumeLayout(false);
this.tabPageTests.PerformLayout();
@@ -273,6 +287,7 @@
private System.Windows.Forms.TabPage tabPageTests;
private System.Windows.Forms.TextBox textBoxTests;
private System.Windows.Forms.Button buttonRefresh;
+ private System.Windows.Forms.CheckBox checkBoxRepeat;
}
}
diff -r 312160defeac -r 2d5955694057 MainForm.cs
--- a/MainForm.cs Sun Mar 15 21:26:51 2015 +0100
+++ b/MainForm.cs Tue Mar 17 15:35:58 2015 +0100
@@ -69,6 +69,14 @@
// remote device. See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwmt/html/remote_control.asp
// for the vendor defined usage page.
+ if (iHidHandler!=null)
+ {
+ //First de-register
+ iHidHandler.Dispose();
+ iHidHandler = null;
+ }
+
+
RAWINPUTDEVICE[] rid = new RAWINPUTDEVICE[5];
int i = 0;
@@ -114,7 +122,7 @@
//rid[i].hwndTarget = aHWND;
- iHidHandler = new SharpLib.Hid.Handler(rid);
+ iHidHandler = new SharpLib.Hid.Handler(rid, checkBoxRepeat.Checked);
if (!iHidHandler.IsRegistered)
{
Debug.WriteLine("Failed to register raw input devices: " + Marshal.GetLastWin32Error().ToString());
@@ -182,5 +190,10 @@
SharpLib.Win32.RawInput.PopulateDeviceList(treeViewDevices);
}
+ private void checkBoxRepeat_CheckedChanged(object sender, EventArgs e)
+ {
+ RegisterHidDevices();
+ }
+
}
}
diff -r 312160defeac -r 2d5955694057 Rebracer.xml
--- a/Rebracer.xml Sun Mar 15 21:26:51 2015 +0100
+++ b/Rebracer.xml Tue Mar 17 15:35:58 2015 +0100
@@ -11,8 +11,8 @@
TODO:2
- HACK:2
- UNDONE:2
+ UNDONE:2
+ HACK:2
UnresolvedMergeConflict:3
true
@@ -93,7 +93,7 @@
true
true
true
- Implicit (Windows)|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\libhelp.js|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\sitetypesWindows.js|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\domWindows.js|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\underscorefilter.js|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\showPlainComments.js;Implicit (Web)|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\libhelp.js|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\sitetypesWeb.js|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\domWeb.js|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\underscorefilter.js|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\showPlainComments.js|~/Scripts/_references.js;Dedicated Worker|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\libhelp.js|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\dedicatedworker.js|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\underscorefilter.js|C:\Program Files (x86)\Microsoft Visual Studio 11.0\JavaScript\References\showPlainComments.js;
+ Implicit (Windows 8)|$(VSInstallDir)\JavaScript\References\libhelp.js|$(VSInstallDir)\JavaScript\References\sitetypesWindows.js|$(VSInstallDir)\JavaScript\References\domWindows_8.0.js|$(VSInstallDir)\JavaScript\References\underscorefilter.js|$(VSInstallDir)\JavaScript\References\showPlainComments.js;Implicit (Windows 8.1)|$(VSInstallDir)\JavaScript\References\libhelp.js|$(VSInstallDir)\JavaScript\References\sitetypesWindows.js|$(VSInstallDir)\JavaScript\References\domWindows_8.1.js|$(VSInstallDir)\JavaScript\References\underscorefilter.js|$(VSInstallDir)\JavaScript\References\showPlainComments.js;Implicit (Windows Phone 8.1)|$(VSInstallDir)\JavaScript\References\libhelp.js|$(VSInstallDir)\JavaScript\References\sitetypesWindows.js|$(VSInstallDir)\JavaScript\References\domWindowsPhone_8.1.js|$(VSInstallDir)\JavaScript\References\underscorefilter.js|$(VSInstallDir)\JavaScript\References\showPlainComments.js;Implicit (Web)|$(VSInstallDir)\JavaScript\References\libhelp.js|$(VSInstallDir)\JavaScript\References\sitetypesWeb.js|$(VSInstallDir)\JavaScript\References\domWeb.js|$(VSInstallDir)\JavaScript\References\underscorefilter.js|$(VSInstallDir)\JavaScript\References\showPlainComments.js|~/Scripts/_references.js;Dedicated Worker|$(VSInstallDir)\JavaScript\References\libhelp.js|$(VSInstallDir)\JavaScript\References\dedicatedworker.js|$(VSInstallDir)\JavaScript\References\underscorefilter.js|$(VSInstallDir)\JavaScript\References\showPlainComments.js;Generic|$(VSInstallDir)\JavaScript\References\libhelp.js|$(VSInstallDir)\JavaScript\References\underscorefilter.js|$(VSInstallDir)\JavaScript\References\showPlainComments.js;
true
true
true
diff -r 312160defeac -r 2d5955694057 SharpLibHid.sln
--- a/SharpLibHid.sln Sun Mar 15 21:26:51 2015 +0100
+++ b/SharpLibHid.sln Tue Mar 17 15:35:58 2015 +0100
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2012
+# Visual Studio 2013
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E70B5E73-7045-4EA7-968D-06BB68773DAB}"
ProjectSection(SolutionItems) = preProject
Rebracer.xml = Rebracer.xml
diff -r 312160defeac -r 2d5955694057 Win32/Win32RawInput.cs
--- a/Win32/Win32RawInput.cs Sun Mar 15 21:26:51 2015 +0100
+++ b/Win32/Win32RawInput.cs Tue Mar 17 15:35:58 2015 +0100
@@ -110,7 +110,7 @@
///
/// If set, the application command keys are handled. RIDEV_APPKEYS can be specified only if RIDEV_NOLEGACY is specified for a keyboard device.
- ///
+ ///
public const uint RIDEV_APPKEYS = 0x00000400;
///