PORTS Forum
Ports and Interfaces => USB => Topic started by: ffb_boy on May 26, 2012, 03:15:45 pm
-
Hi
Back again with my own HID descriptor , The joystick is detected correclty by windows the joystick panel is well updated, on the register databas all the effect are well declared and USBlyser told me that the protocol look fine.
With this I try to to launch FFconst to code the constant effect , start by the simple one ...
But when I launch the software it block until I remove my card , with USBlyser I see this
Seq Request Request Details Raw Data I/O Status
3 Class Interface Get Report (Feature id:3 len:5) in
4 Class Interface Get Report (Feature id:3 len:5) in
0005-0004 Control Transfer Get Report (Feature id:3 len:5) in Unsuccessful (Stall PID)
0006-0003 Control Transfer Get Report (Feature id:3 len:5) in Unsuccessful (Stall PID)
7 Bulk or Interrupt Transfer Output Report id:12 len:2 0C 04 out
8 Bulk or Interrupt Transfer Output Report id:12 len:2 0C 04 out
An In the sequence 4-5 the data send by the PC look like this
Offset Field Size Value Description
0 bmRequestType 1 A1h
4..0: Recipient ...00001 Interface
6..5: Type .01..... Class
7: Direction 1....... Device-to-Host
1 bRequest 1 01h Get Report
2 wValue.LowByte 1 03h Report ID
3 wValue.HiByte 1 03h Feature Report
4 wIndex 2 0000h Interface
6 wLength 2 0005h Report Length
And after this nobody works.
What is the problem ?
What I'm supposed to send ?
Thanks
-
The host is asking for a Feature Report, and the device is STALLIng the request instead of returning the report data.
Jan
-
Hi Jan,
I suppose I've to answer as it is described in the descriptor above (I can post all If someone is interested)
It is a FFb joystick decriptor
...
0xA1,0x02, // Collection Datalink
0x85,0x03, // Report ID 3
0x09,0x80, // Usage ROM Effect Block Count
0x75,0x10, // Report Size 10h (16d)
0x95,0x01, // Report Count 1
0x15,0x00, // Logical Minimum 0
0x35,0x00, // Physical Minimum 0
0x27,0xFF,0xFF,0x00,0x00, // Logical Maximum FFFFh (65535d)
0x47,0xFF,0xFF,0x00,0x00, // Physical Maximum FFFFh (65535d)
0xB1,0x02, // Feature (Variable)
0x09,0x83, // Usage PID Pool Move Report
0x26,0xFF,0x00, // Logical Maximum FFh (255d)
0x46,0xFF,0x00, // Physical Maximum FFh (255d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0xB1,0x02, // Feature (Variable)
0x09,0xA9, // Usage Undefined
0x09,0xAA, // Usage Undefined
0x75,0x01, // Report Size 1
0x95,0x02, // Report Count 2
0x15,0x00, // Logical Minimum 0
0x25,0x01, // Logical Maximum 1
0x35,0x00, // Physical Minimum 0
0x45,0x01, // Physical Maximum 1
0xB1,0x02, // Feature (Variable)
0x75,0x06, // Report Size 6
0x95,0x01, // Report Count 1
0xB1,0x03, // Feature (Constant, Variable)
0xC0, // End Collection
which is done like this
2 bytes : Usage ROM Effect Block Count
1 byte : Usage PID Pool Move Report
2 bits : undefined
6 bits : filling bits
Where can I find info about how to update this data?
Thanks
Update:
I've answer like this
Info_Pool.Report.RomBlockCount = 0x00FF;
Info_Pool.Report.RomBlockCount = 0x01;
Info_Pool.Report.undefined_1 = 0x00;
Info_Pool.Report.undefined_2 = 0x00;
Info_Pool.Report.unused = 0x00;
USBEP0SendRAMPtr((BYTE*)&Info_Pool, sizeof(Info_Pool),USB_EP0_NO_OPTIONS);
And USBLYSER give me a success but now I've a new Output request 0x0C 0x04 : DC device Reset : what I've to aswer ?
Thanks
-
The host is sending an Output report with the bytes 0x0C 0x04? See the report descriptor to find out what those bytes mean.
Then the host resets the port? Does the HID's interrupt OUT endpoint ACK or NAK the received data (above)?
Jan
-
The 0x0C 0x04 come from this part of the descriptor
0xA1,0x02, // Collection Datalink
0x85,0x0C, // Report ID Ch (12d)
0x09,0x97, // Usage DC Stop All Effects
0x09,0x98, // Usage DC Device Reset
0x09,0x99, // Usage DC Device Pause
0x09,0x9A, // Usage DC Device Continue
0x09,0x9B, // Usage PID Device State
0x09,0x9C, // Usage DS Actuators Enabled
0x15,0x01, // Logical Minimum 1
0x25,0x06, // Logical Maximum 6
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x00, // Output
0xC0 , // End Collection
And I receive
Output Report (ID 12)
Usage Range Lg/Ph Value
DC Device Reset Off..On On
I use the last microchip USB stack , the protocol used is HID so all the request logicaly pass trought
USER_USB_CALLBACK_EVENT_HANDLER => EVENT_EP0_REQUEST => USBCBCheckOtherReq()
but this request not pass in the USBCBCheckOtherReq functions ( I put a flag serialcom output flag in this functions).
do you think is not a End point 0 request ?
Thanks
Edit:
This request is detail like this by USBsniffer
URB Bulk or Interrupt Transfer issued
Device Object USBPDO-7
Driver Object usbhub
URB Function URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
Endpoint 01h 1 Out, Interrupt
Report Type Output
Report ID 12
Report Length 2
and In my descriptor I have the good endpoint 0x81 and 0x01
So the problem is somewhere else
-
The host is using the HID's interrupt OUT endpoint to send the Output report.
Jan
-
Yes I've seen it and my endpoint are configured to work with interrupt.
Thanks
-
Hi,
I've resolved my problem , I've activated the ENDPOINT OUT http://www.microchip.com/forums/fb.ashx?m=655009 (http://www.microchip.com/forums/fb.ashx?m=655009)
but now I receive correctly the output Report but I didn't receive the set report
thanks
[attachment deleted by admin]