Skip to content
This repository has been archived by the owner on Aug 20, 2024. It is now read-only.

Releases: WOA-Project/SurfaceDuo-Drivers

Version 2310.70 - Andromeda 🌌🌃🌠

22 Oct 22:37
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2310.70 (Andromeda)

General information

**Released:** 10/22/2023 11:59 PM UTC+1

Quality: Preview

You can view compatibility for this release, along with important information and what works, and what doesn't at this link: https://github.com/WOA-Project/SurfaceDuo-Guides/blob/main/Status.md

Important information

- ⚠️ This version of the drivers needs to be paired with UEFI version greater than or equal to 2310.70.

  • ⚠️ For users who are updating from an earlier release than version 2301.93, please reinstall.

  • ⚠️ If you need dual boot, you will have to make your own image. Please follow this guidance: https://github.com/WOA-Project/SurfaceDuo-Guides/blob/main/DualBoot.md

  • ⚠️ You need to backup your original boot image for OTAs to work with Android. When you get an OTA, you will want to revert your boot image for the update to work, or you'll have to use an official OTA recovery package.


▶️ Install Surface Duo (1st Gen) UEFI and Drivers for Windows from scratch (Clean Installation)

▶️ Install Surface Duo 2 UEFI and Drivers for Windows from scratch (Clean Installation)

▶️ Update from an older version of Surface Duo UEFI and Drivers (both got updated with v2310.70)


Release notes

Surface Duo (1st Gen)

What's new?

  • We made some improvements in order to enable more consistent single screen mode posture experiences. There is still some rough edges, but the experience is drastically better
IMG_4563.MOV
  • We also made further changes to ensure the apps you use and love open on the screen you opened them from. This is still beta quality and sometimes apps may still open on the wrong screen. again, room for improvements
IMG_4566.MOV
  • We fixed an issue with Windows 11 ShyTaskbar (compact taskbar) preventing from maximizing fully apps on the second display as well

photo_2023-10-23_00-35-12

  • We also fixed numerous issues impacting the use of phone calls on latest Canary channel insider builds

photo_2023-10-23_00-35-19

  • The watermark also now only displays in a single screen, and ShyTaskbar enablement is more reliable

photo_2023-10-23_00-35-25

  • We fixed an issue where the device serial number reported in settings (& firmware) would not match the device serial number, as a result, the surface app is now able to automatically register your device with your microsoft account and give status on your warranty information

photo_2023-10-23_00-35-30

  • As part of the serial number changes, we also enabled roaming of device status across every device with the surface app installed, as you can see, here is shown another Surface Duo registered and charging

photo_2023-10-23_00-35-36
photo_2023-10-23_00-35-42

  • We fixed some issues that impacted accurate battery status reporting, we also fixed an issue impacting the use of specific debug utilities to view battery information on Surface Duo devices, we may release an utility another day as well for public consumption

  • General system stability improvements to enhance the user's experience.

Important! New definition files are present, here's a summary of how to proceed:

- I am running a build < 17763, you are unsupported.

  • I am running a build < 18362, use Driver Updater with \definitions\Desktop\ARM64\epsilon_rs5.txt

  • I am running a build < 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ti.txt

  • I am running a build >= 25905, use Driver Updater with \definitions\Desktop\ARM64\epsilon.txt

Known issues

- Dialer and the underlying phone stack are not available under Gallium Semester OS builds (Canary Channel)

  • Installing Gallium Semester Insider builds may lead to a black screen on second boot of the OS, simply press the power button to continue.

  • Booting Windows 10 18362/18363 will lead to "static screen" effects on the right display, much like driver releases from last year did on any version of Windows. A fix is being worked on for the next release.

  • The TPM driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • The Posture driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • Enhanced auto rotation is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • Brightness control is glitchy on both displays.

  • On device speakers are not functional.

  • Dongles are not detected correctly when plugged into the USB Type-C port.

  • Battery charging remains unstable and not recommended.

  • Updating drivers may lead to weird configurations if done on old driver releases.

  • MAC addresses do not reflect the real addresses asigned to the device.

  • BitLocker drive encryption is not available.

  • USB dongles that are not externally powered may not currently work.

  • USB-C Billboard devices will not currently work.

  • External Display Stream support will not currently work.

  • Additional information provided by the posture sensor is currently not available for public consumption. This includes peek events.

  • Digitizers will not react to the device being folded over.

  • Displays will not react to the device being folded over most of the time.

  • Physical device data is incorrect.

  • Digitizers aren't calibrated correctly.

  • Flipping the device, however, is not smooth.

  • Users upgrading from releases older than the January ones may want to clean install again.

  • Booting Windows 10 18362/18363 with Secure Boot enabled is not currently supported and will result in a broken installation.

  • In some cases, booting the UEFI image may lead to "static screen" effects on the left display. Please do not force reboot the device as it may interrupt the installation process, if ongoing, and instead please wait a few minutes.

  • Windows Recovery environment lacks drivers unless Windows has performed a Feature Update at least once.

  • sRGB is not available currently, and displays will not react to ICC profiles being applied.

Surface Duo 2

What's new?

  • Surface Duo 2 is still a Proof of Concept (PoC), don't expect much.

Accessing Foldable Sensors from your applications

In order to currently access the sensor data given by the foldable sensors, you need to use the following apis:

  • Windows.Devices.Sensors.HingeAngleSensor*
  • Windows.Internal.Devices.Sensors.FlipSensor* (2)
  • Windows.Internal.System.TwoPanelHingePostureDevice* (2)

(2): These apis require the use of an externally sourced winmd available from https://github.com/ADeltaX/InternalWinMD/blob/master/%23winmd/Windows.Internal.Devices.Sensors.winmd

In the future, further apis will be functional (specifically under the Windows.System.Preview namespace). Consider this an early "thing".

The following API may be used to determine if your app is used on a dual screen device: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.windowingenvironment.getdisplayregions?view=winrt-22621

The following API may be used to determine on which display region your app is currently being shown: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.getdisplayregions?view=winrt-22621

The following API may be used to move your application to the other display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmoverelativetodisplayregion?view=winrt-22621

THe following API may be used to move your application to a specific display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmovetodisplayregion?view=winrt-22621

The following API may be used for spanning purposes: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestsize?view=winrt-22621

The Windowing Environment for Windows Desktop editions (outside of tablet mode) is Overlapped. Tiled is used for Tablet Mode and Windows Core OS's ModernPC.

Code Samples

#include <iostream>
#include <windows.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Internal.Devices.Sensors.h>
#include <winrt/Windows.Internal.System.h>
#include <winrt/Windows.System.Preview.h>
#include <winrt/Windows.UI.WindowManagement.h>
#include <winrt/Windows.Foundation.Collections.h>

using namespace std;
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Internal::Devices::Sensors;
using namespace Win...
Read more

Version 2310.45 - Merlin 🧙‍♂️

14 Oct 22:09
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2310.45 (Merlin)

General information

**Released:** 10/14/2023 11:00 PM UTC+1

Quality: Preview

You can view compatibility for this release, along with important information and what works, and what doesn't at this link: https://github.com/WOA-Project/SurfaceDuo-Guides/blob/main/Status.md

Important information

- ⚠️ This version of the drivers needs to be paired with UEFI version greater than or equal to 2310.45.

  • ⚠️ For users who are updating from an earlier release than version 2301.93, please reinstall.

  • ⚠️ If you need dual boot, you will have to make your own image. Please follow this guidance: https://github.com/WOA-Project/SurfaceDuo-Guides/blob/main/DualBoot.md

  • ⚠️ You need to backup your original boot image for OTAs to work with Android. When you get an OTA, you will want to revert your boot image for the update to work, or you'll have to use an official OTA recovery package.


▶️ Install Surface Duo (1st Gen) UEFI and Drivers for Windows from scratch (Clean Installation)

▶️ Install Surface Duo 2 UEFI and Drivers for Windows from scratch (Clean Installation)

▶️ Update from an older version of Surface Duo UEFI and Drivers (both got updated with v2310.45)


Release notes

Surface Duo (1st Gen)

What's new?

  • Preliminary WIP support for Surface Dial

  • Addresses an issue where the phone may take longer to shutdown/reboot or show a bugcheck screen during shutdown/reboot

  • Addresses an issue preventing Operating System upgrades from working for OS flights in the Windows Insider Canary Channel

  • General system stability improvements to enhance the user's experience.

Important! New definition files are present, here's a summary of how to proceed:

- I am running a build < 17763, you are unsupported.

  • I am running a build < 18362, use Driver Updater with \definitions\Desktop\ARM64\epsilon_rs5.txt

  • I am running a build < 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ti.txt

  • I am running a build >= 25905, use Driver Updater with \definitions\Desktop\ARM64\epsilon.txt

Known issues

