Integration
Bliss-Box API (Application Programming Interface)
The 4-Play and the Gamer-Pro products have both a software and hardware Interface that can be used to communicate with the controller at both high and low levels. USB is a great solution, but it does have limitations. Also, the HID USB driver is even more limited in the sense of features vs a driver-based USB implementation. Bliss-Box products use HID for convenience, as dealing with drivers was never any fun, but also have an API for advanced features. The mechanism for the API is in two parts (software and hardware).
The Software interface uses USB control transfers. This does still rely on the USB HID driver but allows data to be transferred that HID does not allow. For example, but not limited to; Pressure buttons, LCD and memory pack data exchange, faster poll rates, and direct native talk to the controller. Bliss-Box has developed a software application that shows how this works. The application is an open source application that demos most all the API has to offer. The source can be found here and the application can be downloaded here.
For the documented API see the following link.
List of projects using the API (If you would like to be added contact us)
https://www.retroarch.com/
http://lusspace.free.fr/
Low Level API – (Only available on 3.0 for 4-play and GP)
LLAPI is a communication protocol developed internally by Bliss-Box LLC for Bliss-Box products. It has recently been made publicly available. The firmware only source code is available for this interface and is released under GPL v2 found here. This is not to be confused with LLAPI (Low Latency API) a library developed for MiSTer cores to interact with Bliss-Box’s LLAPI protocol.
The LLAPI uses the already available USB lines. To invoke the API, simply bring both D- and D+ high with external or internal pull ups. This condition does not cause any hardware impeding conditions to existing USB hardware so it’s safe to use in both cases. When host device detects the condition, it will go in to bridge mode. So this can be asserted via software or hardware with a connected device.
Once in bridge mode, other devices using this protocol can send and receive data.
Timing Chart
List of projects using the LLAPI (If you would like to be added contact us).
Mister LLAPI – A core specific driver that communicates with Bliss-Box products.
BlisSTer – Bliss-Box’s very own MiSTer add-on.
Bridge - Bliss-Box's adapater that communicates with many consoels.
Blender - Bliss-Box's adapater that mixes and adjuts controller inputs.
A.I.R - Bliss-Box's wirelss adapter extention.
LLAOD/LAMMA An attempt to clone the BlisSTer.
Current support offered in the Bliss-Box adapters.
Command | function | parameters | notes |
0x00 | CONTROLLER_POLL | Tells the connected controller to poll | |
0x01 | GET_CONTROLLER_STATUS | A 0x00 is require before this command is used | |
0x02 | GET_PRESSURE_STATUS | returns 12 button pressure levels. | |
0x03 | GET_QUICK_STATES | Bitmask of states | |
0x04 | RSET_DEVICE | reserved | |
0x05 | reserved | ||
0x06 | reserved | ||
0x07 | reserved | ||
0x08 | reserved | ||
0x09 | GET_LAST_CHECKSUM | this is a xor of the 13 byes last read. | |
0x11 | RUBMLE_CONST_START_FROM_PARMS | Must set parms first in 0x1C | |
0x12 | RUBMLE_CONST_END | ||
0x14 | RUBMLE_SINE_START_FROM_PARMS | Must set parms first in 0x1C | |
0x18 | RUBMLE_SINE_END | ||
0x1A | RUBMLE_CONST_JOLT | ||
0x1B | RUBMLE_SINE_JOLT | ||
0x1C | RUBMLE | duration, level | Sets Rumble parameters. |
0x20 | SET_MODES | bitmask | Bitmask of modes link. |
0x21 | GET_MODES | returns Bitmask of modes link. | |
0x22 | SET_MAPPER | 24 bytes | Followed by 24 bytes each a button |
0x23 | SET_PLAYER | ID (1,2,3,4) | sets player ID |
0x24 | SET_ALT_MAP | ALT_MAP | sets the alternative mapping |
Bitmask of States
bit 0 | Gun Trigger |
bit 1 | Gun Light |
bit 2 | reserved |
bit 3 | reserved |
bit 4 | reserved |
bit 5 | reserved |
bit 6 | reserved |
bit 7 | reserved |
GET_CONTROLLER_STATUS return info.
Byte | Data |
0 | Controller ID |
1 | Buttons 0-7 |
2 | Buttons 8-15 |
3 | Buttons 16-23 |
4 | Analog X MAIN |
5 | Analog Y MAIN |
6 | Analog Z MAIN |
7 | Analog X Secondary |
8 | Analog Y Secondary |
9 | Analog Z Secondary |
10 | Slider |
11 | Dial |
12 | HAT |
GET_PRESSURE_STATUS return info.
Byte | Data |
0 | Player ID Pressure (0 – 255) |
1 | Button R Pressure (0 – 255) |
2 | Button L Pressure (0 – 255) |
3 | Button U Pressure (0 – 255) |
4 | Button D Pressure (0 – 255) |
5 | Button /\ Pressure (0 – 255) |
6 | Button 0 Pressure (0 – 255) |
7 | Button x Pressure (0 – 255) |
8 | Button [] Pressure (0 – 255) |
9 | Button L1 Pressure (0 – 255) |
10 | Button R1 Pressure (0 – 255) |
11 | Button L2 Pressure (0 – 255) |
12 | Button R2 Pressure (0 – 255) |
alt mappings options
ALT_MAP | 0 – default
2 - reserved 4 - Main Alt MAP 6 - reserved |
GET_MODES Bitmap reply.
Bit | Meaning |
0 | autopause (read only) |
1 | atl map bit 0 (3.0) |
2 | atl map bit 1 (3.0) |
3 | Hotswap Disabled |
4 | UDLR mode |
5 | Analog to D-pad (2.0) / Disable all combos (3.0) |
6 | Autopause Disabled |
7 | d-pad only mode (read only) |
Error replies
Error code | type | notes |
0xF1 | ERROR_UNKNOWN_COMMAND | Command was not understood |
0xFF | ERROR_NO_COMMAND | Error form the Bliss-Box side, retry, check controller. |
0xFE | ERROR_NOT_READY |