Windows SetupComm、SetCommState、SetCommTimeouts在USB设备上失败
我正在打开USB设备: 对于使用Windows SetupComm、SetCommState、SetCommTimeouts在USB设备上失败,windows,serial-port,usb,createfile,Windows,Serial Port,Usb,Createfile,我正在打开USB设备: 对于使用CreateFile进行通信: HANDLE hUsb = CreateFile("\\.\LCLD9", GENERIC_READ | GENERIC_WRITE, 0, null, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); 调用成功(即hUsb不等于无效的\u句柄\u值)。但接下来,我们需要对每个串行端口执行以下操作: (设置接收和传
CreateFile
进行通信:
HANDLE hUsb = CreateFile("\\.\LCLD9",
GENERIC_READ | GENERIC_WRITE,
0,
null,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
调用成功(即hUsb不等于无效的\u句柄\u值)。但接下来,我们需要对每个串行端口执行以下操作:
- (设置接收和传输缓冲区大小)
- (设置流量控制、波特率等)
- (设置超时)
GetLastError
code of1
进行的每个调用。例如:
SetupComm(hUsb, 1024, 1024);
为什么在使用“USB”串行设备时配置串行设备的操作失败,而在使用“虚拟COM端口”时工作?USB设备不支持波特率、缓冲区、流量控制和超时吗
如果这是通用串行设备的一个限制/功能,我如何检测到句柄指的是“通用串行设备”,而不是“通信端口”?例如,指定使用哪个端口的用户:
- \第五章
- \LCLD9
与通用串行总线串行设备通话时失败的其他串行功能:
- (错误代码为1)
(错误代码为6)ReadFile
(错误代码为6)purgecom
(错误代码为6)WriteFile
这就引出了一个更大的问题,当USB设备被
CreateFile
打开后,您如何与它通信?不,USB设备不使用这些东西。如果您的设备是实际的USB-to-RS232(或其他慢速串行),则应打开与其关联的COM端口。让驱动程序处理发送数据的工作
USB通信不像COM端口。你可以把它看作是一个外部PCI总线,而不是一个简单的发送你想要的任何数据的线路。不,USB设备不使用这些东西。如果您的设备是实际的USB-to-RS232(或其他慢速串行),则应打开与其关联的COM端口。让驱动程序处理发送数据的工作
USB通信不像COM端口。你可以把它看作是一个外部PCI总线,而不是一个简单的发送你想要的任何数据的线路。事实证明,我不需要使用
Comm
,因为它不是一个COM端口。我的WriteFile
失败的原因是我试图写入\.\LCLD9
而不是\.\LCLD9\
后面的反斜杠很关键;即使CreateFile
以两种方式返回成功
void WriteToDisplay(String s)
{
//Open the display
var hLineDisplay = CreateFile("\\.\LCLD9\", GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
//Write the command
DWORD bytesWritten;
WriteFile(hLineDisplay, s, s.Length, ref bytesWritten, nil);
FileClose(hLineDisplay);
}
任何使用逻辑控制LD9000 USB线显示的人,上面是如何写入显示的
在对其.NET Line显示驱动程序进行反向工程后,我还将提到您使用的端口名称,例如:
\\.\LCLD9\
\\.\LCPD6\
\\.\LCPD3\
\\?\USB#VID_0FA8&PID_A090#6&DF2EE03&0&1#{A5DCBF10-6530-11D2-901F-00C04FB951ED}
\______/
|
ProductID
规则是检查产品ID的设备路径。在我的例子中,PID\u A090
意味着它将作为文件\.\LCLD9\
提供。其他产品ID及其关联的文件路径:
Contains DeviceName (trailing backslash is not optional)
======== ===============================================
PID_A030 \\.\LCPD3\
PID_A060 \\.\LCPD6\
PID_A090 \\.\LCLD9\
注意:任何代码都会发布到公共域中。无需归因
事实证明,我不必对
Comm
做任何事情,因为它不是COM端口。我的WriteFile
失败的原因是我试图写入\.\LCLD9
而不是\.\LCLD9\
后面的反斜杠很关键;即使CreateFile
以两种方式返回成功
void WriteToDisplay(String s)
{
//Open the display
var hLineDisplay = CreateFile("\\.\LCLD9\", GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
//Write the command
DWORD bytesWritten;
WriteFile(hLineDisplay, s, s.Length, ref bytesWritten, nil);
FileClose(hLineDisplay);
}
任何使用逻辑控制LD9000 USB线显示的人,上面是如何写入显示的
在对其.NET Line显示驱动程序进行反向工程后,我还将提到您使用的端口名称,例如:
\\.\LCLD9\
\\.\LCPD6\
\\.\LCPD3\
\\?\USB#VID_0FA8&PID_A090#6&DF2EE03&0&1#{A5DCBF10-6530-11D2-901F-00C04FB951ED}
\______/
|
ProductID
规则是检查产品ID的设备路径。在我的例子中,PID\u A090
意味着它将作为文件\.\LCLD9\
提供。其他产品ID及其关联的文件路径:
Contains DeviceName (trailing backslash is not optional)
======== ===============================================
PID_A030 \\.\LCPD3\
PID_A060 \\.\LCPD6\
PID_A090 \\.\LCLD9\
注意:任何代码都会发布到公共域中。无需归因
那么,如何与USB设备通信呢<代码>创建文件
WriteFile
?,ReadFile
?@i您是否使用了驱动程序。如何使用该驱动程序取决于设备类型和驱动程序。那么,如何与USB设备通信<代码>创建文件WriteFile
?,ReadFile
?@i您是否使用了驱动程序。如何使用该驱动程序取决于设备类型和驱动程序。是的,您的设备可能显示为USB设备,但也可能显示COM端口。在“端口”下查看设备管理器,您可能会看到与USB接口关联的COM端口,前提是您安装了正确的驱动程序。是的,您的设备可能显示为USB设备,但也会显示COM端口。在“端口”下查看设备管理器,您可能会看到与USB接口关联的COM端口,前提是您安装了正确的驱动程序。我和您有相同的问题。我可以获得devicePath,但我不明白你在哪里找到有关DeviceName(\\.\LCLD9)的信息?@lads我查看了他们的.NET驱动程序的源代码。最后,它仍然需要返回并调用本机Win32 api函数。我只是用他们的源代码作为文档。我和你有同样的问题。我可以获得devicePath,但我不明白你在哪里找到有关DeviceName(\\.\LCLD9)的信息?@lads我查看了他们的.NET驱动程序的源代码。最后,它仍然必须这样做