- Dialer and the underlying phone stack are not available under Gallium Semester OS builds (Canary Channel)

  • Installing Gallium Semester Insider builds may lead to a black screen on second boot of the OS, simply press the power button to continue.

  • Booting Windows 10 18362/18363 will lead to "static screen" effects on the right display, much like driver releases from last year did on any version of Windows. A fix is being worked on for the next release.

  • The TPM driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • The Posture driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • Enhanced auto rotation is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • Brightness control is glitchy on both displays.

  • On device speakers are not functional.

  • Dongles are not detected correctly when plugged into the USB Type-C port.

  • Battery charging remains unstable and not recommended.

  • Updating drivers may lead to weird configurations if done on old driver releases.

  • MAC addresses do not reflect the real addresses asigned to the device.

  • BitLocker drive encryption is not available.

  • USB dongles that are not externally powered may not currently work.

  • USB-C Billboard devices will not currently work.

  • External Display Stream support will not currently work.

  • Additional information provided by the posture sensor is currently not available for public consumption. This includes peek events.

  • Digitizers will not react to the device being folded over.

  • Displays will not react to the device being folded over most of the time.

  • Physical device data is incorrect.

  • Digitizers aren't calibrated correctly.

  • Flipping the device, however, is not smooth.

  • Users upgrading from releases older than the January ones may want to clean install again.

  • Booting Windows 10 18362/18363 with Secure Boot enabled is not currently supported and will result in a broken installation.

  • In some cases, booting the UEFI image may lead to "static screen" effects on the left display. Please do not force reboot the device as it may interrupt the installation process, if ongoing, and instead please wait a few minutes.

  • Windows Recovery environment lacks drivers unless Windows has performed a Feature Update at least once.

  • sRGB is not available currently, and displays will not react to ICC profiles being applied.

Surface Duo 2

What's new?

  • Merges most generic changes from Surface Duo (1st Gen) to Surface Duo 2

  • Resolves an issue where touch would not be functional in the most recent releases

  • Updates some system drivers to their latest october versions

  • General system stability improvements to enhance the user's experience.

  • Surface Duo 2 is still a Proof of Concept (PoC), don't expect much.


Accessing Foldable Sensors from your applications

In order to currently access the sensor data given by the foldable sensors, you need to use the following apis:

  • Windows.Devices.Sensors.HingeAngleSensor*
  • Windows.Internal.Devices.Sensors.FlipSensor* (2)
  • Windows.Internal.System.TwoPanelHingePostureDevice* (2)

(2): These apis require the use of an externally sourced winmd available from https://github.com/ADeltaX/InternalWinMD/blob/master/%23winmd/Windows.Internal.Devices.Sensors.winmd

In the future, further apis will be functional (specifically under the Windows.System.Preview namespace). Consider this an early "thing".

The following API may be used to determine if your app is used on a dual screen device: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.windowingenvironment.getdisplayregions?view=winrt-22621

The following API may be used to determine on which display region your app is currently being shown: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.getdisplayregions?view=winrt-22621

The following API may be used to move your application to the other display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmoverelativetodisplayregion?view=winrt-22621

THe following API may be used to move your application to a specific display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmovetodisplayregion?view=winrt-22621

The following API may be used for spanning purposes: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestsize?view=winrt-22621

The Windowing Environment for Windows Desktop editions (outside of tablet mode) is Overlapped. Tiled is used for Tablet Mode and Windows Core OS's ModernPC.

Code Samples

#include <iostream>
#include <windows.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Internal.Devices.Sensors.h>
#include <winrt/Windows.Internal.System.h>
#include <winrt/Windows.System.Preview.h>
#include <winrt/Windows.UI.WindowManagement.h>
#include <winrt/Windows.Foundation.Collections.h>

using namespace std;
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Internal::Devices::Sensors;
using namespace Windows::Internal::System;
using namespace Windows::System::Preview;
using namespace Windows::UI::WindowManagement;
using namespace Windows::Foundation::Collections;

VOID OnFoldSensorReadingChanged(FoldSensor const&, FoldSensorReadingChangedEventArgs const& args)
{
	try {
		printf("Fold sensor state changed.\n");
		switch (args.Reading().GestureState())
		{
		case GestureState::Started:
			std::cout << "Fold started\n" << std::endl;
			break;
		case GestureState::Completed:
			std::cout << "Fold stopped\n" << std::endl;
			break;
		case GestureState::Cancelled:
			std::cout << "Fold cancelled\n" << std::endl;
			break;
		case GestureState::Unknown:
			std::cout << "Fold unknown\n" << std::endl;
			break;
		}

		for (auto panel : args.Reading().ContributingPanel())
		{
			printf("Panel: %s\n", to_string(panel).c_str());
		}
		
		std::cout << "Initial angle " << args.Reading().InitialAngle() << std::endl;
		std::cout << "Final angle " << args.Reading().FinalAngle() << std::endl;
		
		switch (args.Reading().FoldType())
		{
		case FoldType::Closing:
			std::cout << "Fold Closing\n" << std::endl;
			break;
		case FoldType::Opening:
			std::cout << "Fold Opening\n" << std::endl;
			break;
		case FoldType::NotDetected:
			std::cout << "Fold NotDetected\n" << std::endl;
			break;
		}
	}
	catch (...) {}
}

