I don't see a development form section so I guess I'll post here.

I've been looking at the emulator code, I see that you're sending the structure s_report_data that's got the X,Y,Z and Rz? axis ( I don't know what the Z and Rz axis stand for O.o) ... anyways the values are declared as int16_t and a few lines below i see that you write a uint16_t in the values.
#define DEFAULT_MAX_AXIS_VALUE 65535
data.X = clamp(0, state->user.axis[0][0] + DEFAULT_MEAN_AXIS_VALUE, DEFAULT_MAX_AXIS_VALUE);
Should this work? Am I misreading this.
hmm ... additionally in the usb_joystick code file I see that the axis are uint8_t joystick_axis_x;
Shouldn't the report structure send uint8_t?