Hello,
I am useing an SAM7S256 controller. I want to implement a USB HID communication. I have already succeded to some degree with the Keil sample code for HID.
My problem is the Report descriptor. I want to be able to transmit 1 to 1024 bytes from HOST to DEVICE and DEVICE to HOST. I could define a report descriptor for 1026 bytes and use 2 bytes for the length of the actual data. However I don't want to waste so much bandwidth if there is only a few bytes actual information to send. I came up with the idea to use report IDs and to define say 17 report IDs with sizes from 64-bytes to 1026 bytes. My problem is I don't know how to specify this so it works correctly. Are you aware of a tool to test the descriptors in depth. The Tools I have found on the usb.org page only tell me how many errors there are in my report descriptor but not what exactly the problem is?
My descriptor so far ...
/* HID Report Descriptor */ const BYTE HID_ReportDescriptor[] = { HID_UsagePageVendor(0x00), HID_Usage( 0x01), HID_Collection( HID_Application), // INPUT (DEVICE -> HOST) HID_Collection( HID_Logical), HID_ReportID( 1), HID_Usage( 0x01), HID_LogicalMin( 0), HID_LogicalMax( 255), HID_ReportCount( 64), HID_ReportSize( 8), HID_Input( HID_Data | HID_Variable | HID_Absolute), HID_EndCollection, HID_Collection( HID_Logical), HID_ReportID( 2), HID_Usage( 0x01), HID_LogicalMin( 0), HID_LogicalMax( 255), HID_ReportCount( 128), HID_ReportSize( 8), HID_Input( HID_Data | HID_Variable | HID_Absolute), HID_EndCollection, // INPUT (HOST -> DEVICE) HID_Collection( HID_Logical), HID_ReportID( 1), HID_UsagePage(HID_USAGE_PAGE_GENERIC), HID_Usage(HID_USAGE_GENERIC_COUNTED_BUFFER), HID_LogicalMin(0), HID_LogicalMax(255), HID_ReportCount(64), HID_ReportSize(8), HID_Output(HID_Data | HID_Variable | HID_Absolute), HID_EndCollection, HID_Collection( HID_Logical), HID_ReportID( 2), HID_UsagePage(HID_USAGE_PAGE_GENERIC), HID_Usage(HID_USAGE_GENERIC_COUNTED_BUFFER), HID_LogicalMin(0), HID_LogicalMax(255), HID_ReportCount(128), HID_ReportSize(8), HID_Output(HID_Data | HID_Variable | HID_Absolute), HID_EndCollection, HID_Collection( HID_Logical), HID_ReportID( 3), HID_UsagePage(HID_USAGE_PAGE_GENERIC), HID_Usage(HID_USAGE_GENERIC_COUNTED_BUFFER), HID_LogicalMin(0), HID_LogicalMax(255), HID_ReportCount(192), HID_ReportSize(8), HID_Output(HID_Data | HID_Variable | HID_Absolute), HID_EndCollection, HID_EndCollection, };