Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
3ccd21d
Start working on issue 835
Psychlist1972 Jan 31, 2026
208f428
Working on KSA bug
Psychlist1972 Feb 7, 2026
b100127
Working on KSA bug 835
Psychlist1972 Feb 8, 2026
d50b381
Initial enumeration for KSA back up and running with new structure
Psychlist1972 Feb 8, 2026
0713db4
Fix incorrect debug mode check in KSA Midi In Proxy
Psychlist1972 Feb 8, 2026
dab1647
Almost there
Psychlist1972 Feb 8, 2026
398a1b6
Now supports addition of loopMIDI ports post-enumeration
Psychlist1972 Feb 8, 2026
892b205
Add support for removing loopMIDI ports
Psychlist1972 Feb 9, 2026
c6aa07c
Merge branch 'main' into ksa-issue-835
Psychlist1972 Feb 9, 2026
ab7bad1
Working on > 16 ports limitation
Psychlist1972 Feb 10, 2026
b6a5b71
Change feature staging to match internal
Psychlist1972 Feb 10, 2026
4fd3ef8
Merge branch 'main' into ksa-issue-835
Psychlist1972 Feb 10, 2026
5e03ca4
Working on KSA updates
Psychlist1972 Feb 15, 2026
82fa120
Working on loopMIDI and similar issues
Psychlist1972 Feb 16, 2026
79aa5ed
Merge branch 'main' into ksa-issue-835
Psychlist1972 Feb 16, 2026
83626cd
Fix missing Feature include directory
Psychlist1972 Feb 17, 2026
7e27bb6
More changes to support loopMIDI etc.
Psychlist1972 Feb 17, 2026
b350187
Build artifacts
Psychlist1972 Feb 17, 2026
05246ed
Working on KSA loopmidi issue
Psychlist1972 Feb 17, 2026
54be453
Working on counts > 16 groups in either direction
Psychlist1972 Feb 17, 2026
faf3262
Update Midi2.KSAggregateMidiEndpointManager2.cpp
Psychlist1972 Feb 17, 2026
0c8f669
Merge branch 'main' into ksa-issue-835
Psychlist1972 Feb 20, 2026
fa2a7b2
Merge branch 'main' into ksa-issue-835
Psychlist1972 Feb 22, 2026
2119a44
Merge branch 'main' into ksa-issue-835
Psychlist1972 Feb 22, 2026
2e6266d
KSA issue updates
Psychlist1972 Feb 23, 2026
74a70c3
Merge branch 'main' into ksa-issue-835
Psychlist1972 Feb 23, 2026
fa9d06d
Cleanup m_endpointManager2
Psychlist1972 Feb 24, 2026
cfa9114
line ending fix
Psychlist1972 Feb 24, 2026
0071494
Working on KSA issue (not complete)
Psychlist1972 Feb 25, 2026
36e5a07
Working on KSA
Psychlist1972 Feb 26, 2026
615b1d3
Merge branch 'main' into ksa-issue-835
Psychlist1972 Feb 28, 2026
e8284b5
Merge branch 'main' into ksa-issue-835
Psychlist1972 Feb 28, 2026
01f94fd
Merge branch 'main' into ksa-issue-835
Psychlist1972 Feb 28, 2026
ed3beeb
Properly grouping filters into pending endpoints
Psychlist1972 Feb 28, 2026
dfdebf0
Add dynamically added filters/pins to existing activated endpoints an…
Psychlist1972 Mar 1, 2026
45accf8
Shorten timeouts in KSA. Change locking approach
Psychlist1972 Mar 1, 2026
44edb70
Naming for multiple instances of same device
Psychlist1972 Mar 1, 2026
3a149d6
Added filter removal for dynamic endpoints
Psychlist1972 Mar 1, 2026
7bb9628
USe correct instance id for add/remove
Psychlist1972 Mar 1, 2026
81b9b6a
Preview build support
Psychlist1972 Mar 1, 2026
9a05492
Updated KSA code to try to minimize any timing issues
Psychlist1972 Mar 2, 2026
cec3753
timeout changes
Psychlist1972 Mar 2, 2026
017faf1
Update Midi2.KSAggregateMidiEndpointManager2.cpp
Psychlist1972 Mar 2, 2026
c1f9422
build artifacts
Psychlist1972 Mar 2, 2026
fce37e8
Merge branch 'main' into ksa-issue-835
Psychlist1972 Mar 2, 2026
8e4df70
Fix deadlock
Psychlist1972 Mar 2, 2026
204d385
build artifacts
Psychlist1972 Mar 2, 2026
c3c0206
Update Midi2.KSAggregateMidiEndpointManager2.cpp
Psychlist1972 Mar 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 5 additions & 12 deletions .nuke/build.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,14 @@
"type": "string",
"enum": [
"BuildAndPublishAll",
"T_BuildAndPackageElectronProjection",
"T_BuildAndPackAllAppSDKs",
"T_BuildAppSdkRuntimeAndToolsInstaller",
"T_BuildAppSDKToolsAndTests",
"T_BuildConsoleApp",
"T_BuildCppSamples",
"T_BuildCSharpSamples",
"T_BuildPowerShellProjection",
"T_BuildSettingsApp",
"T_BuildUserToolsSharedComponents",
"T_CopySharedDesignAssets",
"T_BuildKsaPreviewPluginInstaller",
"T_BuildServiceAndPlugins",
"T_BuildServiceAndPluginsInstaller",
"T_CreateVersionIncludes",
"T_Prerequisites",
"T_ZipPowershellDevUtilities",
"T_ZipSamples"
"T_ZipServicePdbs",
"T_ZipWdmaud2"
]
},
"Verbosity": {
Expand Down
76 changes: 76 additions & 0 deletions build/nuke_build-service/Build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ enum MidiBuildType

AbsolutePath InBoxComponentsSetupSolutionFolder => SourceRootFolder / "oob-setup";

AbsolutePath KsaPreviewComponentsSetupSolutionFolder => SourceRootFolder / "oob-setup-ksa-preview-only";

AbsolutePath ApiReferenceFolder => SourceRootFolder / "shared" / "api-ref";


Expand All @@ -142,6 +144,7 @@ enum MidiBuildType
string[] InstallerPlatforms => new string[] { "x64", "Arm64" };

Dictionary<string, string> BuiltInBoxInstallers = new Dictionary<string, string>();
Dictionary<string, string> BuiltPreviewInstallers = new Dictionary<string, string>();

public static int Main () => Execute<Build>(x => x.BuildAndPublishAll);

Expand Down Expand Up @@ -541,6 +544,62 @@ void UpdateSetupBundleInfoIncludeFile(string platform)
}
});

