WinCE和PC USB通信

时间:2012-10-31 14:40:51

标签: serial-port usb windows-ce activesync serial-communication

我们正在开发一些设备,我们需要为所需功能找到一个好的解决方案。

我们需要在PC上与WinCE 6.0(ARM)和Windows进行通信。 最简单的方法当然是COM端口,但在我们的情况下它是不可能的(所有串口都在WinCE上使用,我们不想再添加一个)。 第二种选择是局域网,但对我们来说,它不是最好的选择,原因不多。

所以我们可以使用第三种选择。 USB转USB通讯但怎么做? 当然,WinCE是USB设备而PC是USB主机,因此所有硬件基础都可以满足。

我们可以使用Active同步,但它几乎没有问题: - WinCE 6.0不能与WMDC一起使用(设备上的驱动程序在连接设备与PC后崩溃)并且我没有找到任何解决方案,所以在这种情况下我们需要在PC端使用WinXP(旧的ActiveSync) - 我们需要将与主动同步的通信过滤到我们的应用程序,不允许其他非授权软件(我知道这是不可能获得的)。

因此,我们需要的最佳方式是通过USB进行通信,如标准COM(串行通信)。 问题是,它是如何制作的,我们是需要在WinCE上编写驱动程序还是在Windows(PC)上编写驱动程序,还是有更好的解决方案?也许WinCE 6.0的一些驱动程序会在PC端模拟虚拟COM(当然在WinCE端允许标准的读/写)?有人能告诉我这样的事情是否存在?

1 个答案:

答案 0 :(得分:1)

我们可能找到了解决问题的最佳方案。我们使用TCP / IP over ActiveSync(通过USB的标准WinSock连接)。这是可能的,因为ActiveSync为主机PC提供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];

当然这不是完整的例子,它只是一个样本:)