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

Commit 081edf3

Browse files
update PSIoT to Microsoft.PowerShell.IoT and some docs
1 parent 7427c9f commit 081edf3

File tree

3 files changed

+309
-0
lines changed

3 files changed

+309
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,279 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
using System;
5+
using System.Collections;
6+
using System.Management.Automation; // PowerShell namespace.
7+
8+
namespace Microsoft.PowerShell.IoT
9+
{
10+
public class I2CDevice
11+
{
12+
internal Unosquare.RaspberryIO.Gpio.I2CDevice device = null;
13+
14+
public string FriendlyName { get; set; }
15+
public int Id { get; set; }
16+
17+
public I2CDevice(Unosquare.RaspberryIO.Gpio.I2CDevice device, int Id, string FriendlyName)
18+
{
19+
this.device = device;
20+
this.Id = Id;
21+
this.FriendlyName = FriendlyName;
22+
}
23+
24+
public override string ToString()
25+
{
26+
if (string.IsNullOrEmpty(this.FriendlyName))
27+
{
28+
return this.Id.ToString();
29+
}
30+
else
31+
{
32+
return this.FriendlyName;
33+
}
34+
}
35+
}
36+
37+
public class I2CDeviceRegisterData
38+
{
39+
public I2CDevice Device { get; set; }
40+
public ushort Register { get; set; }
41+
public byte[] Data { get; set; }
42+
43+
public I2CDeviceRegisterData(I2CDevice device, ushort register, byte[] data)
44+
{
45+
this.Device = device;
46+
this.Register = register;
47+
this.Data = data;
48+
}
49+
50+
public I2CDeviceRegisterData(I2CDevice device, ushort register)
51+
: this(device, register, new byte[0])
52+
{
53+
}
54+
55+
public I2CDeviceRegisterData()
56+
: this(null, 0)
57+
{
58+
}
59+
}
60+
61+
public enum SignalLevel
62+
{
63+
Low = 0,
64+
High = 1
65+
}
66+
67+
public enum PullMode
68+
{
69+
Off = 0,
70+
PullDown = 1,
71+
PullUp = 2
72+
}
73+
74+
public class GpioPinData
75+
{
76+
public int Id;
77+
public SignalLevel Value;
78+
public Unosquare.RaspberryIO.Gpio.GpioPin PinInfo;
79+
80+
public GpioPinData(int id, SignalLevel value, Unosquare.RaspberryIO.Gpio.GpioPin pinInfo)
81+
{
82+
this.Id = id;
83+
this.Value = value;
84+
this.PinInfo = pinInfo;
85+
}
86+
}
87+
88+
[Cmdlet(VerbsCommon.Get, "I2CDevice")]
89+
public class GetI2CDevice : Cmdlet
90+
{
91+
[Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, Position = 0)]
92+
public int Id { get; set; }
93+
94+
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, Position = 1)]
95+
public string FriendlyName { get; set; }
96+
97+
public GetI2CDevice()
98+
{
99+
this.FriendlyName = string.Empty;
100+
this.Id = 0;
101+
}
102+
103+
protected override void ProcessRecord()
104+
{
105+
WriteObject(new I2CDevice(Unosquare.RaspberryIO.Pi.I2C.AddDevice(this.Id), this.Id, this.FriendlyName));
106+
}
107+
}
108+
109+
[Cmdlet(VerbsCommon.Get, "I2CRegister")]
110+
public class GetI2CRegister : Cmdlet
111+
{
112+
[Parameter(Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 0)]
113+
public I2CDevice Device { get; set; }
114+
115+
[Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, Position = 1)]
116+
public ushort Register { get; set; }
117+
118+
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, Position = 2)]
119+
public byte ByteCount { get; set; }
120+
121+
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true)]
122+
public SwitchParameter Raw { get; set; }
123+
124+
public GetI2CRegister()
125+
{
126+
this.ByteCount = 1;
127+
this.Raw = false;
128+
}
129+
130+
protected override void ProcessRecord()
131+
{
132+
if (this.ByteCount > 1)
133+
{
134+
this.Device.device.Write((byte)this.Register);
135+
byte[] value = this.Device.device.Read(this.ByteCount);
136+
if (this.Raw)
137+
{
138+
WriteObject(value);
139+
}
140+
else
141+
{
142+
I2CDeviceRegisterData result = new I2CDeviceRegisterData(this.Device, this.Register);
143+
result.Data = value;
144+
WriteObject(result);
145+
}
146+
}
147+
else
148+
{
149+
byte value = this.Device.device.ReadAddressByte(this.Register);
150+
if (this.Raw)
151+
{
152+
WriteObject(value);
153+
}
154+
else
155+
{
156+
I2CDeviceRegisterData result = new I2CDeviceRegisterData(this.Device, this.Register, new byte[1] { value });
157+
WriteObject(result);
158+
}
159+
}
160+
}
161+
}
162+
163+
[Cmdlet(VerbsCommon.Set, "I2CRegister")]
164+
public class SetI2CRegister : Cmdlet
165+
{
166+
[Parameter(Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 0)]
167+
public I2CDevice Device { get; set; }
168+
169+
[Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, Position = 1)]
170+
public ushort Register { get; set; }
171+
172+
[Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, Position = 2)]
173+
public byte[] Data { get; set; }
174+
175+
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true)]
176+
public SwitchParameter PassThru { get; set; }
177+
178+
protected override void ProcessRecord()
179+
{
180+
this.Device.device.WriteAddressByte(this.Register, this.Data[0]);
181+
if (this.PassThru)
182+
{
183+
I2CDeviceRegisterData result = new I2CDeviceRegisterData(this.Device, this.Register, this.Data);
184+
WriteObject(result);
185+
}
186+
}
187+
}
188+
189+
[Cmdlet(VerbsCommon.Set, "GpioPin")]
190+
public class SetGpioPin : Cmdlet
191+
{
192+
[Parameter(Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 0)]
193+
public int[] Id { get; set; }
194+
195+
[Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, Position = 1)]
196+
public SignalLevel Value { get; set; }
197+
198+
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true)]
199+
public SwitchParameter PassThru { get; set; }
200+
201+
protected override void ProcessRecord()
202+
{
203+
if (this.Id != null)
204+
{
205+
foreach (int pinId in this.Id)
206+
{
207+
var pin = Unosquare.RaspberryIO.Pi.Gpio[pinId];
208+
pin.PinMode = Unosquare.RaspberryIO.Gpio.GpioPinDriveMode.Output;
209+
pin.Write((Unosquare.RaspberryIO.Gpio.GpioPinValue)this.Value);
210+
if (this.PassThru)
211+
{
212+
GpioPinData pinData = new GpioPinData(pinId, this.Value, pin);
213+
WriteObject(pinData);
214+
}
215+
}
216+
}
217+
}
218+
}
219+
220+
[Cmdlet(VerbsCommon.Get, "GpioPin")]
221+
public class GetGpioPin : Cmdlet
222+
{
223+
[Parameter(Mandatory = false, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 0)]
224+
public int[] Id { get; set; }
225+
226+
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, Position = 1)]
227+
public PullMode? PullMode { get; set; }
228+
229+
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true)]
230+
public SwitchParameter Raw { get; set; }
231+
232+
protected override void ProcessRecord()
233+
{
234+
ArrayList pinList = new ArrayList();
235+
236+
if ((this.Id == null) || (this.Id.Length <= 0))
237+
{
238+
foreach (var pin in Unosquare.RaspberryIO.Pi.Gpio.Pins)
239+
{
240+
pinList.Add(pin.PinNumber);
241+
}
242+
}
243+
else
244+
{
245+
pinList.AddRange(this.Id);
246+
}
247+
248+
foreach(int pinId in pinList)
249+
{
250+
var pin = Unosquare.RaspberryIO.Pi.Gpio[pinId];
251+
try
252+
{
253+
pin.PinMode = Unosquare.RaspberryIO.Gpio.GpioPinDriveMode.Input;
254+
if (this.PullMode.HasValue)
255+
{
256+
pin.InputPullMode = (Unosquare.RaspberryIO.Gpio.GpioPinResistorPullMode)this.PullMode.Value;
257+
};
258+
}
259+
catch (System.NotSupportedException)
260+
{
261+
// We want to avoid errors like
262+
// System.NotSupportedException : Get - GpioPin : Pin Pin15 'BCM 14 (UART Transmit)' does not support mode 'Input'.Pin capabilities are limited to: UARTTXD
263+
// at the same time we need to return PinInfo for such pins, so we need to continue processing
264+
}
265+
bool pinBoolValue = pin.Read();
266+
267+
if (this.Raw)
268+
{
269+
WriteObject(pinBoolValue ? SignalLevel.High : SignalLevel.Low);
270+
}
271+
else
272+
{
273+
GpioPinData pinData = new GpioPinData(pinId, pinBoolValue ? SignalLevel.High : SignalLevel.Low, pin);
274+
WriteObject(pinData);
275+
}
276+
}
277+
}
278+
}
279+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netcoreapp2.0</TargetFramework>
5+
</PropertyGroup>
6+
7+
<ItemGroup>
8+
<PackageReference Include="System.Management.Automation" Version="6.0.0-rc.2" />
9+
<PackageReference Include="Unosquare.Raspberry.IO" Version="0.13.0" />
10+
</ItemGroup>
11+
12+
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Copyright (c) Microsoft Corporation. All rights reserved.
2+
# Licensed under the MIT License.
3+
4+
@{
5+
GUID="eb74e8da-9ae2-482a-a648-e96550fb8745"
6+
Author="Microsoft Corporation"
7+
CompanyName="Microsoft Corporation"
8+
Copyright="© Microsoft Corporation. All rights reserved."
9+
Description='PowerShell IoT'
10+
ModuleVersion="0.0.1"
11+
PowerShellVersion="3.0"
12+
FunctionsToExport = '*'
13+
DotNetFrameworkVersion = 4.5
14+
CmdletsToExport = '*'
15+
AliasesToExport = @()
16+
NestedModules=@('Microsoft.PowerShell.IoT.dll')
17+
HelpInfoURI = 'https://go.microsoft.com/fwlink/?LinkId=393254'
18+
}

0 commit comments

Comments
 (0)