LenovoLegionToolkit
66 строк · 2.4 Кб
1using System;2using System.Threading.Tasks;3using LenovoLegionToolkit.Lib.System.Management;4using LenovoLegionToolkit.Lib.Utils;5
6namespace LenovoLegionToolkit.Lib.Features.InstantBoot;7
8public class InstantBootCapabilityFeature : IFeature<InstantBootState>9{
10public async Task<bool> IsSupportedAsync()11{12try13{14var mi = await Compatibility.GetMachineInformationAsync().ConfigureAwait(false);15return mi.Features is { Source: MachineInformation.FeatureData.SourceType.CapabilityData, InstantBootAc: true, InstantBootUsbPowerDelivery: true };16}17catch18{19return false;20}21}22
23public Task<InstantBootState[]> GetAllStatesAsync() => Task.FromResult(Enum.GetValues<InstantBootState>());24
25public async Task<InstantBootState> GetStateAsync()26{27if (Log.Instance.IsTraceEnabled)28Log.Instance.Trace($"Getting state...");29
30var acAdapterValue = await WMI.LenovoOtherMethod.GetFeatureValueAsync(CapabilityID.InstantBootAc).ConfigureAwait(false);31var usbPowerDeliveryValue = await WMI.LenovoOtherMethod.GetFeatureValueAsync(CapabilityID.InstantBootUsbPowerDelivery).ConfigureAwait(false);32
33var result = (acAdapterValue, usbPowerDeliveryValue) switch34{35(1, 1) => InstantBootState.AcAdapterAndUsbPowerDelivery,36(1, 0) => InstantBootState.AcAdapter,37(0, 1) => InstantBootState.UsbPowerDelivery,38_ => InstantBootState.Off39};40
41if (Log.Instance.IsTraceEnabled)42Log.Instance.Trace($"State is {result}");43
44return result;45}46
47public async Task SetStateAsync(InstantBootState state)48{49if (Log.Instance.IsTraceEnabled)50Log.Instance.Trace($"Setting state to {state}...");51
52var (acAdapterValue, usbPowerDeliveryValue) = state switch53{54InstantBootState.AcAdapterAndUsbPowerDelivery => (1, 1),55InstantBootState.AcAdapter => (1, 0),56InstantBootState.UsbPowerDelivery => (0, 1),57_ => (0, 0)58};59
60await WMI.LenovoOtherMethod.SetFeatureValueAsync(CapabilityID.InstantBootAc, acAdapterValue).ConfigureAwait(false);61await WMI.LenovoOtherMethod.SetFeatureValueAsync(CapabilityID.InstantBootUsbPowerDelivery, usbPowerDeliveryValue).ConfigureAwait(false);62
63if (Log.Instance.IsTraceEnabled)64Log.Instance.Trace($"Set state to {state}");65}66}
67