LenovoLegionToolkit
32 строки · 978.0 Байт
1using System;2using System.Threading.Tasks;3using LenovoLegionToolkit.Lib.Extensions;4using LenovoLegionToolkit.Lib.System;5
6namespace LenovoLegionToolkit.Lib.Features;7
8public class FnLockFeature : AbstractDriverFeature<FnLockState>9{
10public FnLockFeature() : base(Drivers.GetEnergy, Drivers.IOCTL_ENERGY_SETTINGS) { }11
12protected override uint GetInBufferValue() => 0x2;13
14protected override Task<uint[]> ToInternalAsync(FnLockState state)15{16var lockOn = state switch17{18FnLockState.On => true,19FnLockState.Off => false,20_ => throw new InvalidOperationException("Invalid state"),21};22
23var value = lockOn ? new uint[] { 0xE } : new uint[] { 0xF };24return Task.FromResult(value);25}26
27protected override Task<FnLockState> FromInternalAsync(uint state)28{29var value = state.GetNthBit(10) ? FnLockState.On : FnLockState.Off;30return Task.FromResult(value);31}32}
33