This commit is contained in:
EonaCat 2024-07-26 19:23:39 +02:00
parent ebc1d98195
commit 13d7af79f5
28 changed files with 1675 additions and 1938 deletions

View File

@ -1,15 +1,11 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;
namespace EonaCat.HID.Analyzer
{
partial class AboutBox : Form
internal partial class AboutBox : Form
{
public AboutBox()
{
@ -105,4 +101,4 @@ namespace EonaCat.HID.Analyzer
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
</configuration>
</configuration>

View File

@ -7,8 +7,8 @@
<ProjectGuid>{61994020-DB89-4621-BA4B-7347A2142CFF}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>USB_HID_Analyzer</RootNamespace>
<AssemblyName>USB HID Analyzer</AssemblyName>
<RootNamespace>EonaCat.HID</RootNamespace>
<AssemblyName>EonaCat HID Analyzer</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />

View File

@ -1,23 +1,21 @@
using System;
using EonaCat.HID.Helpers;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Reflection;
using EonaCat.HID.Helpers;
using System.Windows.Forms;
namespace EonaCat.HID.Analyzer
{
public partial class MainForm : Form
{
const int WriteReportTimeout = 3000;
private const int WriteReportTimeout = 3000;
Device _device;
List<Device> _deviceList;
private Device _device;
private List<Device> _deviceList;
public MainForm()
{
@ -65,39 +63,44 @@ namespace EonaCat.HID.Analyzer
rtbEventLog.SelectionLength = 0;
rtbEventLog.SelectionColor = currentColor;
rtbEventLog.AppendText(result);
if (!rtbEventLog.Focused) rtbEventLog.ScrollToCaret();
if (!rtbEventLog.Focused)
{
rtbEventLog.ScrollToCaret();
}
}));
}
private void UpdateDeviceList()
{
var count = 0;
dataGridView1.SelectionChanged -= DataGridView1_SelectionChanged;
dataGridView1.Rows.Clear();
foreach (var device in _deviceList)
for (int i = 0; i < _deviceList.Count; i++)
{
count++;
Device device = _deviceList[i];
var deviceName = "";
var deviceManufacturer = "";
var deviceSerialNumber = "";
var info = device.Info;
var capabilities = device.Capabilities;
deviceName = device.ReadProductName();
deviceManufacturer = device.ReadManufacturer();
deviceSerialNumber = device.ReadSerialNumber();
var row = new string[]
{
count.ToString(),
$"VID_{info.VendorId:X4} PID_{info.ProductId:X4} REV_{info.Version:X4}",
(i + 1).ToString(),
deviceName,
deviceManufacturer,
deviceSerialNumber,
capabilities.InputReportByteLength.ToString(),
capabilities.OutputReportByteLength.ToString(),
capabilities.FeatureReportByteLength.ToString(),
string.Format("{0:X2}", capabilities.Usage),
string.Format("{0:X4}", capabilities.UsagePage),
$"Vendor:{info.VendorId:X4} Product:{info.ProductId:X4} Revision:{info.Version:X4}",
device.DevicePath
};
dataGridView1.Rows.Add(row);
@ -180,17 +183,26 @@ namespace EonaCat.HID.Analyzer
}
private void ToolStripButtonConnect_Click(object sender, EventArgs e)
{
ConnectToSelectedDevice();
}
private void ConnectToSelectedDevice()
{
try
{
_device = _deviceList[dataGridView1.SelectedRows[0].Index];
if (_device == null) throw new Exception("Could not find Hid USB Device with specified VID PID");
if (_device == null)
{
throw new Exception("Could not find Hid USB Device with specified VID PID");
}
// open as read write in parallel
// Open a device for reading and writing
_device.OpenDevice(DeviceMode.Overlapped, DeviceMode.Overlapped, ShareMode.ShareRead | ShareMode.ShareWrite);
_device.OnInserted += HidDevice_Inserted;
_device.OnRemoved += HidDevice_Removed;
_device.MonitorDeviceEvents = true;
AppendEventLog($"Connected to device {_device.ReadProductName()}", Color.Green);
}
catch (Exception ex)
{
@ -332,9 +344,9 @@ namespace EonaCat.HID.Analyzer
{
try
{
var str = string.Format("Inserted Hid Device --> VID {0:X4}, PID {0:X4}", _device.Info.VendorId, _device.Info.ProductId);
AppendEventLog(str);
//_device.ReadReport(_device_InputReportReceived);
var str = string.Format("Inserted Device --> VID {0:X4}, PID {0:X4}", _device.Info.VendorId, _device.Info.ProductId);
AppendEventLog(str, Color.Orange);
_device.ReadReport(Device_InputReportReceived);
}
catch (Exception ex)
{
@ -359,7 +371,7 @@ namespace EonaCat.HID.Analyzer
{
try
{
if (!_device.IsConnected || !_device.IsOpen) return;
if (!_device.IsConnected || !_device.IsOpen || report.Data == null) return;
var str = $"Rx Input Report [{report.Data.Length + 1}] <-- ID:{report.ReportId}, {ByteHelper.ByteArrayToHexString(report.Data)}";
AppendEventLog(str, Color.Blue);
_device.ReadReport(Device_InputReportReceived);
@ -369,5 +381,10 @@ namespace EonaCat.HID.Analyzer
PopupException(ex.Message);
}
}
private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
ConnectToSelectedDevice();
}
}
}
}

View File

@ -120,9 +120,6 @@
<metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column9.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -141,10 +138,7 @@
<metadata name="Column5.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column6.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column8.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
@ -154,140 +148,68 @@
<value>132, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="newToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAERSURBVDhPrZDbSgJRGIXnpewd6jXsjSQvIrwoI0RQMChU
0iiDPCGiE3ZCRkvR8VzTeBhnyR5/ccaZNnPhB4t9sdf6Ln5hb8QeathNJFVFKF5C8DqL4ksDVHWGDf7j
LHyPg6NjviSaFqlu5yQYR+KpupaIkrMknCxT3Y7v/NYYb0ITK1c3BarbWWhLQ7IR0cTKReyZ6lZ0XYei
ztHpK4bAc+h1FgQijzSxMptrGIxVSO0xX3AaStFki7bUMVFmaMm/eJMGfIH/MkGzLep0AXn4h/r3CJV3
mS9gn2bY4UY/UzQ7E9TqfeTFtnuB+XAfzSHKr11kSl/uBebDiZ89ZCst3OUkdwL28sIVsE83ock+EIQV
2Mz2wxeg6/UAAAAASUVORK5CYII=
</value>
</data>
<data name="openToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp
olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4
4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm
YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl
5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd
HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX
0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc
hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv
S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt
5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg
g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC
</value>
</data>
<data name="saveToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIySURBVDhPrZLfS5NRGMfff6H7boIuuq2pMZyL1eAt11CW
DcOKsB9vpFmaLtNExco0av6CbIVLJ61Wk3BSkT/AFCkRZSpZmrmiJQ41xSaCwdfznL15XEUX0Reem5f3
8znnec4j/Zc8fxYGla91CS3eRTx0z6OpMYS7jmnU1X6B/VYA18snUVoyjsKCt8jLHcH5c36ouCQR2NUJ
1Nas4G9ZXlmFKbULh1Kf8lJxSfI+WeCCyopv6q+/h+DQ/DJ2WV5Ao1FgPegRAveDOS4oLfmq/h6dn/DH
4AJizD4UXJrCAUuzEDgbZrjgou2DiohshIcnQtgme5GTPYbkJKcQ1N8OckHW2REVi+RXuM8fxGaDG4oy
ALPZIQQ11Z+5QDk1oKJ/hjv7P2FTfCMOH3mFxMQ6IbhROYWOdrCnBI4dfwPr0V4+bRoY9UzXppMjcDdS
rC8hy3YhuFI2gTYf2A4Aza4f7N2/o/zaLB8qDYx6zszwr8P7k1thNFYIweXCMXgeAfedq2xxwjClZUeV
Jd2GtDNFETiJwfs8MBjKhMCWN8pgoLoqzE8miH1GjE7G4PsZjE7OQsm9ij2mFg7rdrug1xcJAa2l4w7W
r00Cgk/n38S7wBwC04u4UGxHrMHF4CbEJtyDLj5fCDIzhljfSxzeavRgyw4Zj9t64GvvQ0d3P3pfD2Kv
2QqNvgFxDN6urYdWmyMElJMnevh60obRktA701PRtGlg1DOdSkXwzrisaMG/RZLWAE60OMW5fNhvAAAA
AElFTkSuQmCC
</value>
</data>
<data name="printToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIpSURBVDhPtZL/T1JRGMb5p1itrVZbbRpqZbawnBENV1I0
jGlByTSyJTXJwq2oKZQb1KAv6JCYWSxvBrkkZUq4CeQEiRABFeLL072Xa0zRra31bO8v57zP5znnPYf1
X+TxhWF6O7VtGYcnwbSWijKPOLzYrPSvLPwLS3huGUMlT7o9wGD9grVUBj+icdid03S9tDmgNxNwTgVQ
J+rA8XNtWwM+uuZATMwxmQVRycuJFNyzIRitDlScugKzjSgFRGJJaIwEsrk8AsHIhnSL/Ssck37UNipQ
I5DjtuYV7uksRYhr2kebhx2eP6nrycFIEh5fBA/1Nvru8q5+PDaOovK0rABwfwugWzcErfkzHhjsePL6
E7q1VrTdNUDcrgGvSYlDZHN5XTNOnL8BVe8AJAoNDtZfLgDu9L1BPJmikzcrk81hlRwodZJwdBXziwnI
OrVoaOkiT8C8hKLHBPO7CbywOaE1jeC+bhAd6meQdvZC1KoG/5IS3MZ2HObLUHZSggvkWq3wOvbWiAqA
VpWeyStVfCUNf3AZ4zNhfHCFMEDMgye+hYr6FrDLzxQAUuVTpr0ocn74mchg5vsKRt1RcHp2Qv9+kZ78
UcE17KkWFgHNN/uQzgBkGKLJPBZiecyGchjzrmFwPIF++xJUbDbUQzEacIArLpopSRSP4CUN1Obf1Abz
uqob5KjiXwWH/GVl5HPt5zZh37GL2H1EiF1VZ7GDI6CNW5r/TSzWbwHYL0mKJ5czAAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButtonReload.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIzSURBVDhPjZNNaBNBFMcHSknBKKkg9FKL7eIhSFtpISHG
zk4CYS/x1rsnP25CDx7THpRsAoJfhQTai3rJRVTowYObGi/tbiTWilYDJdlNtkGT3gN2fW92tqapQv/w
SOY/7/32vZld8j9pY2MBLRj0b0WjwxjCPpkKhAy8G7+4X7wgJSvhyK1K+MpX9OuyTHlCv9KbrYiq23cx
0kbjPHraxIS0Jkm+74ri+zx7dbROqWTJsa5F2XNjZmaQF3pKabtDGb3ZyBi2k9VtWdjHZFE6DRDbktkz
YbmCwnlVb3Yzul1CQPtHfrnzZdHpVPNu6Nd3alu3+TkISNdi7BovRqmGvakazUe8k43WSLua044AKnec
dmXhrUgnJmVPLBpb54t7H5vn4OkHaWMvzA3QIaB80w34j57YBgANA+R3PZE4S6DlEM6e2m75xb4LEIUe
pBfwS1HOwBiONRe/TDLlvUkEqB9+nhb7fwE9kF7ALqUBBJiMTZFsxT6FI2AnYv8oYHvp2AhwgBEcoea9
YNBBMWM0H/MFiAO8A9x54HQ+LXAAPHkEYsiUY8twiEWRTki2bCf5NW5Y07huV/NPDwEi0DNpXDZlVuLX
OBdL8mJP8A7k4CptD/IvIYAfHmUWdiJsVznDGYQxVrCT++WWNLu6Pqo8XPNJEMHUKwlzavH4OBSnMRqM
JXhhv+BbiOJvaPX9t9BK6cbk0uvkpcU3+/OFwgBPOKmiL0rDGMFUwT+VehkQdp8I+QMJYXp5Ef1ZOgAA
AABJRU5ErkJggg==
</value>
</data>
<data name="toolStripButtonFilter.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEaSURBVDhPY6AKmFApJh7mrfvV1NT0PzE4zFvn67RicTGo
dgaGiZUK9h5Ohv+/7uL8//8gO178dRfXf5DaKeUKdlDtEJAfo361KlUVqyYY/neA/X9Fsur/gjiNS1Bt
CDCzXpIr0l/n04pWaayaQXhJk8z/cF+dLxNzhfig2lDBxDJ5CzdHw7/nFwhiaL60SPC/q4PhXwyno4Ou
PIUyL2eD/683c8M1v93K/R8k1p6j0AZVhh+UJakeLohThxuQF6PxvzRB9TBUmjCYUi/KY25uCjcAxAaF
EVSaMKivZ2ACxTfMABAbKkUcGFwGfNrB9d/SwoR0A0Ca9kwW/+/nZvC/LFH1CFSKeFCRpLo/xl/7Q2e+
QjlUiBaAgQEASczleY2pHPIAAAAASUVORK5CYII=
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAI4SURBVDhPjZNPaNNQHMcfjNGBVTpB2GUOtyDYwzbZsKV2
fUkKJZd6292Tf27CDh6zHSxpCoJuDlrYLuqlF1FhBz20ox62NdU6JzotzDavzYpddy9ofL+Xl9l1CvvC
j+R93+/3ye/3kqD/KTcy4sv5/d7tcHgQgtunUxahvrejlw/zl4R4ORi68+Ha9S/g10QRs4ReaVvNULJo
3YfQjPpF8HJjY8KaIHi+KYrn0/TMcA1jgYhyh2DpmTE11c8KXam5vQF9s1HXDctOFS2R2ydEMJ6kEIuI
0lNuOaKFs4mNekfftAoAaH3PLLc/z9vtSsaJ4s3d6vZddg4c0iGSdIMVg5KGtaUZjcdOJ82hg0o6dwxQ
vmcflOfe8HRkYmmJYHmdLR68b1xIbJi/NWM/yAyqI0DpthP0Hjy+TQE4+APjX7VY7DyiLQdgdnWn6eX7
DoAXupBuQEtRztExbBKJXkV6aX8cAMl3P8/y/b+ALkg3YA9jHwBMSZpAqbJ1BkaATvj+ccDOwokR6AGG
YISq+4HRDvK60VhkCyoGcA9w96Hd/jjHAPTJQzQGTFFeJhE5z9MRSpWsuPMaySSsW5XMkyMAD/BMHBVN
USqw1xiR46zYlV600gmDWC7kXwIAO7yZCIFOuO0obdj9dIwV6CRRagrTq+vDyqM1j0DDr74UIKcajY7S
T1mDqEtSjBX2iv4LYbgGVvNfAyuFW+MLr+JX5l8fzmazfSzhtAo/LwxC+NWsd0J94eN2jxD6A3Zieio6
Qs3XAAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButtonOpen.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIwSURBVDhPY5BuvNMjXXPjhWTpxbtiuSfeiOWceC2Re8qe
AQrEiy8oShScuSGedXw2VAgVSDfcPSBdde2/ZNml/+J5J8FYJPtEAVSaASjeDJITzTj8HSqECggZIFF2
uQQkJ5Z++DNUCBUQMkC0/gqPdMaWU6K5J2KhQqiAkAEgYOTsHW/i6uNr4uytZOjoJc9QX88ElWJgkGm6
t1+6GtUA8ZzjeVBpODBy9XUCGpAGwsbO3lOMjY1ZwRJSjXecpWtvLpXL2bFcPPfYWrHck6vEM46KgeTm
3/9vUH/lu0r9pe9KyNg1ubTQu3GaO9gAGDB19U0wd/dXgHIZFt3/ebj3xq//jVcwcd2Fr//TT337m3zq
RyVUOaYBKx79fp85ddV/n8Ts/3bhySjYwMnnf9KqU//jTvzYD1UOCihfHyM3b2MoF2xAclP/f6fAiP/J
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIzSURBVDhPY5BuvNMjXXPjhWTJubsiuUffCOccfS2Re8qe
AQrEiy8oihWcuSGeeXw2VAgVSNXfOSBdde2/ZNml/+J5J8FYJPtEAVSaASjeDJITyjj8HSqECggZIFF2
uQQkJ5Zy+DNUCBUQMkC0/gqPVPqWU6K5J2KhQqiAkAEgYOTsHW/i6uNr4uytZOjoJc9QX88ElWJgkGm8
u1+6GtUA8ZzjeVBpODBy9XUCGpAGwsbO3lOMjY1ZwRJSjXecpWpvLJXL2bFcPPfoWrHck6vEM46KgeTm
3/9vUH/lu0r9pe9KyNg1ubTQu3GaO9gAGDB19U0wd/dXgHIZFt3/cbj3xq//jVcwcd2Fr/9Tjn/+m3zq
RyVUOaYByx/9eJ85ddV/n8Ts/3bhySjYwMnnf9KqU/9jT/zYD1UOCihfHyM3b2MoF2xAclP/f6fAiP/J
1r7/5xv5/V9m4Pffy8Hnv5aF3f+Q3mX/4098PwBVzsBg5uHBBwyc7tDQUGYQH9mADjO//9+VAv5/VQ74
H2vri90AEDBx9FM3dvFpM3Hxrurff/UTzABTF5//iwz9/leZ+/03AbJxGoAMQC5IaZv23zU4GqwJGWua
2f6PmrmNsAENl378L9t9+3/5wccIfODR/8JtN/6XXvhJwICHv982Xv3132LSvf+xW97+d5z18H/o6pf/
vRc/A+OS8z9BsbAHqhwTzL/zs2/S7V9Pmq78uguMexTccPnXvdTTP54kn/7hBQD2VYjPDPoywwAAAABJ
RU5ErkJggg==
H2vri90AEDBx9FM3dvFpM3Hxrurfc+kTzABTF5//iwz9/leZ+/03AbJxGoAMQC5IaZv23zU4GqwJGWua
2f6PmrmNsAENl378L9t9+3/5wccIfODR/8JtN/6XXviJ34Cl9368bbz667/FpHv/Y7e8/e846+H/0NUv
/3svfgbGJed//o89/mMPVDkmmH/nZ9+k27+eNF35dRcY9yi4/vKve8mnfzxJPv3DCwAg0ohxfV2WKwAA
AABJRU5ErkJggg==
</value>
</data>
<data name="toolStripButtonClear.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJKSURBVDhPY8AGbPa9SLPZ+yISysUP0upncmWU93anV/ZZ
Q4UYbPY+f2qz58UNKBc/AGpen1nR+z+jvOdzVnmPDUjMes+LLqABdWAFhEBmec8CkAHIhlgce8Q5e0ev
0Nyp1e8m9NX9OLKpxA2qHBPU19ezAF2xGmZIbG7zr9TixrypE2q/wcQ6Oxv+/TqfDvciBgAZkl7WsyY2
t+V/WHrd/5SSDrBGEC6t6/h/b2vk/z/Xi978e9SqA9WCCeLr6zmisxufpBSjar690OX/n6sF//8/av3/
72HLl38Pm8OhWlDBlf1ZPJMn1MGdXVrb/v/e5vD/vy/l/P93vxFsAAK3LPj3sEkbqhUCpk6s/Yps891N
of+/bnICam5A04zAQBfFQbUzMBTVdiKcvcD5/+8r+f//3qr+//d6GVwDiP/nciGSAW2I2Nm8pHx3WT3Q
2cAA+30x+//fm5VwhXD8sOX/z8PR/7/v9v//dYfPu/9P67mg2iHg3bG0+b+vFf3D0AjEf66W/P95IhHM
/vew9SvWGLHf/14A6Kx4oIK/cM0PmoDh0ARm/zqd+v/bNk+gN/IzXXc+57bf/58FqpWBwWX3O35gHnhi
v/+lBNCpCTBD/t2t//9tuxfQ/1X/gbb+/Herugyk3nrP82k2u18UgTWDgM2e5xHAHPjfas+LDBD/34Nm
J6CGs/8etfz6e7/h07dd/peBLjEEyXlsu8UOzC/vrPe+OAvig0Hoqv/MQAO22e+/zwEVAoP//+uZ/v9f
xQzlwgHQgALbfS/8AQcUyckd1FlpAAAAAElFTkSuQmCC
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJSSURBVDhPY8AGbPa9SLPZ+yISysUP0upncmWU93anV/ZZ
Q4UYbPY+e2qz68UNKBc/SC/vXZ9Z0fs/taTrc1Z5jw1IzHrPiy6bPS/qwAoIgczyngUgA5ANsTj2iHP2
jl6huZOq3/V21/04sqnEDaocE9TX17MAvbAaZkhUbsOv1OLGvKkTar/BxNra6v/9Op8O9yIGABmSVta9
Jja35X9Yet3/lJIOsEYQLq3r+H9va+T/n9eL3vx71KoD1YIJ4uvrOSKz65+kFKNqvr3Q5f+fqwX//z9q
/f/7XuOXfw+bw6FaUMGV/Vk8kyfUwZ1dWtv+/97m8P+/L+X8/3e/EWwAArcs+PewSRuqFQIm9VV9Rbb5
7qbQ/183OQE1N6BpRuB/D1vioNoZGIpqOxHOXuD8//eV/P9/b1X//3u9DK4BxP9zuRDJgDZE7GxaXLa7
rB7obGCA/b6Y/f/vzUq4Qjh+2PL/5+Ho/993+///usPn3f+n9VxQ7RDw9mja/B+Xi/5haATiP1dL/v88
kQhm/77X+hVrjNjvfy8AdFY8UMFfuOYHTcBwaAKzf51O/f9tmyfQG/mZrjufc9vv/88C1crA4LL7Hb/N
3udP7Pe/lAA6NQFmyL+79f+/bfcC+r/q/+9HrT//3aouA6m33vN8ms3uF0VgzSBgs+d5BDAH/rfa8yID
xP/3oNnpz6PWs78fNf76db/+07ddfpeBLjEEyXlsu8VusfvFO6u9L86C+GAQuuo/M9CAbfb773NAhcDg
//96pv//VzFDuXAAzHAFtvte+AMAGv7JUh+nLuoAAAAASUVORK5CYII=
</value>
</data>
<data name="aboutToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<data name="toolStripButtonFilter.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEzSURBVDhPpZO9SgNBFIXHnyRWdmJtYelj5DHyDMHW1tpK
38EfSMKCAcuNURtBsUonFoFFg2vWQAyyd4/3zmyy2Z0RI7lwujnfzD33jrLKT3aVT4eqQ23ViYPKRUjl
xvCt1Iq6a96omp5yFLCi/LjOGrMZU22chZnOQ6x7oyafXU1daWkzXc4bnYBU5Wb0mofIzUVjl3DcT3AV
xNhufFgQ/RJjlp7zzxZVnxL0v4D7d8L+w9gCSDsmExNYzizavCG0BsDtgLDjDW0AS4JVfJjTtgFbd0Z7
7cjZgkimw4A4KJpL14THT8xaOOpNnAAZsRMgqvWyDP4AuFtYBGBa+CXERQAmRMcYJYMT3oEpQHbBAszG
qHchv0gVXqKD50Tr9OVbqwjIFklq6VWWWuozzde/vrNSP7w+X7LGzKAFAAAAAElFTkSuQmCC
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEZSURBVDhPY6AKmFApJh7mpvHV1NT0PzE4zE3967RicTGo
dgaGiZUK9h5Ohv+/7uL8//8gO178dRfXf5DaKeUKdlDtEJAfo361KlUVqyYY/neA/X9Fsur/vFiNS1Bt
CDCzXpIrwl/n04pWaayaQXhJk8z/IF/1LxNzhfig2lDBxDJ5C0d7w7/nFwhiaL60SPC/A1AOw+nooCtP
oczL2eD/683ccM1vt3L/B4m15yi0QZXhByVJKocL4tThBuTFaPwviVc5DJUmDKbUi/KYm5vCDQCxQWEE
lSYM6usZmEDxDTMAxIZKEQcGlwGfdnD9t7QwId0AkKY9k8X/+7kZ/C9LVDkClSIeVCSq7o/x0frQma9Q
DhWiBWBgAAClAOU+yA6HfwAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>237, 17</value>
</metadata>
<data name="newToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
@ -299,70 +221,8 @@
2Mz2wxeg6/UAAAAASUVORK5CYII=
</value>
</data>
<data name="openToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp
olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4
4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm
YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl
5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd
HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX
0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc
hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv
S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt
5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg
g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC
</value>
</data>
<data name="saveToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIySURBVDhPrZLfS5NRGMfff6H7boIuuq2pMZyL1eAt11CW
DcOKsB9vpFmaLtNExco0av6CbIVLJ61Wk3BSkT/AFCkRZSpZmrmiJQ41xSaCwdfznL15XEUX0Reem5f3
8znnec4j/Zc8fxYGla91CS3eRTx0z6OpMYS7jmnU1X6B/VYA18snUVoyjsKCt8jLHcH5c36ouCQR2NUJ
1Nas4G9ZXlmFKbULh1Kf8lJxSfI+WeCCyopv6q+/h+DQ/DJ2WV5Ao1FgPegRAveDOS4oLfmq/h6dn/DH
4AJizD4UXJrCAUuzEDgbZrjgou2DiohshIcnQtgme5GTPYbkJKcQ1N8OckHW2REVi+RXuM8fxGaDG4oy
ALPZIQQ11Z+5QDk1oKJ/hjv7P2FTfCMOH3mFxMQ6IbhROYWOdrCnBI4dfwPr0V4+bRoY9UzXppMjcDdS
rC8hy3YhuFI2gTYf2A4Aza4f7N2/o/zaLB8qDYx6zszwr8P7k1thNFYIweXCMXgeAfedq2xxwjClZUeV
Jd2GtDNFETiJwfs8MBjKhMCWN8pgoLoqzE8miH1GjE7G4PsZjE7OQsm9ij2mFg7rdrug1xcJAa2l4w7W
r00Cgk/n38S7wBwC04u4UGxHrMHF4CbEJtyDLj5fCDIzhljfSxzeavRgyw4Zj9t64GvvQ0d3P3pfD2Kv
2QqNvgFxDN6urYdWmyMElJMnevh60obRktA701PRtGlg1DOdSkXwzrisaMG/RZLWAE60OMW5fNhvAAAA
AElFTkSuQmCC
</value>
</data>
<metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column9.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column10.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column11.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column7.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column4.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column5.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column6.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column8.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>237, 17</value>
</metadata>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>

View File

@ -1,22 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace EonaCat.HID.Analyzer
{
static class Program
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}
}

View File

@ -1,12 +1,11 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("USB HID Analyzer")]
[assembly: AssemblyDescription("A Windows utility tool for analyzing USB HID class devices")]
[assembly: AssemblyDescription("HID Devices")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("EonaCat (Jeroen Saey)")]
[assembly: AssemblyProduct("USB HID Analyzer")]
@ -14,23 +13,23 @@ using System.Runtime.InteropServices;
[assembly: AssemblyTrademark("EonaCat (Jeroen Saey)")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("3634ad68-775e-40fb-9ef9-c064ad87a0f7")]
[assembly: Guid("185412ac-91cc-4e99-9a8e-dd2af6b817ba")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -8,7 +8,7 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace USB_HID_Analyzer.Properties {
namespace EonaCat.HID.Properties {
using System;
@ -39,7 +39,7 @@ namespace USB_HID_Analyzer.Properties {
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("USB_HID_Analyzer.Properties.Resources", typeof(Resources).Assembly);
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EonaCat.HID.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;

View File

@ -8,11 +8,11 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace USB_HID_Analyzer.Properties {
namespace EonaCat.HID.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.10.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

View File

@ -31,26 +31,26 @@
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.textBoxWriteData = new System.Windows.Forms.TextBox();
this.dataGridView1 = new System.Windows.Forms.DataGridView();
this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column9 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column10 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column11 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column7 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column8 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.newToolStripButton = new System.Windows.Forms.ToolStripButton();
this.openToolStripButton = new System.Windows.Forms.ToolStripButton();
this.saveToolStripButton = new System.Windows.Forms.ToolStripButton();
this.printToolStripButton = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator();
this.toolStripButtonReload = new System.Windows.Forms.ToolStripButton();
this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();
this.toolStripTextBoxVidPid = new System.Windows.Forms.ToolStripTextBox();
this.toolStripButtonFilter = new System.Windows.Forms.ToolStripButton();
this.toolStripButtonOpen = new System.Windows.Forms.ToolStripButton();
this.toolStripButtonClear = new System.Windows.Forms.ToolStripButton();
this.aboutToolStripButton = new System.Windows.Forms.ToolStripButton();
this.toolStripButtonFilter = new System.Windows.Forms.ToolStripButton();
this.toolStripTextBoxVidPid = new System.Windows.Forms.ToolStripTextBox();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@ -67,17 +67,6 @@
this.rtbEventLog = new System.Windows.Forms.RichTextBox();
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column9 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column10 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column11 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column7 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column6 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column8 = new System.Windows.Forms.DataGridViewTextBoxColumn();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
this.tableLayoutPanel1.SuspendLayout();
this.toolStrip1.SuspendLayout();
@ -104,15 +93,13 @@
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column1,
this.Column2,
this.Column9,
this.Column10,
this.Column11,
this.Column7,
this.Column4,
this.Column5,
this.Column6,
this.Column3,
this.Column2,
this.Column8});
this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.dataGridView1.Location = new System.Drawing.Point(3, 16);
@ -120,9 +107,73 @@
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.ReadOnly = true;
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridView1.Size = new System.Drawing.Size(732, 214);
this.dataGridView1.Size = new System.Drawing.Size(822, 286);
this.dataGridView1.TabIndex = 0;
this.dataGridView1.SelectionChanged += new System.EventHandler(this.DataGridView1_SelectionChanged);
this.dataGridView1.DoubleClick += new System.EventHandler(this.dataGridView1_DoubleClick);
//
// Column1
//
this.Column1.HeaderText = "No";
this.Column1.Name = "Column1";
this.Column1.ReadOnly = true;
this.Column1.Width = 87;
//
// Column9
//
this.Column9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.Column9.HeaderText = "Name";
this.Column9.Name = "Column9";
this.Column9.ReadOnly = true;
//
// Column10
//
this.Column10.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.Column10.HeaderText = "Manufacturer";
this.Column10.Name = "Column10";
this.Column10.ReadOnly = true;
//
// Column11
//
this.Column11.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.Column11.HeaderText = "SerialNo";
this.Column11.Name = "Column11";
this.Column11.ReadOnly = true;
//
// Column7
//
this.Column7.HeaderText = "InputReport";
this.Column7.Name = "Column7";
this.Column7.ReadOnly = true;
this.Column7.Width = 86;
//
// Column4
//
this.Column4.HeaderText = "OutputReport";
this.Column4.Name = "Column4";
this.Column4.ReadOnly = true;
this.Column4.Width = 87;
//
// Column5
//
this.Column5.HeaderText = "FeatureReport";
this.Column5.Name = "Column5";
this.Column5.ReadOnly = true;
this.Column5.Width = 86;
//
// Column2
//
this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.Column2.HeaderText = "Info";
this.Column2.Name = "Column2";
this.Column2.ReadOnly = true;
//
// Column8
//
this.Column8.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.Column8.HeaderText = "DevicePath";
this.Column8.Name = "Column8";
this.Column8.ReadOnly = true;
//
// tableLayoutPanel1
//
@ -144,66 +195,24 @@
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 48.18182F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 51.81818F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(744, 661);
this.tableLayoutPanel1.Size = new System.Drawing.Size(834, 811);
this.tableLayoutPanel1.TabIndex = 18;
//
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.newToolStripButton,
this.openToolStripButton,
this.saveToolStripButton,
this.printToolStripButton,
this.toolStripSeparator,
this.toolStripButtonReload,
this.toolStripLabel1,
this.toolStripTextBoxVidPid,
this.toolStripButtonFilter,
this.toolStripButtonOpen,
this.toolStripButtonClear,
this.aboutToolStripButton});
this.toolStripButtonFilter,
this.toolStripTextBoxVidPid});
this.toolStrip1.Location = new System.Drawing.Point(0, 25);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(744, 25);
this.toolStrip1.Size = new System.Drawing.Size(834, 25);
this.toolStrip1.TabIndex = 1;
this.toolStrip1.Text = "toolStrip1";
//
// newToolStripButton
//
this.newToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.newToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripButton.Image")));
this.newToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.newToolStripButton.Name = "newToolStripButton";
this.newToolStripButton.Size = new System.Drawing.Size(23, 22);
this.newToolStripButton.Text = "&New";
//
// openToolStripButton
//
this.openToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.openToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripButton.Image")));
this.openToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.openToolStripButton.Name = "openToolStripButton";
this.openToolStripButton.Size = new System.Drawing.Size(23, 22);
this.openToolStripButton.Text = "&Open";
//
// saveToolStripButton
//
this.saveToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.saveToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripButton.Image")));
this.saveToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.saveToolStripButton.Name = "saveToolStripButton";
this.saveToolStripButton.Size = new System.Drawing.Size(23, 22);
this.saveToolStripButton.Text = "&Save";
//
// printToolStripButton
//
this.printToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.printToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("printToolStripButton.Image")));
this.printToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.printToolStripButton.Name = "printToolStripButton";
this.printToolStripButton.Size = new System.Drawing.Size(23, 22);
this.printToolStripButton.Text = "&Print";
//
// toolStripSeparator
//
this.toolStripSeparator.Name = "toolStripSeparator";
@ -218,30 +227,6 @@
this.toolStripButtonReload.Text = "Reload";
this.toolStripButtonReload.Click += new System.EventHandler(this.ToolStripButtonReload_Click);
//
// toolStripLabel1
//
this.toolStripLabel1.Name = "toolStripLabel1";
this.toolStripLabel1.Size = new System.Drawing.Size(33, 22);
this.toolStripLabel1.Text = "Filter";
//
// toolStripTextBoxVidPid
//
this.toolStripTextBoxVidPid.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.toolStripTextBoxVidPid.Font = new System.Drawing.Font("Segoe UI", 9F);
this.toolStripTextBoxVidPid.Name = "toolStripTextBoxVidPid";
this.toolStripTextBoxVidPid.Size = new System.Drawing.Size(100, 25);
this.toolStripTextBoxVidPid.Text = "0483:0400";
this.toolStripTextBoxVidPid.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// toolStripButtonFilter
//
this.toolStripButtonFilter.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonFilter.Image")));
this.toolStripButtonFilter.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButtonFilter.Name = "toolStripButtonFilter";
this.toolStripButtonFilter.Size = new System.Drawing.Size(53, 22);
this.toolStripButtonFilter.Text = "Filter";
this.toolStripButtonFilter.Click += new System.EventHandler(this.ToolStripButtonFilter_Click);
//
// toolStripButtonOpen
//
this.toolStripButtonOpen.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonOpen.Image")));
@ -260,15 +245,25 @@
this.toolStripButtonClear.Text = "Clear";
this.toolStripButtonClear.Click += new System.EventHandler(this.ToolStripButtonClear_Click);
//
// aboutToolStripButton
// toolStripButtonFilter
//
this.aboutToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("aboutToolStripButton.Image")));
this.aboutToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.aboutToolStripButton.Name = "aboutToolStripButton";
this.aboutToolStripButton.Size = new System.Drawing.Size(60, 22);
this.aboutToolStripButton.Text = "&About";
this.aboutToolStripButton.ToolTipText = "About";
this.aboutToolStripButton.Click += new System.EventHandler(this.HelpToolStripButton_Click);
this.toolStripButtonFilter.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
this.toolStripButtonFilter.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonFilter.Image")));
this.toolStripButtonFilter.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButtonFilter.Name = "toolStripButtonFilter";
this.toolStripButtonFilter.Size = new System.Drawing.Size(53, 22);
this.toolStripButtonFilter.Text = "Filter";
this.toolStripButtonFilter.Click += new System.EventHandler(this.ToolStripButtonFilter_Click);
//
// toolStripTextBoxVidPid
//
this.toolStripTextBoxVidPid.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
this.toolStripTextBoxVidPid.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.toolStripTextBoxVidPid.Font = new System.Drawing.Font("Segoe UI", 9F);
this.toolStripTextBoxVidPid.Name = "toolStripTextBoxVidPid";
this.toolStripTextBoxVidPid.Size = new System.Drawing.Size(100, 25);
this.toolStripTextBoxVidPid.Text = "0483:0400";
this.toolStripTextBoxVidPid.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// menuStrip1
//
@ -277,7 +272,7 @@
this.helpToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(744, 24);
this.menuStrip1.Size = new System.Drawing.Size(834, 24);
this.menuStrip1.TabIndex = 0;
this.menuStrip1.Text = "menuStrip1";
//
@ -285,9 +280,6 @@
//
this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.newToolStripMenuItem,
this.openToolStripMenuItem,
this.saveToolStripMenuItem,
this.toolStripSeparator2,
this.exitToolStripMenuItem});
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
@ -299,37 +291,14 @@
this.newToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta;
this.newToolStripMenuItem.Name = "newToolStripMenuItem";
this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
this.newToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
this.newToolStripMenuItem.Size = new System.Drawing.Size(141, 22);
this.newToolStripMenuItem.Text = "&New";
this.newToolStripMenuItem.Click += new System.EventHandler(this.NewToolStripMenuItem_Click);
//
// openToolStripMenuItem
//
this.openToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripMenuItem.Image")));
this.openToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta;
this.openToolStripMenuItem.Name = "openToolStripMenuItem";
this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
this.openToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
this.openToolStripMenuItem.Text = "&Open";
//
// saveToolStripMenuItem
//
this.saveToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripMenuItem.Image")));
this.saveToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta;
this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
this.saveToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
this.saveToolStripMenuItem.Text = "&Save";
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(143, 6);
//
// exitToolStripMenuItem
//
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
this.exitToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
this.exitToolStripMenuItem.Size = new System.Drawing.Size(141, 22);
this.exitToolStripMenuItem.Text = "E&xit";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolStripMenuItem_Click);
//
@ -361,10 +330,10 @@
this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox1.Location = new System.Drawing.Point(3, 53);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(738, 83);
this.groupBox1.Size = new System.Drawing.Size(828, 83);
this.groupBox1.TabIndex = 2;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Read/Write Operation";
this.groupBox1.Text = "Read/Write Operations";
//
// comboBoxReportId
//
@ -375,7 +344,22 @@
"2",
"3",
"4",
"5"});
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20"});
this.comboBoxReportId.Location = new System.Drawing.Point(104, 19);
this.comboBoxReportId.Name = "comboBoxReportId";
this.comboBoxReportId.Size = new System.Drawing.Size(81, 21);
@ -394,11 +378,11 @@
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(10, 50);
this.label1.Location = new System.Drawing.Point(40, 48);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(84, 13);
this.label1.Size = new System.Drawing.Size(58, 13);
this.label1.TabIndex = 7;
this.label1.Text = "Write Data 0x [ ]";
this.label1.Text = "Write Data";
//
// buttonWriteFeature
//
@ -446,21 +430,21 @@
this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox2.Location = new System.Drawing.Point(3, 142);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(738, 233);
this.groupBox2.Size = new System.Drawing.Size(828, 305);
this.groupBox2.TabIndex = 3;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Device List";
this.groupBox2.Text = "Devices";
//
// groupBox3
//
this.groupBox3.Controls.Add(this.rtbEventLog);
this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox3.Location = new System.Drawing.Point(3, 381);
this.groupBox3.Location = new System.Drawing.Point(3, 453);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(738, 251);
this.groupBox3.Size = new System.Drawing.Size(828, 329);
this.groupBox3.TabIndex = 4;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "Event Log";
this.groupBox3.Text = "Log";
//
// rtbEventLog
//
@ -468,7 +452,7 @@
this.rtbEventLog.Location = new System.Drawing.Point(3, 16);
this.rtbEventLog.Name = "rtbEventLog";
this.rtbEventLog.ReadOnly = true;
this.rtbEventLog.Size = new System.Drawing.Size(732, 232);
this.rtbEventLog.Size = new System.Drawing.Size(822, 310);
this.rtbEventLog.TabIndex = 0;
this.rtbEventLog.Text = "";
//
@ -476,9 +460,9 @@
//
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripStatusLabel1});
this.statusStrip1.Location = new System.Drawing.Point(0, 639);
this.statusStrip1.Location = new System.Drawing.Point(0, 789);
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Size = new System.Drawing.Size(744, 22);
this.statusStrip1.Size = new System.Drawing.Size(834, 22);
this.statusStrip1.TabIndex = 5;
this.statusStrip1.Text = "statusStrip1";
//
@ -488,88 +472,11 @@
this.toolStripStatusLabel1.Size = new System.Drawing.Size(118, 17);
this.toolStripStatusLabel1.Text = "toolStripStatusLabel1";
//
// Column1
//
this.Column1.HeaderText = "No";
this.Column1.Name = "Column1";
this.Column1.ReadOnly = true;
this.Column1.Width = 30;
//
// Column2
//
this.Column2.HeaderText = "Info";
this.Column2.Name = "Column2";
this.Column2.ReadOnly = true;
this.Column2.Width = 180;
//
// Column9
//
this.Column9.HeaderText = "Name";
this.Column9.Name = "Column9";
this.Column9.ReadOnly = true;
this.Column9.Width = 160;
//
// Column10
//
this.Column10.HeaderText = "Manufacturer";
this.Column10.Name = "Column10";
this.Column10.ReadOnly = true;
this.Column10.Width = 110;
//
// Column11
//
this.Column11.HeaderText = "SerialNo";
this.Column11.Name = "Column11";
this.Column11.ReadOnly = true;
this.Column11.Width = 85;
//
// Column7
//
this.Column7.HeaderText = "InputReport";
this.Column7.Name = "Column7";
this.Column7.ReadOnly = true;
this.Column7.Width = 40;
//
// Column4
//
this.Column4.HeaderText = "OutputReport";
this.Column4.Name = "Column4";
this.Column4.ReadOnly = true;
this.Column4.Width = 40;
//
// Column5
//
this.Column5.HeaderText = "FeatureReport";
this.Column5.Name = "Column5";
this.Column5.ReadOnly = true;
this.Column5.Width = 40;
//
// Column6
//
this.Column6.HeaderText = "Usage";
this.Column6.Name = "Column6";
this.Column6.ReadOnly = true;
this.Column6.Width = 50;
//
// Column3
//
this.Column3.HeaderText = "UsagePage";
this.Column3.Name = "Column3";
this.Column3.ReadOnly = true;
this.Column3.Width = 55;
//
// Column8
//
this.Column8.HeaderText = "DevicePath";
this.Column8.Name = "Column8";
this.Column8.ReadOnly = true;
this.Column8.Width = 550;
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(744, 661);
this.ClientSize = new System.Drawing.Size(834, 811);
this.Controls.Add(this.tableLayoutPanel1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.menuStrip1;
@ -602,17 +509,10 @@
private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripLabel toolStripLabel1;
private System.Windows.Forms.ToolStripTextBox toolStripTextBoxVidPid;
private System.Windows.Forms.ToolStripButton toolStripButtonFilter;
private System.Windows.Forms.ToolStripButton aboutToolStripButton;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.GroupBox groupBox3;
@ -621,10 +521,6 @@
private System.Windows.Forms.RichTextBox rtbEventLog;
private System.Windows.Forms.ToolStripButton toolStripButtonClear;
private System.Windows.Forms.ToolStripButton toolStripButtonOpen;
private System.Windows.Forms.ToolStripButton newToolStripButton;
private System.Windows.Forms.ToolStripButton openToolStripButton;
private System.Windows.Forms.ToolStripButton saveToolStripButton;
private System.Windows.Forms.ToolStripButton printToolStripButton;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator;
private System.Windows.Forms.Button buttonWriteFeature;
private System.Windows.Forms.Button buttonReadFeature;
@ -634,16 +530,16 @@
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ComboBox comboBoxReportId;
private System.Windows.Forms.ToolStripButton toolStripButtonReload;
private System.Windows.Forms.ToolStripTextBox toolStripTextBoxVidPid;
private System.Windows.Forms.ToolStripButton toolStripButtonFilter;
private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
private System.Windows.Forms.DataGridViewTextBoxColumn Column9;
private System.Windows.Forms.DataGridViewTextBoxColumn Column10;
private System.Windows.Forms.DataGridViewTextBoxColumn Column11;
private System.Windows.Forms.DataGridViewTextBoxColumn Column7;
private System.Windows.Forms.DataGridViewTextBoxColumn Column4;
private System.Windows.Forms.DataGridViewTextBoxColumn Column5;
private System.Windows.Forms.DataGridViewTextBoxColumn Column6;
private System.Windows.Forms.DataGridViewTextBoxColumn Column3;
private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
private System.Windows.Forms.DataGridViewTextBoxColumn Column8;
}
}

