Updated
This commit is contained in:
parent
ebc1d98195
commit
13d7af79f5
|
@ -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()
|
||||
{
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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 />
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -1,18 +1,15 @@
|
|||
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);
|
||||
|
|
|
@ -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
|
||||
// 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")]
|
||||
|
@ -20,7 +19,7 @@ using System.Runtime.InteropServices;
|
|||
[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:
|
||||
//
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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())));
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -459,11 +464,10 @@ namespace EonaCat.HID
|
|||
///
|
||||
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,7 +716,7 @@ 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)
|
||||
{
|
||||
|
@ -724,16 +730,19 @@ namespace EonaCat.HID
|
|||
{
|
||||
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:
|
||||
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();
|
||||
|
|
|
@ -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()
|
||||
{
|
||||
while (_device.MonitorDeviceEvents)
|
||||
{
|
||||
var isConnected = _device.IsConnected;
|
||||
|
||||
if (isConnected != _wasConnected)
|
||||
{
|
||||
if (isConnected && Inserted != null)
|
||||
if (isConnected)
|
||||
{
|
||||
Inserted();
|
||||
Inserted?.Invoke();
|
||||
}
|
||||
else if (!isConnected && Removed != null)
|
||||
else
|
||||
{
|
||||
Removed();
|
||||
Removed?.Invoke();
|
||||
}
|
||||
|
||||
_wasConnected = isConnected;
|
||||
}
|
||||
|
||||
Thread.Sleep(500);
|
||||
|
||||
if (_device.MonitorDeviceEvents)
|
||||
{
|
||||
Init();
|
||||
}
|
||||
}
|
||||
|
||||
private static void DisposeDeviceEventMonitor(IAsyncResult ar)
|
||||
{
|
||||
((Action)ar.AsyncState).EndInvoke(ar);
|
||||
await Task.Delay(100);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
|
@ -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()
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -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 = "")
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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,16 +25,17 @@ 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; }
|
||||
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
_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;
|
||||
|
||||
if (deviceData.Data.Length > 1)
|
||||
var dataLength = Math.Min(deviceData.Data.Length - 1, reportSize - 1);
|
||||
if (dataLength > 0)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Exists = false;
|
||||
}
|
||||
}
|
||||
|
||||
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,8 +77,7 @@ 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;
|
||||
|
|
|
@ -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; } }
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue