added project with hidapi from libusb

master
Jonas Arnold 3 years ago
parent 1c433d519d
commit 5b06772cad
  1. 8
      ProtocolTests.sln
  2. 178
      UsbHidTestApp_libusb/Program.cs
  3. 26
      UsbHidTestApp_libusb/UsbHidTestApp_libusb.csproj
  4. BIN
      UsbHidTestApp_libusb/hidapi.dll
  5. BIN
      UsbHidTestApp_libusb/hidapi.lib

@ -9,7 +9,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UsbHidTestApp", "UsbHidTest
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UdpTestApp", "UdpTestApp\UdpTestApp.csproj", "{97751007-78CC-4356-9F17-F118BA9297FB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TcpTestApp", "TcpTestApp\TcpTestApp.csproj", "{AFDCE6F1-D0E8-42DA-B0D9-201958AC0BAD}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TcpTestApp", "TcpTestApp\TcpTestApp.csproj", "{AFDCE6F1-D0E8-42DA-B0D9-201958AC0BAD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UsbHidTestApp_libusb", "UsbHidTestApp_libusb\UsbHidTestApp_libusb.csproj", "{7610FE08-8496-46D7-9044-29BFEAAC4C81}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -33,6 +35,10 @@ Global
{AFDCE6F1-D0E8-42DA-B0D9-201958AC0BAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AFDCE6F1-D0E8-42DA-B0D9-201958AC0BAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AFDCE6F1-D0E8-42DA-B0D9-201958AC0BAD}.Release|Any CPU.Build.0 = Release|Any CPU
{7610FE08-8496-46D7-9044-29BFEAAC4C81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7610FE08-8496-46D7-9044-29BFEAAC4C81}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7610FE08-8496-46D7-9044-29BFEAAC4C81}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7610FE08-8496-46D7-9044-29BFEAAC4C81}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

@ -0,0 +1,178 @@
using HidApi;
using System.Text;
namespace UsbHidTestApp_libusb;
internal class Program
{
private static HidApi.Device? _device;
private static bool _continue;
private static Thread? readThread;
private static IEnumerable<HidApi.DeviceInfo>? lastDevices;
private static StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
public static bool applicationQuitRequested { get; private set; }
static void Main(string[] args)
{
while (applicationQuitRequested == false)
{
Console.WriteLine($"----- USB HID PROTOCOL TEST APP -----");
Console.WriteLine($"Command list:");
Console.WriteLine($"l = list devices");
Console.WriteLine($"c = connect");
Console.WriteLine($"q = quit");
var key = Console.ReadKey();
switch (key.Key)
{
// list devices
case ConsoleKey.L:
var hidDevices = Hid.Enumerate();
Console.WriteLine($"Following HID devices were found: {Environment.NewLine}");
foreach (var deviceInfo in hidDevices)
{
bool newDevice = false;
var device = deviceInfo.ConnectToDevice();
if (lastDevices?.Where(x => x.Path == device.GetDeviceInfo().Path).Any() == false)
{
Console.ForegroundColor = ConsoleColor.Green;
newDevice = true;
}
Console.WriteLine($"-- VendorId: 0x{deviceInfo.VendorId.ToString("X4")}, ProductId: 0x{deviceInfo.ProductId.ToString("X4")}, Manufacturer: {deviceInfo.ManufacturerString}, Path:");
Console.WriteLine($" {deviceInfo.Path}");
if (newDevice)
{
Console.ForegroundColor = ConsoleColor.White;
}
}
lastDevices = hidDevices;
break;
// connect
case ConsoleKey.C:
Console.Write($"Write device vendor id as hex: ");
string? vendorIdString = Console.ReadLine();
ushort vendorId;
if (vendorIdString == null ||
vendorIdString == "" ||
ushort.TryParse(vendorIdString, System.Globalization.NumberStyles.HexNumber, null, out vendorId) == false)
{
Console.WriteLine($"Invalid vendor ID entered.");
break;
}
Console.Write($"Write product vendor id as hex: ");
string? productIdString = Console.ReadLine();
ushort productId;
if (productIdString == null ||
productIdString == "" ||
ushort.TryParse(productIdString, System.Globalization.NumberStyles.HexNumber, null, out productId) == false)
{
Console.WriteLine($"Invalid product ID entered.");
break;
}
_device = new Device(vendorId, productId);
if (_device == null)
{
Console.WriteLine("Could not find device.");
break;
}
_continue = true;
readThread = new Thread(Read);
readThread.Start();
var devInfo = _device.GetDeviceInfo();
Console.WriteLine($"Connected to device VendorId: 0x{devInfo.VendorId.ToString("X4")}, ProductId: 0x{devInfo.ProductId.ToString("X4")}, Manufacturer: {devInfo.ManufacturerString}.");
Console.WriteLine("Write 'quit' to end communication.");
while (_continue)
{
var message = Console.ReadLine();
if (stringComparer.Equals("quit", message))
{
_continue = false;
}
else
{
byte[] msgBytes = Encoding.ASCII.GetBytes(message!);
List<byte> listBytes = new List<byte>();
listBytes.Add((byte)' '); // temp fix for first sign wrong
listBytes.AddRange(msgBytes);
listBytes.Add((byte)'\n');
_device.Write(listBytes.ToArray());
}
}
readThread.Join();
readThread = null;
_device.Dispose(); // "close"
Console.WriteLine("Closed connection to device.");
break;
// quit
case ConsoleKey.Q:
applicationQuitRequested = true;
break;
default:
Console.WriteLine($"{Environment.NewLine}Did not recognize key.. {Environment.NewLine}");
break;
}
}
Hid.Exit(); //Call at the end of your program
}
public static void Read()
{
while (_continue)
{
try
{
ReadOnlySpan<byte> readData = null;
if(_device != null)
{
readData = _device.Read(1000);
}
else
{
Thread.Sleep(20);
}
if (readData != null && readData.IsEmpty == false)
{
string print = Encoding.UTF8.GetString(readData);
//print = print.Replace("\r", "").Replace("\n", ""); // Newline Mode: none
//print = print.Replace("\r", ""); // Newline Mode: only print \n
//print = print.Replace("\0", ""); // delete null chars
if (String.IsNullOrEmpty(print) == false)
{
Console.WriteLine(print);
}
}
}
catch (HidException hidex)
{
Console.WriteLine($"Got HidException, device likely disconnected: {hidex}");
Console.WriteLine($"Write 'quit' to end");
_continue = false;
}
}
}
}

@ -0,0 +1,26 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<EmbeddedResource Include="hidapi.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="hidapi.lib">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="hidapi.pdb">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<PackageReference Include="HidApi.Net" Version="0.3.0" />
</ItemGroup>
</Project>

Binary file not shown.

Binary file not shown.
Loading…
Cancel
Save