View File

@ -21,4 +21,4 @@
public string VendorIdHex { get; set; }
public string ProductIdHex { get; set; }
}
}
}

View File

@ -41,4 +41,4 @@
public short NumberFeatureValueCaps { get; private set; }
public short NumberFeatureDataIndices { get; private set; }
}
}
}

View File

@ -11,24 +11,25 @@ namespace EonaCat.HID
public class Device : IDevice
{
public event InsertedEventHandler OnInserted;
public event RemovedEventHandler OnRemoved;
private const int _byteSize = 254;
private const int BUFFER_SIZE = 254;
private readonly string _description;
private readonly string _path;
private readonly Attributes _attributes;
private readonly Capabilities _capabilities;
private DeviceMode _readMode = DeviceMode.NonOverlapped;
private DeviceMode _writeMode = DeviceMode.NonOverlapped;
private ShareMode _shareMode = ShareMode.ShareRead | ShareMode.ShareWrite;
private readonly DeviceEventMonitor _deviceEventMonitor;
private bool _monitorDeviceEvents;
protected delegate DeviceData ReadDelegate(int timeout);
protected delegate Report ReadReportDelegate(int timeout);
private delegate bool WriteDelegate(byte[] data, int timeout);
private delegate bool WriteReportDelegate(Report report, int timeout);
internal Device(string devicePath, string description = null)
@ -42,10 +43,11 @@ namespace EonaCat.HID
try
{
_deviceModeHelper = new DeviceModeHelper();
var handle = OpenDeviceIO(_path, NativeMethods.ACCESS_NONE);
_attributes = GetDeviceAttributes(handle);
_capabilities = GetDeviceCapabilities(handle);
CloseDeviceIO(handle);
}
catch (Exception exception)
@ -54,21 +56,24 @@ namespace EonaCat.HID
}
}
public IntPtr ReadHandle { get; private set; }
public IntPtr WriteHandle { get; private set; }
public bool IsOpen { get; private set; }
public bool IsConnected { get { return Devices.IsConnected(_path); } }
public string Description { get { return _description; } }
public Capabilities Capabilities { get { return _capabilities; } }
public Attributes Info { get { return _attributes; } }
public string DevicePath { get { return _path; } }
public bool IsConnected
{ get { return Devices.IsConnected(_path); } }
public string Description
{ get { return _description; } }
public Capabilities Capabilities
{ get { return _capabilities; } }
public Attributes Info
{ get { return _attributes; } }
public string DevicePath
{ get { return _path; } }
public bool MonitorDeviceEvents
{
get { return _monitorDeviceEvents; }
set
{
if (value & _monitorDeviceEvents == false)
if (value & !_monitorDeviceEvents)
{
_deviceEventMonitor.Init();
}
@ -77,6 +82,8 @@ namespace EonaCat.HID
}
}
private DeviceModeHelper _deviceModeHelper { get; }
public override string ToString()
{
return $"VendorID={_attributes.VendorIdHex}, ProductID={_attributes.ProductIdHex}, Version={_attributes.Version}, DevicePath={_path}";
@ -94,14 +101,14 @@ namespace EonaCat.HID
return;
}
_readMode = readMode;
_writeMode = writeMode;
_shareMode = shareMode;
_deviceModeHelper.ReadMode = readMode;
_deviceModeHelper.WriteMode = writeMode;
_deviceModeHelper.ShareMode = shareMode;
try
{
ReadHandle = OpenDeviceIO(_path, readMode, NativeMethods.GENERIC_READ, shareMode);
WriteHandle = OpenDeviceIO(_path, writeMode, NativeMethods.GENERIC_WRITE, shareMode);
_deviceModeHelper.ReadHandle = OpenDeviceIO(_path, readMode, NativeMethods.GENERIC_READ, shareMode);
_deviceModeHelper.WriteHandle = OpenDeviceIO(_path, writeMode, NativeMethods.GENERIC_WRITE, shareMode);
}
catch (Exception exception)
{
@ -109,10 +116,9 @@ namespace EonaCat.HID
throw new Exception("EonaCat HID: Error opening device.", exception);
}
IsOpen = (ReadHandle.ToInt32() != NativeMethods.INVALID_HANDLE_VALUE && WriteHandle.ToInt32() != NativeMethods.INVALID_HANDLE_VALUE);
IsOpen = (_deviceModeHelper.ReadHandle.ToInt32() != NativeMethods.INVALID_HANDLE_VALUE && _deviceModeHelper.WriteHandle.ToInt32() != NativeMethods.INVALID_HANDLE_VALUE);
}
public void CloseDevice()
{
if (!IsOpen)
@ -120,8 +126,8 @@ namespace EonaCat.HID
return;
}
CloseDeviceIO(ReadHandle);
CloseDeviceIO(WriteHandle);
CloseDeviceIO(_deviceModeHelper.ReadHandle);
CloseDeviceIO(_deviceModeHelper.WriteHandle);
IsOpen = false;
}
@ -134,9 +140,9 @@ namespace EonaCat.HID
{
if (IsConnected)
{
if (IsOpen == false)
if (!IsOpen)
{
OpenDevice(_readMode, _writeMode, _shareMode);
OpenDevice(_deviceModeHelper.ReadMode, _deviceModeHelper.WriteMode, _deviceModeHelper.ShareMode);
}
try
@ -147,7 +153,6 @@ namespace EonaCat.HID
{
return new DeviceData(DeviceData.ReadStatus.ReadError);
}
}
return new DeviceData(DeviceData.ReadStatus.NotConnected);
}
@ -200,7 +205,7 @@ namespace EonaCat.HID
{
byte[] commandBuffer = new byte[Capabilities.InputReportByteLength];
commandBuffer[0] = reportId;
bool bSuccess = NativeMethods.HidD_GetInputReport(ReadHandle, commandBuffer, commandBuffer.Length);
bool bSuccess = NativeMethods.HidD_GetInputReport(_deviceModeHelper.ReadHandle, commandBuffer, commandBuffer.Length);
DeviceData deviceData = new DeviceData(commandBuffer, bSuccess ? DeviceData.ReadStatus.Success : DeviceData.ReadStatus.NoDataRead);
return new Report(Capabilities.InputReportByteLength, deviceData);
}
@ -224,7 +229,7 @@ namespace EonaCat.HID
{
if (IsOpen)
{
hidHandle = ReadHandle;
hidHandle = _deviceModeHelper.ReadHandle;
}
else
{
@ -244,7 +249,7 @@ namespace EonaCat.HID
}
finally
{
if (hidHandle != IntPtr.Zero && hidHandle != ReadHandle)
if (hidHandle != IntPtr.Zero && hidHandle != _deviceModeHelper.ReadHandle)
{
CloseDeviceIO(hidHandle);
}
@ -255,7 +260,7 @@ namespace EonaCat.HID
public string ReadProductName()
{
if (ReadProductName(out byte[] bytes))
if (ReadProductName(out byte[] bytes))
{
return ByteHelper.GetFilledBytesString(bytes);
}
@ -264,14 +269,14 @@ namespace EonaCat.HID
public bool ReadProductName(out byte[] data)
{
data = new byte[_byteSize];
data = new byte[BUFFER_SIZE];
IntPtr handle = IntPtr.Zero;
bool success = false;
try
{
if (IsOpen)
{
handle = ReadHandle;
handle = _deviceModeHelper.ReadHandle;
}
else
{
@ -286,7 +291,7 @@ namespace EonaCat.HID
}
finally
{
if (handle != IntPtr.Zero && handle != ReadHandle)
if (handle != IntPtr.Zero && handle != _deviceModeHelper.ReadHandle)
{
CloseDeviceIO(handle);
}
@ -306,14 +311,14 @@ namespace EonaCat.HID
public bool ReadManufacturer(out byte[] data)
{
data = new byte[_byteSize];
data = new byte[BUFFER_SIZE];
IntPtr handle = IntPtr.Zero;
bool success = false;
try
{
if (IsOpen)
{
handle = ReadHandle;
handle = _deviceModeHelper.ReadHandle;
}
else
{
@ -328,7 +333,7 @@ namespace EonaCat.HID
}
finally
{
if (handle != IntPtr.Zero && handle != ReadHandle)
if (handle != IntPtr.Zero && handle != _deviceModeHelper.ReadHandle)
{
CloseDeviceIO(handle);
}
@ -348,14 +353,14 @@ namespace EonaCat.HID
public bool ReadSerialNumber(out byte[] data)
{
data = new byte[_byteSize];
data = new byte[BUFFER_SIZE];
IntPtr hidHandle = IntPtr.Zero;
bool success = false;
try
{
if (IsOpen)
{
hidHandle = ReadHandle;
hidHandle = _deviceModeHelper.ReadHandle;
}
else
{
@ -370,7 +375,7 @@ namespace EonaCat.HID
}
finally
{
if (hidHandle != IntPtr.Zero && hidHandle != ReadHandle)
if (hidHandle != IntPtr.Zero && hidHandle != _deviceModeHelper.ReadHandle)
{
CloseDeviceIO(hidHandle);
}
@ -388,9 +393,9 @@ namespace EonaCat.HID
{
if (IsConnected)
{
if (IsOpen == false)
if (!IsOpen)
{
OpenDevice(_readMode, _writeMode, _shareMode);
OpenDevice(_deviceModeHelper.ReadMode, _deviceModeHelper.WriteMode, _deviceModeHelper.ShareMode);
}
try
@ -450,20 +455,19 @@ namespace EonaCat.HID
}
/// <summary>
/// Handle data transfers on the control channel.
/// Handle data transfers on the control channel.
/// This method places data on the control channel for devices
/// that do not support the interupt transfers
/// </summary>
/// <param name="report">The outbound HID report</param>
/// <returns>The result of the tranfer request: true if successful otherwise false</returns>
///
///
public bool WriteReportSync(Report report)
{
if (null != report)
{
byte[] buffer = report.GetBytes();
return (NativeMethods.HidD_SetOutputReport(WriteHandle, buffer, buffer.Length));
return (NativeMethods.HidD_SetOutputReport(_deviceModeHelper.WriteHandle, buffer, buffer.Length));
}
else
{
@ -497,14 +501,13 @@ namespace EonaCat.HID
Array.Copy(data, 0, buffer, 0, Math.Min(data.Length, _capabilities.FeatureReportByteLength));
IntPtr hidHandle = IntPtr.Zero;
bool success = false;
try
{
if (IsOpen)
{
hidHandle = WriteHandle;
hidHandle = _deviceModeHelper.WriteHandle;
}
else
{
@ -520,7 +523,7 @@ namespace EonaCat.HID
}
finally
{
if (hidHandle != IntPtr.Zero && hidHandle != WriteHandle)
if (hidHandle != IntPtr.Zero && hidHandle != _deviceModeHelper.WriteHandle)
{
CloseDeviceIO(hidHandle);
}
@ -635,7 +638,7 @@ namespace EonaCat.HID
Array.Copy(data, 0, buffer, 0, Math.Min(data.Length, _capabilities.OutputReportByteLength));
if (_writeMode == DeviceMode.Overlapped)
if (_deviceModeHelper.WriteMode == DeviceMode.Overlapped)
{
var security = new NativeMethods.SECURITY_ATTRIBUTES();
var overlapped = new NativeOverlapped();
@ -652,7 +655,7 @@ namespace EonaCat.HID
try
{
NativeMethods.WriteFile(WriteHandle, buffer, (uint)buffer.Length, out bytesWritten, ref overlapped);
NativeMethods.WriteFile(_deviceModeHelper.WriteHandle, buffer, (uint)buffer.Length, out bytesWritten, ref overlapped);
}
catch { return false; }
@ -662,10 +665,13 @@ namespace EonaCat.HID
{
case NativeMethods.WAIT_OBJECT_0:
return true;
case NativeMethods.WAIT_TIMEOUT:
return false;
case NativeMethods.WAIT_FAILED:
return false;
default:
return false;
}
@ -675,7 +681,7 @@ namespace EonaCat.HID
try
{
var overlapped = new NativeOverlapped();
return NativeMethods.WriteFile(WriteHandle, buffer, (uint)buffer.Length, out bytesWritten, ref overlapped);
return NativeMethods.WriteFile(_deviceModeHelper.WriteHandle, buffer, (uint)buffer.Length, out bytesWritten, ref overlapped);
}
catch { return false; }
}
@ -694,7 +700,7 @@ namespace EonaCat.HID
buffer = CreateInputBuffer();
nonManagedBuffer = Marshal.AllocHGlobal(buffer.Length);
if (_readMode == DeviceMode.Overlapped)
if (_deviceModeHelper.ReadMode == DeviceMode.Overlapped)
{
var security = new NativeMethods.SECURITY_ATTRIBUTES();
var overlapped = new NativeOverlapped();
@ -710,9 +716,9 @@ namespace EonaCat.HID
try
{
var success = NativeMethods.ReadFile(ReadHandle, nonManagedBuffer, (uint)buffer.Length, out bytesRead, ref overlapped);
var success = NativeMethods.ReadFile(_deviceModeHelper.ReadHandle, nonManagedBuffer, (uint)buffer.Length, out bytesRead, ref overlapped);
if (success)
if (success)
{
status = DeviceData.ReadStatus.Success; // No check here to see if bytesRead > 0 . Perhaps not necessary?
}
@ -720,20 +726,23 @@ namespace EonaCat.HID
{
var result = NativeMethods.WaitForSingleObject(overlapped.EventHandle, overlapTimeout);
switch (result)
switch (result)
{
case NativeMethods.WAIT_OBJECT_0:
status = DeviceData.ReadStatus.Success;
NativeMethods.GetOverlappedResult(ReadHandle, ref overlapped, out bytesRead, false);
NativeMethods.GetOverlappedResult(_deviceModeHelper.ReadHandle, ref overlapped, out bytesRead, false);
break;
case NativeMethods.WAIT_TIMEOUT:
status = DeviceData.ReadStatus.WaitTimedOut;
buffer = new byte[] { };
break;
case NativeMethods.WAIT_FAILED:
case NativeMethods.WAIT_FAILED:
status = DeviceData.ReadStatus.WaitFail;
buffer = new byte[] { };
break;
default:
status = DeviceData.ReadStatus.NoDataRead;
buffer = new byte[] { };
@ -743,7 +752,8 @@ namespace EonaCat.HID
Marshal.Copy(nonManagedBuffer, buffer, 0, (int)bytesRead);
}
catch { status = DeviceData.ReadStatus.ReadError; }
finally {
finally
{
CloseDeviceIO(overlapped.EventHandle);
Marshal.FreeHGlobal(nonManagedBuffer);
}
@ -754,7 +764,7 @@ namespace EonaCat.HID
{
var overlapped = new NativeOverlapped();
NativeMethods.ReadFile(ReadHandle, nonManagedBuffer, (uint)buffer.Length, out bytesRead, ref overlapped);
NativeMethods.ReadFile(_deviceModeHelper.ReadHandle, nonManagedBuffer, (uint)buffer.Length, out bytesRead, ref overlapped);
status = DeviceData.ReadStatus.Success;
Marshal.Copy(nonManagedBuffer, buffer, 0, (int)bytesRead);
}
@ -800,7 +810,7 @@ namespace EonaCat.HID
{
if (!IsOpen)
{
OpenDevice(_readMode, _writeMode, _shareMode);
OpenDevice(_deviceModeHelper.ReadMode, _deviceModeHelper.WriteMode, _deviceModeHelper.ShareMode);
}
OnInserted?.Invoke();
@ -829,4 +839,4 @@ namespace EonaCat.HID
}
}
}
}
}

View File

@ -16,7 +16,7 @@
public DeviceData(ReadStatus status)
{
Data = new byte[] {};
Data = new byte[] { };
Status = status;
}
@ -29,4 +29,4 @@
public byte[] Data { get; private set; }
public ReadStatus Status { get; private set; }
}
}
}

View File

@ -1,6 +1,4 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Threading.Tasks;
namespace EonaCat.HID
{
@ -9,9 +7,11 @@ namespace EonaCat.HID
internal class DeviceEventMonitor
{
public event InsertedEventHandler Inserted;
public event RemovedEventHandler Removed;
public delegate void InsertedEventHandler();
public delegate void RemovedEventHandler();
private readonly Device _device;
@ -24,43 +24,31 @@ namespace EonaCat.HID
public void Init()
{
#if NET20 || NET35 || NET5_0_OR_GREATER
Task task = Task.Factory.StartNew(() => EventMonitor());
#else
var eventMonitor = new Action(EventMonitor);
eventMonitor.BeginInvoke(DisposeDeviceEventMonitor, eventMonitor);
#endif
Task.Run(EventMonitor);
}
private void EventMonitor()
private async Task EventMonitor()
{
var isConnected = _device.IsConnected;
if (isConnected != _wasConnected)
while (_device.MonitorDeviceEvents)
{
if (isConnected && Inserted != null)
var isConnected = _device.IsConnected;
if (isConnected != _wasConnected)
{
Inserted();
}
else if (!isConnected && Removed != null)
{
Removed();
if (isConnected)
{
Inserted?.Invoke();
}
else
{
Removed?.Invoke();
}
_wasConnected = isConnected;
}
_wasConnected = isConnected;
await Task.Delay(100);
}
Thread.Sleep(500);
if (_device.MonitorDeviceEvents)
{
Init();
}
}
private static void DisposeDeviceEventMonitor(IAsyncResult ar)
{
((Action)ar.AsyncState).EndInvoke(ar);
}
}
}
}

View File

@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
@ -32,7 +31,7 @@ namespace EonaCat.HID
public static IEnumerable<Device> Enumerate(int vendorId, params int[] productIds)
{
return EnumerateDevices().Select(x => new Device(x.Path, x.Description)).Where(x => x.Info.VendorId == vendorId &&
return EnumerateDevices().Select(x => new Device(x.Path, x.Description)).Where(x => x.Info.VendorId == vendorId &&
productIds.Contains(x.Info.ProductId));
}
@ -41,7 +40,7 @@ namespace EonaCat.HID
return EnumerateDevices().Select(x => new Device(x.Path, x.Description)).Where(x => x.Info.VendorId == vendorId &&
productId == (ushort)x.Info.ProductId && (ushort)x.Capabilities.UsagePage == UsagePage);
}
public static IEnumerable<Device> Enumerate(int vendorId)
{
return EnumerateDevices().Select(x => new Device(x.Path, x.Description)).Where(x => x.Info.VendorId == vendorId);
@ -52,7 +51,8 @@ namespace EonaCat.HID
return EnumerateDevices().Select(x => new Device(x.Path, x.Description)).Where(x => (ushort)x.Capabilities.UsagePage == UsagePage);
}
internal class DeviceInfo { public string Path { get; set; } public string Description { get; set; } }
internal class DeviceInfo
{ public string Path { get; set; } public string Description { get; set; } }
internal static IEnumerable<DeviceInfo> EnumerateDevices()
{
@ -106,7 +106,7 @@ namespace EonaCat.HID
NativeMethods.SetupDiGetDeviceInterfaceDetail(deviceInfoSet, ref deviceInterfaceData, IntPtr.Zero, 0, ref bufferSize, IntPtr.Zero);
return NativeMethods.SetupDiGetDeviceInterfaceDetail(deviceInfoSet, ref deviceInterfaceData, ref interfaceDetail, bufferSize, ref bufferSize, IntPtr.Zero) ?
return NativeMethods.SetupDiGetDeviceInterfaceDetail(deviceInfoSet, ref deviceInterfaceData, ref interfaceDetail, bufferSize, ref bufferSize, IntPtr.Zero) ?
interfaceDetail.DevicePath : null;
}
@ -177,4 +177,4 @@ namespace EonaCat.HID
}
}
}
}
}

View File

@ -14,30 +14,27 @@ namespace EonaCat.HID
public IDevice GetDevice(string devicePath)
{
return Devices.GetDevice(devicePath) as IDevice;
return Devices.GetDevice(devicePath);
}
public IEnumerable<IDevice> Enumerate()
{
return Devices.Enumerate().
Select(d => d as IDevice);
return Devices.Enumerate().Select(x => x as IDevice);
}
public IEnumerable<IDevice> Enumerate(string devicePath)
{
return Devices.Enumerate(devicePath).
Select(d => d as IDevice);
return Devices.Enumerate(devicePath).Select(x => x as IDevice);
}
public IEnumerable<IDevice> Enumerate(int vendorId, params int[] productIds)
{
return Devices.Enumerate(vendorId, productIds).
Select(d => d as IDevice);
return Devices.Enumerate(vendorId, productIds).Select(x => x as IDevice);
}
public IEnumerable<IDevice> Enumerate(int vendorId)
{
return Devices.Enumerate(vendorId).Select(d => d as IDevice);
return Devices.Enumerate(vendorId).Select(x => x as IDevice);
}
}
}
}

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net20;net35;net40;net45;netstandard2</TargetFrameworks>
<TargetFrameworks>net45;netstandard2</TargetFrameworks>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Company>EonaCat (Jeroen Saey)</Company>
<Copyright>Copyright 2024 EonaCat (Jeroen Saey)</Copyright>
@ -30,11 +30,6 @@
<EVShowRevision>true</EVShowRevision>
</PropertyGroup>
<ItemGroup Condition=" '$(TargetFramework)' != 'net45' AND '$(TargetFramework)' != 'netstandard2' ">
<PackageReference Include="Theraot.Core" Version="1.0.3" />
</ItemGroup>
<ItemGroup>
<None Include="..\icon.png">
<Pack>True</Pack>

View File

@ -4,6 +4,9 @@ using System.Text;
namespace EonaCat.HID.Helpers
{
// This file is part of the EonaCat project(s) which is released under the Apache License.
// See the LICENSE file or go to https://EonaCat.com/License for full license details.
public static class ByteHelper
{
public static string ByteArrayToHexString(byte[] bytes, string separator = "")
@ -29,4 +32,4 @@ namespace EonaCat.HID.Helpers
return new string(buffer, 0, index >= 0 ? index : buffer.Length);
}
}
}
}

View File

@ -0,0 +1,13 @@
using System;
namespace EonaCat.HID.Helpers
{
internal class DeviceModeHelper
{
public IntPtr ReadHandle { get; set; }
public IntPtr WriteHandle { get; set; }
public DeviceMode ReadMode { get; set; } = DeviceMode.NonOverlapped;
public DeviceMode WriteMode { get; set; } = DeviceMode.NonOverlapped;
public ShareMode ShareMode = ShareMode.ShareRead | ShareMode.ShareWrite;
}
}

View File

@ -7,6 +7,7 @@ namespace EonaCat.HID
// See the LICENSE file or go to https://EonaCat.com/License for full license details.
public delegate void InsertedEventHandler();
public delegate void RemovedEventHandler();
public enum DeviceMode
@ -24,21 +25,22 @@ namespace EonaCat.HID
}
public delegate void ReadCallback(DeviceData data);
public delegate void ReadReportCallback(Report report);
public delegate void WriteCallback(bool success);
public interface IDevice : IDisposable
{
event InsertedEventHandler OnInserted;
event RemovedEventHandler OnRemoved;
IntPtr ReadHandle { get; }
IntPtr WriteHandle { get; }
bool IsOpen { get; }
bool IsConnected { get; }
string Description { get; }
Capabilities Capabilities { get; }
Attributes Info { get; }
Attributes Info { get; }
string DevicePath { get; }
bool MonitorDeviceEvents { get; set; }
@ -62,6 +64,7 @@ namespace EonaCat.HID
Task<Report> ReadReportAsync(int timeout = 0);
Report ReadReport(int timeout = 0);
bool ReadFeatureData(out byte[] data, byte reportId = 0);
bool ReadProductName(out byte[] data);
@ -94,4 +97,4 @@ namespace EonaCat.HID
bool WriteFeatureData(byte[] data);
}
}
}

