Force Feedback Device

Page: 123 > Showing page 1 of 3
Post
pk_volt
Super Member
2008/03/04 23:07:18
Anyone have any luck with this?

An "efriend" helped me out a lot with the report descriptor which he somehow extracted the ~800 line report descriptor from a MS FFB wheel using snoopy.   Miraculously, "we" got it to finally work by modifying the sample C code for the 18f4550. 

I haven't touched the device for a while now, and as mentioned by LBodnar on this forum, the PID data sheet is full of errors and very difficult to understand. 

One also mentioned that bigger companies design their own protocol and heavily abuse the USB compliant standards.

I was just wondering if there has been any work on the force feedback side of things in the open-source side of things.


DarioG
leaving this planet
RE: Force Feedback Device 2008/03/05 02:52:11
That's nice - I'm always interested in such objects.
Are you creating the whole device too? Motors and such?
pk_volt
Super Member
RE: Force Feedback Device 2008/03/05 03:13:04
Hi DarioG,

I remember you helping me out a lot on these forums during the time I was developing the firmware.  Really glad to see that you're still sticking around! :)

I've built a simple mosfet H bridge driver.  The plan was to drive a geared disc motor through a gear pulley to increase torque and minimize torque ripple.  Since I have very little experience with mechanical setup, I wasn't able to complete the task before school started.   It's a real shame that I never got to even test out what the device would've felt like.  It'd be really interesting to see how the torque ripple would come into play. 

I was thinking of implementing some PID to a brushless or multi-phase motor to totally minimize torque ripple and allow maximum "smooth" steering rotation somehow.

Here is a little video of what I had working:

http://youtube.com/watch?v=8ZKv0dJCjiA

I was thinking of maybe releasing the firmware sometime in the future, but right now, the code is just an entire mess with lack of commenting on a lot of parts. 

If you ever have any interest in developing ffb devices, let me know, and I'll try to help you out with resources in any way I can!
post edited by pk_volt - 2008/03/05 03:17:02
DarioG
leaving this planet
RE: Force Feedback Device 2008/03/05 03:19:17
Yeah Smile

I have little knowledge in mechanical so I usually have to rely on others Smile which is often hard.
I guess that we can keep in touch on this - I've taken a look at accelerometers recently and I also should start a work on bike-models, so I'll be around.
yvesr
New Member
RE: Force Feedback Device 2008/03/05 16:07:59
this interface work with Happ control wheel force feedback
http://www.happcontrols.com/driving/50010200.htm

high power driver interface

Yves


schematic file in PDF

pk_volt
Super Member
RE: Force Feedback Device 2008/03/09 07:28:24
ORIGINAL: yvesr

this interface work with Happ control wheel force feedback
http://www.happcontrols.com/driving/50010200.htm

high power driver interface

Yves


schematic file in PDF


Very Interesting.

Seems like they used an op-amp instead of an H-bridge for a motor controller.  I was wondering what kind of benefits there would be with this setup.


Pierre1
New Member
RE: Force Feedback Device 2008/09/11 14:08:19
Hi Volt,

I am involved in the development of a force feedback application using a PIC18F4550 micro-controller. I understand you have worked on something similar.  Could you possibly provide some assistance on how to modify the Microchip OS so that we are able to get the FF signal from a gaming application on the PC, via a USB port so that the controller could activate a basic rumble engine?  The PID specs are quite complicated to go through and figure out how things should be done...

Any assistance would be appreciated. Is your code available if we dare to have a look [8|]
Thanks,
Pierre
pk_volt
Super Member
RE: Force Feedback Device 2008/09/12 14:31:52
Hi there,

it's nice to see someone have interest in this particularly rare development. I did not modify anything in my operating system because the USB Force Feedback drivers are standard USB HID compliant, so windows should automatically detect it when you plug in your force feedback device.

I have to admit that the firmware was not entirely my own work as I got a lot of help from a few people, but nevertheless, it works.  The hardest part is to get the few hundred line report descriptor to enumerate by windows. 

I agree that the force feedback PID pdf is poorly written and very difficult to understand, and I was told the example report descriptor doesn't even work and ended up having to extract the report descriptor from an old microsoft force feedback joystick using snoopy. 

If I were to attempt this project again, I would probably try writing my own microsoft drivers to intercept force feedback commands from the O/S and send my own defined commands to my force feedback device.
post edited by pk_volt - 2008/11/26 12:32:20
Pierre1
New Member
RE: Force Feedback Device 2008/09/15 01:48:14
Volt,

Thanks for your feedback and advice. 

For our application we just need the vibrator signals as force feedback signals, excluding all the remaining signals provided by USB stack.  Accordingly,  if at all possible, we would appreciate getting the "output report descriptor" listing for this specific application of vibrator signals transmission to be recognized by windows OS and how to extract the incoming packet (is it with HIDRxReport function)?

Input and advice are quite appreciated.
Best,
Pierre
chinzei
Super Member
RE: Force Feedback Device 2008/09/16 08:33:06
Hello Pierre1,

Are you talking about MS Xbox gamepads (or equivalent)?
From USB view point, these gamepads aren't HID devices, but HID-like devices.

These links show the device/config descriptors of these devices.

a) Xbox game controller (old one): VID/PID = 045E/0202
"Inside Xbox Controller"
http://euc.jp/periphs/xbox-controller.ja.html
Descriptor:
http://euc.jp/periphs/xbox-pad-desc.txt

b) Xbox 360 controller: VID/PID = 045E/028E
http://www.free60.org/wiki/Gamepad
Google cache
http://209.85.175.104/search?q=cache:PmdskQ0UrdEJ:www.free60.org/wiki/Gamepad

c) Xbox 360 Wireless Controller (PC): VID/PID = 045E/028F
http://hexitaka.exblog.jp/6223238/


In the interface descriptors on these links, you'll find that these gamepads don't have any HID class, but vendor specific.

bInterfaceClass 255 Vendor Specific Class

Therefore, you can't enumerate these gamepads using the original Windows built-in HID device driver. To make PC recognize the Xbox 360 controller as a HID device, MS provides a specific HID mini-driver. This mini-driver connects lower USB device driver to HID driver, and it makes the device as if it is a HID device.

"Xinput Driver for Microsoft Common Controller (32 Bit)" on MS downloads
http://www.microsoft.com/downloads/details.aspx?FamilyID=0e989b12-576b-42f2-b7c1-2a17ce25188b&displaylang=en

Also, these devices don't return any report descriptor.
Just the packet format is known, as above a) and b) describe.

