Hi
I am very new to USB.
At the moment I am only developing for Windows while I am learning.
I have already called:
SetupDiEnumDeviceInterfaces
SetupDiGetDeviceInterfaceDetail
SetupDiGetDeviceInterfaceDetail
For the sake of this question assume I have a File_Handle from calling:
hReadFile = CreateFile(FILE_NAME, %GENERIC_READ OR %GENERIC_WRITE, %FILE_SHARE_READ OR %FILE_SHARE_WRITE, BYVAL %NULL, %OPEN_EXISTING, %FILE_FLAG_OVERLAPPED, %NULL)
Question is, Can I get 100% of the information from the device by using ReadFile / WriteFile? Assuming I am able to parse the data.
Or is there a reason why one should use -
HidD_GetManufacturerString,
HidD_GetProductString,
HidD_GetSerialNumberString,
HidP_GetCaps etc?
Those are just "helper" functions, right? I can see they make life easy!
I am still not exactly why I need to know the descriptor stuff as my code is for one specific device. It sends a bit array to tell me which buttons are pressed. Then I am supposed to be able to send BMP data to the device to change the button colors, text, logo etc...
I don't mind using those functions just wanted to clarify that I could get raw data and derive the same information as the "helper" functions.
All my years in serial and tcp ip tend to make me think in terms of transmit and receive, at least while I am building understand of what is going on.
All the examples I have seen show opening two different file handles - one not overlapped and one overlapped. Why do I need two? Couldn't the overlapped do the job.
I am working on integrating an HID USB device into one of our existing products without using an external library or dll. I have the device "events", button presses, working fine with WaitForSingleObject(MY_OVERLAPPED.hEvent, 3000).
I am stuck on sending to the device to control its display.
When I try to send a command from my code to the device using WriteFile the device ignores it.
However I am not sure what the SetupPacket is doing...
Any pointers would help, Thanks! Yes, I have your book, but I am missing some of the simple fundamental concepts.
Do you have any examples using Win32Api ReadFile and WriteFile? What is the difference between Read/WriteFile and HidD_GetInputReport / HidDSetOutputReport?
Page 305 talks about FileStream and HidD_ but no ReadFile/WriteFile overlapped.
I suspect this is a case of "there are many ways to do it" between read write, functions etc. I am looking for the smallest most reliable and easy to understand way of sending commands/ data to the device - an output report, right?
Thank you! Can we hire you to help us as we get deeper into all this?
The following is a trace from a command to adjust the display brightness:
--------- Request # 8 ----[IN]----
URB_FUNCTION_CONTROL_TRANSFER
Length: 0x88
USBD Status: USBD_STATUS_SUCCESS (0x0)
EndpointAddress: 0x0
PipeHandle: 0xFFFFC907DC967E20
TransferFlags: 0xB ( USBD_TRANSFER_DIRECTION_IN USBD_SHORT_TRANSFER_OK )
TransferBufferLength: 0x1A
TransferBuffer: 0xFFFFC907E2AD1A70
TransferBufferMDL: 0x0
UrbLink: 0x0
SetupPacket: 0x80 0x6 0x3 0x3 0x9 0x4 0x6 0x1
RequestType: 0x80 (Direction: Device-to-host, Type: Standard, Recipient: Device)
Request: 0x6 (GET_DESCRIPTOR)
Value: 0x303 (USB_STRING_DESCRIPTOR_TYPE)
Index: 0x409
Length: 0x106
String Descriptor
bLength: 0x1A
bString: BL19H1A06957
** Data **
1A 03 42 00 4C 00 31 00 39 00 48 00 31 00 41 00 30 00 36 00 39 00 35 00 37 00
--------- Request # 9 ----[OUT]----
URB_FUNCTION_CLASS_INTERFACE
Length: 0x88
USBD Status: USBD_STATUS_SUCCESS (0x0)
TransferFlags: 0x0 ( USBD_TRANSFER_DIRECTION_OUT )
TransferBufferLength: 0x11
TransferBuffer: 0xFFFFC907E13855C0
TransferBufferMDL: 0x0
UrbLink: 0x0
RequestTypeReservedBits: 0x22
Request: 0x9
Value: 0x305
Index: 0x0
** Data **
05 55 AA D1 01 10 00 00 00 00 00 00 00 00 00 00 00
--------- Request # 10 ----[OUT]----
URB_FUNCTION_CLASS_INTERFACE
Length: 0x88
USBD Status: USBD_STATUS_SUCCESS (0x0)
TransferFlags: 0x0 ( USBD_TRANSFER_DIRECTION_OUT )
TransferBufferLength: 0x11
TransferBuffer: 0xFFFFC907E13855C0
TransferBufferMDL: 0x0
UrbLink: 0x0
RequestTypeReservedBits: 0x22
Request: 0x9
Value: 0x305
Index: 0x0
** Data **
05 55 AA D1 01 10 00 00 00 00 00 00 00 00 00 00 00
--------- Request # 11 ----[IN]----
URB_FUNCTION_CONTROL_TRANSFER
Length: 0x88
USBD Status: USBD_STATUS_PENDING (0x40000000)
EndpointAddress: 0x0
PipeHandle: 0xFFFFC907DC967E20
TransferFlags: 0xA ( USBD_TRANSFER_DIRECTION_OUT USBD_SHORT_TRANSFER_OK )
TransferBufferLength: 0x0
TransferBuffer: 0xFFFFC907E13855C0
TransferBufferMDL: 0xFFFFC907E1521A40
UrbLink: 0x0
SetupPacket: 0x21 0x9 0x5 0x3 0x0 0x0 0x11 0x0
RequestType: 0x21 (Direction: Host-to-device, Type: Class, Recipient: Interface)
Request: 0x9
Value: 0x305
Index: 0x0
Length: 0x11
SET_REPORT
Report Type: Feature
Report ID: 0x5
Interface: 0x0