Here I will gather all info I can find out about the different force effects and
their USB commands. All values seem to be little-endian.
Also, general note, it seems like some effects are affected by the direction of
the force, denoted by ***

As far as I can tell, fade_level and attack_level values are calculated by
mapping the u16 into s16 and taking the absolute value, and after that
multiplying by the direction. 

All values are examples of actual commands that I captured on the USB interface,
not the only ones available.

GENERAL:

    Playing:
    60 00 - standard header
    01 - ID
    89 - playing options
    01 - play
    00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


    Stopping/removing: (why are they rolled into one?)
    60 00 - standard header 
    01 - ID
    89 - playing options
    00 - stop
    00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

FF_CONSTANT:
    Initialization:
    60 00 - standard header
    01 - ID
    6a - new constant effect(?)
    fe ff - strength ***
    00 00 - attack_length
    00 00 - attack_level ***
    00 00 - fade_length
    00 00 - fade_level ***
    00 4f - ?
    f7 17 - time in milliseconds, unsigned
    00 00
    07 00 - offset from start(?)
    00 ff ff - end of new effect(?)
    00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


    Modifying: (For dynamic updating of effects)
        Direction: n/a
        
        Constant force:
        60 00 - standard header
        01 - ID
        0a - modify constant force
        05 16 - constant force ***
        00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        
        Envelope:
        60 00 - standard header
        01 - ID
        31 - modify envelope
        84 - ID of envelope attribute ( attack_level 82,
                                        attack_length 81,
                                        fade_level 88,
                                        fade_length 84  )
        63 04 - value attribute should be set to ?***?
        00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        Duration:
        60 00 - standard header
        01 - ID
        49 00 41 - modify timing?
        6c 20 - length in milliseconds
        00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        Offset:
        Not supported?


FF_RAMP:
    (Why on earth is it this difficult to figure out how a fucking ramp works?)
    Init:
    60 00 - standard header
    01 - ID
    6b - new ramp effect 
    f6 7f - difference *** 
    fe ff - level? *** (level = (if end_level > start_level, end_level, else
    start_level) - difference?) (signed)
    00 00
    f7 17 - time
    00 80 - some kind of marker
    00 00 - attack_length
    f6 7f - attack_level ***
    00 00 - fade_length
    f6 7f - fade_level***
    04 - invert (going "down", 05, going "up", 04)
    4f  
    f7 17 - time again?
    00 00
    00 00 - offset 
    00 ff ff - end of init
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    Modifying:
        Sweet baby jesus
        I'll figure this out later
        Ramp(?):
       60 00 - standard header
       01 - ID
       0e - ???
       03 - ramp?
       e3 04 - difference?
       7d 75 - "level"?
       05 - ????
       00 00 00 00 00 00
       00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        
        Envelope:
        60 00 - standard header
        01 - ID
        31 - modify envelope
        84 - ID of envelope attribute ( attack_level 82,
                                        attack_length 81,
                                        fade_level 88,
                                        fade_length 84  )
        63 04 - value attribute should be set to
        00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        Duration:
         
        60 00
        01 - ID
        4e 08 - ?
        01 00 - time in milliseconds
        05 41 - ?
        01 00 - time in milliseconds
        00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        Offset:
        Not supported?

FF_SPRING:
    Init:
    60 00 - standard header
    01 - ID
    64 - new conditional effect
    fc 7f - positive coefficient (right?)
    fc 7f - negative coefficient (left?)
    fe ff - deadband (left?) (deadband + offset) (fe ff means no deadband)
    fe ff - deadband (right?) (deadband + offset)
    a6 6a a6 6a fe ff fe ff fe ff fe ff df 58 a6 6a 06 - some weird hard-coded
                                                    values to do with springs?

    4f
    f7 17 - duration
    00 00 
    00 00 - offset 
    00 ff ff - end of init
    00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    Modifying:
        Same as under

FF_DAMPER + FF_FRICTION + FF_INERTIA:
    Init:
    60 00 - standard header
    02 -ID
    64 - new conditional effect
    fc 7f - positive coefficient (right?)
    fc 7f - negative coefficient (left?)
    fe ff - deadband (left?) (deadband + offset) (fe ff means no deadband)
    fe ff - deadband (right?) (deadband + offset)
    fc 7f fc 7f fe ff fe ff fe ff fe ff fc 7f fc 7f 07 - some weird hard-coded
                                                    values to do with friction?
    4f
    f7 17 - duration
    00 00 
    00 00 - offset
    00 ff ff - end of init
    00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    
    Modifying:
        positive coefficient:
        60 00
        02 - ID
        0e 41
        64 35 - value, signed (between 00 00 and 01 80?)
        00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        negative coefficient:
        60 00
        02 - ID
        0e 42
        64 35 - value, signed (between 00 00 and ff 7f?)
        00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        deadband/offset:
        60 00
        02 - ID
        0e 4c
        64 35 - deadband (right?) (deadband + offset) (fe ff means no deadband)
        00 00 - deadband (left?) (deadband + offset)
        00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        Duration:
        60 00 - standard header
        01 - ID
        49 06 41 - modify timing?
        6c 20 - length in milliseconds
        00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        Offset:
        Not supported?

FF_PERIODIC:
    60 00 - standard header
    01 - ID
    6b - new periodic effect
    00 00 - magnitude ***
    fe ff - offset (up/down)
    00 00 - phase (left/right)
    e8 03 - period
    00 80 
    00 00 - attack_length
    00 00 - attack_level ***
    00 00 - fade_length
    00 00 - fade_level ***
    01 - type of periodic ( square 01,
                            sine 03,
                            triangle 02,
                            sawtooth down 05,
                            sawtooth up 04  )
    4f
    f7 17 - duration
    00 00
    00 00 - offset
    00 ff ff - end of init
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    Modifying:
        magnitude:
        60 00
        02 - ID
        0e 01
        64 35 - value, signed (between 00 00 and ff 7f?)
        00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        offset of effect:
        60 00
        02 - ID
        0e 02
        64 35 - value, signed (between 00 00 and ff 7f?)
        00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        phase:
        60 00
        02 - ID
        0e 04
        64 35 - value, signed (between 80 01 and ff 7f?)
        00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        period:
        60 00
        02 - ID
        0e 08
        64 35 - value, signed (between 00 00 and I guess ff 7f?) (max value in
        wireshark is 0d 07, but I don't know if that's a driver or program issue)
        00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


        Envelope:
        60 00 - standard header
        01 - ID
        31 - modify envelope
        84 - ID of envelope attribute ( attack_level 82,
                                        attack_length 81,
                                        fade_level 88,
                                        fade_length 84  )
        63 04 - value attribute should be set to
        00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        Duration:
         
        60 00
        01 - ID
        4e 08 - ?
        01 00 - time in milliseconds
        05 41 - ?
        01 00 - time in milliseconds
        00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        Offset:
        Not supported?


FF_AUTOCENTER:
    60 08 - header plus settings?
    03 - set autocenter force
    8f 02 - force (between ff ff and 00 00)
    00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

FF_GAIN:
    60 02 - header plus gain?
    bf - gain (between ff and 00)
    00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Rotation angle:
    60 08 - header plus settings?
    11 - set rotation angle
    55 d5 - angle (between ff ff and 7b 09, one degree is roughly 3c)
    00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Open:
    60 01 - standard header?
    04 - ?
    00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    
    (this command doesn't appear every time, odd)
    60 12 - ?
    bf 04 00 00 03 b7 1e - ? /* wow, this is different on different wheels? */
    00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    60 01 - ?
    05 - ?
    00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Close:
    60 01 - standard header?
    00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

