HID.SendReport() problem in Linux

I am programming an Arduino to mimic an existing Sega 3 button control pad. My goal is to connect an original SEGA Megadrive controller (DB9 connector) to a SEGA Mini console (USB).

The device I am trying to mimic has a HID descriptor that looks like this (note that there is no REPORT_ID):

Item Tag (Value) Raw Data 
Usage Page (Generic Desktop) 05 01  
Usage (Joystick) 09 04  
Collection (Application) A1 01  
    Collection (Logical) A1 02  
        Report Size (8) 75 08  
        Report Count (5) 95 05  
        Logical Minimum (0) 15 00  
        Logical Maximum (255) 26 FF 00  
        Physical Minimum (0) 35 00  
        Physical Maximum (255) 46 FF 00  
        Usage (X) 09 30  
        Usage (X) 09 30  
        Usage (X) 09 30  
        Usage (X) 09 30  
        Usage (Y) 09 31  
        Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02  
        Report Size (4) 75 04  
        Report Count (1) 95 01  
        Logical Maximum (7) 25 07  
        Physical Maximum (315) 46 3B 01  
        Unit (Eng Rot: Degree) 65 14  
        Usage (Undefined) 09 00  
        Input (Data,Var,Abs,NWrp,Lin,Pref,Null,Bit) 81 42  
        Unit (None) 65 00  
        Report Size (1) 75 01  
        Report Count (10) 95 0A  
        Logical Maximum (1) 25 01  
        Physical Maximum (1) 45 01  
        Usage Page (Button) 05 09  
        Usage Minimum (Button 1) 19 01  
        Usage Maximum (Button 10) 29 0A  
        Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02  
        Usage Page (Vendor-Defined 1) 06 00 FF  
        Report Size (1) 75 01  
        Report Count (10) 95 0A  
        Logical Maximum (1) 25 01  
        Physical Maximum (1) 45 01  
        Usage (Vendor-Defined 1) 09 01  
        Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02  
    End Collection C0  
    Collection (Logical) A1 02  
        Report Size (8) 75 08  
        Report Count (4) 95 04  
        Physical Maximum (255) 46 FF 00  
        Logical Maximum (255) 26 FF 00  
        Usage (Vendor-Defined 2) 09 02  
        Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) 91 02  
    End Collection C0  
End Collection C0

However the eight bytes of data it produces in the payload looks like this:

0x01 0x7F 0x7F 0x7F 0x7F 0x0F 0x00 0x00

Note the 0x01 as the first byte.

I've created a HID descriptor that looks like this:

{
  0x05, 0x01,        /* Usage Page (Generic Desktop)  */
  0x09, 0x04,        /* Usage (Joystick)      */
  0xA1, 0x01,        /* Collection (Application)    */
    0xA1, 0x02,        /*   Collection (Logical)    */
      0x85, JOYSTICK_REPORT_ID,

      0x75, 0x08,        /*     Report Size (8)   */
      0x95, 0x04,        /*     Report Count (4)    */
      0x15, 0x00,         /*    Logical minimum (0) */
      0x26, 0xFF, 0x00,  /*     Logical Maximum (255)   */
      0x35, 0x00,        /*     Physical Minimum (0)    */
      0x46, 0xFF, 0x00,  /*     Physical Maximum (255)  */
      0x09, 0x30,        /*     Usage (Direction-X)     */
      0x09, 0x30,        /*     Usage (Direction-X)     */      
      0x09, 0x30,        /*     Usage (Direction-X)     */      
      0x09, 0x31,        /*     Usage (Direction-Y)     */
      0x81, 0x02,        /*     Input (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)    */

      0x75, 0x04,        /*     Report Size (4)   */
      0x95, 0x01,        /*     Report Count (1)    */
      0x25, 0x07,        /*     Logical Maximum (7)   */
      0x46, 0x3B, 0x01,        /*     Physical Maximum (315)  */
      0x65, 0x14,        /*     Unit (20)   */          
      0x09, 0x00,         /*  Usage (undefined) */                              
      0x81, 0x42,          /* Input 66 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,Null State) */

      0x65, 0x00,         /* Unit 0 */
      0x75, 0x01,          /* Report Size (1) */
      0x95, 0x0A,          /* Report Count (10) */
      0x25, 0x01,         /* Logical Maximum (1) */
      0x45, 0x01,         /* Physical Maximum (1) */
      0x05, 0x09,         /* Usage Page Buttons (9) */
      0x19, 0x01,          /* usage minimum 1 */
      0x29, 0x0A,          /* usage maximum 10 */
      0x81, 0x02,           /* Input 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position) */

      0x06, 0x00, 0xFF,          /* usage page (vendor specific) */
      0x75, 0x01,        /*     Report Size (1)   */
      0x95, 0x0A,        /*     Report Count (10)    */
      0x25, 0x01,        /*     Logical Maximum (1)   */
      0x45, 0x01,       /*     Physical Maximum (1)  */
      0x09, 0x01,        /* Usage (undefined) */
      0x81, 0x02,         /* Input 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position) */
    0xC0,

    0xA1, 0x02,        /*   Collection (Logical)    */
      0x75, 0x08,       /* report size (8) */
      0x95, 0x04,       /* report count (4) */
      0x46, 0xFF, 0x00,  /* Physical maximum (255) */
      0x26, 0xFF, 0x00,  /* Logical maximum (255) */
      0x09, 0x02,         /* Usage 2 (mouse) */
      0x91, 0x02,         /* Output 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position,Non Volatile) */
    0xC0,      
  0xC0               /* End Collection      */
};

And my payload data is structured as follows:

m[0] = 0x7f;
  m[1] = 0x7f;
  m[2] = _x_axis;
  m[3] = _y_axis;
  m[4] = _buttons;
  m[5] = _start_button;
  m[6] = 0x00;

When I send this data using HID.SendReport() I include the JOYSTICK_REPORT_ID (0x01) in the call, resulting in the desired effect (the 0x01 is added to the 7 bytes of my payload data). The device is recognised as a HID device and it sends the correct 8 bytes. This works perfectly on an unmodded SEGA Mini; I can select games in the selection screen and play games just fine.

However, I have modded my SEGA Mini using Project Lunar which adds an emulator selection screen running under a Linux kernel. My Arduino does not work in this particular screen. Neither x or y axis, nor any button is functional while in this screen.

Can anyone see why this is?