【问题标题】:Send packet to usb endpoint将数据包发送到 USB 端点
【发布时间】:2012-05-15 13:31:58
【问题描述】:

我需要将指定的数据包(5 字节)发送到 USB 零端点。 我的设备安装为 com 端口。 我使用样本 How to Access a USB Device by Using WinUSB Functions

第一个问题: 如果枚举 Ports 类设备,我找不到我的设备。 由于某种原因,我的设备位于原始数据类中。 这怎么可能?

第二个问题:为什么WinUsb_Initialize()返回错误87(INVALID PARAMETER)。

//GUID InterfaceClassGuid = {0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18}; //Ports class
GUID InterfaceClassGuid = {0xA5DCBF10, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED}; //Raw data

BOOL GetDeviceHandle (GUID guidDeviceInterface, PHANDLE hDeviceHandle){
...
//my code
WCHAR DeviceIDToFind[] = L"vid_xxxx&pid_xxxx";
// lpDevicePath is "\\?\usb#vid_xxxx&pid_xxxx#833435204e3334355f302083a5ada5e0a0e2aee0208faee1e2a0a2aaa0#{a5dcbf10-6530-11d2-901f-00c04fb951ed}"
WCHAR* res = wcsstr(lpDevicePath, DeviceIDToFind);
if (res!=NULL)
    break; //find our device
...
*hDeviceHandle = CreateFile (
    lpDevicePath,
    GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL,
    OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED,
    NULL);
    err = GetLastError();// err is 0
...
}
...
WINUSB_INTERFACE_HANDLE h = INVALID_HANDLE_VALUE;
BOOL bResult = WinUsb_Initialize(hDeviceHandle, &h);
err = GetLastError(); // err is 87 INVALID PARAMETER

【问题讨论】:

  • 我找到了答案here

标签: usb


【解决方案1】:

您必须设置设备的供应商 ID 和产品 ID。

你的代码 sn-p 有信息。

WCHAR DeviceIDToFind[] = L"vid_xxxx&pid_xxxx";

此代码具有供应商 ID (vid_xxxx) 和产品 ID (pid_xxxx),其中xxxx 是十六进制数字。

如果你的设备有 vid 3259 和 pid 1001,你写DeviceIDToFind,如下所示。

WCHAR DeviceIDToFind[] = L"vid_3259&pid_1001";

你必须对usb规范有很多了解。 干杯。

【讨论】:

  • 欢迎您!只是一个提示:代码格式对可读性有很大的影响。反引号(通常在 tab 键上方)就像小代码 sn-ps 的引号。对于整行代码,选择行并按{} 按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2019-08-27
  • 2021-04-15
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多