Added NightAlert project for travel kit
This commit is contained in:
105
NightScout/RaspberryPIButtonSource.cs
Normal file
105
NightScout/RaspberryPIButtonSource.cs
Normal file
@@ -0,0 +1,105 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using NightScout.Interfaces;
|
||||
using Raspberry.IO.GeneralPurpose;
|
||||
using Raspberry.IO.GeneralPurpose.Behaviors;
|
||||
|
||||
namespace NightScout
|
||||
{
|
||||
public class RaspberryPIButtonSource : IRaspberryPiButtonSource, IAlerter
|
||||
{
|
||||
public event Action<bool> ButtonStateChange;
|
||||
|
||||
protected IGpioConnectionDriver PinDriver;
|
||||
protected GpioOutputBinaryPin ButtonLEDPin;
|
||||
|
||||
private static readonly object ledLock = new object();
|
||||
|
||||
public RaspberryPIButtonSource(Int32 pinNumber)
|
||||
: this(pinNumber, new FileGpioConnectionDriver())
|
||||
{ }
|
||||
|
||||
public RaspberryPIButtonSource(Int32 pinNumber, IGpioConnectionDriver driver)
|
||||
{
|
||||
//Attempt to monitor the pin
|
||||
//pinConfiguration = ConnectorPin.P1Pin11.Input().Name("Switch");
|
||||
//pinConfiguration.Reversed = true;
|
||||
//pinConfiguration.OnStatusChanged(PinChangeHandler);
|
||||
|
||||
|
||||
//if(pinConfiguration == null)
|
||||
// Console.WriteLine("null");
|
||||
//PinDriver = new FileGpioConnectionDriver();
|
||||
PinDriver = driver;
|
||||
//var settings = new GpioConnectionSettings { Driver = pinConnectionDriver };
|
||||
|
||||
Console.WriteLine("Making new GPIO connection");
|
||||
//pinConnection = new GpioConnection(settings,pinConfiguration);
|
||||
//pinConnectionDriver.Allocate(ProcessorPin.Pin17, PinDirection.Input);
|
||||
//var pinDriver = pinConnectionDriver.In(ConnectorPin.P1Pin11);
|
||||
var buttonPin = PinDriver.In(ConnectorPin.P1Pin16);
|
||||
ButtonLEDPin = PinDriver.Out(ConnectorPin.P1Pin22);
|
||||
|
||||
Task.Factory.StartNew(() =>
|
||||
{
|
||||
Boolean savedState = false;
|
||||
while (true)
|
||||
{
|
||||
//Pin 11 is inverse (always high unless button is pressed)
|
||||
Boolean state = !(buttonPin.Read());
|
||||
if (savedState != state)
|
||||
{
|
||||
PinChangeHandler(state);
|
||||
savedState = state;
|
||||
}
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
});
|
||||
//Console.WriteLine("Made");
|
||||
//pinConnection.PinStatusChanged += pinConnection_PinStatusChanged;
|
||||
}
|
||||
|
||||
private void PinChangeHandler(Boolean state)
|
||||
{
|
||||
if (ButtonStateChange != null)
|
||||
ButtonStateChange(state);
|
||||
}
|
||||
|
||||
|
||||
public void StartAlert()
|
||||
{
|
||||
lock (ledLock)
|
||||
{
|
||||
ButtonLEDPin.Write(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void StartUrgentAlert()
|
||||
{
|
||||
lock (ledLock)
|
||||
{
|
||||
ButtonLEDPin.Write(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void StartStaleDataAlert()
|
||||
{
|
||||
lock (ledLock)
|
||||
{
|
||||
ButtonLEDPin.Write(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void StopAlerts()
|
||||
{
|
||||
lock (ledLock)
|
||||
{
|
||||
ButtonLEDPin.Write(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user