As of the vibration,
a) Xbox game controller (old one) (from above a) link)
The output report (rumble control) is 6-byte.
offset	data
+0 0x00
+1 0x06 (size of the whole report)
+2 0x00
+3 left actuator (*)
+4 0x00
+5 right actuator (*)

(*) unsigned 8-bit


b) Xbox 360 controller (from above b) link)
Rumbler Control
Rumbling is also similar to on the original controller. Rumble commands take the following 8-byte form:
000800bbll000000
Where b is the speed to set the motor with the big weight, and l is the speed to set the small weight (0x00 to 0xFF in both cases).


Tsuneo
pk_volt
Super Member
RE: Force Feedback Device 2008/09/16 12:12:22
Hi there,

I apologize for the late reply.  I personally don't mind giving a helping hand.  I will have to consult with the the person I worked with on releasing any part of the firmware since it was his work.

But for now, just to give you a head start, if you want vibration effects, you need to use the periodic effect descriptor as mentioned in the pid.pdf.  Basically, this report descirptor will tell you the frequency, amplitude and the effect tyhpe (sine wave, trapezoid etc).  Though I yet to implement it in my firmware, I did at one point, manage to make sense out of the data using snoopy.

I will try my best to keep you updated.

I will also upload some of the force feedback programs I used to test out my device so that you can get a better idea of how data is transmitted in and out of the USB port.

stay tuned.  Smile
post edited by pk_volt - 2008/09/16 12:13:57
Pierre1
New Member
RE: Force Feedback Device 2008/09/16 14:02:54
Hi Chinzei,
The game controller is a generic USB controller one for the PC.  Not familiar with Xbox technology.
Would any of the Xbox info apply?

chinzei
Super Member
RE: Force Feedback Device 2008/09/17 00:29:41
The game controller is a generic USB controller one for the PC.

Generic for what, USB HID or DirectX?

If it is generic USB HID joystick, pk_volt's comment is applied.
If it is generic DirectX device, Xbox 360 controller is the base.

To know which type, read out the descriptors of the game controller.
For this purpose on Windows, UVCView is better than USBView.
Which interface do you see?

bInterfaceClass 03 HID Class --- generic USB HID joystick
or
bInterfaceClass 255 Vendor Specific Class --- generic DirectX device

UVCView is included in WDK.
"How to Get the WDK and the WLK" on MS WHDC
http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx

After installation of WDK,
C:\WINDDK\6001.18001\tools\avstream\x86\UVCView.exe


If it is a USB HID device, the formatted report descriptor is read out by this sniffer.

HHD USB Monitor Professionnal (DMS) - one month trial
http://www.hhdsoftware.com/Downloads/usb-monitor-pro.html

Tsuneo
post edited by chinzei - 2008/09/17 01:02:28
Pierre1
New Member
RE: Force Feedback Device 2008/09/20 10:19:03
Hi Volt,

We actually succeeded to write the descriptor based on the data we get using sniffers from a joystick with embedded vibrators:
The descriptor is:
 
0x05,0x01,0x09,0x04,0xa1,0x01,0xa1,0x02,0x75,0x08,0x95,0x01,0x15,0x00,0x26,0xff,
0x00,0x35,0x00,0x46,0xff,0x00,0x0b,0x02,0x00,0x00,0xff,0x09,0x30,0x09,0x31,0x09,
0x32,0x09,0x35,0x15,0x00,0x26,0xff,0x00,0x75,0x08,0x95,0x05,0x81,0x02,0x09,0x39,
0x15,0x01,0x25,0x08,0x35,0x00,0x46,0x3b,0x01,0x65,0x14,0x75,0x04,0x95,0x01,0x81,
0x02,0x05,0x09,0x19,0x01,0x29,0x0c,0x15,0x00,0x25,0x01,0x75,0x01,0x95,0x0c,0x55,
0x00,0x65,0x00,0x81,0x02,0xc0,0xa1,0x02,0x75,0x08,0x95,0x07,0x46,0xff,0x00,0x26,
0xff,0x00,0x0b,0x02,0x00,0x00,0xff,0x91,0x02,0xc0,0xc0

Where 7 bytes are sent form the host to the device but the problem is that while using the below mentioned command to retrieve the incoming data, we are getting the same results even though the vibrator is active:
 
 if(!mHIDRxIsBusy()) HIDRxReport(RxB,7);
Where RxB is an array of Char   We appreciate your assistance..
Thanks,
P.
pk_volt
Super Member
RE: Force Feedback Device 2008/09/21 03:23:00
Nice!

 I remember there is another report descriptor you need to look at other than the effect report as referring to the usb pid.pdf.  Use snoopy to see how which sets of data is being received and find that particular descriptor in the pid.pdf that indicates the amplitude, and frequency of the signal.



I've uploaded some ffb files for reference on my website

http://members.shaw.ca/bokinator/ffbstuff.zip


i just did a quick search on google and found this to extract a report descriptor:  http://www.gsp.com/cgi-bin/man.cgi?section=3&topic=hid_init#5

maybe give that a shot.  I'm very tempted to resume my progress in my firmware.

keep us posted.  I will try my best to help you out in any way I can.
post edited by pk_volt - 2009/01/30 13:50:47
pk_volt
Super Member
RE: Force Feedback Device 2008/09/21 12:35:15
One more thing I should've mentioned

For your vibration effect, the way the descriptor works is that it will send only  ONE report per effect.  This is like playing a file for 3 seconds.  In the very beginning of the effect, the PC will send you all the information such as start/duration value of the periodic effect, the amplitude and frequency etc. 

Your controller has to calculate this signal out and determine how long the effect has to be played for and the amplitude of the signal etc (eg. sinewave).  When you have multiple effects, you have to add all the signals together in your firmware (eg. if you have a trapezoid and sinewave together).

This is the reason why you only have only one constant 7 byte report coming from the host for a vibration effect.

Try playing around with the fedit.exe file I have posted.

good luck, and keep us posted
post edited by pk_volt - 2008/09/21 12:42:51
Pierre1
New Member
RE: Force Feedback Device 2008/09/22 07:40:30
Chinzei,
Thanks again for your detailed reply. We are actually struggling a bit with the incoming stream and the modality to actuate the rumble engines.  Forwarded your reply/recommendations to the rest of my team and might get back to you with questions.

