What is the difference between [Read Report & Get Input Report] , [Write Report & Set Output Report]

I am new to HID devices. I am writing a HID driver in windows (similar to vhidmini2). I am a bit confused about APIs used for data movement between the application and the selected device.

What is the difference between:

By difference I mean I don’t understand when to use which one? As to me, I think all the pairs do the same thing.

I haven’t worked much in the HID stack, so I’m not the best one to answer this… but for IOCTL_HID_GET_INPUT_REPORT vs IOCTL_GET_READ_REPORT (and friends) it’s a layering thing.

IOCTL_HID_GET_INPUT_REPORT is an INPUT to HID Class… IOCTL_HID_READ_REPORT is OUTPUT from HID Class.

Peter

IOCTL_HID_READ_REPORT asks for whatever input report might be waiting. IOCTL_HIT_GET_INPUT_REPORT asks for one specific report ID. Also note that READ_REPORT and WRITE_REPORT are METHOD_NEITHER, while GET_INPUT_REPORT and SET_OUTPUT_REPORT are METHOD_xxx_DIRECT.