USB転送ケーブルのプログラミング/ USBデバイスドライバーとの通信
-
03-07-2019 - |
質問
WindowsからプログラムでUSB転送ケーブル(Belkinの簡易転送ケーブルなど)にプログラムでアクセスする方法
libusb-win32 に精通していますが、それを使用して、より新しいデバイスとWindows Vistaの場合は不自然に思えます。
Windows Easy Transfer でできることを知っていますこの。 Windows転送ツールと同じことを行うコードを作成するにはどうすればよいですか?
これを行う方法についての定型文書がない場合、私はいくつか掘り進んでも構わないが、どこから始めればよいかわからない。 Windows Easy Transferがどのように動作しているかを確認するにはどうすればよいですか? Windowsでは、デバイスマネージャーの「Transfer Cable Devices」という転送ケーブルにも独自のカテゴリがあります。これらのドライバーのいずれかと低レベル通信を行うにはどうすればよいですか?
解決
マイクロソフトは、単純なユーザー向けに WinUSB を提供していることを発見しました。 USBデバイスとのモード通信。 (最初にデバイス用のWinUSBデバイスドライバーをインストールする必要があります。これはlibusb-win32デバイスドライバーに似ています。)WinUSBはXP(SP2以降)およびVistaで動作します。
Easy Transfer CableはデバイスドライバーにWinUSBを使用しているため、Microsoftの WinUSB howto ドキュメント。
他のヒント
これを行うには、低レベルのwin32 APIを使用する必要があります。 Microsoftには、ヒューマンインターフェイスデバイスへのアクセスに関する素晴らしい例があります。転送ケーブルは、マウスやキーボードのような明示的なHIDではありませんが、HID仕様に準拠しています。
たとえば、呼び出すUSBデバイスの名前を取得するには
HidD_GetProductString(...)
http://msdn.microsoft.com/en-us/library /ms790920.aspx
他にもたくさんあります。2000年からVistaまでのすべてのバージョンのWindowsで動作するcアプリのサンプルをぜひご覧ください。
http://msdn.microsoft.com/en-us/library /dd163258.aspx
幸運!
USBデータ転送ケーブル(USBデータリンクケーブルとも呼ばれる)が必要です。 APIまたはSDKをサポートしてから、次のコードを使用します。
void CU2uDlg::OnOK()
{
BYTE buf[65530];
LPU2URET pU2uRet;
BOOL bRet;
int ret;
CString msgstr;
ret = u2u_open();
if (ret == -1){
AfxMessageBox("Open U2U device Success.");
}else{
msgstr.Format("Open U2U device fail,return:%d", ret);
AfxMessageBox(msgstr);
return;
}
//send data
bRet = u2u_SendData(buf, 65530, ret);
if(!bRet)
{
msgstr.Format("Send data error,return:%d", ret);
AfxMessageBox(msgstr);
return;
}
//receive data
while (1){
bRet = u2u_RecvData(recvData, dataLen, ret);
if( !bRet )
{
msgstr.Format("Receive data error,return:%d", ret);
AfxMessageBox(msgstr);
u2u_close();
return;
}else{
break;
}
}
u2u_close();
}
参照: Reference1 、リファレンス2