Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Support for BlissBox 4-Play #1525

Open
ghost opened this issue Jun 12, 2016 · 11 comments
Open

Add Support for BlissBox 4-Play #1525

ghost opened this issue Jun 12, 2016 · 11 comments

Comments

@ghost
Copy link

ghost commented Jun 12, 2016

The BlissBox 4-Play is a wired controller adapter which supports pretty much every wired controller known to the emulation community. Currently I believe the device is supported on Windows and Linux based operating sytems, possibly Mac as well.

Here is a FAQ from their site about details:
http://skunx7.wix.com/bliss-box#!home/mainPage

I wrote a post on their forum and it appears that support did exist to some extent on RetroPie but it was never 100% supported.
http://blissbox.freeforums.org/blissbox-4-play-retropie-3-7-not-working-t410.html

This is not a very popular device currently but this is a company which has been trying to grow and spread the word about their device to the emulation community. As an owner of the device, I would say it works very well for Windows. It's not cheap at $120, but it provides a lot of flexibility.

This is the perfect device for the RetroPie Project.

@ulao
Copy link

ulao commented Jun 13, 2016

Hello, I'm the Bliss-Box 4-play developer and although I do not know much about RetroPie I figured this info will be of some help.

  1. The 4-play consists of 4 identical HID's Each on it's own USB port. There is a generic HUB inside.
  2. Each of these 4 devices are HID based gamepads (no driver needed ).
  3. As of the latest firmware (1.54) we have seen little issues with linux. Macs and windows Os's are working.
  4. The Descriptor is large and recognized in Windows, Mac, most all Linux's ,and the ps3. My guess is this may be the root of the problem.

Also just a tip and to help Google out a bit it's not Blissbox or Bliss box, There are a lot of companies that use that name and although it may seem minute, it does help the search engines to find the correct project or company by spelling things correctly.

Bliss-Box, is correct.

Sadly some domains like freeforums do not allow dashes.


///// gamepad   
0x05,0x01,  //    Usage Page Generic Desktop
0x09,0x05,  //    USAGE (Game Pad)
0xA1,0x01,  //    Collection Application
0x85,0x01,  //     Report ID 1

    //button
    0x05, 0x09, // USAGE_PAGE (Button)
    0x19, 0x01, // USAGE_MINIMUM (Button 1)
    0x29, 0x18, // USAGE_MAXIMUM (Button 24)
    0x15, 0x00, // LOGICAL_MINIMUM (0)
    0x25, 0x01, // LOGICAL_MAXIMUM (1)
    0x75, 0x01, // REPORT_SIZE (1)
    0x95, 0x18, // REPORT_COUNT (24)
    0x81, 0x02, //  INPUT   


    0xa1, 0x00, //   COLLECTION (Physical) ( must be in a collection for open-emu )     
        //axis
        0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
        0x09, 0x30,                    //     USAGE (X)
        0x09, 0x31,                    //     USAGE (Y)
        0x09, 0x32,                    //     USAGE (Z)
        0x09, 0x33,                    //     USAGE (Rx)
        0x09, 0x34,                    //     USAGE (Ry)
        0x09, 0x35,                    //     USAGE (Rz)
        0x09, 0x36,                    //     USAGE slider
        0x09, 0x37,                    //     USAGE  dial
        //0x09, 0x38,                  //     wheel ( cant figure this out )
        0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
        0x26, 0xFF, 0x00,              //     LOGICAL_MAXIMUM (255)
        0x35, 0x00,                    //     Physical Minimum (0)
        0x46, 0xFF, 0x00,              //     Physical Minimum (255)
        0x75, 0x08,                    //     REPORT_SIZE (8)
        0x95, 0x08,                    //     REPORT_COUNT (8)
        0x81, 0x02,                    //     INPUT

    0xc0,//end pointer phys collection. 

    //hat
    0x05, 0x01, // USAGE_PAGE (Generic Desktop)
    0x25, 0x07, // LOGICAL_MAXIMUM (7)
    0x46, 0x3b, 0x01, // PHYSICAL_MAXIMUM (315)
    0x75, 0x04, // REPORT_SIZE (4)
    0x95, 0x01, // REPORT_COUNT (1)
    0x65, 0x14, // UNIT (Eng Rot:Angular Pos)
    0x09, 0x39, // USAGE (Hat switch)
    0x81, 0x42, // INPUT (Data,Var,Abs,Null)
    0x65, 0x00, // UNIT (None)
    0x95, 0x01, // REPORT_COUNT (1)
    0x81, 0x01, // INPUT (Cnst,Ary,Abs) 


