I am using your .NET HID subroutines to communicate to a HID device.
At a certain point, I have to begin waiting for an input report, which can take up to 60 seconds to come.
But depending on the user hitting a cancel button, I need to immediately send a "31h" code to the board so that it will send the input report immediately to the host.
It used to work in VB6 with the following code
recv_buf(0) = 1
result = ReadFile(ReadHandle, recv_buf(0), CLng(Capabilities.InputReportByteLength), NumberOfBytesRead, HIDOverlapped) bAlertable = True While (recv_buf(1) <> 240) 'And (Interromper = False)
result2 = WaitForSingleObject(EventObject, 50)
Call DisplayResultOfAPICall("WaitForSingleObject")
DoEvents 'para botao esc poder fazer Interromper=true
If Interromper = True And JaEnviouPacoteInterrupcao = False Then
send_buf(0) = 1 'REPORT ID=1 The next bytes are data
result = WriteFile(HIDHandle, send_buf(0), CLng(Capabilities.OutputReportByteLength), 1, 0)
Call DisplayResultOfAPICall("WriteFile") JaEnviouPacoteInterrupcao = True
End If
End while
Now I am using your .NET code (The most up to date one with Filestream) But no out packet is allowed to be sent while the computer waits for the IN Packet.
The code is below. Is there a way to really make sure an out packet goes out while waiting for the in packet ? What should I do ?
fileStreamdevicedata.BeginRead(recv_buf, 0, recv_buf.Length, New AsyncCallback(AddressOf GetInputReport), recv_buf)
While sucessoLeituraUSB = False
System.Windows.Forms.Application.DoEvents()
If Interromper = True And JaEnviouPacoteInterrupcao = False Then
send_buf(0) = 1 'REPORT ID=1
send_buf(1) = CByte(ConverteHexaParaDecimal("31"))
fileStreamdevicedata.Write(send_buf, 0, MyHid.Capabilities.OutputReportByteLength)
JaEnviouPacoteInterrupcao = True
End If
End While
Thank you so much.
Antonio Fasano