VOID PrintDetails(TwoPanelHingedDevicePostureReading const& args)
{
	try {
		std::cout << "Panel1 " << args.Panel1Id().c_str() << "\n" << std::endl;
		std::cout << "Panel2 " << args.Panel2Id().c_str() << "\n" << std::endl;

		std::cout << "Panel1 Orientation " << (int)args.Panel1Orientation() << "\n" << std::endl;
		std::cout << "Panel2 Orientation " << (int)args.Panel2Orientation() << "\n" << std::endl;

		switch (args.HingeState())
		{
		case Windows::Internal::System::HingeState::Unknown:
			std::cout << "Hinge1State Unknown\n" << std::en...
Read more

Version 2310.1 - Sunflower 🌻

01 Oct 22:07
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2310.1 (Sunflower)

General information

**Released:** 09/24/2023 11:00 PM UTC+1

Quality: Preview

You can view compatibility for this release, along with important information and what works, and what doesn't at this link: https://github.com/WOA-Project/SurfaceDuo-Guides/blob/main/Status.md

Important information

- ⚠️ This version of the drivers needs to be paired with UEFI version greater than or equal to 2309.80.


▶️ Install Surface Duo 1 UEFI and Drivers for Windows from scratch (Clean Installation)

▶️ Install Surface Duo 2 UEFI and Drivers for Windows from scratch (Clean Installation)

▶️ Update from an older version of Surface Duo UEFI and Drivers (both got updated with v2310.1)


Release notes

Surface Duo 1

What's new?

  • Hopefully fixes an issue where some people had a bugcheck (BOUND_IMAGE_UNSUPPORTED) with qcbattminiclass installed. Please let us know if you still get this issue because we were never able to reproduce that one. If you get this issue on clean installs, please remove the qcbattminiclass driver temporarily for installation.

  • We fixed the issue that prevented Gallium Windows builds from cleaninstalling with sensor drivers installed. For now you may get a black screen on the second boot, but you can press the power button when you do and the installation will continue. We hope to address further of the issues linked to this with a later release. For now this means, epsilon_ga.txt is no more. Use epsilon.txt :) (Note: you may need to wait 15s before it starts to really work and show just a moment, or plug in a charger/unplug it, but it will work, do not long press power or you'll reboot the device and get into a broken state)

  • Added support for servicing UFS storage chip firmwares in the Operating System

  • Introducing the Thermal Framework Proxy driver stack, this aims to solve a few issues with thermals and efficiency when the device is closed all the way, folded all the way, or fully open flat. More improvements regarding thermals are expected soon.

  • Introducing the driver to enable eSIM module firmware updates under Windows

  • Updates the following drivers to version 1.0.2020.0:

    • Qualcomm Audio Miniport Driver for OEMB1 devices
    • Qualcomm Audio Sound Listening Model for Voice Activation System Service for OEMB1 devices
    • Qualcomm Audio System Configuration Package for OEMB1 devices
    • Qualcomm Audio Miniport Configuration Package for OEMB1 devices
    • Qualcomm Sensor Configuration Package for OEMB1 devices
    • Qualcomm Modem Configuration Package for OEMB1 devices
    • Qualcomm Audio DSP Extension Package for OEMB1 devices
    • Qualcomm Compute DSP Extension Package for OEMB1 devices
    • Qualcomm Modem DSP Extension Package for OEMB1 devices
    • Qualcomm Sensor DSP Extension Package for OEMB1 devices
    • Qualcomm Trusted Runtime Environment Driver for OEMB1 devices
    • Qualcomm Adreno 640 Driver for OEMB1 devices (Desktop & WCOS)
    • Qualcomm Subsystem Manager Driver
    • Qualcomm Atheros Bluetooth Driver for OEMB1 devices
    • Qualcomm Atheros Bluetooth Configuration Package for OEMB1 devices
    • Qualcomm Atheros Bluetooth Subdevice Extension Package
    • Qualcomm Atheros WLAN Driver for OEMB1 devices
  • General system stability improvements to enhance the user's experience.

Important! New definition files are present, here's a summary of how to proceed:

- I am running a build < 17763, you are unsupported.

  • I am running a build < 18362, use Driver Updater with \definitions\Desktop\ARM64\epsilon_rs5.txt

  • I am running a build < 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ti.txt

  • I am running a build >= 25905, use Driver Updater with \definitions\Desktop\ARM64\epsilon.txt

Known issues

- Dialer and the underlying phone stack are not available under Gallium Semester OS builds (Canary Channel)

  • Installing Gallium Semester Insider builds may lead to a black screen on second boot of the OS, simply press the power button to continue.

  • Booting Windows 10 18362/18363 will lead to "static screen" effects on the right display, much like driver releases from last year did on any version of Windows. A fix is being worked on for the next release.

  • The TPM driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • The Posture driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • Enhanced auto rotation is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • Brightness control is glitchy on both displays.

  • On device speakers are not functional.

  • Dongles are not detected correctly when plugged into the USB Type-C port.

  • Battery charging remains unstable and not recommended.

  • Updating drivers may lead to weird configurations if done on old driver releases.

  • MAC addresses do not reflect the real addresses asigned to the device.

  • BitLocker drive encryption is not available.

  • USB dongles that are not externally powered may not currently work.

  • USB-C Billboard devices will not currently work.

  • External Display Stream support will not currently work.

  • Additional information provided by the posture sensor is currently not available for public consumption. This includes peek events.

  • Digitizers will not react to the device being folded over.

  • Displays will not react to the device being folded over most of the time.

  • Physical device data is incorrect.

  • Digitizers aren't calibrated correctly.

  • Flipping the device, however, is not smooth.

  • Users upgrading from releases older than the January ones may want to clean install again.

  • Booting Windows 10 18362/18363 with Secure Boot enabled is not currently supported and will result in a broken installation.

  • In some cases, booting the UEFI image may lead to "static screen" effects on the left display. Please do not force reboot the device as it may interrupt the installation process, if ongoing, and instead please wait a few minutes.

  • Windows Recovery environment lacks drivers unless Windows has performed a Feature Update at least once.

  • sRGB is not available currently, and displays will not react to ICC profiles being applied.

Surface Duo 2

What's new?

  • Nothing New. Surface Duo 2 is still a Proof of Concept (PoC), don't expect much.

Accessing Foldable Sensors from your applications

In order to currently access the sensor data given by the foldable sensors, you need to use the following apis:

  • Windows.Devices.Sensors.HingeAngleSensor*
  • Windows.Internal.Devices.Sensors.FlipSensor* (2)
  • Windows.Internal.System.TwoPanelHingePostureDevice* (2)

(2): These apis require the use of an externally sourced winmd available from https://github.com/ADeltaX/InternalWinMD/blob/master/%23winmd/Windows.Internal.Devices.Sensors.winmd

In the future, further apis will be functional (specifically under the Windows.System.Preview namespace). Consider this an early "thing".

The following API may be used to determine if your app is used on a dual screen device: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.windowingenvironment.getdisplayregions?view=winrt-22621

The following API may be used to determine on which display region your app is currently being shown: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.getdisplayregions?view=winrt-22621

The following API may be used to move your application to the other display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmoverelativetodisplayregion?view=winrt-22621

THe following API may be used to move your application to a specific display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmovetodisplayregion?view=winrt-22621

The following API may be used for spanning purposes: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestsize?view=winrt-22621

The Windowing Environment for Windows Desktop editions (outside of tablet mode) is Overlapped. Tiled is used for Tablet Mode and Windows Core OS's ModernPC.

Code Samples

#include <iostream>
#include <windows.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Internal.Devices.Sensors.h>
#include <winrt/Windows.Internal.System.h>
#include <winrt/Windows.System.Preview.h>
#include <winrt/Windows.UI.WindowManagement.h>
#include <wi...
Read more

Version 2309.80 - Monza

24 Sep 22:44
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2309.80 (Monza)

General information

**Released:** 09/24/2023 11:00 PM UTC+1

Quality: Preview

You can view compatibility for this release, along with important information and what works, and what doesn't at this link: https://github.com/WOA-Project/SurfaceDuo-Guides/blob/main/Status.md

Important information

- ⚠️ This version of the drivers needs to be paired with UEFI version greater than or equal to 2309.80.


▶️ Install Surface Duo 1 UEFI and Drivers for Windows from scratch (Clean Installation)

▶️ Install Surface Duo 2 UEFI and Drivers for Windows from scratch (Clean Installation)

▶️ Update from an older version of Surface Duo UEFI and Drivers (both got updated with v2309.80)


⚠️ An issue was found where some people may be getting a bugcheck during clean installations/new installations at the end of the first phase of setup with the following code (BOUND_IMAGE_UNSUPPORTED) and if you are using a Windows build that does not come from the Canary Channel at the moment.

For best results, please either use a Canary Channel Windows insider build, or, please edit the epsilon.txt file located under \definitions\Desktop\ARM64\epsilon.txt, remove the line with \components\QC8150\Device\DEVICE.SOC_QC8150.EPSILON_BATTERY, save the file; Use this newly edited file to install drivers using driverupdater on a build of your choice that is not a canary channel insider build. Once you configured your device and are on the desktop, you will notice the battery is not detected. Please then reboot your device into mass storage, as if you were following the update guide, and then rerun driverupdater, but with the original \definitions\Desktop\ARM64\epsilon.txt file (the one with the line containing \components\QC8150\Device\DEVICE.SOC_QC8150.EPSILON_BATTERY).

We are sorry for the inconvenience caused by this uncaught issue and hope to provide a fix on the weekend within reasonable delays.

 

Release notes

Surface Duo 1

What's new?

  • Charging. (That's all)

  • The Surface App now comes preinstalled

  • The Surface App now displays the correct image for Surface Duo and provides options for eSIM, regulator, and pen pressure calibration options

  • Updates the following drivers to version 1.0.2000.0:

    • Qualcomm Audio Miniport Driver for OEMB1 devices
    • Qualcomm Audio Sound Listening Model for Voice Activation System Service for OEMB1 devices
    • Qualcomm Audio System Configuration Package for OEMB1 devices
    • Qualcomm Audio Miniport Configuration Package for OEMB1 devices
    • Qualcomm Sensor Configuration Package for OEMB1 devices
    • Qualcomm Modem Configuration Package for OEMB1 devices
    • Qualcomm Audio DSP Extension Package for OEMB1 devices
    • Qualcomm Compute DSP Extension Package for OEMB1 devices
    • Qualcomm Modem DSP Extension Package for OEMB1 devices
    • Qualcomm Sensor DSP Extension Package for OEMB1 devices
    • Qualcomm Trusted Runtime Environment Driver for OEMB1 devices
    • Qualcomm Adreno 640 Driver for OEMB1 devices (Desktop & WCOS)
    • Qualcomm JPEG Encoder Driver
    • Qualcomm Subsystem Manager Driver
    • Qualcomm IOMMU Bridge for Microsoft Hyper-V Hypervisor Platform Driver
  • General system stability improvements to enhance the user's experience.

Important! New definition files are present, here's a summary of how to proceed:

- I am running a build < 17763, you are unsupported.

  • I am running a build < 18362, use Driver Updater with \definitions\Desktop\ARM64\epsilon_rs5.txt

  • I am running a build < 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ti.txt

  • I am running a build < 25905, use Driver Updater with \definitions\Desktop\ARM64\epsilon.txt

  • I am running a build >= 25905, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ga.txt

Known issues

- Sensors are temporarily unavailable on Windows 11 Canary Channel Insider Builds (Gallium)

  • Booting Windows 10 18362/18363 will lead to "static screen" effects on the right display, much like driver releases from last year did on any version of Windows. A fix is being worked on for the next release.

  • The TPM driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • The Posture driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • Enhanced auto rotation is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • Brightness control is glitchy on both displays.

  • On device speakers are not functional.

  • Dongles are not detected correctly when plugged into the USB Type-C port.

  • Battery charging remains unstable and not recommended.

  • Updating drivers may lead to weird configurations if done on old driver releases.

  • MAC addresses do not reflect the real addresses asigned to the device.

  • BitLocker drive encryption is not available.

  • USB dongles that are not externally powered may not currently work.

  • USB-C Billboard devices will not currently work.

  • External Display Stream support will not currently work.

  • Additional information provided by the posture sensor is currently not available for public consumption. This includes peek events.

  • Digitizers will not react to the device being folded over.

  • Displays will not react to the device being folded over most of the time.

  • Physical device data is incorrect.

  • Digitizers aren't calibrated correctly.

  • Flipping the device, however, is not smooth.

  • Charging remains unavailable in Windows. Please charge in Android.

  • Users upgrading from releases older than the January ones may want to clean install again.

  • Booting Windows 10 18362/18363 with Secure Boot enabled is not currently supported and will result in a broken installation.

  • In some cases, booting the UEFI image may lead to "static screen" effects on the left display. Please do not force reboot the device as it may interrupt the installation process, if ongoing, and instead please wait a few minutes.

  • Windows Recovery environment lacks drivers unless Windows has performed a Feature Update at least once.

  • sRGB is not available currently, and displays will not react to ICC profiles being applied.

Surface Duo 2

What's new?

  • Nothing New. Surface Duo 2 is still a Proof of Concept (PoC), don't expect much.

Accessing Foldable Sensors from your applications

In order to currently access the sensor data given by the foldable sensors, you need to use the following apis:

  • Windows.Devices.Sensors.HingeAngleSensor*
  • Windows.Internal.Devices.Sensors.FlipSensor* (2)
  • Windows.Internal.System.TwoPanelHingePostureDevice* (2)

(2): These apis require the use of an externally sourced winmd available from https://github.com/ADeltaX/InternalWinMD/blob/master/%23winmd/Windows.Internal.Devices.Sensors.winmd

In the future, further apis will be functional (specifically under the Windows.System.Preview namespace). Consider this an early "thing".

The following API may be used to determine if your app is used on a dual screen device: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.windowingenvironment.getdisplayregions?view=winrt-22621

The following API may be used to determine on which display region your app is currently being shown: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.getdisplayregions?view=winrt-22621

The following API may be used to move your application to the other display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmoverelativetodisplayregion?view=winrt-22621

THe following API may be used to move your application to a specific display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmovetodisplayregion?view=winrt-22621

The following API may be used for spanning purposes: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestsize?view=winrt-22621

The Windowing Environment for Windows Desktop editions (outside of tablet mode) is Overlapped. Tiled is used for Tablet Mode and Windows Core OS's ModernPC.

Code Samples

#include <iostream>
#include <windows.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Internal.Devices.Sensors.h>
#include <winrt/Windows.Internal.System.h>
#inclu...
Read more

Version 2309.40 - Nebula

13 Sep 22:38
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2309.40 (Nebula)

General information

**Released:** 09/14/2023 12:20 AM UTC+1

Quality: Preview

You can view compatibility for this release, along with important information and what works, and what doesn't at this link: https://github.com/WOA-Project/SurfaceDuo-Guides/blob/main/Status.md

Important information

- ⚠️ This version of the drivers needs to be paired with UEFI version greater than or equal to 2309.40.


▶️ Install Surface Duo 1 UEFI and Drivers for Windows from scratch (Clean Installation)

▶️ Install Surface Duo 2 UEFI and Drivers for Windows from scratch (Clean Installation)

▶️ Update from an older version of Surface Duo UEFI and Drivers (both got updated with v2308.12)


Release notes

Surface Duo 1

What's new?

  • Updates System firmware binaries for Surface Duo 1 to the latest version ever for this device as shipped by Microsoft.

  • Addresses an issue where Audio peripherals such as mics or bluetooth speakers would be broken under Windows 10 Version 2004 or lower

  • Enables support for the Surface Thunderbolt(TM) 4 Docking accessory

  • Further work comitted towards WCOS enablement, nothing to share at the moment

  • (UEFI change) Resolved an issue where the OS may crash and not boot anymore properly on Windows 11 Moment 2 and Moment 3 updates after installing the blacklotus mitigation updates.

  • (UEFI change) Resolved an issue where Windows 10 Version 1809 and lower builds may fail to boot under the uefi environment

  • General system stability improvements to enhance the user's experience.

Important! New definition files are present, here's a summary of how to proceed:

- I am running a build < 17763, you are unsupported.

  • I am running a build < 18362, use Driver Updater with \definitions\Desktop\ARM64\epsilon_rs5.txt

  • I am running a build < 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ti.txt

  • I am running a build < 25905, use Driver Updater with \definitions\Desktop\ARM64\epsilon.txt

  • I am running a build >= 25905, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ga.txt

Known issues

- Sensors are temporarily unavailable on Windows 11 Canary Channel Insider Builds (Gallium)

  • Booting Windows 10 18362/18363 will lead to "static screen" effects on the right display, much like driver releases from last year did on any version of Windows. A fix is being worked on for the next release.

  • The TPM driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • The Posture driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • Enhanced auto rotation is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • Brightness control is glitchy on both displays.

  • On device speakers are not functional.

  • Dongles are not detected correctly when plugged into the USB Type-C port.

  • Battery charging remains unstable and not recommended.

  • Updating drivers may lead to weird configurations if done on old driver releases.

  • MAC addresses do not reflect the real addresses asigned to the device.

  • BitLocker drive encryption is not available.

  • USB dongles that are not externally powered may not currently work.

  • USB-C Billboard devices will not currently work.

  • External Display Stream support will not currently work.

  • Additional information provided by the posture sensor is currently not available for public consumption. This includes peek events.

  • Digitizers will not react to the device being folded over.

  • Displays will not react to the device being folded over most of the time.

  • Physical device data is incorrect.

  • Digitizers aren't calibrated correctly.

  • Flipping the device, however, is not smooth.

  • Charging remains unavailable in Windows. Please charge in Android.

  • Users upgrading from releases older than the January ones may want to clean install again.

  • Booting Windows 10 18362/18363 with Secure Boot enabled is not currently supported and will result in a broken installation.

  • In some cases, booting the UEFI image may lead to "static screen" effects on the left display. Please do not force reboot the device as it may interrupt the installation process, if ongoing, and instead please wait a few minutes.

  • Windows Recovery environment lacks drivers unless Windows has performed a Feature Update at least once.

  • sRGB is not available currently, and displays will not react to ICC profiles being applied.

Surface Duo 2

What's new?

  • Nothing New. Surface Duo 2 is still a Proof of Concept (PoC), don't expect much.

Accessing Foldable Sensors from your applications

In order to currently access the sensor data given by the foldable sensors, you need to use the following apis:

  • Windows.Devices.Sensors.HingeAngleSensor*
  • Windows.Internal.Devices.Sensors.FlipSensor* (2)
  • Windows.Internal.System.TwoPanelHingePostureDevice* (2)

(2): These apis require the use of an externally sourced winmd available from https://github.com/ADeltaX/InternalWinMD/blob/master/%23winmd/Windows.Internal.Devices.Sensors.winmd

In the future, further apis will be functional (specifically under the Windows.System.Preview namespace). Consider this an early "thing".

The following API may be used to determine if your app is used on a dual screen device: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.windowingenvironment.getdisplayregions?view=winrt-22621

The following API may be used to determine on which display region your app is currently being shown: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.getdisplayregions?view=winrt-22621

The following API may be used to move your application to the other display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmoverelativetodisplayregion?view=winrt-22621

THe following API may be used to move your application to a specific display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmovetodisplayregion?view=winrt-22621

The following API may be used for spanning purposes: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestsize?view=winrt-22621

The Windowing Environment for Windows Desktop editions (outside of tablet mode) is Overlapped. Tiled is used for Tablet Mode and Windows Core OS's ModernPC.

Code Samples

#include <iostream>
#include <windows.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Internal.Devices.Sensors.h>
#include <winrt/Windows.Internal.System.h>
#include <winrt/Windows.System.Preview.h>
#include <winrt/Windows.UI.WindowManagement.h>
#include <winrt/Windows.Foundation.Collections.h>

using namespace std;
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Internal::Devices::Sensors;
using namespace Windows::Internal::System;
using namespace Windows::System::Preview;
using namespace Windows::UI::WindowManagement;
using namespace Windows::Foundation::Collections;

VOID OnFoldSensorReadingChanged(FoldSensor const&, FoldSensorReadingChangedEventArgs const& args)
{
	try {
		printf("Fold sensor state changed.\n");
		switch (args.Reading().GestureState())
		{
		case GestureState::Started:
			std::cout << "Fold started\n" << std::endl;
			break;
		case GestureState::Completed:
			std::cout << "Fold stopped\n" << std::endl;
			break;
		case GestureState::Cancelled:
			std::cout << "Fold cancelled\n" << std::endl;
			break;
		case GestureState::Unknown:
			std::cout << "Fold unknown\n" << std::endl;
			break;
		}

		for (auto panel : args.Reading().ContributingPanel())
		{
			printf("Panel: %s\n", to_string(panel).c_str());
		}
		
		std::cout << "Initial angle " << args.Reading().InitialAngle() << std::endl;
		std::cout << "Final angle " << args.Reading().FinalAngle() << std::endl;
		
		switch (args.Reading().FoldType())
		{
		case FoldType::Closing:
			std::cout << "Fold Closing\n" << std::endl;
			break;
		case FoldType::Opening:
			std::cout << "Fold Opening\n" << std::endl;
			break;
		case FoldType::NotDetected:
			std::cout << "Fold NotDetected\n" << std::endl;
			break;
		}
	}
	catch (...) {}
}

VOID PrintDetails(TwoPanelHingedDevicePostureReading const& args)
{
	try {
		std::cout << "Panel1 " << args.Panel1Id().c_str() << "\n" << std::endl;
		s...
Read more

Version 2308.12 - Rainbow Road 🌈🛣️

04 Aug 21:56
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2308.12 (Rainbow Road)

General information

**Released:** 08/04/2023 11:00 PM UTC+0

Quality: Preview

You can view compatibility for this release, along with important information and what works, and what doesn't at this link: https://github.com/WOA-Project/SurfaceDuo-Guides/blob/main/Status.md

Important information

- ⚠️ This version of the drivers needs to be paired with UEFI version greater than or equal to 2308.12.


▶️ Install Surface Duo 1 UEFI and Drivers for Windows from scratch (Clean Installation)

▶️ Install Surface Duo 2 UEFI and Drivers for Windows from scratch (Clean Installation)

▶️ Update from an older version of Surface Duo UEFI and Drivers (both got updated with v2308.12)


Release notes

Surface Duo 1

What's new?

  • Updates Qualcomm Drivers to version 1.0.1980.0000, this includes updates to:

    • Qualcomm Adreno 640
    • Qualcomm Aqstic Audio Miniport
    • Qualcomm Atheros Wi-Fi
    • Qualcomm Atheros Bluetooth
    • Qualcomm Hexagon Subsystem Manager
    • Qualcomm Hexagon FastRPC Bus
  • Updates SSDE to remove the workaround blocking Secure Boot Signature Exclusion Database (DBX)

  • Updates Adaptation kit scripts to remove the workaround preventing the provisioning of Secure Boot variable on first use

  • Addresses an issue where the OS would unexpectedly bugcheck while installing Windows Updates containing DBX updates, or BlackLotus mitigations

  • Addresses an issue where Windows Core OS based products would bug check on first run

  • Mitigates an issue temporarily with Gallium Semester Windows Insider Builds

  • Addresses an issue where Miracast was not functional in the past driver releases

  • General system stability improvements to enhance the user's experience.

Important! New definition files are present, here's a summary of how to proceed:

- I am running a build < 17763, you are unsupported.

  • I am running a build < 18362, use Driver Updater with \definitions\Desktop\ARM64\epsilon_rs5.txt

  • I am running a build < 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ti.txt

  • I am running a build < 25905, use Driver Updater with \definitions\Desktop\ARM64\epsilon.txt

  • I am running a build >= 25905, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ga.txt

Known issues

- Sensors are temporarily unavailable on Windows 11 Canary Channel Insider Builds (Gallium)

  • Booting Windows 10 18362/18363 will lead to "static screen" effects on the right display, much like driver releases from last year did on any version of Windows. A fix is being worked on for the next release.

  • The TPM driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • The Posture driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • Enhanced auto rotation is not working for Windows 10 18362/18363. A fix is being worked on for the next release.

  • Brightness control is glitchy on both displays.

  • On device speakers are not functional.

  • Dongles are not detected correctly when plugged into the USB Type-C port.

  • Battery charging remains unstable and not recommended.

  • Updating drivers may lead to weird configurations if done on old driver releases.

  • MAC addresses do not reflect the real addresses asigned to the device.

  • BitLocker drive encryption is not available.

  • USB dongles that are not externally powered may not currently work.

  • USB-C Billboard devices will not currently work.

  • External Display Stream support will not currently work.

  • Additional information provided by the posture sensor is currently not available for public consumption. This includes peek events.

  • Digitizers will not react to the device being folded over.

  • Displays will not react to the device being folded over most of the time.

  • Physical device data is incorrect.

  • Digitizers aren't calibrated correctly.

  • Flipping the device, however, is not smooth.

  • Charging remains unavailable in Windows. Please charge in Android.

  • Users upgrading from releases older than the January ones may want to clean install again.

  • Booting Windows 10 18362/18363 with Secure Boot enabled is not currently supported and will result in a broken installation.

  • In some cases, booting the UEFI image may lead to "static screen" effects on the left display. Please do not force reboot the device as it may interrupt the installation process, if ongoing, and instead please wait a few minutes.

  • Windows Recovery environment lacks drivers unless Windows has performed a Feature Update at least once.

  • sRGB is not available currently, and displays will not react to ICC profiles being applied.

Surface Duo 2

What's new?

  • Nothing New. Surface Duo 2 is still a Proof of Concept (PoC), don't expect much.

Accessing Foldable Sensors from your applications

In order to currently access the sensor data given by the foldable sensors, you need to use the following apis:

  • Windows.Devices.Sensors.HingeAngleSensor*
  • Windows.Internal.Devices.Sensors.FlipSensor* (2)
  • Windows.Internal.System.TwoPanelHingePostureDevice* (2)

(2): These apis require the use of an externally sourced winmd available from https://github.com/ADeltaX/InternalWinMD/blob/master/%23winmd/Windows.Internal.Devices.Sensors.winmd

In the future, further apis will be functional (specifically under the Windows.System.Preview namespace). Consider this an early "thing".

The following API may be used to determine if your app is used on a dual screen device: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.windowingenvironment.getdisplayregions?view=winrt-22621

The following API may be used to determine on which display region your app is currently being shown: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.getdisplayregions?view=winrt-22621

The following API may be used to move your application to the other display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmoverelativetodisplayregion?view=winrt-22621

THe following API may be used to move your application to a specific display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmovetodisplayregion?view=winrt-22621

The following API may be used for spanning purposes: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestsize?view=winrt-22621

The Windowing Environment for Windows Desktop editions (outside of tablet mode) is Overlapped. Tiled is used for Tablet Mode and Windows Core OS's ModernPC.

Code Samples

#include <iostream>
#include <windows.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Internal.Devices.Sensors.h>
#include <winrt/Windows.Internal.System.h>
#include <winrt/Windows.System.Preview.h>
#include <winrt/Windows.UI.WindowManagement.h>
#include <winrt/Windows.Foundation.Collections.h>

using namespace std;
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Internal::Devices::Sensors;
using namespace Windows::Internal::System;
using namespace Windows::System::Preview;
using namespace Windows::UI::WindowManagement;
using namespace Windows::Foundation::Collections;

VOID OnFoldSensorReadingChanged(FoldSensor const&, FoldSensorReadingChangedEventArgs const& args)
{
	try {
		printf("Fold sensor state changed.\n");
		switch (args.Reading().GestureState())
		{
		case GestureState::Started:
			std::cout << "Fold started\n" << std::endl;
			break;
		case GestureState::Completed:
			std::cout << "Fold stopped\n" << std::endl;
			break;
		case GestureState::Cancelled:
			std::cout << "Fold cancelled\n" << std::endl;
			break;
		case GestureState::Unknown:
			std::cout << "Fold unknown\n" << std::endl;
			break;
		}

		for (auto panel : args.Reading().ContributingPanel())
		{
			printf("Panel: %s\n", to_string(panel).c_str());
		}
		
		std::cout << "Initial angle " << args.Reading().InitialAngle() << std::endl;
		std::cout << "Final angle " << args.Reading().FinalAngle() << std::endl;
		
		switch (args.Reading().FoldType())
		{
		case FoldType::Closing:
			std::cout << "Fold Closing\n" << std::endl;
			break;
		case FoldType::Opening:
			std::cout << "Fold Opening\n" << std::endl;
			break;
		case FoldType::NotDetected:
			std::cout << "Fold NotDetected\n" << std::endl;
			break;
		}
	}
	...
Read more

Version 2307.6 - Hooting Cats 🐈‍⬛

03 Jul 23:14
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2307.6 (Hooting cats)

Released: 07/04/2023 00:00 PM UTC+0

Quality: Preview

Surface Duo Dual Screen Windows

General information

You can view compatibility for this release, along with important information and what works, and what doesn't at this link: https://github.com/WOA-Project/SurfaceDuo-Guides/blob/main/Status.md

Release notes


Important information

Changelog

Surface Duo 1

What's new?

  • Updates Qualcomm Firmware for Surface Duo 1 devices

  • General system stability improvements to enhance the user's experience.

  • Important! New definition files are present, here's a summary of how to proceed:

I am running a build < 17763, you are unsupported.

I am running a build < 18362, use Driver Updater with \definitions\Desktop\ARM64\epsilon_rs5.txt

I am running a build < 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ti.txt

I am running a build >= 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon.txt

Known issues

  • Booting Windows 10 18362/18363 will lead to "static screen" effects on the right display, much like driver releases from last year did on any version of Windows. A fix is being worked on for the next release.
  • The TPM driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.
  • The Posture driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.
  • Enhanced auto rotation is not working for Windows 10 18362/18363. A fix is being worked on for the next release.
  • Brightness control is glitchy on both displays.
  • Audio speakers are not functional.
  • Dongles are not detected correctly when plugged into the USB Type-C port.
  • Battery charging remains unstable and not recommended.
  • Updating drivers may lead to weird configurations if done on old driver releases.
  • MAC addresses do not reflect the real addresses asigned to the device.
  • BitLocker drive encryption is not available.
  • USB dongles that are not externally powered may not currently work.
  • USB-C Billboard devices will not currently work.
  • External Display Stream support will not currently work.
  • Additional information provided by the posture sensor is currently not available for public consumption. This includes peek events.
  • Digitizers will not react to the device being folded over.
  • Displays will not react to the device being folded over most of the time.
  • Physical device data is incorrect.
  • Digitizers aren't calibrated correctly.
  • Flipping the device, however, is not smooth.
  • Charging remains unavailable in Windows. Please charge in Android.
  • Users upgrading from releases older than the January ones may want to clean install again.
  • Booting Windows 10 18362/18363 with Secure Boot enabled is not currently supported and will result in a broken installation.
  • In some cases, booting the UEFI image may lead to "static screen" effects on the left display. Please do not force reboot the device as it may interrupt the installation process, if ongoing, and instead please wait a few minutes.
  • Windows Recovery environment lacks drivers unless Windows has performed a Feature Update at least once.
  • sRGB is not available currently, and displays will not react to ICC profiles being applied.

Surface Duo 2

  • A lot. Too long to list, Surface Duo 2 is still a Proof of Concept (PoC), don't expect much.

Accessing Foldable Sensors from your applications

In order to currently access the sensor data given by the foldable sensors, you need to use the following apis:

  • Windows.Devices.Sensors.HingeAngleSensor*
  • Windows.Internal.Devices.Sensors.FlipSensor* (2)
  • Windows.Internal.System.TwoPanelHingePostureDevice* (2)

(2): These apis require the use of an externally sourced winmd available from https://github.com/ADeltaX/InternalWinMD/blob/master/%23winmd/Windows.Internal.Devices.Sensors.winmd

In the future, further apis will be functional (specifically under the Windows.System.Preview namespace). Consider this an early "thing".

The following API may be used to determine if your app is used on a dual screen device: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.windowingenvironment.getdisplayregions?view=winrt-22621

The following API may be used to determine on which display region your app is currently being shown: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.getdisplayregions?view=winrt-22621

The following API may be used to move your application to the other display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmoverelativetodisplayregion?view=winrt-22621

THe following API may be used to move your application to a specific display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmovetodisplayregion?view=winrt-22621

The following API may be used for spanning purposes: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestsize?view=winrt-22621

The Windowing Environment for Windows Desktop editions (outside of tablet mode) is Overlapped. Tiled is used for Tablet Mode and Windows Core OS's ModernPC.

Code Samples

#include <iostream>
#include <windows.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Internal.Devices.Sensors.h>
#include <winrt/Windows.Internal.System.h>
#include <winrt/Windows.System.Preview.h>
#include <winrt/Windows.UI.WindowManagement.h>
#include <winrt/Windows.Foundation.Collections.h>

using namespace std;
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Internal::Devices::Sensors;
using namespace Windows::Internal::System;
using namespace Windows::System::Preview;
using namespace Windows::UI::WindowManagement;
using namespace Windows::Foundation::Collections;

VOID OnFoldSensorReadingChanged(FoldSensor const&, FoldSensorReadingChangedEventArgs const& args)
{
	try {
		printf("Fold sensor state changed.\n");
		switch (args.Reading().GestureState())
		{
		case GestureState::Started:
			std::cout << "Fold started\n" << std::endl;
			break;
		case GestureState::Completed:
			std::cout << "Fold stopped\n" << std::endl;
			break;
		case GestureState::Cancelled:
			std::cout << "Fold cancelled\n" << std::endl;
			break;
		case GestureState::Unknown:
			std::cout << "Fold unknown\n" << std::endl;
			break;
		}

		for (auto panel : args.Reading().ContributingPanel())
		{
			printf("Panel: %s\n", to_string(panel).c_str());
		}
		
		std::cout << "Initial angle " << args.Reading().InitialAngle() << std::endl;
		std::cout << "Final angle " << args.Reading().FinalAngle() << std::endl;
		
		switch (args.Reading().FoldType())
		{
		case FoldType::Closing:
			std::cout << "Fold Closing\n" << std::endl;
			break;
		case FoldType::Opening:
			std::cout << "Fold Opening\n" << std::endl;
			break;
		case FoldType::NotDetected:
			std::cout << "Fold NotDetected\n" << std::endl;
			break;
		}
	}
	catch (...) {}
}

VOID PrintDetails(TwoPanelHingedDevicePostureReading const& args)
{
	try {
		std::cout << "Panel1 " << args.Panel1Id().c_str() << "\n" << std::endl;
		std::cout << "Panel2 " << args.Panel2Id().c_str() << "\n" << std::endl;

		std::cout << "Panel1 Orientation " << (int)args.Panel1Orientation() << "\n" << std::endl;
		std::cout << "Panel2 Orientation " << (int)args.Panel2Orientation() << "\n" << std::endl;

		switch (args.HingeState())
		{
		case Windows::Internal::System::HingeState::Unknown:
			std::cout << "Hinge1State Unknown\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Closed:
			std::cout << "Hinge1State Closed\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Concave:
			std::cout << "Hinge1State Concave\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Flat:
			std::cout << "Hinge1State Flat\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Convex:
			std::cout << "Hinge1State Convex\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Full:
			std::cout << "Hinge1State Full\n" << std::endl;
			break;
		}
	}
	catch (...) {}
}

VOID OnPostureChanged(TwoPanelHingedDevicePosture const&, TwoPanelHingedDevicePostureReadingChangedEventArgs const& args)
{
	try {
		printf("Posture sensor state changed.\n");
		PrintDetails(args.Reading());
	}
	catch (...) {}
}

VOID OnSensorReadingChanged(FlipSensor const&, FlipSensorReadingChangedEventArgs const& args)
{
	try {
		printf("Flip sensor state changed.\n");
		switch (args.Reading().GestureState())
		{
		case GestureState::Started:
			...
Read more

Version 2306.50 - Here comes the sun at the rate it comes again

14 Jun 23:26
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2306.50 (Here comes the sun at the rate it comes again)

Released: 06/15/2023 01:30 AM UTC+1

Quality: Preview

Surface Duo Dual Screen Windows

General information

You can view compatibility for this release, along with important information and what works, and what doesn't at this link: https://github.com/WOA-Project/SurfaceDuo-Guides/blob/main/Status.md

Release notes


Important information

Changelog

Surface Duo 1

What's new?

  • Addresses an issue impacting pen, palm rejection, surface dial, pen auto pairing, and multi touch functionality

  • Important! New definition files are present, here's a summary of how to proceed:

I am running a build < 17763, you are unsupported.

I am running a build < 18362, use Driver Updater with \definitions\Desktop\ARM64\epsilon_rs5.txt

I am running a build < 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ti.txt

I am running a build >= 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon.txt

Known issues

  • Booting Windows 10 18362/18363 will lead to "static screen" effects on the right display, much like driver releases from last year did on any version of Windows. A fix is being worked on for the next release.
  • The TPM driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.
  • The Posture driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.
  • Enhanced auto rotation is not working for Windows 10 18362/18363. A fix is being worked on for the next release.
  • Brightness control is glitchy on both displays.
  • Audio speakers are not functional.
  • Dongles are not detected correctly when plugged into the USB Type-C port.
  • Battery charging remains unstable and not recommended.
  • Updating drivers may lead to weird configurations if done on old driver releases.
  • MAC addresses do not reflect the real addresses asigned to the device.
  • BitLocker drive encryption is not available.
  • USB dongles that are not externally powered may not currently work.
  • USB-C Billboard devices will not currently work.
  • External Display Stream support will not currently work.
  • Additional information provided by the posture sensor is currently not available for public consumption. This includes peek events.
  • Digitizers will not react to the device being folded over.
  • Displays will not react to the device being folded over most of the time.
  • Physical device data is incorrect.
  • Digitizers aren't calibrated correctly.
  • Flipping the device, however, is not smooth.
  • Charging remains unavailable in Windows. Please charge in Android.
  • Users upgrading from releases older than the January ones may want to clean install again.
  • Booting Windows 10 18362/18363 with Secure Boot enabled is not currently supported and will result in a broken installation.
  • In some cases, booting the UEFI image may lead to "static screen" effects on the left display. Please do not force reboot the device as it may interrupt the installation process, if ongoing, and instead please wait a few minutes.
  • Windows Recovery environment lacks drivers unless Windows has performed a Feature Update at least once.
  • sRGB is not available currently, and displays will not react to ICC profiles being applied.

Surface Duo 2

  • Addresses an issue impacting pen, palm rejection, surface dial, pen auto pairing, and multi touch functionality

  • Surface Duo 2 is still a Proof of Concept (PoC), don't expect much.

Accessing Foldable Sensors from your applications

In order to currently access the sensor data given by the foldable sensors, you need to use the following apis:

  • Windows.Devices.Sensors.HingeAngleSensor*
  • Windows.Internal.Devices.Sensors.FlipSensor* (2)
  • Windows.Internal.System.TwoPanelHingePostureDevice* (2)

(2): These apis require the use of an externally sourced winmd available from https://github.com/ADeltaX/InternalWinMD/blob/master/%23winmd/Windows.Internal.Devices.Sensors.winmd

In the future, further apis will be functional (specifically under the Windows.System.Preview namespace). Consider this an early "thing".

The following API may be used to determine if your app is used on a dual screen device: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.windowingenvironment.getdisplayregions?view=winrt-22621

The following API may be used to determine on which display region your app is currently being shown: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.getdisplayregions?view=winrt-22621

The following API may be used to move your application to the other display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmoverelativetodisplayregion?view=winrt-22621

THe following API may be used to move your application to a specific display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmovetodisplayregion?view=winrt-22621

The following API may be used for spanning purposes: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestsize?view=winrt-22621

The Windowing Environment for Windows Desktop editions (outside of tablet mode) is Overlapped. Tiled is used for Tablet Mode and Windows Core OS's ModernPC.

Code Samples

#include <iostream>
#include <windows.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Internal.Devices.Sensors.h>
#include <winrt/Windows.Internal.System.h>
#include <winrt/Windows.System.Preview.h>
#include <winrt/Windows.UI.WindowManagement.h>
#include <winrt/Windows.Foundation.Collections.h>

using namespace std;
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Internal::Devices::Sensors;
using namespace Windows::Internal::System;
using namespace Windows::System::Preview;
using namespace Windows::UI::WindowManagement;
using namespace Windows::Foundation::Collections;

VOID OnFoldSensorReadingChanged(FoldSensor const&, FoldSensorReadingChangedEventArgs const& args)
{
	try {
		printf("Fold sensor state changed.\n");
		switch (args.Reading().GestureState())
		{
		case GestureState::Started:
			std::cout << "Fold started\n" << std::endl;
			break;
		case GestureState::Completed:
			std::cout << "Fold stopped\n" << std::endl;
			break;
		case GestureState::Cancelled:
			std::cout << "Fold cancelled\n" << std::endl;
			break;
		case GestureState::Unknown:
			std::cout << "Fold unknown\n" << std::endl;
			break;
		}

		for (auto panel : args.Reading().ContributingPanel())
		{
			printf("Panel: %s\n", to_string(panel).c_str());
		}
		
		std::cout << "Initial angle " << args.Reading().InitialAngle() << std::endl;
		std::cout << "Final angle " << args.Reading().FinalAngle() << std::endl;
		
		switch (args.Reading().FoldType())
		{
		case FoldType::Closing:
			std::cout << "Fold Closing\n" << std::endl;
			break;
		case FoldType::Opening:
			std::cout << "Fold Opening\n" << std::endl;
			break;
		case FoldType::NotDetected:
			std::cout << "Fold NotDetected\n" << std::endl;
			break;
		}
	}
	catch (...) {}
}

VOID PrintDetails(TwoPanelHingedDevicePostureReading const& args)
{
	try {
		std::cout << "Panel1 " << args.Panel1Id().c_str() << "\n" << std::endl;
		std::cout << "Panel2 " << args.Panel2Id().c_str() << "\n" << std::endl;

		std::cout << "Panel1 Orientation " << (int)args.Panel1Orientation() << "\n" << std::endl;
		std::cout << "Panel2 Orientation " << (int)args.Panel2Orientation() << "\n" << std::endl;

		switch (args.HingeState())
		{
		case Windows::Internal::System::HingeState::Unknown:
			std::cout << "Hinge1State Unknown\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Closed:
			std::cout << "Hinge1State Closed\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Concave:
			std::cout << "Hinge1State Concave\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Flat:
			std::cout << "Hinge1State Flat\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Convex:
			std::cout << "Hinge1State Convex\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Full:
			std::cout << "Hinge1State Full\n" << std::endl;
			break;
		}
	}
	catch (...) {}
}

VOID OnPostureChanged(TwoPanelHingedDevicePosture const&, TwoPanelHingedDevicePostureReadingChangedEventArgs const& args)
{
	try {
		printf("Posture sensor state changed.\n");
		PrintDetails(args.Reading());
	}
	catch (...) {}
}

VOID OnSensorReadingChanged(FlipSensor const&, FlipSensorReadingChangedEventArgs const& args)
{
	try {
		printf("Flip...
Read more

Version 2306.40

13 Jun 00:33
0f76f38
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2306.40 (Monrowl)

Released: 06/13/2023 02:30 PM UTC+1

Quality: Preview

Surface Duo Dual Screen Windows

General information

You can view compatibility for this release, along with important information and what works, and what doesn't at this link: https://github.com/WOA-Project/SurfaceDuo-Guides/blob/main/Status.md

Release notes


Important information

Changelog

Surface Duo 1

What's new?

  • Updated Surface Duo 1 Firmware to the May OTA/Security Patch

  • Updated Key Qualcomm Drivers to the May Windows Driver Release

  • General system stability improvements to enhance the user's experience.

  • Important! New definition files are present, here's a summary of how to proceed:

I am running a build < 17763, you are unsupported.

I am running a build < 18362, use Driver Updater with \definitions\Desktop\ARM64\epsilon_rs5.txt

I am running a build < 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ti.txt

I am running a build >= 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon.txt

Known issues

  • Booting Windows 10 18362/18363 will lead to "static screen" effects on the right display, much like driver releases from last year did on any version of Windows. A fix is being worked on for the next release.
  • The TPM driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.
  • The Posture driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.
  • Enhanced auto rotation is not working for Windows 10 18362/18363. A fix is being worked on for the next release.
  • Brightness control is glitchy on both displays.
  • Audio speakers are not functional.
  • Dongles are not detected correctly when plugged into the USB Type-C port.
  • Battery charging remains unstable and not recommended.
  • Updating drivers may lead to weird configurations if done on old driver releases.
  • MAC addresses do not reflect the real addresses asigned to the device.
  • BitLocker drive encryption is not available.
  • USB dongles that are not externally powered may not currently work.
  • USB-C Billboard devices will not currently work.
  • External Display Stream support will not currently work.
  • Additional information provided by the posture sensor is currently not available for public consumption. This includes peek events.
  • Digitizers will not react to the device being folded over.
  • Displays will not react to the device being folded over most of the time.
  • Physical device data is incorrect.
  • Digitizers aren't calibrated correctly.
  • Flipping the device, however, is not smooth.
  • Charging remains unavailable in Windows. Please charge in Android.
  • Users upgrading from releases older than the January ones may want to clean install again.
  • Booting Windows 10 18362/18363 with Secure Boot enabled is not currently supported and will result in a broken installation.
  • In some cases, booting the UEFI image may lead to "static screen" effects on the left display. Please do not force reboot the device as it may interrupt the installation process, if ongoing, and instead please wait a few minutes.
  • Windows Recovery environment lacks drivers unless Windows has performed a Feature Update at least once.
  • sRGB is not available currently, and displays will not react to ICC profiles being applied.

Surface Duo 2

  • Surface Duo 2 is still a Proof of Concept (PoC), don't expect much.

Accessing Foldable Sensors from your applications

In order to currently access the sensor data given by the foldable sensors, you need to use the following apis:

  • Windows.Devices.Sensors.HingeAngleSensor*
  • Windows.Internal.Devices.Sensors.FlipSensor* (2)
  • Windows.Internal.System.TwoPanelHingePostureDevice* (2)

(2): These apis require the use of an externally sourced winmd available from https://github.com/ADeltaX/InternalWinMD/blob/master/%23winmd/Windows.Internal.Devices.Sensors.winmd

In the future, further apis will be functional (specifically under the Windows.System.Preview namespace). Consider this an early "thing".

The following API may be used to determine if your app is used on a dual screen device: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.windowingenvironment.getdisplayregions?view=winrt-22621

The following API may be used to determine on which display region your app is currently being shown: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.getdisplayregions?view=winrt-22621

The following API may be used to move your application to the other display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmoverelativetodisplayregion?view=winrt-22621

THe following API may be used to move your application to a specific display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmovetodisplayregion?view=winrt-22621

The following API may be used for spanning purposes: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestsize?view=winrt-22621

The Windowing Environment for Windows Desktop editions (outside of tablet mode) is Overlapped. Tiled is used for Tablet Mode and Windows Core OS's ModernPC.

Code Samples

#include <iostream>
#include <windows.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Internal.Devices.Sensors.h>
#include <winrt/Windows.Internal.System.h>
#include <winrt/Windows.System.Preview.h>
#include <winrt/Windows.UI.WindowManagement.h>
#include <winrt/Windows.Foundation.Collections.h>

using namespace std;
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Internal::Devices::Sensors;
using namespace Windows::Internal::System;
using namespace Windows::System::Preview;
using namespace Windows::UI::WindowManagement;
using namespace Windows::Foundation::Collections;

VOID OnFoldSensorReadingChanged(FoldSensor const&, FoldSensorReadingChangedEventArgs const& args)
{
	try {
		printf("Fold sensor state changed.\n");
		switch (args.Reading().GestureState())
		{
		case GestureState::Started:
			std::cout << "Fold started\n" << std::endl;
			break;
		case GestureState::Completed:
			std::cout << "Fold stopped\n" << std::endl;
			break;
		case GestureState::Cancelled:
			std::cout << "Fold cancelled\n" << std::endl;
			break;
		case GestureState::Unknown:
			std::cout << "Fold unknown\n" << std::endl;
			break;
		}

		for (auto panel : args.Reading().ContributingPanel())
		{
			printf("Panel: %s\n", to_string(panel).c_str());
		}
		
		std::cout << "Initial angle " << args.Reading().InitialAngle() << std::endl;
		std::cout << "Final angle " << args.Reading().FinalAngle() << std::endl;
		
		switch (args.Reading().FoldType())
		{
		case FoldType::Closing:
			std::cout << "Fold Closing\n" << std::endl;
			break;
		case FoldType::Opening:
			std::cout << "Fold Opening\n" << std::endl;
			break;
		case FoldType::NotDetected:
			std::cout << "Fold NotDetected\n" << std::endl;
			break;
		}
	}
	catch (...) {}
}

VOID PrintDetails(TwoPanelHingedDevicePostureReading const& args)
{
	try {
		std::cout << "Panel1 " << args.Panel1Id().c_str() << "\n" << std::endl;
		std::cout << "Panel2 " << args.Panel2Id().c_str() << "\n" << std::endl;

		std::cout << "Panel1 Orientation " << (int)args.Panel1Orientation() << "\n" << std::endl;
		std::cout << "Panel2 Orientation " << (int)args.Panel2Orientation() << "\n" << std::endl;

		switch (args.HingeState())
		{
		case Windows::Internal::System::HingeState::Unknown:
			std::cout << "Hinge1State Unknown\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Closed:
			std::cout << "Hinge1State Closed\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Concave:
			std::cout << "Hinge1State Concave\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Flat:
			std::cout << "Hinge1State Flat\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Convex:
			std::cout << "Hinge1State Convex\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Full:
			std::cout << "Hinge1State Full\n" << std::endl;
			break;
		}
	}
	catch (...) {}
}

VOID OnPostureChanged(TwoPanelHingedDevicePosture const&, TwoPanelHingedDevicePostureReadingChangedEventArgs const& args)
{
	try {
		printf("Posture sensor state changed.\n");
		PrintDetails(args.Reading());
	}
	catch (...) {}
}

VOID OnSensorReadingChanged(FlipSensor const&, FlipSensorReadingChangedEventArgs const& args)
{
	try {
		printf("Flip sensor state changed.\n");
		switch (args.Reading().Gesture...
Read more

Version 2305.90 - Paracheirodon innesi 🐟🐠🐡🦈🎣

30 May 22:41
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2305.90 (Paracheirodon innesi)

Released: 05/31/2023 00:00 PM UTC+1

Quality: Preview

Surface Duo Dual Screen Windows

General information

You can view compatibility for this release, along with important information and what works, and what doesn't at this link: https://github.com/WOA-Project/SurfaceDuo-Guides/blob/main/Status.md

Release notes


Important information

Changelog

Surface Duo 1

What's new?

  • This update contains a lot of changes that would be too long to explain. Notably more fixes for postures not working after sleep, further stability improvements, and as another os would put it:

  • General system stability improvements to enhance the user's experience.

  • Important! New definition files are present, here's a summary of how to proceed:

I am running a build < 17763, you are unsupported.

I am running a build < 18362, use Driver Updater with \definitions\Desktop\ARM64\epsilon_rs5.txt

I am running a build < 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon_ti.txt

I am running a build >= 19041, use Driver Updater with \definitions\Desktop\ARM64\epsilon.txt

Known issues

  • Booting Windows 10 18362/18363 will lead to "static screen" effects on the right display, much like driver releases from last year did on any version of Windows. A fix is being worked on for the next release.
  • The TPM driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.
  • The Posture driver is not working for Windows 10 18362/18363. A fix is being worked on for the next release.
  • Enhanced auto rotation is not working for Windows 10 18362/18363. A fix is being worked on for the next release.
  • Brightness control is glitchy on both displays.
  • Audio speakers are not functional.
  • Dongles are not detected correctly when plugged into the USB Type-C port.
  • Battery charging remains unstable and not recommended.
  • Updating drivers may lead to weird configurations if done on old driver releases.
  • MAC addresses do not reflect the real addresses asigned to the device.
  • BitLocker drive encryption is not available.
  • USB dongles that are not externally powered may not currently work.
  • USB-C Billboard devices will not currently work.
  • External Display Stream support will not currently work.
  • Additional information provided by the posture sensor is currently not available for public consumption. This includes peek events.
  • Digitizers will not react to the device being folded over.
  • Displays will not react to the device being folded over most of the time.
  • Physical device data is incorrect.
  • Digitizers aren't calibrated correctly.
  • Flipping the device, however, is not smooth.
  • Charging remains unavailable in Windows. Please charge in Android.
  • Users upgrading from releases older than the January ones may want to clean install again.
  • Booting Windows 10 18362/18363 with Secure Boot enabled is not currently supported and will result in a broken installation.
  • In some cases, booting the UEFI image may lead to "static screen" effects on the left display. Please do not force reboot the device as it may interrupt the installation process, if ongoing, and instead please wait a few minutes.
  • Windows Recovery environment lacks drivers unless Windows has performed a Feature Update at least once.
  • sRGB is not available currently, and displays will not react to ICC profiles being applied.

Surface Duo 2

  • A lot. Too long to list, Surface Duo 2 is still a Proof of Concept (PoC), don't expect much.

Accessing Foldable Sensors from your applications

In order to currently access the sensor data given by the foldable sensors, you need to use the following apis:

  • Windows.Devices.Sensors.HingeAngleSensor*
  • Windows.Internal.Devices.Sensors.FlipSensor* (2)
  • Windows.Internal.System.TwoPanelHingePostureDevice* (2)

(2): These apis require the use of an externally sourced winmd available from https://github.com/ADeltaX/InternalWinMD/blob/master/%23winmd/Windows.Internal.Devices.Sensors.winmd

In the future, further apis will be functional (specifically under the Windows.System.Preview namespace). Consider this an early "thing".

The following API may be used to determine if your app is used on a dual screen device: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.windowingenvironment.getdisplayregions?view=winrt-22621

The following API may be used to determine on which display region your app is currently being shown: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.getdisplayregions?view=winrt-22621

The following API may be used to move your application to the other display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmoverelativetodisplayregion?view=winrt-22621

THe following API may be used to move your application to a specific display: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestmovetodisplayregion?view=winrt-22621

The following API may be used for spanning purposes: https://docs.microsoft.com/en-us/uwp/api/windows.ui.windowmanagement.appwindow.requestsize?view=winrt-22621

The Windowing Environment for Windows Desktop editions (outside of tablet mode) is Overlapped. Tiled is used for Tablet Mode and Windows Core OS's ModernPC.

Code Samples

#include <iostream>
#include <windows.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Internal.Devices.Sensors.h>
#include <winrt/Windows.Internal.System.h>
#include <winrt/Windows.System.Preview.h>
#include <winrt/Windows.UI.WindowManagement.h>
#include <winrt/Windows.Foundation.Collections.h>

using namespace std;
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Internal::Devices::Sensors;
using namespace Windows::Internal::System;
using namespace Windows::System::Preview;
using namespace Windows::UI::WindowManagement;
using namespace Windows::Foundation::Collections;

VOID OnFoldSensorReadingChanged(FoldSensor const&, FoldSensorReadingChangedEventArgs const& args)
{
	try {
		printf("Fold sensor state changed.\n");
		switch (args.Reading().GestureState())
		{
		case GestureState::Started:
			std::cout << "Fold started\n" << std::endl;
			break;
		case GestureState::Completed:
			std::cout << "Fold stopped\n" << std::endl;
			break;
		case GestureState::Cancelled:
			std::cout << "Fold cancelled\n" << std::endl;
			break;
		case GestureState::Unknown:
			std::cout << "Fold unknown\n" << std::endl;
			break;
		}

		for (auto panel : args.Reading().ContributingPanel())
		{
			printf("Panel: %s\n", to_string(panel).c_str());
		}
		
		std::cout << "Initial angle " << args.Reading().InitialAngle() << std::endl;
		std::cout << "Final angle " << args.Reading().FinalAngle() << std::endl;
		
		switch (args.Reading().FoldType())
		{
		case FoldType::Closing:
			std::cout << "Fold Closing\n" << std::endl;
			break;
		case FoldType::Opening:
			std::cout << "Fold Opening\n" << std::endl;
			break;
		case FoldType::NotDetected:
			std::cout << "Fold NotDetected\n" << std::endl;
			break;
		}
	}
	catch (...) {}
}

VOID PrintDetails(TwoPanelHingedDevicePostureReading const& args)
{
	try {
		std::cout << "Panel1 " << args.Panel1Id().c_str() << "\n" << std::endl;
		std::cout << "Panel2 " << args.Panel2Id().c_str() << "\n" << std::endl;

		std::cout << "Panel1 Orientation " << (int)args.Panel1Orientation() << "\n" << std::endl;
		std::cout << "Panel2 Orientation " << (int)args.Panel2Orientation() << "\n" << std::endl;

		switch (args.HingeState())
		{
		case Windows::Internal::System::HingeState::Unknown:
			std::cout << "Hinge1State Unknown\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Closed:
			std::cout << "Hinge1State Closed\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Concave:
			std::cout << "Hinge1State Concave\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Flat:
			std::cout << "Hinge1State Flat\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Convex:
			std::cout << "Hinge1State Convex\n" << std::endl;
			break;
		case Windows::Internal::System::HingeState::Full:
			std::cout << "Hinge1State Full\n" << std::endl;
			break;
		}
	}
	catch (...) {}
}

VOID OnPostureChanged(TwoPanelHingedDevicePosture const&, TwoPanelHingedDevicePostureReadingChangedEventArgs const& args)
{
	try {
		printf("Posture sensor state changed.\n");
		PrintDetails(args.Reading());
	}
	catch (...) {}
}

VOID OnSensorReadingChanged(FlipSensor const&, FlipSensorReadingChangedEventAr...
Read more