View File

@ -1,6 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Collections.Generic;
namespace EonaCat.HID
{
@ -9,10 +7,15 @@ namespace EonaCat.HID
public interface IEnumerator
{
bool IsConnected(string devicePath);
IDevice GetDevice(string devicePath);
IEnumerable<IDevice> Enumerate();
IEnumerable<IDevice> Enumerate(string devicePath);
IEnumerable<IDevice> Enumerate(int vendorId, params int[] productIds);
IEnumerable<IDevice> Enumerate(int vendorId);
}
}
}

View File

@ -33,28 +33,28 @@ namespace EonaCat.HID
}
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
static internal extern bool CancelIoEx(IntPtr hFile, IntPtr lpOverlapped);
internal static extern bool CancelIoEx(IntPtr hFile, IntPtr lpOverlapped);
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
static internal extern bool CloseHandle(IntPtr hObject);
internal static extern bool CloseHandle(IntPtr hObject);
[DllImport("kernel32.dll")]
static internal extern IntPtr CreateEvent(ref SECURITY_ATTRIBUTES securityAttributes, int bManualReset, int bInitialState, string lpName);
internal static extern IntPtr CreateEvent(ref SECURITY_ATTRIBUTES securityAttributes, int bManualReset, int bInitialState, string lpName);
[DllImport("kernel32.dll", SetLastError = true)]
static internal extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode, ref SECURITY_ATTRIBUTES lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, IntPtr hTemplateFile);
internal static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode, ref SECURITY_ATTRIBUTES lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("kernel32.dll", SetLastError = true)]
static internal extern bool ReadFile(IntPtr hFile, IntPtr lpBuffer, uint nNumberOfBytesToRead, out uint lpNumberOfBytesRead, [In] ref System.Threading.NativeOverlapped lpOverlapped);
internal static extern bool ReadFile(IntPtr hFile, IntPtr lpBuffer, uint nNumberOfBytesToRead, out uint lpNumberOfBytesRead, [In] ref System.Threading.NativeOverlapped lpOverlapped);
[DllImport("kernel32.dll")]
static internal extern uint WaitForSingleObject(IntPtr hHandle, int dwMilliseconds);
internal static extern uint WaitForSingleObject(IntPtr hHandle, int dwMilliseconds);
[DllImport("kernel32.dll", SetLastError = true)]
static internal extern bool GetOverlappedResult(IntPtr hFile, [In] ref System.Threading.NativeOverlapped lpOverlapped, out uint lpNumberOfBytesTransferred, bool bWait);
internal static extern bool GetOverlappedResult(IntPtr hFile, [In] ref System.Threading.NativeOverlapped lpOverlapped, out uint lpNumberOfBytesTransferred, bool bWait);
[DllImport("kernel32.dll")]
static internal extern bool WriteFile(IntPtr hFile, byte[] lpBuffer, uint nNumberOfBytesToWrite, out uint lpNumberOfBytesWritten, [In] ref System.Threading.NativeOverlapped lpOverlapped);
internal static extern bool WriteFile(IntPtr hFile, byte[] lpBuffer, uint nNumberOfBytesToWrite, out uint lpNumberOfBytesWritten, [In] ref System.Threading.NativeOverlapped lpOverlapped);
internal const short DIGCF_PRESENT = 0x2;
internal const short DIGCF_DEVICEINTERFACE = 0x10;
@ -115,6 +115,7 @@ namespace EonaCat.HID
internal struct SP_DEVICE_INTERFACE_DETAIL_DATA
{
internal int Size;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
internal string DevicePath;
}
@ -135,22 +136,22 @@ namespace EonaCat.HID
public static extern unsafe bool SetupDiGetDeviceProperty(IntPtr deviceInfo, ref SP_DEVINFO_DATA deviceInfoData, ref DEVPROPKEY propkey, ref uint propertyDataType, void* propertyBuffer, int propertyBufferSize, ref int requiredSize, uint flags);
[DllImport("setupapi.dll")]
static internal extern bool SetupDiEnumDeviceInfo(IntPtr deviceInfoSet, int memberIndex, ref SP_DEVINFO_DATA deviceInfoData);
internal static extern bool SetupDiEnumDeviceInfo(IntPtr deviceInfoSet, int memberIndex, ref SP_DEVINFO_DATA deviceInfoData);
[DllImport("setupapi.dll")]
static internal extern int SetupDiDestroyDeviceInfoList(IntPtr deviceInfoSet);
internal static extern int SetupDiDestroyDeviceInfoList(IntPtr deviceInfoSet);
[DllImport("setupapi.dll")]
static internal extern bool SetupDiEnumDeviceInterfaces(IntPtr deviceInfoSet, ref SP_DEVINFO_DATA deviceInfoData, ref Guid interfaceClassGuid, int memberIndex, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData);
internal static extern bool SetupDiEnumDeviceInterfaces(IntPtr deviceInfoSet, ref SP_DEVINFO_DATA deviceInfoData, ref Guid interfaceClassGuid, int memberIndex, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData);
[DllImport("setupapi.dll")]
static internal extern IntPtr SetupDiGetClassDevs(ref System.Guid classGuid, string enumerator, IntPtr hwndParent, int flags);
internal static extern IntPtr SetupDiGetClassDevs(ref System.Guid classGuid, string enumerator, IntPtr hwndParent, int flags);
[DllImport("setupapi.dll")]
static internal extern bool SetupDiGetDeviceInterfaceDetail(IntPtr deviceInfoSet, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData, IntPtr deviceInterfaceDetailData, int deviceInterfaceDetailDataSize, ref int requiredSize, IntPtr deviceInfoData);
internal static extern bool SetupDiGetDeviceInterfaceDetail(IntPtr deviceInfoSet, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData, IntPtr deviceInterfaceDetailData, int deviceInterfaceDetailDataSize, ref int requiredSize, IntPtr deviceInfoData);
[DllImport("setupapi.dll")]
static internal extern bool SetupDiGetDeviceInterfaceDetail(IntPtr deviceInfoSet, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData, ref SP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData, int deviceInterfaceDetailDataSize, ref int requiredSize, IntPtr deviceInfoData);
internal static extern bool SetupDiGetDeviceInterfaceDetail(IntPtr deviceInfoSet, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData, ref SP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData, int deviceInterfaceDetailDataSize, ref int requiredSize, IntPtr deviceInfoData);
[StructLayout(LayoutKind.Sequential)]
internal struct HIDD_ATTRIBUTES
@ -169,8 +170,10 @@ namespace EonaCat.HID
internal short InputReportByteLength;
internal short OutputReportByteLength;
internal short FeatureReportByteLength;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)]
internal short[] Reserved;
internal short NumberLinkCollectionNodes;
internal short NumberInputButtonCaps;
internal short NumberInputValueCaps;
@ -184,31 +187,31 @@ namespace EonaCat.HID
}
[DllImport("hid.dll")]
static internal extern bool HidD_GetAttributes(IntPtr hidDeviceObject, ref HIDD_ATTRIBUTES attributes);
internal static extern bool HidD_GetAttributes(IntPtr hidDeviceObject, ref HIDD_ATTRIBUTES attributes);
[DllImport("hid.dll")]
static internal extern bool HidD_GetFeature(IntPtr hidDeviceObject, byte[] lpReportBuffer, int reportBufferLength);
internal static extern bool HidD_GetFeature(IntPtr hidDeviceObject, byte[] lpReportBuffer, int reportBufferLength);
[DllImport("hid.dll")]
static internal extern bool HidD_GetInputReport(IntPtr hidDeviceObject, byte[] lpReportBuffer, int reportBufferLength);
internal static extern bool HidD_GetInputReport(IntPtr hidDeviceObject, byte[] lpReportBuffer, int reportBufferLength);
[DllImport("hid.dll")]
static internal extern void HidD_GetHidGuid(ref Guid hidGuid);
internal static extern void HidD_GetHidGuid(ref Guid hidGuid);
[DllImport("hid.dll")]
static internal extern bool HidD_GetPreparsedData(IntPtr hidDeviceObject, ref IntPtr preparsedData);
internal static extern bool HidD_GetPreparsedData(IntPtr hidDeviceObject, ref IntPtr preparsedData);
[DllImport("hid.dll")]
static internal extern bool HidD_FreePreparsedData(IntPtr preparsedData);
internal static extern bool HidD_FreePreparsedData(IntPtr preparsedData);
[DllImport("hid.dll")]
static internal extern bool HidD_SetFeature(IntPtr hidDeviceObject, byte[] lpReportBuffer, int reportBufferLength);
internal static extern bool HidD_SetFeature(IntPtr hidDeviceObject, byte[] lpReportBuffer, int reportBufferLength);
[DllImport("hid.dll")]
static internal extern bool HidD_SetOutputReport(IntPtr hidDeviceObject, byte[] lpReportBuffer, int reportBufferLength);
internal static extern bool HidD_SetOutputReport(IntPtr hidDeviceObject, byte[] lpReportBuffer, int reportBufferLength);
[DllImport("hid.dll")]
static internal extern int HidP_GetCaps(IntPtr preparsedData, ref Capabilities capabilities);
internal static extern int HidP_GetCaps(IntPtr preparsedData, ref Capabilities capabilities);
[DllImport("hid.dll")]
internal static extern bool HidD_GetProductString(IntPtr hidDeviceObject, byte[] lpReportBuffer, int ReportBufferLength);
@ -219,4 +222,4 @@ namespace EonaCat.HID
[DllImport("hid.dll")]
internal static extern bool HidD_GetSerialNumberString(IntPtr hidDeviceObject, byte[] lpReportBuffer, int reportBufferLength);
}
}
}

