Releases: OSVR/OSVR-HDK-MCU-Firmware
Reliability improvements in HDK2
Overview:
This build incorporates a design change that should allow proper functioning on all HDK2 devices/systems: both the devices that worked well with 1.99, as well as the ones that didn't work well on 1.99 and instead needed to use 1.98 or earlier. If your display still doesn't work with this firmware, please contact support with the same information requested for version 1.99 debugging.
Minor build warning fixes for all devices are also included that should not affect functioning relative to 1.99.
All devices:
Fixes for some build warnings.
HDK2:
One design change included in 1.99 was moving from polling to interrupts on HDK2-based hardware. While this worked well on the dev systems tested before release, some devices in the field (and eventually, one in our labs) didn't handle it well, seemingly not propagating the interrupt. Manually triggering a poll would often temporarily resolve the issue for setups that didn't work well with 1.99.
So, while this new release keeps all the new display code from 1.99, it switches to infrequently polling the video status, instead of using interrupts from the display bridge, for reliability across the full range of devices/systems in the field. It's still doing the polling in a more light-weight way than 1.98 and earlier versions, so performance shouldn't be impacted negatively compared to 1.99.
(It's still not clear why exactly some propagate the interrupt and some don't, but since the overall firmware family was already set up to be able to support either method, there should be no harm in switching all HDK2 devices over to polling.)
The upgrade bundle files are identical in contents - one is just a self-extracting 7z file while the other is a slightly-larger plain zip. They contain single-step scripts to install any missing Windows drivers and perform the DFU upgrade:
- HDK 1.2 to v1.84 (variant HDK_OLED prior to introducing HDK 1.3 panel-related changes) - including fixing the USB VID/PID if required, and updating the EDID nonvolatile memory
- HDK 1.3/1.4 to this latest release - variant HDK_OLED (including updating the EDID nonvolatile memory, by default)
- Additional script and firmware hex included for the "WirelessOnly" sub-variant that only lists the portrait 1080p@60Hz resolution in EDID for increased compatibility with some wireless video links.
- HDK 2 to this latest release - variant HDK_20_SVR
- Additional script and firmware hex included to revert to version 1.01.
- If this 2.00 release doesn't resolve all issues that required using an older firmware version, contact us.
HDK 2 display overhaul, BNO settings load fix, other small changes
Overview: This release primarily affects the HDK2 and derived devices, improving their reliability and compatibility with nearly all systems and environments, as verified with broad pre-release testing. A fix for loading the stored IMU mode setting (whether or not the mag is used to mitigate gyro drift) that applies to all HDK (1.x and 2) based devices is also included.
Main improvements:
- Re-factoring/rewrite of display-related code for HDK2-based HMDs.
- Fixed handling of HDMI signal acquisition/loss handling for HDK2 (plug/unplug or direct mode app launch/exit).
- Interrupt-based control of the Toshiba chip in the HDK2, improving performance by removing polling overhead.
- Improved display timings and EDID data (in HDK2SVR variant)
- In HDK2/HDK2SVR, inclusion of a truncated version of the text serial number in the EDID ("CT" prefix removed to fit the serial into the 13 characters/bytes available in EDID).
- Troubleshooting and debugging command support added for HDK2.
Fixes these HDK2 issues, among others:
- HDK2 not being recognized as HDCP capable by NVIDIA drivers in direct mode (and thus incompatible with direct mode on mobile - laptop or backpack/small form factor PC - due to NVIDIA driver policy)
- Direct mode present calls failing immediately or after one or more frames are displayed.
- A number of undifferentiated "black screen" issues not due to hardware defects.
- Bright bar appearing on display after HDMI unplug.
Fixes for all HDK-family devices (all devices with BNO070 IMU):
- Fixed loading of setting from EEPROM that determined IMU configuration: game rotation vector (aka "GRV" - set with
#sg1
- default - mag not used) vs. rotation vector (aka "RV" - set with#sg0
- mag used to counter drift and establish fixed north direction).
Additional improvements, all devices:
- git-based version stamp augmentation (for
#?v
and#?f
output) to distinguish releases from dev builds and dev builds from each other. (This build should say "(RELEASE)" after the version number.) - HDK2 serial number reading (from EEPROM) is now cached to reduce calls to the NVM controller and improve reliability.
Known issues:
- A small number of HDK 2-based setups, so far only noticed with NVIDIA GPUs, do not produce or propagate the video sync change interrupt properly, particularly on signal loss. This can result in a bright bar after direct mode app close or HDMI unplug until the HMD is power-cycled, or in rare cases, trouble running direct mode applications (applications will run but screen will remain dark).
- This issue is under investigation. If you experience it, please contact OSVR Support, mentioning "OSVR-HDK-MCU-Firmware issue #17" and including the following information:
- Your hardware and software setup - GPU, GPU driver version, OSVR server version and config file in use, and test applications - testing with the RenderManager Direct3D "Present" demo ("cube room") recommended
- Your HDK2 headset serial number - takes the form
CTxxxxV001yyyyy
, found on the cable going from the HMD to the belt box, or on most units, using the#fsr
command (let us know if that reportsNG
instead of your serial number) - Console log from OSVR-Control (or other serial terminal client) connected to the HDK before and during the undesired behavior.
- Information reported from the
#hr
command (run in each unique condition you can put your device in) - Whether any of the following commands resolved the problem:
#sn
(display on)#sf
(display off)#hp
(trigger HDMI sync status polling)
- In all known cases, reverting to 1.98 can work around this issue.
- This issue is under investigation. If you experience it, please contact OSVR Support, mentioning "OSVR-HDK-MCU-Firmware issue #17" and including the following information:
- Having the USB device powered and plugged in to a Windows 10 PC results in a blue-screen (
WDF_VIOLATION
) in a built-in Microsoft driver at system shutdown/restart, and may interfere with system suspend. Tracked at OSVR/OSVR-Core#389 (This is not a new issue, just has not been listed in the Known Issues section of release notes before.) The workaround is to unplug any one of the following cables before shutting down or restarting: belt box power, USB (from belt box to PC), HMD cable to beltbox. (Belt box power or USB to PC are probably the preferred options due to the durability of those connectors.)
The upgrade bundle files are identical in contents - one is just a self-extracting 7z file while the other is a slightly-larger plain zip. They contain single-step scripts to install any missing Windows drivers and perform the DFU upgrade:
- HDK 1.2 to v1.84 (variant HDK_OLED prior to introducing HDK 1.3 panel-related changes) - including fixing the USB VID/PID if required, and updating the EDID nonvolatile memory
- HDK 1.3/1.4 to this latest release - variant HDK_OLED (including updating the EDID nonvolatile memory, by default)
- Additional script and firmware hex included for the "WirelessOnly" sub-variant that only lists the portrait 1080p@60Hz resolution in EDID for increased compatibility with some wireless video links.
- HDK 2 to this latest release - variant HDK_20_SVR
- Additional script and firmware hex included to revert to version 1.01 (in rare cases, that firmware worked in some environments that 1.98 did not. This 1.99 release should resolve those, contact us if you have an environment in which 1.01 works but neither 1.98 nor 1.99 does.)
USB improvements
All variants:
- Fixes issue with USB serial buffering that could result in a non-responsive HMD after several display transitions or direct-mode app start/exits. (This fixes the known issue listed in the 1.97 release notes)
- General USB and USB serial reliability and performance enhancements.
- Adds
#?h
hardware info console command, currently reporting the status of the brownout-detection fuses.
HDK_OLED variant:
- Compile-time option for an EDID with no portrait mode resolution, for improved compatibility with some wireless display links.
- Note: the WirelessOnly hex below (identified as "1.98.1" in the filename only) contains one commit after the tagged one, to properly indicate its special definition status in a
#?f
firmware info response.
- Note: the WirelessOnly hex below (identified as "1.98.1" in the filename only) contains one commit after the tagged one, to properly indicate its special definition status in a
Improved HDK2 display reliability/compatibility, fixed HDK video status reporting
This release is a substantial improvement in the reliability of display power on/off on HDK2.
Brief list of known fixes, HDK2 specific:
- More reliable detection of new video signals and loss/shutdown of video signal (sleep, direct mode enter, direct mode app exit) - Many fewer "black screen" issues, less need to run "start display" button (which is equivalent to sending
#hi
command through OSVR Control) - Fixed: Now works with DVI sources.
- Fixed: Now works when HDCP gets enabled or if HDMI audio is unmuted (HDMI audio untested, status unknown)
- Fixed: Direct mode now works with AMD cards (previously, would turn off the display after less than 1 second on an RX480) - 16.8.x drivers appear to be required.
- Fixed: Screen now turns off after signal loss without leaving previous image or a horizontal bar growing in brightness.
- Known issue: Some systems may briefly (~1 sec) see a horizontal bar between last full image and full display shutoff - under investigation.
- Improvement: HDMI and display control procedures now properly yield during their required delay steps, permitting the tracker to be serviced, which should keep the tracker and USB responsive during these events.
Fix for HDK 1.x regression in ~1.95: the HDK "Video Status" tool (in particular, the part of the HID input report populated with the video status, which is exposed through OSVR and that it uses to print its messages) had been mistakenly rendered nonfunctional. It is again working for HDK 1.x.
Known issue: After a number of display on/off transitions (including app begin/end in direct mode), if you do not have OSVR-Control open and connected to the virtual serial port, the display will stop responding to the gain and loss of signal and tracker may stop reporting. You can either power-cycle the HMD, or just open OSVR-Control and click "Connect" (it's OK to do this earlier and leave this open) and the display should catch up and complete its state transitions. This may also affect HDK 1.x, to a lesser degree. Mitigations to make this less frequent are in this release, and a full fix is expected for the next one -- but we considered the advancements in this firmware too substantial to hold back on account of this issue.
The upgrade bundle files are identical in contents - one is just a self-extracting 7z file while the other is a slightly-larger plain zip. They contain single-step scripts to install any missing Windows drivers and perform the DFU upgrade:
- HDK 1.2 to v1.84 (variant HDK_OLED prior to introducing HDK 1.3 panel-related changes)
- (including fixing the USB VID/PID if required, and updating the EDID nonvolatile memory)
- HDK 1.3/1.4 to this latest release - variant HDK_OLED (including updating the EDID nonvolatile memory, by default)
- HDK 2 to this latest release - variant HDK_20_SVR
Updated Sensics EDID for HDK 2-variant firmware
The primary user-facing change in this release is the addition of an HDK_20_SVR
variant, for HDK 2-related firmwares using Sensics identifiers. The only current difference is that this variant has different EDID data: its display identifies as SVR1019, using the officially-registered "SVR" PNPID for Sensics and a whitelisted PNPID/VID pair for Direct Mode with NVIDIA. It also fixes display size and bounds parameters in the EDID data.
(The plain HDK2 variant's original EDID from the 1.01 firmware with Razer-mandated unofficial PNPID AUO is unmodified and remains in the code as its own variant, though as its utility is limited and to avoid confusion, a hex file for it was not built and uploaded to this release.)
An additional serial command, #?f
, for additional details about the firmware configuration, was also added. Other than this, no changes were made that affect non-HDK2-related variants.
The upgrade bundle files are identical in contents - one is just a self-extracting 7z file while the other is a slightly-larger plain zip. They contain single-step scripts to install any missing Windows drivers and perform the DFU upgrade:
- HDK 1.2 to v1.84 (variant HDK_OLED prior to introducing HDK 1.3 panel-related changes)
- (including fixing the USB VID/PID if required, and updating the EDID nonvolatile memory)
- HDK 1.3/1.4 to this latest release - variant HDK_OLED (including updating the EDID nonvolatile memory, by default)
- HDK 2 to this latest release - variant HDK_20_SVR
Re-unified source, HDK2 support, side-by-side fixes, etc.
This release contains a refactoring of the firmware and the re-unification of the HDK2 firmware with the main firmware source base.
User-facing fixes included in this release over 1.94 include:
- More consistent handling of side-by-side mode on the HDK 1.x.
- Improved USB product name and serial number reporting.
- Fixes imported from upstream (ASF) related to USB enumeration.