3

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

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

所以我们可以使用第三种选择。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 端对其进行标准读/写)?有人可以告诉我这样的东西是否存在吗?

4

1 回答 1

1

我们可能为我们的问题找到了最佳解决方案。我们在 ActiveSync 上使用 TCP/IP(通过 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];

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

于 2012-12-03T20:46:50.597 回答