linux查看usb端点类型,linux – USB HID OUT报告 – 哪个端点是对的?

博主在解决HID设备控制端点发送输出报告的问题时,发现了一个解决方案。原来使用`HidD_SetOutputReport`可能会导致报告通过错误的端点发送,而通过`WriteFile`配合重叠I/O可以确保报告通过正确的端点。经过尝试,代码成功实现了这一目标,验证了控制端点可能存在的误解释,并提供了使用`WriteFile`的详细步骤。
摘要由CSDN通过智能技术生成

我想我找到了答案.

纯粹是巧合,我偶然发现了Keil论坛,我发现声明’HidD_SetOutputReport将使用控制端点,如果你想通过另一个端点,请使用WriteFile’.我知道5年多以前我曾经尝试过这条路,但我陷入了重叠结构的异步IO中.因为看起来我有一个出路(使用HidD_SetOutputReport)我放弃了WriteFile路径.所以现在是时候再次寻求这条道路了,我做到了.代码:

res = HidD_SetOutputReport(m_DeviceControl[dev], report, m_CapsControl[dev].OutputReportByteLength);

已被取代

DWORD bytesWritten;

OVERLAPPED eventWrite = {0};

eventWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

int rv3 = WriteFile(m_DeviceControl[dev], report, m_CapsControl[dev].OutputReportByteLength, &bytesWritten, &eventWrite);

if (rv3 == 0)

{

int err = GetLastError();

if (err == ERROR_IO_PENDING)

{

bool done = false;

do

{

// yes. Wait till pending state has gone

rv3 = WaitForSingleObject(eventWrite.hEvent, 25);

if (rv3 == WAIT_OBJECT_0)

{

GetOverlappedResult(m_DeviceControl[dev], &eventWrite, &bytesWritten, FALSE);

done = true;

res = TRUE;

}

else if (rv3 == WAIT_TIMEOUT)

{

// Need to try again.

}

else

{

m_StoppingControlOut = true;

done = true;

}

}

while (!done && !m_StoppingControlOut);

}

}

}

这使得请求超过了正确的端点.

因此,我得出以下结论:

>我认为HID设备解释通过控制端点发送的OUT报告是错误的.>正确使用WriteFile(具有重叠的IO)使OUT报告使用正确的端点.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值