View File

@ -9,12 +9,7 @@ namespace EonaCat.HID
internal ReadDevice(string devicePath, string description = null)
: base(devicePath, description) { }
public DeviceData FastRead()
{
return FastRead(0);
}
public DeviceData FastRead(int timeout)
public DeviceData FastRead(int timeout = 0)
{
try
{
@ -26,58 +21,19 @@ namespace EonaCat.HID
}
}
public void FastRead(ReadCallback callback)
{
FastRead(callback, 0);
}
public void FastRead(ReadCallback callback, int timeout)
{
var readDelegate = new ReadDelegate(FastRead);
var asyncState = new StateAsync(readDelegate, callback);
readDelegate.BeginInvoke(timeout, EndRead, asyncState);
}
public async Task<DeviceData> FastReadAsync(int timeout = 0)
{
var readDelegate = new ReadDelegate(FastRead);
#if NET20 || NET35 || NET5_0_OR_GREATER
return await Task<DeviceData>.Factory.StartNew(() => readDelegate.Invoke(timeout));
#else
return await Task<DeviceData>.Factory.FromAsync(readDelegate.BeginInvoke, readDelegate.EndInvoke, timeout, null);
#endif
return await Task.Run(() => FastRead(timeout));
}
public Report FastReadReport()
{
return FastReadReport(0);
}
public Report FastReadReport(int timeout)
public Report FastReadReport(int timeout = 0)
{
return new Report(Capabilities.InputReportByteLength, FastRead(timeout));
}
public void FastReadReport(ReadReportCallback callback)
{
FastReadReport(callback, 0);
}
public void FastReadReport(ReadReportCallback callback, int timeout)
{
var readReportDelegate = new ReadReportDelegate(FastReadReport);
var asyncState = new StateAsync(readReportDelegate, callback);
readReportDelegate.BeginInvoke(timeout, EndReadReport, asyncState);
}
public async Task<Report> FastReadReportAsync(int timeout = 0)
{
var readReportDelegate = new ReadReportDelegate(FastReadReport);
#if NET20 || NET35 || NET5_0_OR_GREATER
return await Task<Report>.Factory.StartNew(() => readReportDelegate.Invoke(timeout));
#else
return await Task<Report>.Factory.FromAsync(readReportDelegate.BeginInvoke, readReportDelegate.EndInvoke, timeout, null);
#endif
return await Task.Run(() => FastReadReport(timeout));
}
}
}
}

