USB通信 - Windows CE主机终端到USB设备(打印机)

时间:2013-07-24 18:48:56

标签: windows usb windows-ce

我正在开发一些代码,用于从Windows CE5终端运行,该终端将数据发送到USB设备(在本例中为打印机)。我在获取用于打开通信的端口的值时遇到问题。我试图使用驱动程序在注册表中编写的设备路径(USBport + GUID)和许多其他变体没有占上风。我知道与设备通信应该只是“打开一个文件”与设备在给定的内存地址进行通信。我知道有现代的usb库,但是对于这样一个旧的操作系统(我假设)它们没用。我的总体目标是编写代码是VC ++并使用JNI来包装代码以便在Java应用程序(SE6)中使用。任何人都可以举例说明样本“设备路径”可能是什么?或者,如果还有其他我想念的东西,请随意光明。我注意到大多数现代USB库都有搜索功能,但如果我有设备路径,我不相信搜索功能是必要的....

目前我正在尝试让代码在任何操作系统上运行,并且一直在使用Windows 7来使事情正常运行。以下是一些代码段:

const LPCTSTR portvalue = L“441ee000-4342-11d5-a184-00c04f60524d”; //定义端口名,即读/写设备的位置

int usbHandle = OpenUsb(portvalue); //打开文件/设备进行通信

/ * ** * ** * * 以下是OpenUsb功能 ** * ** * ** * **** / __declspec(dllexport)int _cdecl OpenUsb(const LPCTSTR portName){

HANDLE activeUsbFileHandle = CreateFile(portName,                   //portname built in registry? need to get a WinCE5 vm going..? i belive so
                                 GENERIC_READ|GENERIC_WRITE,
                                 FILE_SHARE_READ|FILE_SHARE_WRITE, // comm devices must be opened w/exclusive-access
                                 NULL,                             // no security attributes
                                 OPEN_EXISTING,                    // comm devices must use OPEN_EXISTING
                                 FILE_ATTRIBUTE_NORMAL,            
                                 NULL);


cout << "Portname Mem Location: " << &portName;
cout << "\nThe portname passed in as: " << portName << endl;

commTimeouts.ReadIntervalTimeout = 0;
commTimeouts.ReadTotalTimeoutConstant = 500;
commTimeouts.ReadTotalTimeoutMultiplier = 0;
commTimeouts.WriteTotalTimeoutConstant = 5000;
commTimeouts.WriteTotalTimeoutMultiplier = 0;
SetCommTimeouts(activeUsbFileHandle, &commTimeouts);

return (int)activeUsbFileHandle;

}

1 个答案:

答案 0 :(得分:1)

portName = "\\LPT1:"; /* i use this for printing */