C#でUSBデバイスを操作する方法
LibUSBを知らない人はいないと思いますが、そうです、非常に有名なオープンソースのUSBドライバで、LinuxやWINでUSBデバイスを簡単に操作できるAPIを提供しています、非常に便利です! しかし、libusbはc言語に基づいているので、C#でlibusbを使用することはできないのでしょうか?もちろん、あなたが完全に独自のC#ライブラリにlibusbによって提供されるDLをパッケージ化することができますが、作業負荷は非常に大きく、デバッグプロセスは確かにいくつかの予期しないことが起こるので、C#でlibusbを使用する方法、シーン上の強力なオープンソースUSBクラスライブラリ下にC#の次の導入です。LibUSBDotNetは、その通りです。また、オープンソースプロジェクトである.NETのlibusbは、完全なクラスライブラリにlibusbをラップしている、次のリンクからダウンロードすることができます。
http://download.csdn.net/detail/cumtwys/7713473
(CSDNはスコアなし)
または
http://sourceforge.net/projects/libusbdotnet/ (公式)
<スパン sourceforgeのオープンソースプロジェクトで、WINでEXEをダウンロードしてインストールするだけで、たくさんのサンプルとドキュメント(CHM形式、超便利)が含まれています。
<スパン LibUSBDotNetの使い方を簡単に説明します。
1. まずC#のアプリケーションを作成します(コンソール、フォームでも可)。
2、LibUsbDotNetインストールディレクトリのsrcディレクトリから、LibWinUsbをプロジェクトのルートにコピーします。
3. そのまま、ソリューションを右クリックして、既存のプロジェクトを追加し、そのプロジェクトを LibWinUsb ディレクトリにインクルードします。
4. 以下のように、プロジェクト上で右クリックし、参照を追加して、LibUSBDotNetプロジェクトを選択します。
<スパン 5 CSファイルの冒頭に、以下の参照を追加します。
using LibUsbDotNet;
Main; using LibUsbDotNet;
Info; using LibUsbDotNet;
Descriptors; using LibUsbDotNet;
LibUsbDotNet; using LibUsbDotNet;
WinUsb; using LibUsbDotNet;
<スパン
6. 以下は、データを読み込む例です(CHMのドキュメントから引用)。
using System;
Text;
Text; using LibUsbDotNet;
Main. using LibUsbDotNet;
namespace Examples
internal
internal class ReadPolling
internal class
public static UsbDevice MyUsbDevice;
#region SET YOUR USB Vendor and Product ID!
public static UsbDeviceFinder MyUsbFinder = new UsbDeviceFinder(1234, 1);
#endregion
public static void Main(string[] args)
{
ErrorCode ec = ErrorCode.None;
Try
Try
// Find and open the usb device.
MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);
// If the device is open and ready
if (MyUsbDevice == null) throw new Exception("Device Not Found.");
// If this is a "whole" usb device (libusb-win32, linux libusb-1.0)
// it exposes an IUsbDevice interface. If not (WinUSB) the
// 'wholeUsbDevice' variable will be null indicating this is
// an interface of a device; it does not require or support
// configuration and interface selection.
IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;
if (!ReferenceEquals(wholeUsbDevice, null))
{
// This is a "whole" USB device. before it can be used,
// the desired configuration and interface must be selected.
// Select config #1
SetConfiguration(1);
// Claim interface #0.
ClaimInterface(0);
}
// open read endpoint 1.
UsbEndpointReader reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01);
byte[] readBuffer = new byte[1024];
while (ec == ErrorCode.None)
{
int bytesRead;
// If the device hasn't sent data in the last 5 seconds,
// a timeout error (ec = IoTimedOut) will occur.
Read(readBuffer, 5000, out bytesRead). ec = reader;
Read(readBuffer, 5000, out bytesRead); if (bytesRead == 0) throw new Exception(string.Format("{0}:No more bytes!", ec));
Console.WriteLine("{0} bytes read", bytesRead);
// Write that output to the console.
Console.Write(Encoding.Default.GetString(readBuffer, 0, bytesRead));
GetString(readBuffer, 0, bytesRead)); }
Console.WriteLine("\r\nDone!\r\n");
}
catch (Exception ex)
{
Console.WriteLine();
Console.WriteLine((ec ! = ErrorCode.None ? ec + ":" : String.Empty) + ex.Message);
}
finally
{
if (MyUsbDevice ! = null)
{
if (MyUsbDevice.IsOpen)
{
// If this is a "whole" usb device (libusb-win32, linux libusb-1.0)
// it exposes an IUsbDevice interface. if not (WinUSB) the
// 'wholeUsbDevice' variable will be null indicating this is
// an interface of a device; it does not require or support
// configuration and interface selection.
IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;
if (!ReferenceEquals(wholeUsbDevice, null))
{
// Release interface #0.
wholeUsbDevice
<スパン
7、どのようにシンプルで、便利なそれを、インストールディレクトリは、ドライバファイルの自動生成を持っている、非常に良いドライバ生成ウィザードであるInfWizard.exe、独自のUSBデバイスの開発のために、あなたは完全にドライバを行うためにLIBUSBを使って検討できるときにWINドライバを記述する必要があります、その後このツールを使用して、ワークロードが1分以内に行われるでしょう。あまりにも強力な......
関連
-
c# - デシリアライズ・エラー。入力文字列が正しい形式でない
-
C#高精度遅延コード実行時間(us/ns)
-
C#とC++の型対応表まとめ
-
HTTP エラー 500.22 - 内部サーバー エラー-IIS7 Asp.net2.0 ウェブサイトの実行ソリューションに失敗しました。
-
不正なフォーマットでプログラムを読み込もうとした場合の問題を解決します。
-
このリソースにアクセスするには完全な認証が必要です Unauthorized
-
インデックスが配列の範囲外であった。
-
ASP.NET URL変更によるページ受け渡し
-
C#の構文]をご覧ください。C#のリフレクション(アセンブリ)機構を説明する
-
AppDomainとAssemblyの動的なロードとアンロード
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
C# string.format でのエラー: 入力文字列が正しい形式でない
-
C#の面接質問100選(.net開発者必見)
-
エラーです。コレクションが変更されました。列挙操作が実行されない可能性があります。
-
VS エラー LNK2005:**already defined in **.obj
-
vs2010 can't debug, can't enter breakpoint, breakpoint is invalid.
-
C#のビルドコードで、すべてのコードパスが値を返さないエラーが発生する
-
System.InvalidOperationException: ConnectionString プロパティが初期化されていません。
-
エラーです。名前 'Encoding' は現在のコンテキストに存在しない ソリューション
-
C# データベース操作エラー。この接続に関連付けられた開いているDataReaderがすでにあり、これを閉じる必要があります...
-
GDI+でジェネリックエラーが発生しました@System.Drawing.Image.RotateFlip