eth0fox
Internet VulPine
• 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 ;)
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.
35bd:01010x26 - Get serial numberExample: 26
Response: 26 42 53 31 33 33 37 36 39 34 32 30 36 39 (ASCII: 'BS13376942069')
0x2a - Get firmware versionExample: 2a
Response: 2a 30 2e 32 2e 32 32 (ASCII: '0.2.22')
0x46 - Set Fan SpeedExample: f6 64 sets to 100%.
Response: 24
Official application does not allow setting below 0x28 (40%)
0x49 - Set Display BrightnessExample: 49 00 06 sets to lowest brightness.
Response: 24
Official application keeps values in range: 0x006 - 0x21E.
0x4c - Set LED ColorExample: 4c ff 00 ff sets to #ff00ff (magenta)
Response: 24
0x5a - Get Usage statsExample: 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)
0x23 - Status reportThis, 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
The format seems to have changed over time with firmware updates. On firmware 0.3.18 it looks like this
23181eb43a9000000229682fa243b3ff1c4291241a42010a431b0200000000000000000000000000000000000000000000000000000000000000000000000000
^^ (appears to be 18 if not on head, 1b or 1c if on head)
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);
Switching between 90/75hz involves multiple steps, of which I've been able to figure out is:
5088x2544@75 display mode that becomes preferred (as the 90hz display mode is still present in the EDID)EDID: 00ffffffffffff0009273412d2040000ff200104a5000078007875aa553bb22910505400000001010101010101010101010101010101000000100000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000fc004265796f6e640a202020202020015b70207907002209141ef50a88ff0eff003f801f007f071b000e8001007e00073a029281000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008690
{
"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
},
[...]
EDID: 00ffffffffffff0009273412d2040000ff200104a5000078007875aa553bb22910505400000001010101010101010101010101010101000000100000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000fc004265796f6e640a202020202020015b702079070022092839540f88df137f003f801f00ef0917000e8001001ef50a08ff0eff003f801f007f071b000e8001007e00073a0292810008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e190
{
"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)