first commit
This commit is contained in:
commit
a5a0434432
1126 changed files with 439481 additions and 0 deletions
122
Software/CSharp/GrovePi/GrovePi.cs
Normal file
122
Software/CSharp/GrovePi/GrovePi.cs
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
using System;
|
||||
using Windows.Devices.I2c;
|
||||
|
||||
using GrovePi.Common;
|
||||
|
||||
namespace GrovePi
|
||||
{
|
||||
public interface IGrovePi
|
||||
{
|
||||
string GetFirmwareVersion();
|
||||
byte DigitalRead(Pin pin);
|
||||
void DigitalWrite(Pin pin, byte value);
|
||||
int AnalogRead(Pin pin);
|
||||
void AnalogWrite(Pin pin, byte value);
|
||||
void PinMode(Pin pin, PinMode mode);
|
||||
void Flush();
|
||||
}
|
||||
|
||||
internal sealed class GrovePi : IGrovePi
|
||||
{
|
||||
internal GrovePi(I2cDevice device)
|
||||
{
|
||||
if (device == null) throw new ArgumentNullException(nameof(device));
|
||||
DirectAccess = device;
|
||||
}
|
||||
|
||||
internal I2cDevice DirectAccess { get; }
|
||||
|
||||
public string GetFirmwareVersion()
|
||||
{
|
||||
var wbuffer = new byte[4] {(byte) Command.Version, Constants.Unused, Constants.Unused, Constants.Unused};
|
||||
var rbuffer = new byte[4];
|
||||
var i2cTransferResult = DirectAccess.WritePartial(wbuffer);
|
||||
if (i2cTransferResult.Status != I2cTransferStatus.FullTransfer)
|
||||
{
|
||||
return "0.0.0";
|
||||
}
|
||||
i2cTransferResult = DirectAccess.ReadPartial(rbuffer);
|
||||
if (i2cTransferResult.Status != I2cTransferStatus.FullTransfer)
|
||||
{
|
||||
return "0.0.0";
|
||||
}
|
||||
return $"{rbuffer[1]}.{rbuffer[2]}.{rbuffer[3]}";
|
||||
}
|
||||
|
||||
public byte DigitalRead(Pin pin)
|
||||
{
|
||||
var wbuffer = new byte[4] {(byte) Command.DigitalRead, (byte) pin, Constants.Unused, Constants.Unused};
|
||||
var rBuffer = new byte[1];
|
||||
var i2cTransferResult = DirectAccess.WritePartial(wbuffer);
|
||||
Delay.Milliseconds(10);
|
||||
if (i2cTransferResult.Status != I2cTransferStatus.FullTransfer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
i2cTransferResult = DirectAccess.ReadPartial(rBuffer);
|
||||
if (i2cTransferResult.Status != I2cTransferStatus.FullTransfer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return rBuffer[0];
|
||||
}
|
||||
|
||||
public void DigitalWrite(Pin pin, byte value)
|
||||
{
|
||||
var buffer = new byte[4] {(byte) Command.DigitalWrite, (byte) pin, value, Constants.Unused};
|
||||
DirectAccess.WritePartial(buffer);
|
||||
Delay.Milliseconds(10);
|
||||
}
|
||||
|
||||
public int AnalogRead(Pin pin)
|
||||
{
|
||||
var wbuffer = new byte[4]{(byte) Command.AnalogRead, (byte) pin, Constants.Unused, Constants.Unused};
|
||||
var rbuffer = new byte[3];
|
||||
var i2cTransferResult = DirectAccess.WritePartial(wbuffer);
|
||||
Delay.Milliseconds(10);
|
||||
if (i2cTransferResult.Status != I2cTransferStatus.FullTransfer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
i2cTransferResult = DirectAccess.ReadPartial(rbuffer);
|
||||
if (i2cTransferResult.Status != I2cTransferStatus.FullTransfer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return rbuffer[1]*256 + rbuffer[2];
|
||||
}
|
||||
|
||||
public void AnalogWrite(Pin pin, byte value)
|
||||
{
|
||||
var buffer = new byte[4] {(byte) Command.AnalogWrite, (byte) pin, value, Constants.Unused};
|
||||
DirectAccess.WritePartial(buffer);
|
||||
Delay.Milliseconds(10);
|
||||
}
|
||||
|
||||
public void PinMode(Pin pin, PinMode mode)
|
||||
{
|
||||
var buffer = new byte[4] {(byte) Command.PinMode, (byte) pin, (byte) mode, Constants.Unused};
|
||||
DirectAccess.WritePartial(buffer);
|
||||
Delay.Milliseconds(10);
|
||||
}
|
||||
|
||||
public void Flush()
|
||||
{
|
||||
var buffer = new byte[4] { Constants.Unused, Constants.Unused, Constants.Unused, Constants.Unused };
|
||||
DirectAccess.WritePartial(buffer);
|
||||
}
|
||||
|
||||
private enum Command
|
||||
{
|
||||
DigitalRead = 1,
|
||||
DigitalWrite = 2,
|
||||
AnalogRead = 3,
|
||||
AnalogWrite = 4,
|
||||
PinMode = 5,
|
||||
Version = 8,
|
||||
//DhtProSensorTemp = 40,
|
||||
};
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue