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 2404.03 (Coconut Mall)

01 Apr 21:29
Compare
Choose a tag to compare

Caution

This release is outdated.

Go to https://github.com/WOA-Project/SurfaceDuo-Releases/releases to find the latest.

Surface Duo Drivers BSP - Version 2404.03 (Coconut Mall)

A duo of Duos

General information

**Released:** 04/01/2024 11:00 PM UTC+2

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 2404.03.

  • ⚠️ 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 v2404.03)


Release notes

What's new?

Common to both devices

  • We resolved a high occurence crash issue with the SSDE driver for Surface Duo 1 and 2

Surface Duo 1

  • Updated all drivers to their latest versions for Surface Duo 1

  • We reduced the size of the overall driver package for Surface Duo 1 by 25%

  • We resolved a few bugs regarding the Analog USB Mux on Surface Duo 1, expect more stable usb connectivity as a result

  • We enabled support for Touch on Redstone 3 to Redstone 5 on Surface Duo 1

  • We also started working on enabling broader hardware support on Redstone 3 to 5 for Surface Duo 1

  • We added support for Windows Studio Effects on Surface Duo 1. To learn more about Windows Studio Effects, open the Surface App.

  • We started working on NPU support for Surface Duo 1

Surface Duo 2

Important

Starting with this update, only Windows Insider Program Canary Channels are supported on Surface Duo 2 devices.

If you do not use such a build, Surface Duo 2 will not boot Windows successfully. Please only use Windows Insider Program Canary Channel Builds (>= 26090).

  • We updated most drivers for Surface Duo 2

  • We fixed an issue where Surface Duo 2 wouldn't boot successfully on the latest FW versions

  • We introduced a new wallpaper for Surface Duo 2 devices

  • We introduced the Modem Processor Subsystem driver for Surface Duo 2 devices

  • We fixed the boot issues with all cpu cores on Surface Duo 2 devices

  • All CPU cores are now functional on Surface Duo 2 devices provided the OS build is from the Windows Insider Program Canary Channel. As a result performance is much much better than it ever was

  • We fixed an issue related to USB connectivity on Surface Duo 2


  • Please download SurfaceDuo-Drivers-v2404.03-Desktop-Epsilon.zip if you want drivers for Surface Duo 1

  • Please download SurfaceDuo-Drivers-v2404.03-Desktop-Zeta.zip if you want drivers for Surface Duo 2


  • We are aware auto pairing of the pen will not work anymore on Windows 10, a fix is due in the next update.

  • REGRESSION: Battery status and Sensors are broken in this update and will be fixed another time on Surface Duo 2 devices

Known issues

- 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.

  • 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 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.


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.R...
Read more

Version 2403.41 (Hephaestus)

13 Mar 20:00
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2403.41 (Hephaestus)

General information

**Released:** 03/13/2024 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 2403.41.

  • ⚠️ 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 v2403.41)


Release notes

Surface Duo (1st Gen)

What's new?

  • Introducing Vulkan and OpenCL support (preliminary)
    This uses the actual GPU and no compat pack, if you have the compatibility pack installed, it can conflict, so please remove it before first use.
    This remains a bit experimental if there's issues in loading Vulkan or OpenCL please let us know!
vkcube.mov
  • Stability Fixes (again)

  • Updated most drivers to the latest versions from Qualcomm (again) and Surface

  • We fixed issues that would make devices be unstable or stop working after taking a driver update using driver updater. You should never get update issues from now on. (again)

  • We fixed a big issue that made Surface Duo 2 not work as expected for quite a while, while things aren't still back to where they should be, they're definitely better. We're working on it

  • We fixed an issue that resulted in pen input being swapped incorrectly across displays on Surface Duo (1st Gen)

  • Please download SurfaceDuo-Drivers-v2403.41-Desktop-Epsilon.zip if you want drivers for Surface Duo 1

  • Please download SurfaceDuo-Drivers-v2403.41-Desktop-Zeta.zip if you want drivers for Surface Duo 2

  • We are aware auto pairing of the pen will not work anymore on Windows 10, a fix is due in the next update.

Known issues

- 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.

  • 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 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 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::...
Read more

Version 2402.85 (Astro)

25 Feb 22:51
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2402.86 (Astro)

General information

**Released:** 02/25/2024 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 2402.86.

  • ⚠️ 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 v2402.86)


Release notes

Surface Duo (1st Gen)

What's new?

  • Stability Fixes

  • Updated most drivers to the latest versions from Qualcomm

  • We fixed issues that would make devices be unstable or stop working after taking a driver update using driver updater. You should never get update issues from now on.

  • Please download SurfaceDuo-Drivers-v2402.86-Desktop-Epsilon.zip if you want drivers for Surface Duo 1

  • Please download SurfaceDuo-Drivers-v2402.86-Desktop-Zeta.zip if you want drivers for Surface Duo 2

Known issues

- 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.

  • 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 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 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(FlipSenso...
Read more

Version 2402.65 (Apollo)

19 Feb 21:45
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2402.65 (Apollo)

General information

**Released:** 01/28/2024 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 2402.65.

  • ⚠️ For users who are updating from an earlier release than version 2402.6x, 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 v2402.65)


