我们正在开发一些设备,我们需要为所需功能之一找到良好的解决方案。
是我们需要在PC上通信Wince 6.0(ARM)和Windows。最简单的方法当然是com端口,但在我们的情况下是不可能的(所有串行端口都用于wince,我们不想再添加一个)。第二种选择是LAN,但对我们而言,这不是最佳选择。
因此,我们可以使用第三个选项。USB到USB通信,但是如何做到这一点?当然,Wince是USB设备,PC是USB主机,因此所有硬件基础都符合。
我们可以使用Active Sync,但是它的问题很少: - Wince 6.0不与WMDC合作(设备上的驱动程序与PC连接后仅崩溃),而我没有找到任何解决方案,因此在这种情况下,我们需要在PC侧使用WinXP(old Activesync) - 我们需要过滤与Active Sync仅针对我们的应用程序进行过滤,不应允许其他非授权软件(我知道这是不可能获得的)。
做我们需要做的事情的最佳方法是通过标准com(串行通信)进行交流。问题是,如何制作它,我们需要在Wince上写驱动程序,以及Windows(PC)上的驱动程序,还是有更好的解决方案?也许有一些Wince 6.0的驱动程序会在PC侧模仿虚拟COM(当然允许在Wince侧读/写入标准读写)?有人可以告诉我是否存在类似的东西?
我们可能找到了解决问题的最佳解决方案。我们在ActiveSync(USB上的标准Winsock连接)上使用TCP/IP。可能是因为Activesync为主机PC提供了IP地址。它可以被收集到类似的槽(在wince上):
std::string lIPAddress = "ppp_peer";
struct hostent * lH = gethostbyname(lIPAddress.c_str());
DEBUGMSG(ZONE_ERROR, (TEXT("Addr: %Srn"), lH->h_addr_list[0])); // just a debug info
lServerAddress.sin_addr.S_un.S_addr = *(u_long *)lH->h_addr_list[0];
当然,这不是一个完整的例子,它只是一个示例:)