[C#][USB] Host apllication on WindowsXP with C#
★本気時は書きかけのものです.頓挫する前に公開★
PC側のソフトを準備する
氏のsample"generichid_cs"から,必要なコードを流用する.C#では,Win32APIの呼び出しを直接行うことはできない.unsafe codeとして,DLLからAPIをimport宣言してやる必要がある.VBでWin32APIを用いるために宣言していたのと同様である.*1
HostTest_01
- device enumeration
- detection of device attached/detattached
- IN/OUT transaction check by using ReadFile/WriteFile
console applicationでもよさそうだが,今後のことを考えてGUIで作っていく.Formに配置するリソースを列挙する.
- TextWindow or List Window
- Status Window
- Rx Data window(StatusWindowに書いておけばいいか?)
- EditBox
- Device ID
- VID
- PID
- IF-ID
- TxData
- Device ID
- コマンドボタン
- device detect
- INPUT
- OUTPUT
パクリ
下記のファイルをコピーする.ただし,VBのnamespaceも使ってるようなので,少し綺麗にしたいと思た.ちうことで,VBのlength/CRLFだけを使っていたので,これを排除しただけなんですがね.
- Debugging.cs
- DebuggingDeclarations.cs
- DeviceManagement.cs
- DeviceManagementDeclarations.cs
- FileIODeclarations.cs
- Hid.cs
- HidDeclarations.cs
device enumeration
detection of device attached/detattached
IN/OUT transaction check by using ReadFile/WriteFile
HostTest_02
Include all functions of HostTest_01.
メモ
device change
WM_DEVICECHANGEメッセージが通知される模様.標準でフックできないようなので,WindowProcedureをoverrideしてsniffする.
class DeviceManagement(In file DeviceManagement.cs)
attached/removed検出
登録: RegisterForDeviceNotifications() 停止:StopReceivingDeviceNotifications()
DeviceManagement::Boolean DeviceNameMatch( Message m, String mydevicePathName )
WM_DEVICECHANGEメッセージを受けて,pathnameとマッチするかチェックする.マッチする場合はtrueを返す.
DeviceManagement::Boolean FindDeviceFromGuid( System.Guid myGuid, ref String[] devicePathName )
Uses SetupDi API functions to retrieve the device path name of an attached device that belongs to an interface class.
SetupDi APIを使って,interface classに属する接続されたdevice path nameを検索する.
参照資料
★MSDNより,C#で Num Text boxの作成 - 派生させてHex Edit boxでも作れ..~ 入力: hexのみ, 出力:':'区切りで表示, nibbleでfocus失うなら捨てる. 入力中は文字色変えるとか.
http://msdn.microsoft.com/ja-jp/library/ms229644(VS.80).aspx http://msdn.microsoft.com/en-us/library/ms790920.aspx http://msdn.microsoft.com/ja-jp/library/cc429201.aspx