❶ MFC編寫上位機軟體與外部usb設備進行通信,現在師兄讓我實現一個功能,就是把傳到上位機的數據導出來
這個很容易啦
首先你要確定用哪個API來讀取數據,我個人推薦DeviceIoControl,然後將Buffer區的數據整理一下,直接寫到file里嘛
給你個代碼,呵呵,亂寫的,各位高手勿拍:)
fprintf(nLog,"===========DeviceIoContrl FUNCTION Log=========\r\n");
fprintf(nLog,"IoCode = 0x%x \r\n",io);
fprintf(nLog,"InBuff :\r\n");
if(ibufsize == 0)
fprintf(nLog,"0");
else
{
for(i=0;i< ibufsize;i++)
{
fprintf(nLog,"0x%x ",abs(ibuf[i]));
}
}
fprintf(nLog,"\r\n");
fprintf(nLog,"InBuffSize = %d\r\n",ibufsize);
fprintf(nLog,"OutBuff :\r\n");
if(obufsize == 0)
fprintf(nLog,"0");
else
{
for(i=0;i< obufsize;i++)
{
fprintf(nLog,"0x%x ",abs(obuf[i]));
}
}
fprintf(nLog,"\r\n");
fprintf(nLog,"OutBuffSize = %d\r\n",obufsize);
❷ 用vc++實現usb介面通信編程的一般步驟
我來說下我做過的USB通信,我沒有做過DSP跟上位機的通信,我只做過ARM類的STM32跟上位機的數據傳遞,雖然做過但是也不是很 懂,只是略知一二,我來說說我怎麼做的吧,我是這么實現的:
USB是個很復雜的協議,你如果完全搞懂,我估計沒有幾個月專心鑽研是不行的,但是如果只是能實現你的這個功能,我估計不是很復雜。
首先來說說USB通信:
USB通信傳輸方式分為四種:控制,中斷,批量,同步傳輸四種,這個你可以看看網上資料,然後我用STM32通信,因為數據量不是很大,我用的是中斷傳輸方式,但是DSP數據量應該會比較大,不知道中斷傳輸行不行,但是一般問題不大。
傳輸方式說完了,再說說USB設備類型,你每次插usb設備到電腦上的時候就會有提示,這是一個什麼設備,USB設備類型就是說的這個意思,是滑鼠還是鍵盤還是別的什麼的,如果你選用標準的類,你就不用自己寫上位機(PC)的驅動程序,但是如果不用標準的類,就是用自定義的類就要自己寫上層的設備驅動程序,就是所謂的DDK,WDM,WDF什麼的,你沒寫過這方面的還真有點棘手,但是也不一定要寫驅動程序,你可以試試有個類叫HID類,這個類在USB通信的時候用的還挺多的,不過這個類也有缺點,這個地方還要說一點,USB還分低速,全速,高速三種,不太了解DSP,不知道他支持什麼模式,但是USB2.0的全速應該至少可以支持的。
USB2.0全速模式HID用中斷方式每秒最多可以傳輸64KB的數據,不知道能不能達到你的要求,但是我估計一般問題不大了,如果你這歀DSP能支持高速模式,每秒用這種方式可以傳輸高達22MB的數據,這個速度一般問題不大了。
你可以照著我說的思路,去網上搜搜人家寫好的程序,肯定有人做過DSP的USB通信,然後你按照自己的要求改一改,主要應該是USB的設備描述符部分要自己修改,然後可能還要根據自己的電路改改配置什麼的,上位機軟體網上有源代碼的多的是,然後自己摸索摸索,我估計你要是編程水平還可以的話,只是摸索USB,一兩個星期完全沒有問題,祝你好運!
❸ win10下用VS2008的MFC編程,用了個USB攝像頭.每次插拔時,會進入OnDeviceChange函數.但nEventType永遠=7.
可以考慮WMI來判斷,雖然沒有用到攝像頭,但是我們判斷硬碟插拔就是用的這個。
這應該也適用於攝像頭,因為都是USB控制器或者PCI下的設備。