Target T_BuildKsaPreviewPluginInstaller => _ => _
.DependsOn(T_Prerequisites)
.DependsOn(T_BuildServiceAndPlugins)
.DependsOn(T_BuildServiceAndPluginsInstaller)
.Executes(() =>
{
// we build for Arm64 and x64. No EC required here
foreach (var platform in InstallerPlatforms)
{
string solutionDir = KsaPreviewComponentsSetupSolutionFolder.ToString() + @"\";

var msbuildProperties = new Dictionary<string, object>();
msbuildProperties.Add("Platform", platform);
msbuildProperties.Add("SolutionDir", solutionDir); // to include trailing slash

Console.Out.WriteLine($"----------------------------------------------------------------------");
Console.Out.WriteLine($"SolutionDir: {solutionDir}");
Console.Out.WriteLine($"Platform: {platform}");

NuGetTasks.NuGetRestore(_ => _
.SetProcessWorkingDirectory(solutionDir)
.SetSource(@"https://api.nuget.org/v3/index.json")
.SetSolutionDirectory(solutionDir)
//.SetConfigFile(packagesConfigFullPath)
);

var output = MSBuildTasks.MSBuild(_ => _
.SetTargetPath(KsaPreviewComponentsSetupSolutionFolder / "midi-services-ksa-preview-setup.sln")
.SetMaxCpuCount(null)
/*.SetOutDir(outputFolder) */
/*.SetProcessWorkingDirectory(ApiSolutionFolder)*/
/*.SetTargets("Build") */
.SetProperties(msbuildProperties)
.SetConfiguration(Configuration.Release)
.SetVerbosity(BuildVerbosity)
.SetTargets("Clean", "Rebuild")
.EnableNodeReuse()
);


// todo: it would be better to see if any of the sdk files have changed and only
// do this copy if a new setup file was created. Maybe do a before/after date/time check?

string installerType = ServiceBuildConfiguration == Configuration.Debug ? "DEBUG" : "";


string newInstallerName = $"Windows MIDI Services ({installerType}KSA Transport Preview) {BuildVersionFullString}-{platform.ToLower()}.exe";

var setupFile = KsaPreviewComponentsSetupSolutionFolder / "main-bundle" / "bin" / platform / Configuration.Release / "WindowsMidiServicesKSATransportPreviewSetup.exe";
setupFile.Copy(ThisReleaseFolder / newInstallerName, ExistsPolicy.FileOverwrite);

BuiltPreviewInstallers[platform.ToLower()] = newInstallerName;
}
});


Target T_ZipServicePdbs => _ => _
.DependsOn(T_Prerequisites)
.DependsOn(T_BuildServiceAndPlugins)
Expand Down Expand Up @@ -634,6 +693,7 @@ void UpdateSetupBundleInfoIncludeFile(string platform)
.DependsOn(T_CreateVersionIncludes)
.DependsOn(T_BuildServiceAndPlugins)
.DependsOn(T_BuildServiceAndPluginsInstaller)
.DependsOn(T_BuildKsaPreviewPluginInstaller)
.DependsOn(T_ZipWdmaud2)
.DependsOn(T_ZipPowershellDevUtilities)
.DependsOn(T_ZipServicePdbs)
Expand All @@ -653,6 +713,22 @@ void UpdateSetupBundleInfoIncludeFile(string platform)
Console.WriteLine("No in-box installers built.");
}

if (BuiltPreviewInstallers.Count > 0)
{
Console.WriteLine("\nBuilt preview installers:");

foreach (var item in BuiltPreviewInstallers)
{
Console.WriteLine($" {item.Key.PadRight(5)} {item.Value}");
}
}
else
{
Console.WriteLine("No preview installers built.");
}



});


Expand Down
21 changes: 21 additions & 0 deletions build/replace_just_ksa_x64.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
@echo off
echo This must be run as administrator.

set servicepath="%ProgramFiles%\Windows MIDI Services\Service"
set apipath="%ProgramFiles%\Windows MIDI Services\API"
set dmppath="%ProgramFiles%\Windows MIDI Services\"
set buildoutput="%midi_repo_root%src\api\VSFiles\x64\Release"



echo Stopping midisrv
net stop midisrv

echo Copying KSA Transport
mkdir %servicepath%
copy /Y %buildoutput%\Midi2.KSAggregateTransport.dll %servicepath%
regsvr32 %servicepath%\Midi2.KSAggregateTransport.dll

net start midisrv

