diff --git a/build/staging/version/BundleInfo.wxi b/build/staging/version/BundleInfo.wxi
index 3de205f3..7d465b97 100644
--- a/build/staging/version/BundleInfo.wxi
+++ b/build/staging/version/BundleInfo.wxi
@@ -1,4 +1,4 @@
-
+
diff --git a/build/staging/version/WindowsMidiServicesVersion.cs b/build/staging/version/WindowsMidiServicesVersion.cs
index f1104722..2be2f001 100644
--- a/build/staging/version/WindowsMidiServicesVersion.cs
+++ b/build/staging/version/WindowsMidiServicesVersion.cs
@@ -6,12 +6,12 @@ public static class MidiBuildInformation
{
public const string Source = "GitHub Preview";
public const string Name = "Customer Preview 2";
- public const string BuildFullVersion = "1.0.3-preview-11.250215-2126";
+ public const string BuildFullVersion = "1.0.3-preview-11.250216-1702";
public const string VersionMajor = "1";
public const string VersionMinor = "0";
public const string VersionRevision = "3";
- public const string VersionDateNumber = "250215";
- public const string VersionTimeNumber = "2126";
+ public const string VersionDateNumber = "250216";
+ public const string VersionTimeNumber = "1702";
}
}
diff --git a/build/staging/version/WindowsMidiServicesVersion.h b/build/staging/version/WindowsMidiServicesVersion.h
index 6abbb14e..22f3a5b7 100644
--- a/build/staging/version/WindowsMidiServicesVersion.h
+++ b/build/staging/version/WindowsMidiServicesVersion.h
@@ -5,12 +5,12 @@
#define WINDOWS_MIDI_SERVICES_BUILD_SOURCE L"GitHub Preview"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_NAME L"Customer Preview 2"
-#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_FULL L"1.0.3-preview-11.250215-2126"
+#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_FULL L"1.0.3-preview-11.250216-1702"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_MAJOR L"1"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_MINOR L"0"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_REVISION L"3"
-#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_DATE_NUMBER L"250215"
-#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_TIME_NUMBER L"2126"
+#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_DATE_NUMBER L"250216"
+#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_TIME_NUMBER L"1702"
#endif
diff --git a/docs/developer-how-to/how-to-install-development-builds.md b/docs/developer-how-to/how-to-install-development-builds.md
index 31561368..6a56baea 100644
--- a/docs/developer-how-to/how-to-install-development-builds.md
+++ b/docs/developer-how-to/how-to-install-development-builds.md
@@ -70,3 +70,9 @@ If everything worked, you'll see the files reported as being from `Program Files
In some cases, you may want to leave the existing service, but install only a preview plugin. In that case, the service and other components will still show `System32`, but the new component will show `Program Files` as the location.
> Note: These scripts only know about the plugins we've developed. Additional third-party components will not be shown in the output unless we know about and add them.
+
+## wdmaud2.drv the WinMM bridge to Windows MIDI Services
+
+The WinMM compatibility component, `wdmaud2.drv`, is a system-protected file under Windows 11 Resource Protection (WRP). It is possible to take ownership of it using the `takeown` command, but if you replace it, WRP will kick in and put the official version back in place. The mechanisms used to bypass Windows File Protection (WFP) with older versions of Windows do not necessarily apply here.
+
+[Learn more about Windows Resource Protection](https://learn.microsoft.com/windows/win32/wfp/about-windows-file-protection)
diff --git a/samples/cpp-winrt/basics/client-basics-cpp.vcxproj b/samples/cpp-winrt/basics/client-basics-cpp.vcxproj
index cae1852c..6ee2288c 100644
--- a/samples/cpp-winrt/basics/client-basics-cpp.vcxproj
+++ b/samples/cpp-winrt/basics/client-basics-cpp.vcxproj
@@ -2,7 +2,7 @@
- Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250215-2126
+ Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250216-1702
true
true
false
diff --git a/samples/cpp-winrt/basics/packages.config b/samples/cpp-winrt/basics/packages.config
index 10c74314..bb347eaa 100644
--- a/samples/cpp-winrt/basics/packages.config
+++ b/samples/cpp-winrt/basics/packages.config
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/samples/cpp-winrt/loopback-endpoints/loopback-endpoints-cpp.vcxproj b/samples/cpp-winrt/loopback-endpoints/loopback-endpoints-cpp.vcxproj
index 91112dac..329e2c94 100644
--- a/samples/cpp-winrt/loopback-endpoints/loopback-endpoints-cpp.vcxproj
+++ b/samples/cpp-winrt/loopback-endpoints/loopback-endpoints-cpp.vcxproj
@@ -2,7 +2,7 @@
- Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250215-2126
+ Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250216-1702
true
true
true
diff --git a/samples/cpp-winrt/loopback-endpoints/packages.config b/samples/cpp-winrt/loopback-endpoints/packages.config
index 10c74314..bb347eaa 100644
--- a/samples/cpp-winrt/loopback-endpoints/packages.config
+++ b/samples/cpp-winrt/loopback-endpoints/packages.config
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/samples/cpp-winrt/send-speed/packages.config b/samples/cpp-winrt/send-speed/packages.config
index 10c74314..bb347eaa 100644
--- a/samples/cpp-winrt/send-speed/packages.config
+++ b/samples/cpp-winrt/send-speed/packages.config
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/samples/cpp-winrt/send-speed/send-speed-cpp.vcxproj b/samples/cpp-winrt/send-speed/send-speed-cpp.vcxproj
index 6900ff4c..e5a084c1 100644
--- a/samples/cpp-winrt/send-speed/send-speed-cpp.vcxproj
+++ b/samples/cpp-winrt/send-speed/send-speed-cpp.vcxproj
@@ -2,7 +2,7 @@
- Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250215-2126
+ Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250216-1702
true
true
true
diff --git a/samples/cpp-winrt/simple-app-to-app-midi/packages.config b/samples/cpp-winrt/simple-app-to-app-midi/packages.config
index 10c74314..bb347eaa 100644
--- a/samples/cpp-winrt/simple-app-to-app-midi/packages.config
+++ b/samples/cpp-winrt/simple-app-to-app-midi/packages.config
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/samples/cpp-winrt/simple-app-to-app-midi/simple-app-to-app-cpp.vcxproj b/samples/cpp-winrt/simple-app-to-app-midi/simple-app-to-app-cpp.vcxproj
index 8bad8d12..56ef7236 100644
--- a/samples/cpp-winrt/simple-app-to-app-midi/simple-app-to-app-cpp.vcxproj
+++ b/samples/cpp-winrt/simple-app-to-app-midi/simple-app-to-app-cpp.vcxproj
@@ -2,7 +2,7 @@
- Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250215-2126
+ Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250216-1702
true
true
true
diff --git a/samples/cpp-winrt/static-enum-endpoints/packages.config b/samples/cpp-winrt/static-enum-endpoints/packages.config
index 10c74314..bb347eaa 100644
--- a/samples/cpp-winrt/static-enum-endpoints/packages.config
+++ b/samples/cpp-winrt/static-enum-endpoints/packages.config
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/samples/cpp-winrt/static-enum-endpoints/static-enum-endpoints-cpp.vcxproj b/samples/cpp-winrt/static-enum-endpoints/static-enum-endpoints-cpp.vcxproj
index 62169f33..2f8a2598 100644
--- a/samples/cpp-winrt/static-enum-endpoints/static-enum-endpoints-cpp.vcxproj
+++ b/samples/cpp-winrt/static-enum-endpoints/static-enum-endpoints-cpp.vcxproj
@@ -2,7 +2,7 @@
- Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250215-2126
+ Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250216-1702
true
true
true
diff --git a/samples/cpp-winrt/watch-endpoints/packages.config b/samples/cpp-winrt/watch-endpoints/packages.config
index 10c74314..bb347eaa 100644
--- a/samples/cpp-winrt/watch-endpoints/packages.config
+++ b/samples/cpp-winrt/watch-endpoints/packages.config
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/samples/cpp-winrt/watch-endpoints/watch-endpoints-cpp.vcxproj b/samples/cpp-winrt/watch-endpoints/watch-endpoints-cpp.vcxproj
index 1dab4006..fe2a43e3 100644
--- a/samples/cpp-winrt/watch-endpoints/watch-endpoints-cpp.vcxproj
+++ b/samples/cpp-winrt/watch-endpoints/watch-endpoints-cpp.vcxproj
@@ -2,7 +2,7 @@
- Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250215-2126
+ Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250216-1702
true
true
true
diff --git a/src/api/Inc/MidiDefs.h b/src/api/Inc/MidiDefs.h
index 17b2dee2..a5887fc6 100644
--- a/src/api/Inc/MidiDefs.h
+++ b/src/api/Inc/MidiDefs.h
@@ -640,7 +640,7 @@ DEFINE_MIDIDEVPROPKEY(PKEY_MIDI_MidiOutLatencyTicksUserOverride, 802); // DE
// Starts at 900
#define STRING_PKEY_MIDI_VirtualMidiEndpointAssociator MIDI_STRING_PKEY_GUID MIDI_STRING_PKEY_PID_SEPARATOR L"900"
-DEFINE_MIDIDEVPROPKEY(PKEY_MIDI_VirtualMidiEndpointAssociator, 900); // DEVPROP_TYPE_GUID
+DEFINE_MIDIDEVPROPKEY(PKEY_MIDI_VirtualMidiEndpointAssociator, 900); // DEVPROP_TYPE_STRING
diff --git a/src/api/Inc/midi_naming.h b/src/api/Inc/midi_naming.h
index 7852c62b..24058886 100644
--- a/src/api/Inc/midi_naming.h
+++ b/src/api/Inc/midi_naming.h
@@ -39,13 +39,20 @@ namespace WindowsMidiServicesInternal::Midi1PortNaming
cleanedPinName = pinName;
}
+ cleanedPinName = internal::TrimmedWStringCopy(cleanedPinName);
+ auto comparePinName = internal::ToUpperWStringCopy(cleanedPinName); // this needs to be just the uppercase of cleanedPinName for the replace to work
+
+ auto compareParentName = internal::ToUpperWStringCopy(parentDeviceName);
+ auto compareFilterName = internal::ToUpperWStringCopy(filterName);
+
// the double and triple space entries need to be last
// there are other ways to do this with pattern matching,
// but just banging this through for this version
- const std::wstring wordsToRemove[] =
+ // these must all be uppercase when alpha characters are included
+ std::wstring wordsToRemove[] =
{
// many of these are added by our USB and KS stack, not by the device, which is why they are here
- parentDeviceName, filterName,
+ compareParentName, compareFilterName,
L"[0]", L"[1]", L"[2]", L"[3]", L"[4]", L"[5]", L"[6]", L"[7]", L"[8]", L"[9]", L"[10]", L"[11]", L"[12]", L"[13]", L"[14]", L"[15]", L"[16]",
L" ", L" ", L" "
};
@@ -54,11 +61,12 @@ namespace WindowsMidiServicesInternal::Midi1PortNaming
{
if (cleanedPinName.length() >= word.length())
{
- auto idx = cleanedPinName.find(word);
+ auto idx = comparePinName.find(word);
if (idx != std::wstring::npos)
{
cleanedPinName = cleanedPinName.erase(idx, word.length());
+ comparePinName = comparePinName.erase(idx, word.length());
}
}
}
@@ -105,6 +113,18 @@ namespace WindowsMidiServicesInternal::Midi1PortNaming
return truncateToWinMMLimit ? customPortName.substr(0, MAXPNAMELEN - 1) : customPortName;
}
+ if (useOldStyleNamingForNonUmpDevice && !isNativeUmpDevice)
+ {
+ // TODO: Find the old naming code in the source tree, and reimplement it here
+
+ std::wstring name;
+
+ // TEMPORARY code
+ name = transportSuppliedEndpointName;
+
+
+ return truncateToWinMMLimit ? name.substr(0, MAXPNAMELEN - 1) : name;
+ }
if (isNativeUmpDevice)
{
@@ -152,34 +172,13 @@ namespace WindowsMidiServicesInternal::Midi1PortNaming
return name + L" " + suffix;
}
+ // this is the fallback
- if (useOldStyleNamingForNonUmpDevice)
- {
- // TODO: Find the old naming code in the source tree, and reimplement it here
-
- std::wstring name;
-
- // TEMPORARY code
- name = transportSuppliedEndpointName;
-
-
- return truncateToWinMMLimit ? name.substr(0, MAXPNAMELEN - 1) : name;
- }
- else
- {
-
- std::wstring name;
-
- // TEMPORARY code
+ std::wstring name;
- name = parentDeviceName;
+ name = parentDeviceName;
-
- return truncateToWinMMLimit ? name.substr(0, MAXPNAMELEN - 1) : name;
- }
-
-
- return L"No name available";
+ return truncateToWinMMLimit ? name.substr(0, MAXPNAMELEN - 1) : name;
}
diff --git a/src/app-sdk/mididiag/main.cpp b/src/app-sdk/mididiag/main.cpp
index 847d008c..cd6e98d1 100644
--- a/src/app-sdk/mididiag/main.cpp
+++ b/src/app-sdk/mididiag/main.cpp
@@ -611,6 +611,24 @@ bool DoSectionMidi2ApiEndpoints(_In_ bool const verbose)
OutputStringField(MIDIDIAG_FIELD_LABEL_MIDI2_ENDPOINT_USER_SUPPLIED_DESC, userInfo.Description);
}
+
+ // show any GTBs. This is needed to help debug some winmm enumeration issues
+
+ for (auto const& gtb : device.GetGroupTerminalBlocks())
+ {
+ OutputBlankLine();
+
+ OutputNumericField(MIDIDIAG_FIELD_LABEL_GTB_NUMBER, gtb.Number());
+ OutputStringField(MIDIDIAG_FIELD_LABEL_GTB_NAME, gtb.Name());
+ OutputNumericField(MIDIDIAG_FIELD_LABEL_GTB_FIRST_GROUP, gtb.FirstGroup().DisplayValue());
+ OutputNumericField(MIDIDIAG_FIELD_LABEL_GTB_GROUP_COUNT, gtb.GroupCount());
+ }
+
+ if (device.GetGroupTerminalBlocks().Size() > 0)
+ {
+ OutputBlankLine();
+ }
+
auto parent = device.GetParentDeviceInformation();
if (parent != nullptr)
diff --git a/src/app-sdk/mididiag/mididiag.vcxproj b/src/app-sdk/mididiag/mididiag.vcxproj
index d92dc095..fbb74a58 100644
--- a/src/app-sdk/mididiag/mididiag.vcxproj
+++ b/src/app-sdk/mididiag/mididiag.vcxproj
@@ -2,7 +2,7 @@
- Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250215-2126
+ Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250216-1702
true
true
true
diff --git a/src/app-sdk/mididiag/mididiag_field_defs.h b/src/app-sdk/mididiag/mididiag_field_defs.h
index 95c608b9..be810090 100644
--- a/src/app-sdk/mididiag/mididiag_field_defs.h
+++ b/src/app-sdk/mididiag/mididiag_field_defs.h
@@ -78,6 +78,13 @@
#define MIDIDIAG_FIELD_LABEL_MIDI2_ENDPOINT_PARENT_ID "parent_id"
#define MIDIDIAG_FIELD_LABEL_MIDI2_ENDPOINT_PARENT_NAME "parent_name"
+#define MIDIDIAG_FIELD_LABEL_GTB_NUMBER "gtb_number"
+#define MIDIDIAG_FIELD_LABEL_GTB_NAME "gtb_name"
+#define MIDIDIAG_FIELD_LABEL_GTB_FIRST_GROUP "gtb_first_group_number"
+#define MIDIDIAG_FIELD_LABEL_GTB_GROUP_COUNT "gtb_group_count"
+
+
+
#define MIDIDIAG_SECTION_LABEL_MIDI1_API_INPUT_ENDPOINTS "enum_winrt_midi1_api_input_ports"
#define MIDIDIAG_SECTION_LABEL_MIDI1_API_OUTPUT_ENDPOINTS "enum_winrt_midi1_api_output_ports"
#define MIDIDIAG_FIELD_LABEL_MIDI1_ENDPOINT_ID "endpoint_device_id"
diff --git a/src/app-sdk/mididiag/packages.config b/src/app-sdk/mididiag/packages.config
index b0a52d03..d02ea5db 100644
--- a/src/app-sdk/mididiag/packages.config
+++ b/src/app-sdk/mididiag/packages.config
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/src/app-sdk/midimdnsinfo/midimdnsinfo.vcxproj b/src/app-sdk/midimdnsinfo/midimdnsinfo.vcxproj
index f4cf395b..2250c251 100644
--- a/src/app-sdk/midimdnsinfo/midimdnsinfo.vcxproj
+++ b/src/app-sdk/midimdnsinfo/midimdnsinfo.vcxproj
@@ -2,7 +2,7 @@
- Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250215-2126
+ Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250216-1702
true
true
true
diff --git a/src/app-sdk/midimdnsinfo/packages.config b/src/app-sdk/midimdnsinfo/packages.config
index b0a52d03..d02ea5db 100644
--- a/src/app-sdk/midimdnsinfo/packages.config
+++ b/src/app-sdk/midimdnsinfo/packages.config
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/src/app-sdk/midiusbinfo/main.cpp b/src/app-sdk/midiusbinfo/main.cpp
index 3f030a89..1bf0fceb 100644
--- a/src/app-sdk/midiusbinfo/main.cpp
+++ b/src/app-sdk/midiusbinfo/main.cpp
@@ -569,6 +569,7 @@ int __cdecl main()
//}
std::cout << std::endl;
+ std::cout << "-- End of Information --" << std::endl << std::endl;
return 0;
}
diff --git a/src/app-sdk/midiusbinfo/midiusbinfo.vcxproj b/src/app-sdk/midiusbinfo/midiusbinfo.vcxproj
index 4997aed1..c00d3680 100644
--- a/src/app-sdk/midiusbinfo/midiusbinfo.vcxproj
+++ b/src/app-sdk/midiusbinfo/midiusbinfo.vcxproj
@@ -2,7 +2,7 @@
- Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250215-2126
+ Microsoft.Windows.Devices.Midi2.1.0.3-preview-11.250216-1702
true
true
true
diff --git a/src/app-sdk/midiusbinfo/packages.config b/src/app-sdk/midiusbinfo/packages.config
index b0a52d03..d02ea5db 100644
--- a/src/app-sdk/midiusbinfo/packages.config
+++ b/src/app-sdk/midiusbinfo/packages.config
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/src/app-sdk/winrt/MidiLoopbackEndpointManager.cpp b/src/app-sdk/winrt/MidiLoopbackEndpointManager.cpp
index 2c8c8d3a..49c0ea84 100644
--- a/src/app-sdk/winrt/MidiLoopbackEndpointManager.cpp
+++ b/src/app-sdk/winrt/MidiLoopbackEndpointManager.cpp
@@ -170,29 +170,21 @@ namespace winrt::Microsoft::Windows::Devices::Midi2::Endpoints::Loopback::implem
// this is wasteful to get everything and then iterate, but there's
// no AQS way to search using our custom DEVPKEY properties
- winrt::hstring query{ MIDI_ENDPOINT_DEVICE_AQS_FILTER };
-
for (auto const& ep : endpointsToSearch)
{
- auto id = internal::NormalizeEndpointInterfaceIdHStringCopy(ep.EndpointDeviceId());
+ if (ep.GetTransportSuppliedInfo().TransportId != TransportId()) continue;
+ if (ep.EndpointDeviceId() == loopbackEndpoint.EndpointDeviceId()) continue;
+
- // don't process the endpoint that was passed in, of course
- if (id != loopbackEndpoint.EndpointDeviceId())
+ if (ep.Properties().HasKey(STRING_PKEY_MIDI_VirtualMidiEndpointAssociator) &&
+ ep.Properties().Lookup(STRING_PKEY_MIDI_VirtualMidiEndpointAssociator) != nullptr)
{
- if (ep.Properties().HasKey(STRING_PKEY_MIDI_VirtualMidiEndpointAssociator) &&
- ep.Properties().Lookup(STRING_PKEY_MIDI_VirtualMidiEndpointAssociator) != nullptr)
+ auto thisAssociator = winrt::unbox_value(ep.Properties().Lookup(STRING_PKEY_MIDI_VirtualMidiEndpointAssociator));
+
+ // return the endpoint if it has the matching association id
+ if (thisAssociator == associator)
{
- auto thisAssociator = winrt::unbox_value(loopbackEndpoint.Properties().Lookup(STRING_PKEY_MIDI_VirtualMidiEndpointAssociator));
-
- if (!thisAssociator.empty())
- {
- // return the endpoint if it has the matching association id
- if (thisAssociator == associator)
- {
- // create the endpoint
- return MidiEndpointDeviceInformation::CreateFromEndpointDeviceId(id);
- }
- }
+ return ep;
}
}
}
diff --git a/src/dev-tools/reg-helpers/midi-pre-install-reg-steps.ps1 b/src/dev-tools/reg-helpers/midi-pre-install-reg-steps.ps1
index c1fa58db..bfcdd259 100644
--- a/src/dev-tools/reg-helpers/midi-pre-install-reg-steps.ps1
+++ b/src/dev-tools/reg-helpers/midi-pre-install-reg-steps.ps1
@@ -167,6 +167,8 @@ if ($confirmation -eq 'y' -or $confirmation -eq 'Y')
Write-Host "Taking ownership of wdmaud2.drv..." -ForegroundColor DarkCyan
cmd.exe /c "takeown /F %windir%\System32\wdmaud2.drv"
+ #cmd.exe /c "icacls %windir%\System32\wdmaud2.drv /grant administrators:F"
+ Write-Host "wdmaud2.drv is protected by Windows Resource Protection (WRP) and cannot be replaced in public builds without first disabling WRP." -ForegroundColor DarkCyan
Write-Host
Write-Host "You may now install the development version of the service and plugins." -ForegroundColor Green
diff --git a/src/user-tools/midi-console/Midi/Commands/Endpoint/EndpointPropertiesCommand.cs b/src/user-tools/midi-console/Midi/Commands/Endpoint/EndpointPropertiesCommand.cs
index 9cfdc28a..9195034e 100644
--- a/src/user-tools/midi-console/Midi/Commands/Endpoint/EndpointPropertiesCommand.cs
+++ b/src/user-tools/midi-console/Midi/Commands/Endpoint/EndpointPropertiesCommand.cs
@@ -371,7 +371,8 @@ public override int Execute(CommandContext context, Settings settings)
}
groupInformation += $", [grey]{Strings.CommonStringProtocolSingular}[/] " + groupTerminalBlock.Protocol.ToString();
- groupInformation += $", [grey]{Strings.CommonStringDirectionSingular}[/] " + groupTerminalBlock.Direction.ToString();
+
+ groupInformation += $", [grey]{Strings.CommonStringDirectionSingular}[/] " + MidiFriendlyNames.GroupTerminalBlockDirection(groupTerminalBlock.Direction);
table.AddRow(
AnsiMarkupFormatter.FormatBlockNumber(groupTerminalBlock.Number) + " " +
diff --git a/src/user-tools/midi-console/Midi/MidiFriendlyNames.cs b/src/user-tools/midi-console/Midi/MidiFriendlyNames.cs
new file mode 100644
index 00000000..3fa3a242
--- /dev/null
+++ b/src/user-tools/midi-console/Midi/MidiFriendlyNames.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Microsoft.Midi.ConsoleApp
+{
+ public class MidiFriendlyNames
+ {
+ public static string GroupTerminalBlockDirection(MidiGroupTerminalBlockDirection direction)
+ {
+ switch (direction)
+ {
+ case MidiGroupTerminalBlockDirection.Bidirectional:
+ return Strings.DirectionMessageBiDi;
+ case MidiGroupTerminalBlockDirection.BlockInput:
+ return Strings.DirectionMessageDestination;
+ case MidiGroupTerminalBlockDirection.BlockOutput:
+ return Strings.DirectionMessageSource;
+ default:
+ return Strings.Unknown;
+ }
+ }
+ }
+}
diff --git a/src/user-tools/midi-console/Midi/Resources/Strings.Designer.cs b/src/user-tools/midi-console/Midi/Resources/Strings.Designer.cs
index 5e4d9b90..8833362d 100644
--- a/src/user-tools/midi-console/Midi/Resources/Strings.Designer.cs
+++ b/src/user-tools/midi-console/Midi/Resources/Strings.Designer.cs
@@ -420,6 +420,33 @@ internal static string CommonTableHeaderIndex {
}
}
+ ///
+ /// Looks up a localized string similar to Source/Destination.
+ ///
+ internal static string DirectionMessageBiDi {
+ get {
+ return ResourceManager.GetString("DirectionMessageBiDi", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Message Destination.
+ ///
+ internal static string DirectionMessageDestination {
+ get {
+ return ResourceManager.GetString("DirectionMessageDestination", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Message Source.
+ ///
+ internal static string DirectionMessageSource {
+ get {
+ return ResourceManager.GetString("DirectionMessageSource", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Endpoint disconnected.
///
@@ -2369,6 +2396,15 @@ internal static string TableColumnHeaderCommonTimestamp {
}
}
+ ///
+ /// Looks up a localized string similar to Unknown.
+ ///
+ internal static string Unknown {
+ get {
+ return ResourceManager.GetString("Unknown", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to The specified group index is invalid. Specify a group index between 0 and 15..
///
diff --git a/src/user-tools/midi-console/Midi/Resources/Strings.resx b/src/user-tools/midi-console/Midi/Resources/Strings.resx
index 56287ed5..f7df8b9f 100644
--- a/src/user-tools/midi-console/Midi/Resources/Strings.resx
+++ b/src/user-tools/midi-console/Midi/Resources/Strings.resx
@@ -917,4 +917,16 @@ Timestamp
Restart the service when complete
+
+ Message Source
+
+
+ Message Destination
+
+
+ Source/Destination
+
+
+ Unknown
+
\ No newline at end of file
diff --git a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Assets/LoopbackDiagram.svg b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Assets/LoopbackDiagram.svg
index da14b13e..88b550bc 100644
--- a/src/user-tools/midi-settings/Microsoft.Midi.Settings/Assets/LoopbackDiagram.svg
+++ b/src/user-tools/midi-settings/Microsoft.Midi.Settings/Assets/LoopbackDiagram.svg
@@ -1,27 +1,111 @@
-