diff --git a/src/modules/powerdisplay/PowerDisplay.Lib/Drivers/DDC/DdcCiController.cs b/src/modules/powerdisplay/PowerDisplay.Lib/Drivers/DDC/DdcCiController.cs
index 574e451def..0c9fc598f3 100644
--- a/src/modules/powerdisplay/PowerDisplay.Lib/Drivers/DDC/DdcCiController.cs
+++ b/src/modules/powerdisplay/PowerDisplay.Lib/Drivers/DDC/DdcCiController.cs
@@ -418,6 +418,9 @@ namespace PowerDisplay.Common.Drivers.DDC
}
}
+ // Initialize brightness (always supported for DDC/CI monitors)
+ InitializeBrightness(monitor, candidate.Handle);
+
monitors.Add(monitor);
newHandleMap[monitor.Id] = candidate.Handle;
@@ -452,6 +455,19 @@ namespace PowerDisplay.Common.Drivers.DDC
}
}
+ ///
+ /// Initialize brightness value for a monitor using VCP 0x10.
+ ///
+ private static void InitializeBrightness(Monitor monitor, IntPtr handle)
+ {
+ if (GetVCPFeatureAndVCPFeatureReply(handle, VcpCodeBrightness, IntPtr.Zero, out uint current, out uint max))
+ {
+ var brightnessInfo = new VcpFeatureValue((int)current, 0, (int)max);
+ monitor.CurrentBrightness = brightnessInfo.ToPercentage();
+ Logger.LogDebug($"[{monitor.Id}] Brightness: {monitor.CurrentBrightness}%");
+ }
+ }
+
///
/// Update monitor capability flags based on parsed VCP capabilities.
///
diff --git a/src/modules/powerdisplay/PowerDisplay.Lib/Drivers/DDC/DdcCiNative.cs b/src/modules/powerdisplay/PowerDisplay.Lib/Drivers/DDC/DdcCiNative.cs
index 48beabe5ec..64f21d0e2a 100644
--- a/src/modules/powerdisplay/PowerDisplay.Lib/Drivers/DDC/DdcCiNative.cs
+++ b/src/modules/powerdisplay/PowerDisplay.Lib/Drivers/DDC/DdcCiNative.cs
@@ -7,19 +7,10 @@ using System.Collections.Generic;
using System.Runtime.InteropServices;
using ManagedCommon;
using static PowerDisplay.Common.Drivers.NativeConstants;
-using static PowerDisplay.Common.Drivers.NativeDelegates;
using static PowerDisplay.Common.Drivers.PInvoke;
// Type aliases for Windows API naming conventions compatibility
-using DISPLAY_DEVICE = PowerDisplay.Common.Drivers.DisplayDevice;
-using DISPLAYCONFIG_DEVICE_INFO_HEADER = PowerDisplay.Common.Drivers.DISPLAYCONFIG_DEVICE_INFO_HEADER;
-using DISPLAYCONFIG_MODE_INFO = PowerDisplay.Common.Drivers.DISPLAYCONFIG_MODE_INFO;
-using DISPLAYCONFIG_PATH_INFO = PowerDisplay.Common.Drivers.DISPLAYCONFIG_PATH_INFO;
-using DISPLAYCONFIG_TARGET_DEVICE_NAME = PowerDisplay.Common.Drivers.DISPLAYCONFIG_TARGET_DEVICE_NAME;
using LUID = PowerDisplay.Common.Drivers.Luid;
-using MONITORINFOEX = PowerDisplay.Common.Drivers.MonitorInfoEx;
-using PHYSICAL_MONITOR = PowerDisplay.Common.Drivers.PhysicalMonitor;
-using RECT = PowerDisplay.Common.Drivers.Rect;
#pragma warning disable SA1649 // File name should match first type name - Multiple related types for DDC/CI
#pragma warning disable SA1402 // File may only contain a single type - Related DDC/CI types grouped together
diff --git a/src/modules/powerdisplay/PowerDisplay.Lib/Drivers/DDC/MonitorDiscoveryHelper.cs b/src/modules/powerdisplay/PowerDisplay.Lib/Drivers/DDC/MonitorDiscoveryHelper.cs
index 2bdc864b31..6e56b687fa 100644
--- a/src/modules/powerdisplay/PowerDisplay.Lib/Drivers/DDC/MonitorDiscoveryHelper.cs
+++ b/src/modules/powerdisplay/PowerDisplay.Lib/Drivers/DDC/MonitorDiscoveryHelper.cs
@@ -6,11 +6,8 @@ using System;
using System.Collections.Generic;
using ManagedCommon;
using PowerDisplay.Common.Models;
-using PowerDisplay.Common.Utils;
using static PowerDisplay.Common.Drivers.NativeConstants;
using static PowerDisplay.Common.Drivers.PInvoke;
-
-using MONITORINFOEX = PowerDisplay.Common.Drivers.MonitorInfoEx;
using PHYSICAL_MONITOR = PowerDisplay.Common.Drivers.PhysicalMonitor;
namespace PowerDisplay.Common.Drivers.DDC
@@ -100,6 +97,8 @@ namespace PowerDisplay.Common.Drivers.DDC
///
/// Create Monitor object from physical monitor and display info.
/// Uses MonitorDisplayInfo directly from QueryDisplayConfig for stable identification.
+ /// Note: Brightness is not initialized here - MonitorManager handles brightness initialization
+ /// after discovery to avoid slow I2C operations during the discovery phase.
///
/// Physical monitor structure with handle and description
/// Display info from QueryDisplayConfig (HardwareId, FriendlyName, MonitorNumber)
@@ -131,14 +130,11 @@ namespace PowerDisplay.Common.Drivers.DDC
name = "External Display";
}
- // Get current brightness
- var brightnessInfo = GetCurrentBrightness(physicalMonitor.HPhysicalMonitor);
-
var monitor = new Monitor
{
Id = monitorId,
Name = name.Trim(),
- CurrentBrightness = brightnessInfo.IsValid ? brightnessInfo.ToPercentage() : 50,
+ CurrentBrightness = 50, // Default value, will be updated by MonitorManager after discovery
MinBrightness = 0,
MaxBrightness = 100,
IsAvailable = true,
@@ -165,23 +161,10 @@ namespace PowerDisplay.Common.Drivers.DDC
}
}
- ///
- /// Get current brightness using VCP code 0x10
- ///
- private VcpFeatureValue GetCurrentBrightness(IntPtr handle)
- {
- if (GetVCPFeatureAndVCPFeatureReply(handle, VcpCodeBrightness, IntPtr.Zero, out uint current, out uint max))
- {
- return new VcpFeatureValue((int)current, 0, (int)max);
- }
-
- return VcpFeatureValue.Invalid;
- }
-
///
/// Extract manufacturer from name
///
- private string ExtractManufacturer(string name)
+ private static string ExtractManufacturer(string name)
{
if (string.IsNullOrEmpty(name))
{
diff --git a/src/modules/powerdisplay/PowerDisplay/Helpers/MonitorManager.cs b/src/modules/powerdisplay/PowerDisplay/Helpers/MonitorManager.cs
index 8cf2e5c844..7c2bb3aa6c 100644
--- a/src/modules/powerdisplay/PowerDisplay/Helpers/MonitorManager.cs
+++ b/src/modules/powerdisplay/PowerDisplay/Helpers/MonitorManager.cs
@@ -79,7 +79,8 @@ namespace PowerDisplay.Helpers
///
/// Discover all monitors from all controllers.
- /// All initialization (brightness, capabilities, input source) is done during controller discovery.
+ /// Each controller is responsible for fully initializing its monitors
+ /// (including brightness, capabilities, input source, color temperature, etc.)
///
public async Task> DiscoverMonitorsAsync(CancellationToken cancellationToken = default)
{