Hello, I have googled this problem and I haven't been able to find any headway. Any help would be greatly appreciated.
I am modifying the GadgetFS usb.c example code to function as a simulated USB mouse while running on a PXA255 board (2.4.19-adsx7). I am monitoring all USB transactions from Windows Host PC to the PXA board using USB Monitor. I am able to properly initialize the device, config, interface, hid, and endpoint descriptors. The PXA board is able to recognize when the host is requesting that it send the HID Report Descriptor, yet it does not send any of the information. (The setup packet that is being sent in response to this request is the same as that of a Logitech mouse, so I know it is receiving the request correctly.) The segment of code that deals with this is included below. I'd appreciate any direction anyone could offer regarding this problem so that I might continue with writing 'mouse movement' to the endpoint! I have incorporated the following into the usb.c example code: (the initial description) static struct hid_descriptor hid_desc = { .bLength = 9, .bDescriptorType = USB_DT_CS_DEVICE, .bcdHID = 0x0110, .bCountryCode = 0, .bNumDescriptors = 1, hid_desc.desc->bDescriptorType = 0x22; hid_desc.desc->wDescriptorLength = 0x34; }; const char ReportDescriptor1[] = { 0x05, 0x01, //Usage Page (Generic Desktop) 0x09, 0x02, //Usage (Mouse) 0xA1, 0x01, //Collection (Application) 0x09, 0x01, //Usage (Pointer) 0xA1, 0x00, //Collection (Physical) 0x05, 0x09, //Usage Page (Buttons) 0x19, 0x01, //Usage Minimum (1) 0x29, 0x03, //Usage Maximum (3) 0x15, 0x00, //Logical Minimum (0) 0x25, 0x01, //Logical Maximum (1) 0x95, 0x03, //Report Count (3) 0x75, 0x01, //Report Size (1) 0x81, 0x02, //Input (Data, Variable, Absolute) 0x95, 0x01, //Report Count (1) 0x75, 0x05, //Report Size (5) 0x81, 0x01, //Input (Constant) 0x05, 0x01, //Usage Page (Generic Desktop) 0x09, 0x30, //Usage (X) 0x09, 0x31, //Usage (Y) 0x15, 0x81, //Logical Minimum (-127) 0x25, 0x7F, //Logical Maximum (127) 0x75, 0x08, //Report Size (8) 0x95, 0x02, //Report Count (2) 0x81, 0x06, //Input (Data, Variable, Relative) 0xC0, //End Collection 0xC0 // End Collection }; const unsigned int ReportDescSize = sizeof(ReportDescriptor1); (in the handle_control function): case USB_REQ_GET_REPORT: switch (setup->wValue >> 8) { case USB_DT_REPORT: for(i=0; i<=ReportDescSize; i++) { buf[i] = ReportDescriptor1[i]; } status = write(fd, buf, setup->wLength); if (status<0) { if (errno == EIDRM) fprintf (stderr, "GET_REPORT timeout\n"); else perror ("write GET_REPORT data"); } else if (status != tmp) { fprintf (stderr, "short GET_REPORT write, %d\n", status); } break; } return; Thank you, Colleen ------------------------------------------------------- SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with a free DVD software kit from IBM. Click Now! http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel