// TODO: Make this available to other generated interfaces too, not just IDevice1. // `dynamic obj` works, but it requires a Microsoft.* NuGet package and isn't type safe. public static async Task WaitForPropertyValueAsync <T>(this IDevice1 obj, string propertyName, T value, TimeSpan timeout) { var(watchTask, watcher) = WaitForPropertyValueInternal <T>(obj, propertyName, value); var currentValue = await obj.GetAsync <T>(propertyName); // Console.WriteLine($"{propertyName}: {currentValue}"); // https://stackoverflow.com/questions/390900/cant-operator-be-applied-to-generic-types-in-c if (EqualityComparer <T> .Default.Equals(currentValue, value)) { watcher.Dispose(); return; } await Task.WhenAny(new Task[] { watchTask, Task.Delay(timeout) }); if (!watchTask.IsCompleted) { throw new TimeoutException($"Timed out waiting for '{propertyName}' to change to '{value}'."); } // propogate any exceptions. await watchTask; }
public static Task <short> GetTxPowerAsync(this IDevice1 o) => o.GetAsync <short>(nameof(Device1Properties.TxPower));
public static Task <IDictionary <string, object> > GetServiceDataAsync(this IDevice1 o) => o.GetAsync <IDictionary <string, object> >(nameof(Device1Properties.ServiceData));
public static Task <IDictionary <ushort, object> > GetManufacturerDataAsync(this IDevice1 o) => o.GetAsync <IDictionary <ushort, object> >(nameof(Device1Properties.ManufacturerData));
public static Task <IAdapter1> GetAdapterAsync(this IDevice1 o) => o.GetAsync <IAdapter1>(nameof(Device1Properties.Adapter));
public static Task <string> GetModaliasAsync(this IDevice1 o) => o.GetAsync <string>(nameof(Device1Properties.Modalias));
public static Task <string[]> GetUUIDsAsync(this IDevice1 o) => o.GetAsync <string[]>(nameof(Device1Properties.UUIDs));
public static Task <string> GetNameAsync(this IDevice1 o) => o.GetAsync <string>(nameof(Device1Properties.Name));
public static Task <short> GetRSSIAsync(this IDevice1 o) => o.GetAsync <short>(nameof(Device1Properties.RSSI));
public static Task <bool> GetLegacyPairingAsync(this IDevice1 o) => o.GetAsync <bool>(nameof(Device1Properties.LegacyPairing));
public static Task <bool> GetBlockedAsync(this IDevice1 o) => o.GetAsync <bool>(nameof(Device1Properties.Blocked));
public static Task <string> GetIconAsync(this IDevice1 o) => o.GetAsync <string>(nameof(Device1Properties.Icon));
public static Task <ushort> GetAppearanceAsync(this IDevice1 o) => o.GetAsync <ushort>(nameof(Device1Properties.Appearance));
public static Task <uint> GetClassAsync(this IDevice1 o) => o.GetAsync <uint>("Class");
public static Task <bool> GetServicesResolvedAsync(this IDevice1 o) => o.GetAsync <bool>(nameof(Device1Properties.ServicesResolved));
public static Task <bool> GetConnectedAsync(this IDevice1 o) => o.GetAsync <bool>(nameof(Device1Properties.Connected));
public static Task <string> GetAddressAsync(this IDevice1 o) => o.GetAsync <string>(nameof(Device1Properties.Address));