LenovoLegionToolkit
/
WhiteKeyboardDriverBacklightFeature.cs
50 строк · 1.6 Кб
1using System;
2using System.Threading.Tasks;
3using LenovoLegionToolkit.Lib.System;
4
5namespace LenovoLegionToolkit.Lib.Features.WhiteKeyboardBacklight;
6
7public class WhiteKeyboardDriverBacklightFeature : AbstractDriverFeature<WhiteKeyboardBacklightState>
8{
9public WhiteKeyboardDriverBacklightFeature() : base(Drivers.GetEnergy, Drivers.IOCTL_ENERGY_KEYBOARD) { }
10
11public override async Task<bool> IsSupportedAsync()
12{
13try
14{
15var outBuffer = await SendCodeAsync(DriverHandle(), ControlCode, 0x1).ConfigureAwait(false);
16outBuffer >>= 1;
17return outBuffer == 0x2;
18}
19catch
20{
21return false;
22}
23}
24
25protected override uint GetInBufferValue() => 0x22;
26
27protected override Task<uint[]> ToInternalAsync(WhiteKeyboardBacklightState state)
28{
29var result = state switch
30{
31WhiteKeyboardBacklightState.Off => new uint[] { 0x00023 },
32WhiteKeyboardBacklightState.Low => new uint[] { 0x10023 },
33WhiteKeyboardBacklightState.High => new uint[] { 0x20023 },
34_ => throw new InvalidOperationException("Invalid state"),
35};
36return Task.FromResult(result);
37}
38
39protected override Task<WhiteKeyboardBacklightState> FromInternalAsync(uint state)
40{
41var result = state switch
42{
430x1 => WhiteKeyboardBacklightState.Off,
440x3 => WhiteKeyboardBacklightState.Low,
450x5 => WhiteKeyboardBacklightState.High,
46_ => throw new InvalidOperationException("Invalid state"),
47};
48return Task.FromResult(result);
49}
50}
51