//0xa1, 0x00,  //   COLLECTION (Physical) 
        0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Specific)
        0x09, 0x20, // Unknown
        0x09, 0x21, // Unknown
        //0x09, 0x22, // Unknown
        //0x09, 0x23, // Unknown
        //0x09, 0x24, // Unknown
        //0x09, 0x25, // Unknown
        //0x09, 0x26, // Unknown
        //0x09, 0x27, // Unknown
        //0x09, 0x28, // Unknown
        //0x09, 0x29, // Unknown
        //0x09, 0x2a, // Unknown
        //0x09, 0x2b, // Unknown
        0x75, 0x08, //     REPORT_SIZE (8)
        0x95, 0x02, // REPORT_COUNT  
        0x81, 0x02, // INPUT (Data,Var,Abs) 
//0xc0,//end    

    0x0a, 0x21, 0x26, 
    0x95, 0x08, // REPORT_COUNT (8)
    0xb1, 0x02, // FEATURE (Data,Var,Abs)


    //this is an input for FFB, data out.
    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)


//FFB
   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,0x28,    //    Usage ET Custom Force Data
         0x25,0x07,    //    Logical Maximum Ch (7d)
         0x15,0x01,    //    Logical Minimum 1
         0x35,0x01,    //    Physical Minimum 1
         0x45,0x07,    //  8 Physical Maximum Ch (7d)
         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


//stripped down. - Working but can not take out more, desc. crashes. 
   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,0x0f,    //    Report ID f
      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,0x28,    //    Usage ET Custom Force Data
      0x25,0x07,    //    Logica8 Maximum Ch (7d)
      0x15,0x01,    //    Logical Minimum 1
      0x35,0x01,    //    Physical Minimum 1
      0x45,0x07,    //    Physic8l Maximum Ch (7d)
      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

/////// turbo
/*
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x05,                    // USAGE (Gamepad)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x85, 0x10,                    // Report ID (16) 
        0x09, 0x01,                    //   USAGE (Pointer)    
            0xa1, 0x00,                    //   COLLECTION (Physical)
            0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
            0x09, 0x30,                    //     USAGE (X)
            0x09, 0x31,                    //     USAGE (Y)
            0x09, 0x33,                    //     USAGE (Rx)
            0x09, 0x34,                     //    USAGE (Ry)
            0x09, 0x37,                     //    USAGE (dial)  
            0x09, 0x36,                     //    USAGE (Slider)    
            0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
            0x26, 0xFF, 0x00,              //     LOGICAL_MAXIMUM (255)
            0x75, 0x08,                    //     REPORT_SIZE (8)
            0x95, 0x06,                    //     REPORT_COUNT (6)
            0x81, 0x02,                    //     INPUT (Data,Var,Abs)
            0xc0,                          //   END_COLLECTION (Physical)
        0x05, 0x09,                    //   USAGE_PAGE (Button)
        0x19, 0x01,                    //   USAGE_MINIMUM (Button 1)
        0x29, 0x10,                    //   USAGE_MAXIMUM (Button 14)
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
        0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
        0x75, 0x01,                    //   REPORT_SIZE (1)
        0x95, 0x10,                    //   REPORT_COUNT (16)
        0x81, 0x02,                    //   INPUT (Data,Var,Abs)
    0xc0,                           // END_COLLECTION (Application)
    */  

