LenovoLegionToolkit
32 строки · 1.2 Кб
1using System;2using System.Threading.Tasks;3using LenovoLegionToolkit.Lib.Extensions;4using LenovoLegionToolkit.Lib.System;5
6namespace LenovoLegionToolkit.Lib.Features;7
8public class BatteryNightChargeFeature : AbstractDriverFeature<BatteryNightChargeState>9{
10public BatteryNightChargeFeature() : base(Drivers.GetEnergy, Drivers.IOCTL_ENERGY_BATTERY_NIGHT_CHARGE) { }11
12protected override uint GetInBufferValue() => 0x11;13
14protected override Task<uint[]> ToInternalAsync(BatteryNightChargeState state)15{16var result = state switch17{18BatteryNightChargeState.On => new[] { 0x80000012u },19BatteryNightChargeState.Off => new[] { 0x12u },20_ => throw new InvalidOperationException("Invalid state.")21};22return Task.FromResult(result);23}24
25protected override Task<BatteryNightChargeState> FromInternalAsync(uint state)26{27if (state.GetNthBit(0))28return Task.FromResult(state.GetNthBit(4) ? BatteryNightChargeState.On : BatteryNightChargeState.Off);29
30throw new InvalidOperationException($"Unknown battery night charge state: {state} [bits={Convert.ToString(state, 2)}]");31}32}
33