diff --git a/src/RgbLedStripController/RgbLedStripController.csproj b/src/RgbLedStripController/RgbLedStripController.csproj
index 1066839..d90bd89 100644
--- a/src/RgbLedStripController/RgbLedStripController.csproj
+++ b/src/RgbLedStripController/RgbLedStripController.csproj
@@ -4,10 +4,10 @@
net8.0-windows10.0.19041.0
true
true
- 0.3.1
- 0.3.1.0
- 0.3.1.0
- 0.3.1
+ 0.3.2
+ 0.3.2.0
+ 0.3.2.0
+ 0.3.2
Fristy.RgbLedStripController
enable
enable
diff --git a/src/RgbLedStripController/Services/BleDeviceService.cs b/src/RgbLedStripController/Services/BleDeviceService.cs
index f4a3de4..f1123ec 100644
--- a/src/RgbLedStripController/Services/BleDeviceService.cs
+++ b/src/RgbLedStripController/Services/BleDeviceService.cs
@@ -39,6 +39,7 @@ public sealed class BleDeviceService : IBleTransport
await MergeWindowsDeviceInventoryAsync(captures);
return captures.Values
+ .Where(capture => IsSupportedAddress(capture.Address))
.Select(capture => new BleScanResult
{
DeviceId = FormatAddress(capture.Address),
@@ -299,6 +300,9 @@ public sealed class BleDeviceService : IBleTransport
|| normalized.Contains("DUOCO");
}
+ internal static bool IsSupportedAddress(ulong address)
+ => FormatAddress(address).StartsWith("BE:", StringComparison.OrdinalIgnoreCase);
+
private static async Task RunScanPassAsync(
ConcurrentDictionary captures,
BluetoothLEScanningMode mode,
@@ -360,7 +364,8 @@ public sealed class BleDeviceService : IBleTransport
if (!device.Properties.TryGetValue("System.Devices.Aep.DeviceAddress", out var addressValue)
|| addressValue is not string addressText
- || !TryParseBluetoothAddress(addressText, out var address))
+ || !TryParseBluetoothAddress(addressText, out var address)
+ || !IsSupportedAddress(address))
{
continue;
}
diff --git a/src/RgbLedStripController/Services/MultiDeviceController.cs b/src/RgbLedStripController/Services/MultiDeviceController.cs
index b79b899..7585b0d 100644
--- a/src/RgbLedStripController/Services/MultiDeviceController.cs
+++ b/src/RgbLedStripController/Services/MultiDeviceController.cs
@@ -99,6 +99,11 @@ public sealed class MultiDeviceController : IAsyncDisposable
public async Task ConnectAsync(BleScanResult device, CancellationToken cancellationToken = default)
{
+ if (!BleDeviceService.IsSupportedAddress(device.AddressValue))
+ {
+ throw new ArgumentException($"Desteklenmeyen cihaz adresi: {device.BluetoothAddress}", nameof(device));
+ }
+
DeviceConnectionContext? existing;
lock (_stateLock)
{
@@ -583,6 +588,11 @@ public sealed class MultiDeviceController : IAsyncDisposable
private void UpsertKnownDevice(BleScanResult device)
{
+ if (!BleDeviceService.IsSupportedAddress(device.AddressValue))
+ {
+ return;
+ }
+
var alias = GetAlias(device.BluetoothAddress);
var profile = new DeviceProfile(
string.IsNullOrWhiteSpace(alias) ? device.NativeName : alias,
@@ -675,6 +685,19 @@ public sealed class MultiDeviceController : IAsyncDisposable
: connections.Any(context => context.ViewModel.ConnectionStatus == DeviceConnectionStatus.Faulted)
? DeviceConnectionStatus.Faulted
: DeviceConnectionStatus.Disconnected;
+
+ if (State.ConnectionStatus == DeviceConnectionStatus.Faulted
+ && !State.StatusText.Contains("Hata:", StringComparison.Ordinal))
+ {
+ var firstFault = connections
+ .Where(context => context.ViewModel.ConnectionStatus == DeviceConnectionStatus.Faulted)
+ .Select(context => context.ViewModel.StatusText)
+ .FirstOrDefault(text => !string.IsNullOrWhiteSpace(text));
+ if (!string.IsNullOrWhiteSpace(firstFault))
+ {
+ State.StatusText = firstFault;
+ }
+ }
}
private void EnsureTargetsAvailable()
@@ -708,7 +731,10 @@ public sealed class MultiDeviceController : IAsyncDisposable
: $"İşlem başarısız oldu: {firstFailureMessage}";
}
- return $"{successMessage} {successCount}/{totalCount} hedef başarılı, {failureCount} hata.";
+ var partialMessage = $"{successMessage} {successCount}/{totalCount} hedef başarılı, {failureCount} hata.";
+ return string.IsNullOrWhiteSpace(firstFailureMessage)
+ ? partialMessage
+ : $"{partialMessage} Hata: {firstFailureMessage}";
}
private sealed class DeviceConnectionContext