/////// mouse

    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x02,                    // USAGE (Mouse)
    0xa1, 0x01,                    // COLLECTION (Application)
        0x85, 0x09,                    // Report ID (9) 
        0x09, 0x01,                    //   USAGE (Pointer)
            0xA1, 0x00,                    //   COLLECTION (Physical)
            0x05, 0x09,                    //     USAGE_PAGE (Button)
            0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)
            0x29, 0x03,                    //     USAGE_MAXIMUM (Button 3)
            0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
            0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
            0x75, 0x01,                    //     REPORT_SIZE (1)
            0x95, 0x03,                    //     REPORT_COUNT (3)
            0x81, 0x02,                    //     INPUT (Data,Var,Abs)
            //padding
            0x75, 0x01,                    //     REPORT_SIZE (1)
            0x95, 0x05,                    //     REPORT_COUNT (5)
            0x81, 0x03,                    //     INPUT (Cnst,Var,Abs)

            0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
            0x09, 0x30,                    //     USAGE (X)
            0x09, 0x31,                    //     USAGE (Y)
            //0x09, 0x38,                    //     USAGE (Wheel)
            0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
            0x25, 0x00, 0x04,              //     LOGICAL_MAXIMUM (1k)
            0x75, 0x08,                    //     REPORT_SIZE (8)
            0x95, 0x02,                    //     REPORT_COUNT (2)
            0x81, 0x06,                    //     INPUT (Data,Var,Rel)          

        0xC0,                          //   END_COLLECTION
    0xC0                          // END COLLECTION

@joolswills
Copy link
Member

According to http://blissbox.freeforums.org/blissbox-4-play-on-raspberry-pi-how-to-t398.html the problem is linked to Emulation Station and SDL2 - if SDL2 doesn't recognise it a a joystick it needs to be fixed there (We have a slightly custom SDL2 library, but ideally fixes go upstream).

Perhaps it can be tested with something like https://github.com/Grumbel/sdl-jstest - I believe the sdl2 sources have a joystick test also.

@joolswills
Copy link
Member

Some interesting results when googling the device ;-)

@biscuits99
Copy link

Just a note to say I have one of these, and tried for about an hour to get it to work in RetroPie (resulting post http://blissbox.freeforums.org/post2424.html?p2424) and failed - jstest saw it and detected movement, but Retroarch didnt play at all - even though they have a udev file here:
https://github.com/libretro/retroarch-joypad-autoconfig/blob/master/udev/Bliss-Box-4play.cfg

I love the idea of the blissbox for a retro setup, and am happy to test various configs if that helps anyone (or even post my unit off to someone who is keen to try testing).

@ghost
Copy link
Author

ghost commented Jun 13, 2016

Perhaps we could get the developer to donate a few to the project in exchange for RetroPie integration. I think once support is added, he likely would see a spike in sales for his device. The community really would dig this little device I think.

@ghost
Copy link
Author

ghost commented Jun 13, 2016

@joolswills yeah, I laughed about the name too. Especially with a company called "Bliss Box".

@ulao
Copy link

ulao commented Dec 14, 2016

The 4-play has always worked with the pi you just need to understand linux errors. The problem you are having is fixed with a simple power adapter. Unfortunately the shipping, cost, and need for this is an overkill. Though, an easy item to buy, See this post for details.
http://blissbox.freeforums.org/blissbox-4-play-on-raspberry-pi-how-to-t406.html

@biscuits99
Copy link

@ulao I'm getting "The requested topic does not exist." on that link - can you confirm the address?

@ulao
Copy link

ulao commented Dec 14, 2016

Sorry, fixed.

Also we made a change (not yet released) to the code allowing SDL detection. Mostly I here that is no longer an issue as native linux HID works. Though some emulators still use SDL and there was an issue with it. You can try this code out here http://blissbox.freeforums.org/post2829.html?hilit=sdl#p2829 SDL is working correctly in this version.

Lastly we are also making a button layout system to emulate 360. So now the 4-play can go in to 360 mode and the button config will match up. No it will not show up as xinput just the same layout so you do not need to remap when switching from 4-play to 360. You can follow that here.
http://blissbox.freeforums.org/viewtopic.php?f=58&t=468&hilit=360

@ulao
Copy link

ulao commented Dec 14, 2016 via email

@ulao
Copy link

ulao commented Dec 18, 2016

A new post has been made, this one allows the 4-play to work in sdl2 mode so that ES and RA both work correctly. http://blissbox.freeforums.org/post2919.html#p2919

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants