Skip to content
This repository was archived by the owner on Jun 5, 2019. It is now read-only.

Commit 244f124

Browse files
author
ColinA-MSFT
committed
Merge pull request #161 from ColinA-MSFT/WindowsDevicesAdc
Add support for Windows.Devices.Adc
2 parents 5e63a9c + 961e9e3 commit 244f124

File tree

5 files changed

+254
-0
lines changed

5 files changed

+254
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
using System;
2+
using Windows.Devices.Adc.Provider;
3+
4+
namespace Windows.Devices.Adc
5+
{
6+
public sealed class AdcChannel : IDisposable
7+
{
8+
private readonly int m_channelNumber;
9+
private AdcController m_controller;
10+
private IAdcControllerProvider m_provider;
11+
private bool m_disposed = false;
12+
13+
internal AdcChannel(AdcController controller, IAdcControllerProvider provider, int channelNumber)
14+
{
15+
m_controller = controller;
16+
m_provider = provider;
17+
m_channelNumber = channelNumber;
18+
19+
m_provider.AcquireChannel(channelNumber);
20+
}
21+
22+
~AdcChannel()
23+
{
24+
Dispose(false);
25+
}
26+
27+
public AdcController Controller
28+
{
29+
get
30+
{
31+
if (m_disposed)
32+
{
33+
throw new ObjectDisposedException();
34+
}
35+
36+
return m_controller;
37+
}
38+
}
39+
40+
public int ReadValue()
41+
{
42+
if (m_disposed)
43+
{
44+
throw new ObjectDisposedException();
45+
}
46+
47+
return m_provider.ReadValue(m_channelNumber);
48+
}
49+
50+
public double ReadRatio()
51+
{
52+
if (m_disposed)
53+
{
54+
throw new ObjectDisposedException();
55+
}
56+
57+
return ((double)m_provider.ReadValue(m_channelNumber)) / m_provider.MaxValue;
58+
}
59+
60+
public void Dispose()
61+
{
62+
if (!m_disposed)
63+
{
64+
Dispose(true);
65+
GC.SuppressFinalize(this);
66+
m_disposed = true;
67+
}
68+
}
69+
70+
private void Dispose(bool disposing)
71+
{
72+
if (disposing)
73+
{
74+
m_provider.ReleaseChannel(m_channelNumber);
75+
m_controller = null;
76+
m_provider = null;
77+
}
78+
}
79+
}
80+
}
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
using System;
2+
using Windows.Devices.Adc.Provider;
3+
4+
namespace Windows.Devices.Adc
5+
{
6+
public sealed class AdcController
7+
{
8+
private IAdcControllerProvider m_provider;
9+
10+
internal AdcController(IAdcControllerProvider provider)
11+
{
12+
m_provider = provider;
13+
}
14+
15+
public int ChannelCount
16+
{
17+
get
18+
{
19+
return m_provider.ChannelCount;
20+
}
21+
}
22+
23+
public int ResolutionInBits
24+
{
25+
get
26+
{
27+
return m_provider.ResolutionInBits;
28+
}
29+
}
30+
31+
public int MinValue
32+
{
33+
get
34+
{
35+
return m_provider.MinValue;
36+
}
37+
}
38+
39+
public int MaxValue
40+
{
41+
get
42+
{
43+
return m_provider.MaxValue;
44+
}
45+
}
46+
47+
public AdcChannelMode ChannelMode
48+
{
49+
get
50+
{
51+
return (AdcChannelMode)m_provider.ChannelMode;
52+
}
53+
54+
set
55+
{
56+
switch (value)
57+
{
58+
case AdcChannelMode.Differential:
59+
case AdcChannelMode.SingleEnded:
60+
break;
61+
62+
default:
63+
throw new ArgumentException();
64+
}
65+
66+
m_provider.ChannelMode = (ProviderAdcChannelMode)value;
67+
}
68+
}
69+
70+
public static AdcController[] GetControllers(IAdcProvider provider)
71+
{
72+
// FUTURE: This should return "Task<IVectorView<AdcController>>"
73+
74+
var providers = provider.GetControllers();
75+
var controllers = new AdcController[providers.Length];
76+
77+
for (int i = 0; i < providers.Length; ++i)
78+
{
79+
controllers[i] = new AdcController(providers[i]);
80+
}
81+
82+
return controllers;
83+
}
84+
85+
public bool IsChannelModeSupported(AdcChannelMode channelMode)
86+
{
87+
switch (channelMode)
88+
{
89+
case AdcChannelMode.Differential:
90+
case AdcChannelMode.SingleEnded:
91+
break;
92+
93+
default:
94+
throw new ArgumentException();
95+
}
96+
97+
return m_provider.IsChannelModeSupported((ProviderAdcChannelMode)channelMode);
98+
}
99+
100+
public AdcChannel OpenChannel(int channelNumber)
101+
{
102+
if ((channelNumber < 0) || (channelNumber >= m_provider.ChannelCount))
103+
{
104+
throw new ArgumentOutOfRangeException();
105+
}
106+
107+
return new AdcChannel(this, m_provider, channelNumber);
108+
}
109+
}
110+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace Windows.Devices.Adc
2+
{
3+
public enum AdcChannelMode
4+
{
5+
SingleEnded = 0,
6+
Differential,
7+
}
8+
}
9+
10+
namespace Windows.Devices.Adc.Provider
11+
{
12+
public enum ProviderAdcChannelMode
13+
{
14+
SingleEnded = 0,
15+
Differential,
16+
}
17+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System;
2+
3+
namespace Windows.Devices.Adc.Provider
4+
{
5+
public interface IAdcControllerProvider
6+
{
7+
int ChannelCount
8+
{
9+
get;
10+
}
11+
12+
int ResolutionInBits
13+
{
14+
get;
15+
}
16+
17+
int MinValue
18+
{
19+
get;
20+
}
21+
22+
int MaxValue
23+
{
24+
get;
25+
}
26+
27+
ProviderAdcChannelMode ChannelMode
28+
{
29+
get;
30+
set;
31+
}
32+
33+
bool IsChannelModeSupported(ProviderAdcChannelMode channelMode);
34+
void AcquireChannel(int channel);
35+
void ReleaseChannel(int channel);
36+
int ReadValue(int channelNumber);
37+
}
38+
39+
public interface IAdcProvider
40+
{
41+
IAdcControllerProvider[] GetControllers();
42+
}
43+
}

Framework/Core/Windows/Devices/Devices.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
</MMP_STUB_Load>
2525
</ItemGroup>
2626
<ItemGroup>
27+
<Compile Include="Adc\AdcChannel.cs" />
28+
<Compile Include="Adc\AdcController.cs" />
29+
<Compile Include="Adc\AdcEnums.cs" />
30+
<Compile Include="Adc\AdcProvider.cs" />
2731
<Compile Include="Enumeration\DeviceInformation.cs" />
2832
<Compile Include="Gpio\GpioController.cs" />
2933
<Compile Include="Gpio\GpioEnums.cs" />

0 commit comments

Comments
 (0)