View File

@ -14,7 +14,7 @@ namespace EonaCat.HID
public IDevice GetDevice(string devicePath)
{
return Enumerate(devicePath).FirstOrDefault() as IDevice;
return Enumerate(devicePath).FirstOrDefault();
}
public IEnumerable<IDevice> Enumerate()

View File

@ -7,57 +7,57 @@ namespace EonaCat.HID
public class Report
{
private byte _reportId;
private byte[] _data = new byte[] {};
private byte[] _data;
private readonly DeviceData.ReadStatus _status;
public Report(int reportSize)
{
Array.Resize(ref _data, reportSize - 1);
if (reportSize > 0)
{
_data = new byte[reportSize - 1];
}
else
{
Exists = false;
return;
}
}
public Report(int reportSize, DeviceData deviceData)
{
_status = deviceData.Status;
Array.Resize(ref _data, reportSize - 1);
if ((deviceData.Data != null))
if (reportSize > 0)
{
if (deviceData.Data.Length > 0)
{
_reportId = deviceData.Data[0];
Exists = true;
if (deviceData.Data.Length > 1)
{
var dataLength = reportSize - 1;
if (deviceData.Data.Length < reportSize - 1)
{
dataLength = deviceData.Data.Length;
}
Array.Copy(deviceData.Data, 1, _data, 0, dataLength);
}
}
else
{
Exists = false;
}
_data = new byte[reportSize - 1];
}
else
{
Exists = false;
return;
}
if (deviceData?.Data == null || deviceData.Data.Length == 0)
{
Exists = false;
return;
}
_reportId = deviceData.Data[0];
Exists = true;
var dataLength = Math.Min(deviceData.Data.Length - 1, reportSize - 1);
if (dataLength > 0)
{
Array.Copy(deviceData.Data, 1, _data, 0, dataLength);
}
}
public bool Exists { get; private set; }
public DeviceData.ReadStatus ReadStatus { get { return _status; } }
public DeviceData.ReadStatus ReadStatus => _status;
public byte ReportId
{
get { return _reportId; }
get => _reportId;
set
{
_reportId = value;
@ -67,7 +67,7 @@ namespace EonaCat.HID
public byte[] Data
{
get { return _data; }
get => _data;
set
{
_data = value;
@ -77,11 +77,10 @@ namespace EonaCat.HID
public byte[] GetBytes()
{
byte[] data = null;
Array.Resize(ref data, _data.Length + 1);
var data = new byte[_data.Length + 1];
data[0] = _reportId;
Array.Copy(_data, 0, data, 1, _data.Length);
return data;
}
}
}
}

View File

@ -13,7 +13,9 @@
_callbackDelegate = callbackDelegate;
}
public object CallerDelegate { get { return _callerDelegate; } }
public object CallbackDelegate { get { return _callbackDelegate; } }
public object CallerDelegate
{ get { return _callerDelegate; } }
public object CallbackDelegate
{ get { return _callbackDelegate; } }
}
}
}