143 lines
2.1 KiB
C++
143 lines
2.1 KiB
C++
|
|
///
|
|
/// Created for personal use, use it at your own risk and benefit.
|
|
/// https://github.com/GitMoDu/Fast
|
|
///
|
|
|
|
#include "Fast.h"
|
|
|
|
bool FastShifter::Setup(const uint8_t pin, const bool startValue)
|
|
{
|
|
return FastOut::Setup(pin, startValue);
|
|
}
|
|
|
|
void FastShifter::PulseHigh()
|
|
{
|
|
Set(HIGH);
|
|
Set(LOW);
|
|
}
|
|
|
|
void FastShifter::PulseLow()
|
|
{
|
|
Set(LOW);
|
|
Set(HIGH);
|
|
}
|
|
|
|
void FastShifter::PulseHigh(const int16_t pulseIntervalMicros)
|
|
{
|
|
Set(HIGH);
|
|
delayMicroseconds(pulseIntervalMicros);
|
|
Set(LOW);
|
|
}
|
|
|
|
void FastShifter::PulseLow(const uint16_t pulseIntervalMicros)
|
|
{
|
|
Set(LOW);
|
|
delayMicroseconds(pulseIntervalMicros);
|
|
Set(HIGH);
|
|
}
|
|
|
|
FastOut::FastOut(const uint8_t pin, const bool startValue)
|
|
{
|
|
Setup(pin, startValue);
|
|
}
|
|
|
|
bool FastOut::Setup(const uint8_t pin, const bool startValue)
|
|
{
|
|
if (Fast::Setup(pin))
|
|
{
|
|
Set(startValue);
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
bool FastOutCached::Setup(const uint8_t pin, const bool startValue)
|
|
{
|
|
return FastOut::Setup(pin, startValue);
|
|
}
|
|
|
|
void FastOut::Toggle()
|
|
{
|
|
if (Get())
|
|
{
|
|
*OutPin &= PinAddressMaskOff;
|
|
}
|
|
else
|
|
{
|
|
*OutPin |= PinAddressMaskOn;
|
|
}
|
|
}
|
|
|
|
void FastOut::Set(const bool value)
|
|
{
|
|
if (value)
|
|
{
|
|
*OutPin |= PinAddressMaskOn;
|
|
}
|
|
else
|
|
{
|
|
*OutPin &= PinAddressMaskOff;
|
|
}
|
|
}
|
|
|
|
FastOutCached::FastOutCached(const uint8_t pin, const bool startValue)
|
|
{
|
|
Setup(pin, startValue);
|
|
}
|
|
|
|
void FastOutCached::Toggle()
|
|
{
|
|
if (LastValueCache)
|
|
{
|
|
Set(LOW);
|
|
}
|
|
else
|
|
{
|
|
Set(HIGH);
|
|
}
|
|
}
|
|
|
|
inline void FastOutCached::Set(const bool value)
|
|
{
|
|
LastValueCache = value;
|
|
if (LastValueCache)
|
|
{
|
|
*OutPin |= PinAddressMaskOn;
|
|
}
|
|
else
|
|
{
|
|
*OutPin &= PinAddressMaskOff;
|
|
}
|
|
}
|
|
|
|
|
|
Fast::Fast(const uint8_t pin)
|
|
{
|
|
if (pin != INVALID_PIN)
|
|
{
|
|
Setup(pin);
|
|
}
|
|
}
|
|
|
|
bool Fast::Setup(const uint8_t pin)
|
|
{
|
|
PinAddressMaskOn = digitalPinToBitMask(pin);
|
|
PinAddressMaskOff = ~PinAddressMaskOn;
|
|
Mode = portModeRegister(digitalPinToPort(pin));
|
|
OutPin = portOutputRegister(digitalPinToPort(pin));
|
|
InPin = portInputRegister(digitalPinToPort(pin));
|
|
|
|
*Mode |= PinAddressMaskOn;//TODO, ensure input compatibility
|
|
|
|
return true;
|
|
}
|
|
|
|
inline bool Fast::Get()
|
|
{
|
|
return *InPin & PinAddressMaskOn;
|
|
} |