2025-02-09-bsb-hid.md - Notepad

Bigscreen Beyond HID Protocol

• filed under protocols, notes, usb, hid, vr, bigscreen beyond, protocols

Caution!

Everything in this document was obtained through reverse engineering. The information has not been reviewed by Bigscreen or any of its employees. If you choose to use any of the information below, I do not accept any respnsibility. If you break your expensive headset, thats on you. Furthermore, all the information in here was tested on my BSB1. There may be differences between the BSB1 and the BSB2/2e. If you would like me to look into the BSB2e, get in touch regarding getting my face scan ;)

Protocol Basics

Most of the features implemented in the BeyondHID application (the little ImGUI utility that comes with the drivers) use USB HID Feature Reports with report ID 0, sent to a specific 'Beyond' USB device.

All commands are sent in a 64-byte buffer, the first of which is a command ID, followed by 63-bytes of data. Most of which will usually be zero.

Device ID

  • Bigscreen Beyond: 35bd:0101

Commands

0x26 - Get serial number

Example: 26

Response: 26 42 53 31 33 33 37 36 39 34 32 30 36 39 (ASCII: 'BS13376942069')

0x2a - Get firmware version

Example: 2a

Response: 2a 30 2e 32 2e 32 32 (ASCII: '0.2.22')

0x46 - Set Fan Speed

Example: f6 64 sets to 100%.

Response: 24

Official application does not allow setting below 0x28 (40%)

0x49 - Set Display Brightness

Example: 49 00 06 sets to lowest brightness.

Response: 24

Official application keeps values in range: 0x006 - 0x21E.

0x4c - Set LED Color

Example: 4c ff 00 ff sets to #ff00ff (magenta)

Response: 24

0x5a - Get Usage stats

Example: 5a 00 (???) Response: 5a 7f 46 (???)

Example: 5a 01 (get total usage time) Response: 5a 18 01 (0x118 = 280 = 2800 minutes = 46h40m)

Example: 5a 02 (get longest session) Response: 5a 0e (0x0e = 14 = 140 minutes, 2h20m)

Notifications

0x23 - Status report

This, unlike the other commands is sent automatically from the headset to the PC every 5 seconds. It does not need to be requested

I'm not entirely sure what the output format is on this. I think it's related to the 'log.txt' file placed next to BeyondHID. Here's a few examples

2314000000d00000021faefc9f430038a6bc0038a6bc000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2314000000d80000021eaefc9f430038a6bc0038a6bc000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2314173400200000022ddfa9a34385222e420f8f3942000000000000000000000000000000000000000000000000000000000000000000000000000000000000
231417340808000002280fd2a34385222e42a7fd3042000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Example code

Set the headset RGB LED to #FF0000 (full red)

let [dev] = await navigator.hid.requestDevice({
    filters: [
        {
            vendorId: 0x35bd, // Bigscreen, Inc. 
            productId: 0x0101  // Beyond
        }
    ],
});
console.log(dev);
await dev.open();

let data = new Uint8Array(64);
data[0] = 0x4c;
data[1] = 0xFF;
data[2] = 0x00;
data[3] = 0x00;
await dev.sendFeatureReport(0, data);

Display mode switching

Switching between 90/75hz involves multiple steps, and the only one I've been able to figure out is that it changes the Lighthouse configuration of the built in Tundra Tracker.

If you just do this, it will cause SteamVR to render at the resolution, but the headset will remain at the old resolution, meaning your video feed will be either cut off or shoved in one corner.

Example, 90hz

{
    "manufacturer": "Bigscreen",
    "model_number": "Beyond",
    "revision": 0.12,
    "device": {
        "eye_target_height_in_pixels": 1920,
        "eye_target_width_in_pixels": 1920,
        "first_eye": "eEYE_LEFT",
        "last_eye": "eEYE_RIGHT",
        "num_windows": 1
    },
[...]

Example, 75hz

{
    "manufacturer": "Bigscreen",
    "model_number": "Beyond",
    "revision": 0.12,
    "device": {
        "eye_target_height_in_pixels": 2544,
        "eye_target_width_in_pixels": 2544,
        "first_eye": "eEYE_LEFT",
        "last_eye": "eEYE_RIGHT",
        "num_windows": 1
    },
[...]

See also: https://github.com/ValveSoftware/openvr/wiki/The-JSON-File-(Lighthouse-Devices)