Updated console message loop
This commit is contained in:
@@ -1,115 +1,116 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{61994020-DB89-4621-BA4B-7347A2142CFF}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>EonaCat.HID</RootNamespace>
|
||||
<AssemblyName>EonaCat HID Analyzer</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>
|
||||
</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Management" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Deployment" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AboutBox.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="AboutBox.designer.cs">
|
||||
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="MainForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="MainForm.Designer.cs">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="AboutBox.resx">
|
||||
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="MainForm.resx">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="icon.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\EonaCat.HID\EonaCat.HID.csproj">
|
||||
<Project>{00403bd6-7a26-4971-29d3-8a7849aac770}</Project>
|
||||
<Name>EonaCat.HID</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{61994020-DB89-4621-BA4B-7347A2142CFF}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>EonaCat.HID</RootNamespace>
|
||||
<AssemblyName>EonaCat HID Analyzer</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>
|
||||
</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Management" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Deployment" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="WindowsBase" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AboutBox.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="AboutBox.designer.cs">
|
||||
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="MainForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="MainForm.Designer.cs">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="AboutBox.resx">
|
||||
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="MainForm.resx">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="icon.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\EonaCat.HID\EonaCat.HID.csproj">
|
||||
<Project>{00403bd6-7a26-4971-29d3-8a7849aac770}</Project>
|
||||
<Name>EonaCat.HID</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
-->
|
||||
</Project>
|
@@ -10,6 +10,7 @@ using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Threading;
|
||||
|
||||
namespace EonaCat.HID.Analyzer
|
||||
{
|
||||
@@ -42,7 +43,8 @@ namespace EonaCat.HID.Analyzer
|
||||
|
||||
public async Task RefreshDevicesAsync(ushort? vendorId = null, ushort? productId = null)
|
||||
{
|
||||
_deviceList = await _deviceManager.EnumerateAsync(vendorId, productId).ConfigureAwait(false);
|
||||
toolStripStatusLabel1.Text = "Refreshing devices, this may take a while...";
|
||||
_deviceList = await _deviceManager.EnumerateAsync(vendorId, productId);
|
||||
}
|
||||
|
||||
private void MainForm_Load(object sender, System.EventArgs e)
|
||||
@@ -57,12 +59,12 @@ namespace EonaCat.HID.Analyzer
|
||||
}
|
||||
}
|
||||
|
||||
private void MainForm_Shown(object sender, System.EventArgs e)
|
||||
private async void MainForm_Shown(object sender, System.EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
RefreshDevicesAsync();
|
||||
UpdateDeviceList();
|
||||
await RefreshDevicesAsync().ConfigureAwait(false);
|
||||
UpdateDeviceListAsync();
|
||||
toolStripStatusLabel1.Text = "Please select device and click open to start.";
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -94,44 +96,62 @@ namespace EonaCat.HID.Analyzer
|
||||
}));
|
||||
}
|
||||
|
||||
private void UpdateDeviceList()
|
||||
{
|
||||
dataGridView1.SelectionChanged -= DataGridView1_SelectionChanged;
|
||||
dataGridView1.Rows.Clear();
|
||||
|
||||
for (int i = 0; i < _deviceList.Count(); i++)
|
||||
{
|
||||
IHid device = _deviceList.ElementAt(i);
|
||||
|
||||
var deviceName = "";
|
||||
var deviceManufacturer = "";
|
||||
var deviceSerialNumber = "";
|
||||
|
||||
deviceName = device.ProductName;
|
||||
deviceManufacturer = device.Manufacturer;
|
||||
deviceSerialNumber = device.SerialNumber;
|
||||
var isWritingSupported = device.IsWritingSupport;
|
||||
var isReadingSupported = device.IsReadingSupport;
|
||||
|
||||
var row = new string[]
|
||||
{
|
||||
(i + 1).ToString(),
|
||||
deviceName,
|
||||
deviceManufacturer,
|
||||
deviceSerialNumber,
|
||||
isReadingSupported.ToString(),
|
||||
isWritingSupported.ToString(),
|
||||
device.InputReportByteLength.ToString(),
|
||||
device.OutputReportByteLength.ToString(),
|
||||
device.FeatureReportByteLength.ToString(),
|
||||
$"Vendor:{device.VendorId:X4} Product:{device.ProductId:X4} Revision:{device.VendorId:X4}",
|
||||
device.DevicePath
|
||||
};
|
||||
|
||||
dataGridView1.Rows.Add(row);
|
||||
}
|
||||
dataGridView1.SelectionChanged += DataGridView1_SelectionChanged;
|
||||
DataGridView1_SelectionChanged(this, null);
|
||||
private async Task UpdateDeviceListAsync()
|
||||
{
|
||||
if (_deviceList == null || !_deviceList.Any())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Capture the data in a local variable so the UI update can happen in one go
|
||||
var rows = new List<string[]>();
|
||||
for (int i = 0; i < _deviceList.Count(); i++)
|
||||
{
|
||||
IHid device = _deviceList.ElementAt(i);
|
||||
|
||||
var row = new string[]
|
||||
{
|
||||
(i + 1).ToString(),
|
||||
device.ProductName,
|
||||
device.Manufacturer,
|
||||
device.SerialNumber,
|
||||
device.IsReadingSupport.ToString(),
|
||||
device.IsWritingSupport.ToString(),
|
||||
device.InputReportByteLength.ToString(),
|
||||
device.OutputReportByteLength.ToString(),
|
||||
device.FeatureReportByteLength.ToString(),
|
||||
$"Vendor:{device.VendorId:X4} Product:{device.ProductId:X4} Revision:{device.VendorId:X4}",
|
||||
device.DevicePath
|
||||
};
|
||||
|
||||
rows.Add(row);
|
||||
}
|
||||
|
||||
if (dataGridView1.InvokeRequired)
|
||||
{
|
||||
dataGridView1.Invoke(new Action(() =>
|
||||
{
|
||||
dataGridView1.SelectionChanged -= DataGridView1_SelectionChanged;
|
||||
dataGridView1.Rows.Clear();
|
||||
foreach (var row in rows)
|
||||
{
|
||||
dataGridView1.Rows.Add(row);
|
||||
}
|
||||
dataGridView1.SelectionChanged += DataGridView1_SelectionChanged;
|
||||
DataGridView1_SelectionChanged(this, null);
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
dataGridView1.SelectionChanged -= DataGridView1_SelectionChanged;
|
||||
dataGridView1.Rows.Clear();
|
||||
foreach (var row in rows)
|
||||
{
|
||||
dataGridView1.Rows.Add(row);
|
||||
}
|
||||
dataGridView1.SelectionChanged += DataGridView1_SelectionChanged;
|
||||
DataGridView1_SelectionChanged(this, null);
|
||||
}
|
||||
}
|
||||
|
||||
private void PopupException(string message, string caption = "Exception")
|
||||
@@ -178,12 +198,12 @@ namespace EonaCat.HID.Analyzer
|
||||
}
|
||||
}
|
||||
|
||||
private void ToolStripButtonReload_Click(object sender, EventArgs e)
|
||||
private async void ToolStripButtonReload_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
RefreshDevicesAsync();
|
||||
UpdateDeviceList();
|
||||
await RefreshDevicesAsync().ConfigureAwait(false);
|
||||
UpdateDeviceListAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -191,7 +211,7 @@ namespace EonaCat.HID.Analyzer
|
||||
}
|
||||
}
|
||||
|
||||
private void ToolStripButtonFilter_Click(object sender, EventArgs e)
|
||||
private async void ToolStripButtonFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -203,8 +223,8 @@ namespace EonaCat.HID.Analyzer
|
||||
vid = ushort.Parse(str[0], NumberStyles.AllowHexSpecifier);
|
||||
pid = ushort.Parse(str[1], NumberStyles.AllowHexSpecifier);
|
||||
}
|
||||
RefreshDevicesAsync(vid, pid);
|
||||
UpdateDeviceList();
|
||||
await RefreshDevicesAsync(vid, pid).ConfigureAwait(false);
|
||||
UpdateDeviceListAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -341,12 +361,12 @@ namespace EonaCat.HID.Analyzer
|
||||
}
|
||||
|
||||
var report = await _device.ReadInputReportAsync();
|
||||
if (report == null || report.Data.Length < 2)
|
||||
if (report == null || report.Data.Length < 2)
|
||||
{
|
||||
AppendEventLog("Received report is null or is too short to contain a valid Report ID.", Color.Red);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var str = string.Format("Rx Input Report [{0}] <-- {1}", report.Data.Length, BitConverter.ToString(report.Data));
|
||||
AppendEventLog(str, Color.Blue);
|
||||
}
|
||||
|
Reference in New Issue
Block a user