LenovoLegionToolkit

Форк
0
66 строк · 2.4 Кб
1
using System;
2
using System.Threading.Tasks;
3
using LenovoLegionToolkit.Lib.System.Management;
4
using LenovoLegionToolkit.Lib.Utils;
5

6
namespace LenovoLegionToolkit.Lib.Features.InstantBoot;
7

8
public class InstantBootCapabilityFeature : IFeature<InstantBootState>
9
{
10
    public async Task<bool> IsSupportedAsync()
11
    {
12
        try
13
        {
14
            var mi = await Compatibility.GetMachineInformationAsync().ConfigureAwait(false);
15
            return mi.Features is { Source: MachineInformation.FeatureData.SourceType.CapabilityData, InstantBootAc: true, InstantBootUsbPowerDelivery: true };
16
        }
17
        catch
18
        {
19
            return false;
20
        }
21
    }
22

23
    public Task<InstantBootState[]> GetAllStatesAsync() => Task.FromResult(Enum.GetValues<InstantBootState>());
24

25
    public async Task<InstantBootState> GetStateAsync()
26
    {
27
        if (Log.Instance.IsTraceEnabled)
28
            Log.Instance.Trace($"Getting state...");
29

30
        var acAdapterValue = await WMI.LenovoOtherMethod.GetFeatureValueAsync(CapabilityID.InstantBootAc).ConfigureAwait(false);
31
        var usbPowerDeliveryValue = await WMI.LenovoOtherMethod.GetFeatureValueAsync(CapabilityID.InstantBootUsbPowerDelivery).ConfigureAwait(false);
32

33
        var result = (acAdapterValue, usbPowerDeliveryValue) switch
34
        {
35
            (1, 1) => InstantBootState.AcAdapterAndUsbPowerDelivery,
36
            (1, 0) => InstantBootState.AcAdapter,
37
            (0, 1) => InstantBootState.UsbPowerDelivery,
38
            _ => InstantBootState.Off
39
        };
40

41
        if (Log.Instance.IsTraceEnabled)
42
            Log.Instance.Trace($"State is {result}");
43

44
        return result;
45
    }
46

47
    public async Task SetStateAsync(InstantBootState state)
48
    {
49
        if (Log.Instance.IsTraceEnabled)
50
            Log.Instance.Trace($"Setting state to {state}...");
51

52
        var (acAdapterValue, usbPowerDeliveryValue) = state switch
53
        {
54
            InstantBootState.AcAdapterAndUsbPowerDelivery => (1, 1),
55
            InstantBootState.AcAdapter => (1, 0),
56
            InstantBootState.UsbPowerDelivery => (0, 1),
57
            _ => (0, 0)
58
        };
59

60
        await WMI.LenovoOtherMethod.SetFeatureValueAsync(CapabilityID.InstantBootAc, acAdapterValue).ConfigureAwait(false);
61
        await WMI.LenovoOtherMethod.SetFeatureValueAsync(CapabilityID.InstantBootUsbPowerDelivery, usbPowerDeliveryValue).ConfigureAwait(false);
62

63
        if (Log.Instance.IsTraceEnabled)
64
            Log.Instance.Trace($"Set state to {state}");
65
    }
66
}
67

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.