Release notes

Surface Duo (1st Gen)

What's new?

  • Stability Fixes

  • Resolves a recent regression with USB host mode peripherals/OTG not being functional

  • Updates to key Surface owned drivers to their latest versions

  • Fixes an issue where Surface Duo devices with Toshiba/Kioxia made UFS storage did not get proper firmware update capsule targeting

  • Updates the platform id of Surface Duo from MTP08150 to AND08150

  • Fixes, improvements to Audio (but no working Audio just yet)

  • Updated App pack

  • New!: We updated drivers related to PCIe for a future release, this change will also enable better energy consumption when PCIe is not in use, and requires the very latest uefi available as of this release.

  • Please download SurfaceDuo-Drivers-v2402.65-Desktop-Epsilon.zip if you want drivers for Surface Duo 1

  • Please download SurfaceDuo-Drivers-v2402.65-Desktop-Zeta.zip if you want drivers for Surface Duo 2

Known issues

- 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.

  • 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 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 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;
...
Read more

Version 2401.90 (Choco Island)

04 Feb 19:44
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2401.90 (Choco Island)

General information

**Released:** 01/28/2024 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 2401.90.

  • ⚠️ 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 v2401.90)


Release notes

Surface Duo (1st Gen)

What's new?

  • New!: We fixed a few issues with USB-C dongles and chargers and USB C accessories in general again

  • New!: We updated a few core drivers, that should improve performance and reliability fixes

  • New!: We fixed an issue preventing the installation of a few applications

  • New!: We started to merge a few changes towards camera and audio enablement, but both remain non functional today

  • Please download SurfaceDuo-Drivers-v2401.90-Desktop-Epsilon.zip if you want drivers for Surface Duo 1

  • Please download SurfaceDuo-Drivers-v2401.90-Desktop-Zeta.zip if you want drivers for Surface Duo 2

Known issues

- Installing Germanium 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.

  • 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 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 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&, TwoPanelHingedDevicePostureReadingChangedEv...
Read more

Version 2401.22 (Ghost Valley)

07 Jan 20:49
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2401.22 (Ghost Valley)

General information

**Released:** 01/07/2023 08: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 2401.22.

  • ⚠️ 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 v2401.22)


Release notes

Surface Duo (1st Gen)

What's new?

  • New!: We fixed a few issues with USB-C dongles and chargers and USB C accessories in general

  • New!: We added support for new surface docking accessories again

  • New!: We improved the behavior of automatic brightness, it should be better than ever

  • New!: We updated drivers related to PCIe for a future release, this change will also enable better energy consumption when PCIe is not in use, and requires the very latest uefi available as of this release.

  • Please download SurfaceDuo-Drivers-v2401.22-Desktop-Epsilon.zip if you want drivers for Surface Duo 1

  • Please download SurfaceDuo-Drivers-v2401.22-Desktop-Zeta.zip if you want drivers for Surface Duo 2

Known issues

- 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.

  • 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 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 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(TwoPanel...
Read more

Version 2312.29 - Theta

10 Dec 18:26
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2312.29 (Theta)

General information

**Released:** 12/10/2023 08: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 2312.29.

  • ⚠️ 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 v2312.29)


Release notes

What's new?

  • New!: You can now install drivers offline more easily, simply run "OfflineUpdater.cmd" at the root of the zip archive you downloaded, and follow instructions

NOTE: There's an issue currently where this will only work if ran on ARM64 systems, will issue a fix later next week, for now you can replace the driverupdater.exe binary in the archive with one compatible with your system (x86 or x64) Fixed, please download refreshed versions if you are having issues below

  • New!: You can now install drivers online! In other words, you can update the drivers on the device itself, while the OS is running. Currently this is work in progress and only supported if you have secure boot off (which normally is not the case). To update your drivers online within the os, simply run "OnlineUpdater.cmd" at the root of the zip archive you downloaded, and follow instructions

  • New!: We added better application installation support

  • New!: We now provide the matching version of driver updater so you can install the release more easily

Surface Duo (1st Gen)

What's new?

  • New!: We updated the audio calibration board configuration files. For now, you will notice audio is not yet enabled due to SPKR issues, we hope to bring this in next week for the anniversary release

  • New!: We updated the fingerprint sensor driver. The driver is now 100% functional with Secure Boot disabled. We will try to find a way out of this caveat for the next release.

  • New!: We improved the installation process to be faster and not depend on extra install steps online. This should result in less errors and more reliability.

  • New!: We updated most Qualcomm Drivers to their latest version (v2040)

  • New!: We added support for additional Surface Docking Accessories (Surface Audio Dock) by default

  • New!: We updated all Surface Drivers to their latest version when applicable

  • New!: We introduced a prerelease driver for Surface Dial support. Support remains disabled in this release.

  • New!: We introduced touch support for Redstone 5 and earlier Windows Versions.