Best,
Pierre
Pierre1
New Member
RE: Force Feedback Device 2008/09/23 11:45:43
Hi Volt,
Through Snoopy and fedit as well as the DirectX engine, we succeeded in identifying the seven byte structure as the following listing:
 
 Byte 0: Always equal 01.  Byte 1: Determine the actuation direction, in our case 81 for the left vibrator and 41 for the right vibrator.   Byte 2/3: Actuation duration represented in two bytes.  Byte 4/5: Always 10/E0.  Byte 6: Signal magnitude.   Moreover, the following patterns figure in the 7 bytes which still unidentified but we estimate that the first byte represent a certain command:    02-01-00-00-00-00-00  03-01-00-00-00-00-00  04-00-00-00-00-00-00  06-00-00-00-00-00-00   However, we still cannot figure a way to retrieve the 7 bytes in our firmware. We are adopting MICROCHIP firmware for the USB stack written in C18. We would appreciate your assistance in retrieving the mentioned bytes or any lead that could assist in this endeavor.  
Thanks in advance, Pierre
Arrow
New Member
RE: Force Feedback Device 2008/09/23 13:52:14
Hi,


I have a question to you pk_volt
I saw your video on youtube and your implementation of force feedback playing with LFS (I love this game ;) ).
I want to ask you what kind of PID effect did you use? It is a Download Force Sample or Custom Force Streaming? Maybe other one?
I already implement some software and I able to send a receiving date via USB.
I’m also able to “talk” with PC as joystick, sow the basic I have, now I really want to implement force feedback for my steering wheel for LFS ;)
Please give me advice an may by some example, I don’t ask about source code, but fore information about this whole descriptors ;-)

Sorry for my English ;-)


Best regards,
Arrow
pk_volt
Super Member
RE: Force Feedback Device 2008/09/23 14:07:32
Hi Arrow,

LFS only spits out constant force.  So if you can get constant force to work in your program, then you're all set to go in LFS and force feedback :)


Arrow
New Member
RE: Force Feedback Device 2008/09/23 14:24:25
Ok, now I know what to focus on. For now my device is able to receive to data as keyboard LED status, so I think it will not be a problem to get constant force output report.
Till now I thinking only about Download Force Sample and Custom Force Streaming, but you show me new way ;-) I need to go true PID manual and focus on constant force ;-)
Thank you for advice!
pk_volt
Super Member
RE: Force Feedback Device 2008/09/23 22:40:18
Arrow,  all you have to do is implement Feature Report in your firmware (there is an example of how to receive feature reports in the pid.pdf near the bottom).  Get a working ffb report descriptor working and you're basically set.

Use the ffconst.exe program I posted in the .zip file to test your firmware.  If you can get this to work with your firmware .... you've got yourself a homemade ffb device working with live for speed!  Try the example report descriptor in the pid.pdf to see if it works.   

All you have to do next is is use pwm to drive your motor and hook up an optical encoder for your motor.

Keep us posted!  I'd very like to see some forward movement in the ffb community. 
Arrow
New Member
RE: Force Feedback Device 2008/09/24 08:49:27
Ok now I’m confused ;)
What I have for now is:

0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x09, 0x04, /* USAGE (Joystick) */
0xa1, 0x01, /* COLLECTION (Application) */
0x85, 0x01, /* Report_ID (1) */
0x05, 0x02, /* Usage_Page (Simulation Controls) */
0x09, 0xBB , /* Usage (Throttle) */
0x15, 0x81, /* LOGICAL_MINIMUM (-127) */
0x25, 0x7F, /* LOGICAL_MAXIMUM (127) */
0x75, 0x08, /* REPORT_SIZE (8) */
0x95, 0x01, /* REPORT_COUNT (1) */
0x81, 0x02, /* INPUT (Data,Var,Abs) */
//Define th axes
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
0x09, 0x01, /* USAGE (Pointer) */
0xA1, 0x00, /* COLLECTION (Physical) */
0x09, 0x30, /* USAGE (X) */
0x09, 0x31, /* USAGE (Y) */
0x95, 0x02, /* REPORT_COUNT (2) */
0x81, 0x02, /* INPUT (Data,Var,Abs) */
0xC0, /* END_COLLECTION */
//Define the buttons
0x05, 0x09, /* Usage_Page (Button) */
0x19, 0x01, /* Usage_Minimum (Button 1) */
0x29, 0x08, /* Usage_Maximum (Button 8) */
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
0x95, 0x08, /* REPORT_COUNT (8) */
0x75, 0x01, /* REPORT_SIZE (1) */
0x35, 0x00, /* PHYSICAL_MINIMUM (0) */
0x81, 0x02, /* INPUT (Data,Var,Abs) */
0xC0 /* END_COLLECTION */


This is simple report description for joystick but without output report.
Now I need to add the output report.
You wrote “all you have to do is implement Feature Report in your firmware (there is an example of how to receive feature reports in the pid.pdf near the bottom).” Did you mean from the “;Start Force Feedback command definitions” till “;Envelope Report Definition” or something different?
Do I need to implement all effect? Or I can just “Constant Force”? just for LFS?

Sorry for this whole question, but I search in internet and found nothing sad
pk_volt
Super Member
RE: Force Feedback Device 2008/09/29 20:31:57
Hi Arrow,

I apologize for taking so long to reply to you.



For your report descriptor, try using the report descriptor in the pid.pdf.  Yes, it's like over 1000 bytes long, and I'm not sure if it will work, but it's more or less your only chance of making it work.

that report descriptor has input and output reports.

you can also use your program - hidio to test the data loopback for both feature and interrupt endpoint transfer.

I know the pid.pdf is poorly written and it's somewhat difficult to understand throughout the document, but do study it and study it hard.  Eventually, things will make sense and will give you a better idea as to how data is being transmitted back and forth.

keep us posted.  I hope this atleast gets you somewhere.
post edited by pk_volt - 2008/11/26 12:34:02
Pierre1
New Member
RE: Force Feedback Device 2008/10/10 12:27:50
Hey Arrow,
Have you been able to get your device running?  We are facing a similar issue; we have figured out the report descriptor and outgoing telegram and still face the problem of extracting the data stream onto the micro-controller. I imagine some type of hand shaking is needed...
Arrow
New Member
RE: Force Feedback Device 2008/10/11 10:18:49
Hi, last days I have not time to work on FF (Job ;))
Me status is still the same, big problem with report descriptor, I really confused :(
If you want I can send you on e-mail my descriptor may by you can help me, and some how we can push it forward ;-)
Pierre1
New Member
RE: Force Feedback Device 2008/10/11 10:29:33
Hi Arrow,

As we are probably facing the same issue, I do not know how quickly we could assist.
Anyway, send me the data and the exact issue you are facing and I will check with my team mate.
One resource you could also check is Jan Axelson's HID page:  http://www.lvr.com/hidpage.htm#MyExampleCode