pause
6 changes: 3 additions & 3 deletions build/staging/version/BundleInfo.wxi
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<Include>
<?define SetupVersionName="SDK Release Candidate 3 Arm64" ?>
<?define SetupVersionNumber="1.0.16-rc.3.7" ?>
<?define MidiSdkAndToolsVersion="1.0.16-rc.3.7" ?>
<?define SetupVersionName="Service Preview 14 Arm64" ?>
<?define SetupVersionNumber="1.0.15-preview.14.90" ?>
<?define MidiSdkAndToolsVersion="1.0.15-preview.14.90" ?>
</Include>
16 changes: 8 additions & 8 deletions build/staging/version/WindowsMidiServicesVersion.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ public static class MidiNuGetBuildInformation
{
public const bool IsPreview = true;
public const string Source = "GitHub Preview";
public const string BuildDate = "2026-03-01";
public const string Name = "SDK Release Candidate 3";
public const string BuildFullVersion = "1.0.16-rc.3.7";
public const string BuildDate = "2026-03-02";
public const string Name = "Service Preview 14";
public const string BuildFullVersion = "1.0.15-preview.14.90";
public const ushort VersionMajor = 1;
public const ushort VersionMinor = 0;
public const ushort VersionPatch = 16;
public const ushort VersionBuildNumber = 7;
public const string Preview = "rc.3.7";
public const string AssemblyFullVersion = "1.0.16.7";
public const string FileFullVersion = "1.0.16.7";
public const ushort VersionPatch = 15;
public const ushort VersionBuildNumber = 90;
public const string Preview = "preview.14.90";
public const string AssemblyFullVersion = "1.0.15.90";
public const string FileFullVersion = "1.0.15.90";
}
}
14 changes: 7 additions & 7 deletions build/staging/version/WindowsMidiServicesVersion.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@

#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_IS_PREVIEW true
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_SOURCE L"GitHub Preview"
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_DATE L"2026-03-01"
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_VERSION_NAME L"SDK Release Candidate 3"
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_VERSION_FULL L"1.0.16-rc.3.7"
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_DATE L"2026-03-02"
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_VERSION_NAME L"Service Preview 14"
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_VERSION_FULL L"1.0.15-preview.14.90"
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_VERSION_MAJOR 1
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_VERSION_MINOR 0
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_VERSION_PATCH 16
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_VERSION_BUILD_NUMBER 7
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_PREVIEW L"rc.3.7"
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_VERSION_FILE L"1.0.16.7"
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_VERSION_PATCH 15
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_VERSION_BUILD_NUMBER 90
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_PREVIEW L"preview.14.90"
#define WINDOWS_MIDI_SERVICES_NUGET_BUILD_VERSION_FILE L"1.0.15.90"

#endif
4 changes: 4 additions & 0 deletions src/api/Drivers/USBMIDI2/Driver/USBMidi2.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -79,24 +79,28 @@
<TargetName>USBMidi2</TargetName>
<OutDir>$(SolutionDir)VSFiles\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)VSFiles\intermediate\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<IncludePath>$(IncludePath);$(KMDF_INC_PATH)$(KMDF_VER_PATH);$(SolutionDir)\inc</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<TargetName>USBMidi2</TargetName>
<OutDir>$(SolutionDir)VSFiles\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)VSFiles\intermediate\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<IncludePath>$(IncludePath);$(KMDF_INC_PATH)$(KMDF_VER_PATH);$(SolutionDir)\inc</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<TargetName>USBMidi2</TargetName>
<OutDir>$(SolutionDir)VSFiles\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)VSFiles\intermediate\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<IncludePath>$(IncludePath);$(KMDF_INC_PATH)$(KMDF_VER_PATH);$(SolutionDir)\inc</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
<TargetName>USBMidi2</TargetName>
<OutDir>$(SolutionDir)VSFiles\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)VSFiles\intermediate\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<IncludePath>$(IncludePath);$(KMDF_INC_PATH)$(KMDF_VER_PATH);$(SolutionDir)\inc</IncludePath>
</PropertyGroup>
<PropertyGroup Label="Vcpkg">
<VcpkgEnableManifest>false</VcpkgEnableManifest>
Expand Down
18 changes: 18 additions & 0 deletions src/api/Inc/Feature_Servicing_MIDI2VirtualPortDriversFix.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License
// ============================================================================
// This is part of the Windows MIDI Services App API and should be used
// in your Windows application via an official binary distribution.
// Further information: https://aka.ms/midi
// ============================================================================

#pragma once

class Feature_Servicing_MIDI2VirtualPortDriversFix
{
public:
static bool IsEnabled()
{
return true;
}
};
Loading