New!: We are now providing smaller download packages, specifically tailored towards a given device and OS target.

  • Please download SurfaceDuo-Drivers-v2312.29-Desktop-Epsilon.zip if you want drivers for Surface Duo 1
  • Please download SurfaceDuo-Drivers-v2312.29-Desktop-Zeta.zip if you want drivers for Surface Duo 2
Known issues

- 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.

  • 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 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 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_strin...
Read more

Version 2311.30 - Ethos 🌃🌠🌌

09 Nov 22:14
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2311.30 (Ethos)

General information

**Released:** 11/09/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 2311.30.

  • ⚠️ 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 v2311.30)


Release notes

Surface Duo (1st Gen)

What's new?

  • Fixes an issue where connecting to external wireless displays using Miracast would crash the device

  • Rendering of both displays is now faster thanks to not having to rely on MDP BLT Engine anymore

  • Both displays now have vsync working so one doesn't lag with the other anymore

  • Fixed a crash issue when decoding/encoding videos like on youtube or when recording the desktop using the snipping tool application

  • Workarounded a crash issue regarding the battery miniport interface driver during clean installations of Windows Desktop

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

New!: We are now providing smaller download packages, specifically tailored towards a given device and OS target.

  • Please download SurfaceDuo-Drivers-v2311.30-Desktop-Epsilon.zip if you want drivers for Surface Duo 1
  • Please download SurfaceDuo-Drivers-v2311.30-Desktop-Zeta.zip if you want drivers for Surface Duo 2
Known issues

- 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.

  • 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 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 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::Co...
Read more

Version 2311.23 - Suzuki 🚵🚲🏍️

07 Nov 23:09
Compare
Choose a tag to compare

Surface Duo Drivers BSP - Version 2311.23 (Suzuki)

General information

**Released:** 11/07/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 2311.23.

  • ⚠️ 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 v2311.23)


Release notes

Surface Duo (1st Gen)

What's new?

  • We made lots of bug fixes and improvements regarding USB-C to resolve issues when using Dock like devices. We also disabled VBUS power out due to numerous issues, and it not being usable anyway currently with powerless USB dongles. We aim to come up with a fix later this week for this as well.

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

New!: We are now providing smaller download packages, specifically tailored towards a given device and OS target.

  • Please download SurfaceDuo-Drivers-v2311.20-Desktop-Epsilon.zip if you want drivers for Surface Duo 1 on Vibranium OS builds (19041 VB_RELEASE) or higher
  • Please download SurfaceDuo-Drivers-v2311.20-Desktop-Epsilon-TI.zip if you want drivers for Surface Duo 1 on Titanium OS builds (18362 19H1_RELEASE) or higher
  • Please download SurfaceDuo-Drivers-v2311.20-Desktop-Epsilon-RS5.zip if you want drivers for Surface Duo 1 on RS5 OS builds (17763 RS5_RELEASE) or higher
  • Please download SurfaceDuo-Drivers-v2311.20-Desktop-Zeta.zip if you want drivers for Surface Duo 2 on Germanium OS builds (RS_PRERELEASE 2023) or higher

Note: We are aware of people being impacted by issues with battery drivers causing a bugcheck (mistakenly called BSOD by most) during a clean installation. You can work around the problem for now by deleting the /components/QC8150/Device/DEVICE.SOC_QC8150.EPSILON/Drivers/Battery/qcbattminiclass8150.inf file prior to reinstalling (if you hit the issue), then let the device be setup all the way to the desktop, and add back the file, and update drivers again

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 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.Readi...
Read more

Version 2311.20 - Alpha 🌌🌃🌠

05 Nov 23:37
Compare
Choose a tag to compare

This update is a simple refresh over the previous version (2310.70 - Andromeda).
It provides updated firmware files for the Surface Slim Pen.
This update also provides bug fixes for Pen Pairing via Bluetooth and Radio Monitor.

New!: We are now providing smaller download packages, specifically tailored towards a given device and OS target.

  • Please download SurfaceDuo-Drivers-v2311.20-Desktop-Epsilon.zip if you want drivers for Surface Duo 1 on Vibranium OS builds (19041 VB_RELEASE) or higher
  • Please download SurfaceDuo-Drivers-v2311.20-Desktop-Epsilon-TI.zip if you want drivers for Surface Duo 1 on Titanium OS builds (18362 19H1_RELEASE) or higher
  • Please download SurfaceDuo-Drivers-v2311.20-Desktop-Epsilon-RS5.zip if you want drivers for Surface Duo 1 on RS5 OS builds (17763 RS5_RELEASE) or higher
  • Please download SurfaceDuo-Drivers-v2311.20-Desktop-Zeta.zip if you want drivers for Surface Duo 2 on Germanium OS builds (RS_PRERELEASE 2023) or higher

Note: We are aware of people being impacted by issues with battery drivers causing a bugcheck (mistakenly called BSOD by most) during a clean installation. You can work around the problem for now by deleting the /components/QC8150/Device/DEVICE.SOC_QC8150.EPSILON/Drivers/Battery/qcbattminiclass8150.inf file prior to reinstalling (if you hit the issue), then let the device be setup all the way to the desktop, and add back the file, and update drivers again