Best,
P.
Arrow
New Member
RE: Force Feedback Device 2008/10/11 11:39:35
Ok. This is my descriptor (look file) I will be very happy if you can tell me what is wrong ;(
Normal joystick is working fine but when I add pid descriptor part it stops :(
Can you send my back your version them I can compare it and make come conclusion.
I working my self so is big issue for one person.

Pierre1
New Member
RE: Force Feedback Device 2008/10/15 12:56:00
Here is our Hex descriptor.  Sorry for the lack of comments; everyone is quite busy right now.  Hope it helps some.

0x05,0x01,0x09,0x04,0xa1,0x01,0xa1,0x02,0x75,0x08,0x95,0x01,0x15,0x00,0x26,0xff,
0x00,0x35,0x00,0x46,0xff,0x00,0x0b,0x02,0x00,0x00,0xff,0x09,0x30,0x09,0x31,0x09,
0x32,0x09,0x35,0x15,0x00,0x26,0xff,0x00,0x75,0x08,0x95,0x05,0x81,0x02,0x09,0x39,
0x15,0x01,0x25,0x08,0x35,0x00,0x46,0x3b,0x01,0x65,0x14,0x75,0x04,0x95,0x01,0x81,
0x02,0x05,0x09,0x19,0x01,0x29,0x0c,0x15,0x00,0x25,0x01,0x75,0x01,0x95,0x0c,0x55,
0x00,0x65,0x00,0x81,0x02,0xc0,0xa1,0x02,0x75,0x08,0x95,0x07,0x46,0xff,0x00,0x26,
0xff,0x00,0x0b,0x02,0x00,0x00,0xff,0x91,0x02,0xc0,0xc0

Arrow
New Member
RE: Force Feedback Device 2008/10/20 08:42:48
Dear Pierre1,
As fare as I know and after your descriptor analyze I see that you are create simple joystick with one input and one output endpoint but you don’t use PID class. So you need to write you’re own driver on computer site.
It’s little different idea them pk_volt who using HID PID class, it is more like Xbox 360 for my, it using own driver.


Mr. pk_volt can you send me this descriptor with you sniff from MS FFB wheel?
It well be very helpfully.
verm_pat
New Member
RE: Force Feedback Device 2008/10/23 00:45:59
Hey everybody,
I am having sort of the same problems you guys have.
I'm trying to write the firmware for a force feedback joystick, using a pic24.
Unfortunately i can't get the report descriptorup and running, i've tried the one from the pid pdf file, this doesnt work.

Could somebody please help me out over here with a report descriptor for a force feedback device that does work?
Thanks in advance:)

verm_pat
Pierre1
New Member
RE: Force Feedback Device 2008/10/24 04:01:08
Arrow,
Thanks for your feedback.  We are actually using an embedded ActiveX that interacts directly with the DirectX and send feed back signals.
Also for testing purposes, we are using the ForceEditor application provided by Volt. We want to avoid writing a driver on the PC side.

Best,
Pierre
xiaofan
Super Member
RE: Force Feedback Device 2008/10/24 04:55:53
ORIGINAL: Arrow
descriptor of MS FFB wheel?


Do you have the wheel? If yes you can dump the HID descriptor with the trial version of HHD USB monitor.
http://www.hhdsoftware.com/Products/home/usb-monitor-pro.html

Google only finds the following but this does not help you.
http://bugs.winehq.org/attachment.cgi?id=12183&action=edit


janus@Gigabob:22:48:13$ sudo lsusb -vv -s 3:3
[sudo] password for janus:

Bus 003 Device 003: ID 045e:0034 Microsoft Corp. SideWinder Force Feedback Wheel
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0034 SideWinder Force Feedback Wheel
bcdDevice 1.01
iManufacturer 1 Microsoft
iProduct 2 SideWinder Force Feedback Wheel (USB)
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 41
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 3 Human Interface Devices
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.00
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 1296
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0010 1x 16 bytes
bInterval 4
Device Status: 0x0000
(Bus Powered)
janus@Gigabob:22:48:23$


xiaofan
Super Member
RE: Force Feedback Device 2008/10/24 05:02:41
Another one:

Logitech's MOMO racing wheel.
http://sprinkleofcocoa.blogspot.com/2007/03/logitech-tech-support-driving-me-up.html


Low Speed device @ 3 (0x1D100000): ............................................. Composite device: "Logitech MOMO Racing "
Device Descriptor
Descriptor Version Number: 0x0110
Device Class: 0 (Composite)
Device Subclass: 0
Device Protocol: 0
Device MaxPacketSize: 8
Device VendorID/ProductID: 0x046D/0xCA03 (Logitech Inc.)
Device Version Number: 0x0019
Number of Configurations: 1
Manufacturer String: 4 "Logitech "
Product String: 24 "Logitech MOMO Racing "
Serial Number String: 0 (none)
Configuration Descriptor
Length (and contents): 41
*** omitted raw descriptor ****
Number of Interfaces: 1
Configuration Value: 1
Attributes: 0x80 (bus-powered)
MaxPower: 80 ma
Interface #0 - HID
Alternate Setting 0
Number of Endpoints 2
Interface Class: 3 (HID)
Interface Subclass; 0
Interface Protocol: 0
HID Descriptor
Descriptor Version Number: 0x0100
Country Code: 33
Descriptor Count: 1
Descriptor 1
Type: 0x22 (Report Descriptor)
Length (and contents): 87
*** omitted raw descriptor ****
Parsed Report Descriptor:
Usage Page (Generic Desktop)
Usage (Joystick)
Collection (Application)
Collection (Logical)
Report Count............ (1)
Report Size............. (10)
Logical Minimum......... (0)
Logical Maximum......... (1023)
Physical Minimum........ (0)
Physical Maximum........ (1023)
Usage (X)
Input................... (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield)
Report Count............ (10)
Report Size............. (1)
Logical Maximum......... (1)
Physical Maximum........ (1)
Usage Page (Button)
Usage Minimum........... (1)
Usage Maximum........... (10)
Input................... (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield)
Usage Page (65280)
Usage 0 (0x0)
Report Count............ (4)
Input................... (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield)
Report Count............ (1)
Report Size............. (8)
Logical Maximum......... (255)
Physical Maximum........ (255)
Usage Page (Generic Desktop)
Usage (Y)
Input................... (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield)
Report Count............ (3)
Usage Page (65280)
Usage 1 (0x1)
Input................... (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield)
End Collection
Collection (Logical)
Usage 2 (0x2)
Report Count............ (7)
Output.................. (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Nonvolatile, Bitfield)
End Collection
End Collection
Endpoint 0x81 - Interrupt Input
Address: 0x81 (IN)
Attributes: 0x03 (Interrupt no synchronization data endpoint)
Max Packet Size: 8
Polling Interval: 10 ms
Endpoint 0x01 - Interrupt Output
Address: 0x01 (OUT)
Attributes: 0x03 (Interrupt no synchronization data endpoint)
Max Packet Size: 8
Polling Interval: 10 ms

xiaofan
Super Member
RE: Force Feedback Device 2008/10/24 05:10:47
Unfortunately I guess the above is also useless to you because of the missing raw descriptor. wink
Arrow
New Member
RE: Force Feedback Device 2008/10/30 05:31:17
Hi,

Pierre1,
I’m not sure if I understand you correctly? You are able to send FF data using descriptor with you passed on this topic?
Because hen I send it I saw it as a joystick, but when I try to use software from pk_volt it told me that there is no device in the system with support FF ;|

Xiaofan,
Unfortunately I don’t have any wheel :( (only in my car ;) )
About this logs with you found, you already have said that its useless.
But it’s good to know that somebody is interested in this topic.


Last days I have no time for investigation, but I found some thing interesting in internet:

0x05,0x01, // Usage Page Generic Desktop
0x09,0x04, // Usage Joystick
0xA1,0x01, // Collection Application
0x85,0x01, // Report ID 1
0x09,0x30, // Usage X
0x16,0x00,0xFE, // Logical Minimum FE00h (-512d)
0x26,0xFF,0x01, // Logical Maximum 1FFh (511d)
0x35,0x00, // Physical Minimum 0
0x46,0xFF,0x03, // Physical Maximum 3FFh (1023d)
0x75,0x0A, // Report Size Ah (10d)
0x95,0x01, // Report Count 1
0x81,0x02, // Input (Variable)
0x75,0x06, // Report Size 6
0x81,0x03, // Input (Constant, Variable)
0xA1,0x00, // Collection Linked
0x05,0x01, // Usage Page Generic Desktop
0x09,0x31, // Usage Y
0x15,0x00, // Logical Minimum 0
0x25,0x3F, // Logical Maximum 3Fh (63d)
0x35,0x00, // Physical Minimum 0
0x45,0x3F, // Physical Maximum 3Fh (63d)
0x75,0x06, // Report Size 6
0x95,0x01, // Report Count 1
0x81,0x02, // Input (Variable)
0x75,0x02, // Report Size 2
0x81,0x03, // Input (Constant, Variable)
0x09,0x35, // Usage Rz
0x75,0x06, // Report Size 6
0x81,0x02, // Input (Variable)
0x75,0x02, // Report Size 2
0x81,0x03, // Input (Constant, Variable)
0xC0 , // End Collection
0x05,0x09, // Usage Page Button
0x15,0x00, // Logical Minimum 0
0x19,0x01, // Usage Minimum Button 1
0x29,0x08, // Usage Maximum Button 8
0x25,0x01, // Logical Maximum 1
0x35,0x00, // Physical Minimum 0
0x45,0x01, // Physical Maximum 1
0x75,0x01, // Report Size 1
0x95,0x08, // Report Count 8
0x81,0x02, // Input (Variable)
0x06,0x01,0xFF, // Usage Page Generic Desktop
0x09,0x49, // Usage Undefined
0x75,0x01, // Report Size 1
0x95,0x01, // Report Count 1
0x81,0x02, // Input (Variable)
0x75,0x07, // Report Size 7
0x81,0x03, // Input (Constant, Variable)
0x05,0x0F, // Usage Page Physical Interface
0x09,0x92, // Usage ES Playing
0xA1,0x02, // Collection Datalink
0x85,0x02, // Report ID 2
0x09,0x9F, // Usage DS Device is Reset
0x09,0xA0, // Usage DS Device is Pause
0x09,0xA4, // Usage Actuator Power
0x09,0xA5, // Usage Undefined
0x09,0xA6, // Usage Undefined
0x15,0x00, // Logical Minimum 0
0x25,0x01, // Logical Maximum 1
0x35,0x00, // Physical Minimum 0
0x45,0x01, // Physical Maximum 1
0x75,0x01, // Report Size 1
0x95,0x05, // Report Count 5
0x81,0x02, // Input (Variable)
0x95,0x03, // Report Count 3
0x81,0x03, // Input (Constant, Variable)
0x09,0x94, // Usage PID Device Control
0x15,0x00, // Logical Minimum 0
0x25,0x01, // Logical Maximum 1
0x35,0x00, // Physical Minimum 0
0x45,0x01, // Physical Maximum 1
0x75,0x01, // Report Size 1
0x95,0x01, // Report Count 1
0x81,0x02, // Input (Variable)
0x09,0x22, // Usage Effect Block Index
0x15,0x01, // Logical Minimum 1
0x25,0x28, // Logical Maximum 28h (40d)
0x35,0x01, // Physical Minimum 1
0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x07, // Report Size 7
0x95,0x01, // Report Count 1
0x81,0x02, // Input (Variable)
0xC0 , // End Collection
0x09,0x21, // Usage Set Effect Report
0xA1,0x02, // Collection Datalink
0x85,0x01, // Report ID 1
0x09,0x22, // Usage Effect Block Index
0x15,0x01, // Logical Minimum 1
0x25,0x28, // Logical Maximum 28h (40d)
0x35,0x01, // Physical Minimum 1
0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x25, // Usage Effect Type
0xA1,0x02, // Collection Datalink
0x09,0x26, // Usage ET Constant Force
0x09,0x27, // Usage ET Ramp
0x09,0x30, // Usage ET Square
0x09,0x31, // Usage ET Sine
0x09,0x32, // Usage ET Triangle
0x09,0x33, // Usage ET Sawtooth Up
0x09,0x34, // Usage ET Sawtooth Down
0x09,0x40, // Usage ET Spring
0x09,0x41, // Usage ET Damper
0x09,0x42, // Usage ET Inertia
0x09,0x43, // Usage ET Friction
0x09,0x28, // Usage ET Custom Force Data
0x25,0x0C, // Logical Maximum Ch (12d)
0x15,0x01, // Logical Minimum 1
0x35,0x01, // Physical Minimum 1
0x45,0x0C, // Physical Maximum Ch (12d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x00, // Output
0xC0 , // End Collection
0x09,0x50, // Usage Duration
0x09,0x54, // Usage Trigger Repeat Interval
0x09,0x51, // Usage Sample Period
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x7F, // Logical Maximum 7FFFh (32767d)
0x35,0x00, // Physical Minimum 0
0x46,0xFF,0x7F, // Physical Maximum 7FFFh (32767d)
0x66,0x03,0x10, // Unit 1003h (4099d)
0x55,0xFD, // Unit Exponent FDh (253d)
0x75,0x10, // Report Size 10h (16d)
0x95,0x03, // Report Count 3
0x91,0x02, // Output (Variable)
0x55,0x00, // Unit Exponent 0
0x66,0x00,0x00, // Unit 0
0x09,0x52, // Usage Gain
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x00, // Logical Maximum FFh (255d)
0x35,0x00, // Physical Minimum 0
0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x53, // Usage Trigger Button
0x15,0x01, // Logical Minimum 1
0x25,0x08, // Logical Maximum 8
0x35,0x01, // Physical Minimum 1
0x45,0x08, // Physical Maximum 8
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x55, // Usage Axes Enable
0xA1,0x02, // Collection Datalink
0x05,0x01, // Usage Page Generic Desktop
0x09,0x30, // Usage X
0x09,0x31, // Usage Y
0x15,0x00, // Logical Minimum 0
0x25,0x01, // Logical Maximum 1
0x75,0x01, // Report Size 1
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Variable)
0xC0 , // End Collection
0x05,0x0F, // Usage Page Physical Interface
0x09,0x56, // Usage Direction Enable
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x95,0x05, // Report Count 5
0x91,0x03, // Output (Constant, Variable)
0x09,0x57, // Usage Direction
0xA1,0x02, // Collection Datalink
0x0B,0x01,0x00,0x0A,0x00, // Usage Ordinals: Instance 1
0x0B,0x02,0x00,0x0A,0x00, // Usage Ordinals: Instance 2
0x66,0x14,0x00, // Unit 14h (20d)
0x55,0xFE, // Unit Exponent FEh (254d)
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x00, // Logical Maximum FFh (255d)
0x35,0x00, // Physical Minimum 0
0x47,0xA0,0x8C,0x00,0x00, // Physical Maximum 8CA0h (36000d)
0x66,0x00,0x00, // Unit 0
0x75,0x08, // Report Size 8
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Variable)
0x55,0x00, // Unit Exponent 0
0x66,0x00,0x00, // Unit 0
0xC0 , // End Collection
0x05,0x0F, // Usage Page Physical Interface
0x09,0xA7, // Usage Undefined
0x66,0x03,0x10, // Unit 1003h (4099d)
0x55,0xFD, // Unit Exponent FDh (253d)
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x7F, // Logical Maximum 7FFFh (32767d)
0x35,0x00, // Physical Minimum 0
0x46,0xFF,0x7F, // Physical Maximum 7FFFh (32767d)
0x75,0x10, // Report Size 10h (16d)
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x66,0x00,0x00, // Unit 0
0x55,0x00, // Unit Exponent 0
0xC0 , // End Collection
0x05,0x0F, // Usage Page Physical Interface
0x09,0x5A, // Usage Set Envelope Report
0xA1,0x02, // Collection Datalink
0x85,0x02, // Report ID 2
0x09,0x22, // Usage Effect Block Index
0x15,0x01, // Logical Minimum 1
0x25,0x28, // Logical Maximum 28h (40d)
0x35,0x01, // Physical Minimum 1
0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x5B, // Usage Attack Level
0x09,0x5D, // Usage Fade Level
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x00, // Logical Maximum FFh (255d)
0x35,0x00, // Physical Minimum 0
0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Variable)
0x09,0x5C, // Usage Attack Time
0x09,0x5E, // Usage Fade Time
0x66,0x03,0x10, // Unit 1003h (4099d)
0x55,0xFD, // Unit Exponent FDh (253d)
0x26,0xFF,0x7F, // Logical Maximum 7FFFh (32767d)
0x46,0xFF,0x7F, // Physical Maximum 7FFFh (32767d)
0x75,0x10, // Report Size 10h (16d)
0x91,0x02, // Output (Variable)
0x45,0x00, // Physical Maximum 0
0x66,0x00,0x00, // Unit 0
0x55,0x00, // Unit Exponent 0
0xC0 , // End Collection
0x09,0x5F, // Usage Set Condition Report
0xA1,0x02, // Collection Datalink
0x85,0x03, // Report ID 3
0x09,0x22, // Usage Effect Block Index
0x15,0x01, // Logical Minimum 1
0x25,0x28, // Logical Maximum 28h (40d)
0x35,0x01, // Physical Minimum 1
0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x23, // Usage Parameter Block Offset
0x15,0x00, // Logical Minimum 0
0x25,0x01, // Logical Maximum 1
0x35,0x00, // Physical Minimum 0
0x45,0x01, // Physical Maximum 1
0x75,0x04, // Report Size 4
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x58, // Usage Type Specific Block Off...
0xA1,0x02, // Collection Datalink
0x0B,0x01,0x00,0x0A,0x00, // Usage Ordinals: Instance 1
0x0B,0x02,0x00,0x0A,0x00, // Usage Ordinals: Instance 2
0x75,0x02, // Report Size 2
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Variable)
0xC0 , // End Collection
0x15,0x80, // Logical Minimum 80h (-128d)
0x25,0x7F, // Logical Maximum 7Fh (127d)
0x36,0xF0,0xD8, // Physical Minimum D8F0h (-10000d)
0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
0x09,0x60, // Usage CP Offset
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x36,0xF0,0xD8, // Physical Minimum D8F0h (-10000d)
0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
0x09,0x61, // Usage Positive Coefficient
0x09,0x62, // Usage Negative Coefficient
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Variable)
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x00, // Logical Maximum FFh (255d)
0x35,0x00, // Physical Minimum 0
0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
0x09,0x63, // Usage Positive Saturation
0x09,0x64, // Usage Negative Saturation
0x75,0x08, // Report Size 8
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Variable)
0x09,0x65, // Usage Dead Band
0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0xC0 , // End Collection
0x09,0x6E, // Usage Set Periodic Report
0xA1,0x02, // Collection Datalink
0x85,0x04, // Report ID 4
0x09,0x22, // Usage Effect Block Index
0x15,0x01, // Logical Minimum 1
0x25,0x28, // Logical Maximum 28h (40d)
0x35,0x01, // Physical Minimum 1
0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x70, // Usage Magnitude
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x00, // Logical Maximum FFh (255d)
0x35,0x00, // Physical Minimum 0
0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x6F, // Usage Offset
0x15,0x80, // Logical Minimum 80h (-128d)
0x25,0x7F, // Logical Maximum 7Fh (127d)
0x36,0xF0,0xD8, // Physical Minimum D8F0h (-10000d)
0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x71, // Usage Phase
0x66,0x14,0x00, // Unit 14h (20d)
0x55,0xFE, // Unit Exponent FEh (254d)
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x00, // Logical Maximum FFh (255d)
0x35,0x00, // Physical Minimum 0
0x47,0xA0,0x8C,0x00,0x00, // Physical Maximum 8CA0h (36000d)
0x91,0x02, // Output (Variable)
0x09,0x72, // Usage Period
0x26,0xFF,0x7F, // Logical Maximum 7FFFh (32767d)
0x46,0xFF,0x7F, // Physical Maximum 7FFFh (32767d)
0x66,0x03,0x10, // Unit 1003h (4099d)
0x55,0xFD, // Unit Exponent FDh (253d)
0x75,0x10, // Report Size 10h (16d)
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x66,0x00,0x00, // Unit 0
0x55,0x00, // Unit Exponent 0
0xC0 , // End Collection
0x09,0x73, // Usage Set Constant Force Rep...
0xA1,0x02, // Collection Datalink
0x85,0x05, // Report ID 5
0x09,0x22, // Usage Effect Block Index
0x15,0x01, // Logical Minimum 1
0x25,0x28, // Logical Maximum 28h (40d)
0x35,0x01, // Physical Minimum 1
0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x70, // Usage Magnitude
0x16,0x01,0xFF, // Logical Minimum FF01h (-255d)
0x26,0xFF,0x00, // Logical Maximum FFh (255d)
0x36,0xF0,0xD8, // Physical Minimum D8F0h (-10000d)
0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
0x75,0x10, // Report Size 10h (16d)
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0xC0 , // End Collection
0x09,0x74, // Usage Set Ramp Force Report
0xA1,0x02, // Collection Datalink
0x85,0x06, // Report ID 6
0x09,0x22, // Usage Effect Block Index
0x15,0x01, // Logical Minimum 1
0x25,0x28, // Logical Maximum 28h (40d)
0x35,0x01, // Physical Minimum 1
0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x75, // Usage Ramp Start
0x09,0x76, // Usage Ramp End
0x15,0x80, // Logical Minimum 80h (-128d)
0x25,0x7F, // Logical Maximum 7Fh (127d)
0x36,0xF0,0xD8, // Physical Minimum D8F0h (-10000d)
0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
0x75,0x08, // Report Size 8
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Variable)
0xC0 , // End Collection
0x09,0x68, // Usage Custom Force Data Rep...
0xA1,0x02, // Collection Datalink
0x85,0x07, // Report ID 7
0x09,0x22, // Usage Effect Block Index
0x15,0x01, // Logical Minimum 1
0x25,0x28, // Logical Maximum 28h (40d)
0x35,0x01, // Physical Minimum 1
0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x6C, // Usage Custom Force Data Offset
0x15,0x00, // Logical Minimum 0
0x26,0x10,0x27, // Logical Maximum 2710h (10000d)
0x35,0x00, // Physical Minimum 0
0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
0x75,0x10, // Report Size 10h (16d)
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x69, // Usage Custom Force Data
0x15,0x81, // Logical Minimum 81h (-127d)
0x25,0x7F, // Logical Maximum 7Fh (127d)
0x35,0x00, // Physical Minimum 0
0x46,0xFF,0x00, // Physical Maximum FFh (255d)
0x75,0x08, // Report Size 8
0x95,0x0C, // Report Count Ch (12d)
0x92,0x02,0x01, // Output (Variable, Buffered)
0xC0 , // End Collection
0x09,0x66, // Usage Download Force Sample
0xA1,0x02, // Collection Datalink
0x85,0x08, // Report ID 8
0x05,0x01, // Usage Page Generic Desktop
0x09,0x30, // Usage X
0x09,0x31, // Usage Y
0x15,0x81, // Logical Minimum 81h (-127d)
0x25,0x7F, // Logical Maximum 7Fh (127d)
0x35,0x00, // Physical Minimum 0
0x46,0xFF,0x00, // Physical Maximum FFh (255d)
0x75,0x08, // Report Size 8
0x95,0x02, // Report Count 2
0x91,0x02, // Output (Variable)
0xC0 , // End Collection
0x05,0x0F, // Usage Page Physical Interface
0x09,0x77, // Usage Effect Operation Report
0xA1,0x02, // Collection Datalink
0x85,0x0A, // Report ID Ah (10d)
0x09,0x22, // Usage Effect Block Index
0x15,0x01, // Logical Minimum 1
0x25,0x28, // Logical Maximum 28h (40d)
0x35,0x01, // Physical Minimum 1
0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x78, // Usage Operation
0xA1,0x02, // Collection Datalink
0x09,0x79, // Usage Op Effect Start
0x09,0x7A, // Usage Op Effect Start Solo
0x09,0x7B, // Usage Op Effect Stop
0x15,0x01, // Logical Minimum 1
0x25,0x03, // Logical Maximum 3
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x00, // Output
0xC0 , // End Collection
0x09,0x7C, // Usage Loop Count
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x00, // Logical Maximum FFh (255d)
0x35,0x00, // Physical Minimum 0
0x46,0xFF,0x00, // Physical Maximum FFh (255d)
0x91,0x02, // Output (Variable)
0xC0 , // End Collection
0x09,0x90, // Usage PID State Report
0xA1,0x02, // Collection Datalink
0x85,0x0B, // Report ID Bh (11d)
0x09,0x22, // Usage Effect Block Index
0x25,0x28, // Logical Maximum 28h (40d)
0x15,0x01, // Logical Minimum 1
0x35,0x01, // Physical Minimum 1
0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0xC0 , // End Collection
0x09,0x96, // Usage DC Disable Actuators
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
0x09,0x7D, // Usage PID Pool Report
0xA1,0x02, // Collection Datalink
0x85,0x0D, // Report ID Dh (13d)
0x09,0x7E, // Usage RAM Pool Size
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x00, // Logical Maximum FFh (255d)
0x35,0x00, // Physical Minimum 0
0x46,0x10,0x27, // Physical Maximum 2710h (10000d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0xC0 , // End Collection
0x09,0x6B, // Usage Set Custom Force Report
0xA1,0x02, // Collection Datalink
0x85,0x0E, // Report ID Eh (14d)
0x09,0x22, // Usage Effect Block Index
0x15,0x01, // Logical Minimum 1
0x25,0x28, // Logical Maximum 28h (40d)
0x35,0x01, // Physical Minimum 1
0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x6D, // Usage Sample Count
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x00, // Logical Maximum FFh (255d)
0x35,0x00, // Physical Minimum 0
0x46,0xFF,0x00, // Physical Maximum FFh (255d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x09,0x51, // Usage Sample Period
0x66,0x03,0x10, // Unit 1003h (4099d)
0x55,0xFD, // Unit Exponent FDh (253d)
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x7F, // Logical Maximum 7FFFh (32767d)
0x35,0x00, // Physical Minimum 0
0x46,0xFF,0x7F, // Physical Maximum 7FFFh (32767d)
0x75,0x10, // Report Size 10h (16d)
0x95,0x01, // Report Count 1
0x91,0x02, // Output (Variable)
0x55,0x00, // Unit Exponent 0
0x66,0x00,0x00, // Unit 0
0xC0 , // End Collection
0x09,0xAB, // Usage Undefined
0xA1,0x02, // Collection Datalink
0x85,0x01, // Report ID 1
0x09,0x25, // Usage Effect Type
0xA1,0x02, // Collection Datalink
0x09,0x26, // Usage ET Constant Force
0x09,0x27, // Usage ET Ramp
0x09,0x30, // Usage ET Square
0x09,0x31, // Usage ET Sine
0x09,0x32, // Usage ET Triangle
0x09,0x33, // Usage ET Sawtooth Up
0x09,0x34, // Usage ET Sawtooth Down
0x09,0x40, // Usage ET Spring
0x09,0x41, // Usage ET Damper
0x09,0x42, // Usage ET Inertia
0x09,0x43, // Usage ET Friction
0x09,0x28, // Usage ET Custom Force Data
0x25,0x0C, // Logical Maximum Ch (12d)
0x15,0x01, // Logical Minimum 1
0x35,0x01, // Physical Minimum 1
0x45,0x0C, // Physical Maximum Ch (12d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0xB1,0x00, // Feature
0xC0 , // End Collection
0x05,0x01, // Usage Page Generic Desktop
0x09,0x3B, // Usage Byte Count
0x15,0x00, // Logical Minimum 0
0x26,0xFF,0x01, // Logical Maximum 1FFh (511d)
0x35,0x00, // Physical Minimum 0
0x46,0xFF,0x01, // Physical Maximum 1FFh (511d)
0x75,0x0A, // Report Size Ah (10d)
0x95,0x01, // Report Count 1
0xB1,0x02, // Feature (Variable)
0x75,0x06, // Report Size 6
0xB1,0x01, // Feature (Constant)
0xC0 , // End Collection
0x05,0x0F, // Usage Page Physical Interface
0x09,0x89, // Usage Block Load Status
0xA1,0x02, // Collection Datalink
0x85,0x02, // Report ID 2
0x09,0x22, // Usage Effect Block Index
0x25,0x28, // Logical Maximum 28h (40d)
0x15,0x01, // Logical Minimum 1
0x35,0x01, // Physical Minimum 1
0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0xB1,0x02, // Feature (Variable)
0x09,0x8B, // Usage Block Load Full
0xA1,0x02, // Collection Datalink
0x09,0x8C, // Usage Block Load Error
0x09,0x8D, // Usage Block Handle
0x09,0x8E, // Usage PID Block Free Report
0x25,0x03, // Logical Maximum 3
0x15,0x01, // Logical Minimum 1
0x35,0x01, // Physical Minimum 1
0x45,0x03, // Physical Maximum 3
0x75,0x08, // Report Size 8
0x95,0x01, // Report Count 1
0xB1,0x00, // Feature
0xC0 , // End Collection
0x09,0xAC, // Usage Undefined
0x15,0x00, // Logical Minimum 0
0x27,0xFF,0xFF,0x00,0x00, // Logical Maximum FFFFh (65535d)
0x35,0x00, // Physical Minimum 0
0x47,0xFF,0xFF,0x00,0x00, // Physical Maximum FFFFh (65535d)
0x75,0x10, // Report Size 10h (16d)
0x95,0x01, // Report Count 1
0xB1,0x00, // Feature
0xC0 , // End Collection
0x09,0x7F, // Usage ROM Pool Size
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
0xC0 // End Collection


