2012-10-31 112 views
3

我們正在開發一些設備,我們需要爲其中一個所需的功能找到一個好的解決方案。WinCE和PC USB通信

問題是我們需要在PC上與WinCE 6.0(ARM)和Windows進行通信。 最簡單的方法當然是COM端口,但在我們的情況下是不可能的(所有的串行端口都用在WinCE上,我們不想再添加一個)。 第二種選擇是局域網,但對我們來說這不是最好的選擇,原因很多。

所以我們可以使用第三種方法。 USB到USB通信,但如何做到這一點? 當然,WinCE是USB設備,PC是USB主機,因此所有的硬件基礎都可以滿足。

我們可以使用主動同步,但幾乎沒有問題: - WinCE 6.0不支持WMDC(設備上的驅動程序剛剛在與PC連接設備後崩潰),我沒有找到任何解決方案這種情況下我們需要在PC端使用WinXP(舊的ActiveSync) - 我們需要將活動同步的通信過濾到我們的應用程序,不允許其他未經授權的軟件(我知道這是不可能獲得的)。

所以最好的方法來做我們需要的是通過像標準COM(串行通信)通信USB。 現在的問題是,我們需要在WinCE上編寫驅動程序,還需要在Windows(PC)上編寫驅動程序,或者有更好的解決方案?也許一些WinCE 6.0的驅動程序可以模擬PC端的虛擬COM(當然也可以在WinCE端進行標準的讀/寫)?有人能告訴我,如果有這樣的事情存在嗎?

+0

你能描述的情況下,什麼是應該做在WinCE設備?傳輸一些文件,輸出視頻,來自傳感器的數據? – garzanti

+0

它與我們自己的通信協議一起使用,所以在大多數情況下答案是二進制數據 – sebeksd

回答

1

我們可能爲我們的問題找到了最佳解決方案。我們通過ActiveSync使用TCP/IP(通過USB的標準WinSock連接)。這是可能的,因爲ActiveSync爲主機提供了一個IP地址。它可以獲取槽類似的東西(的WinCE):

std::string lIPAddress = "ppp_peer"; 
struct hostent * lH = gethostbyname(lIPAddress.c_str()); 

DEBUGMSG(ZONE_ERROR, (TEXT("Addr: %S\r\n"), lH->h_addr_list[0])); // just a debug info 
lServerAddress.sin_addr.S_un.S_addr = *(u_long *)lH->h_addr_list[0]; 

當然這不是完整的例子,它只是一個樣本:)