This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

USB HID Report ID

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,
};

0