I have no time to check it, but I will be nice if some one send it an check if it working.


Kind regards,
Sylwester
post edited by Arrow - 2008/11/19 04:36:16
pk_volt
Super Member
RE: Force Feedback Device 2008/10/30 11:04:53
Arrow,

just try out that report descriptor to see if it works.

All you have to do is find the size of that report descriptor by simply doing something like char reportDsc = { COPY & PASTE ENTIRE REPORT DESCRIPTOR};

Then do a printf("report size = %d", sizeof (reportDsc) );  to print out the size of the report descriptor.

paste this value in your firmware and see if it runs.
Arrow
New Member
RE: Force Feedback Device 2008/11/17 09:44:07
Hello,
After some time I have opportunity to check this long descriptor and it working!!! grin
Windows see it as force feedback device, I'm able to send data to PC but can’t receive :(
I used USBlyzer to look what is transferred between PC and my device and I get some think like this:


URB Class Interface issued
Device Object USBPDO-10
Driver Object usbhub

URB Function URB_FUNCTION_CLASS_INTERFACE

Request Type Class request to Interface
Request 09h
Value 0301h
Index 0000h
Length 0004h

-----------------------------------------------------------

URB Control Transfer failed
Device Object USBPDO-10
Driver Object usbhub

URB Function URB_FUNCTION_CONTROL_TRANSFER
URB Status USBD_STATUS_STALL_PID

Endpoint 0 Default Control

Request Type Class request to Interface
Request 09h
Value 0301h
Index 0000h
Length 0004h




If any one of you know some thing about it? For sure some thing is missing in my USB implementation.
pk_volt
Super Member
RE: Force Feedback Device 2008/11/17 12:01:09
CONGRATS Arrow!

You're almost there.  Keep us posted
verm_pat
New Member
RE: Force Feedback Device 2008/11/18 05:50:27
You know what? That report descriptor looks awfully familliar, I tried to use it before.
It didn't really work, it was possible to send data to the px, but not to recieve the force feedback on the device.
Does anybody know what to do to make it work? I have everything figured out on my chip, the only problem is that I can't get the device to enumerate as a Force Feedback Devicesad.

Can please anybody help me?

Verm_Pat
Flat Reading Mode Thread Reading Mode
Page: 123 > Showing page 1 of 3