nt9856x/code/application/sifarsdk/333DE/hal/GpioInputHandle.cpp

41 lines
1.2 KiB
C++

#include "GpioInputHandle.h"
#include "Log.h"
GpioInputHandle::GpioInputHandle(const GpioPin &gpio, const unsigned int &pin, const signed char invalidInput)
: mGpio(gpio), mPin(pin), mInvalidInput(invalidInput)
{
mContext = nullptr;
mLastPinValue = mInvalidInput;
}
void GpioInputHandle::Init(void)
{
GpioInit(mPin, GPIO_DIR_IN);
}
void GpioInputHandle::UnInit(void)
{
GpioDeinit(mPin);
}
void GpioInputHandle::SetInputMonitor(std::shared_ptr<VGpioInputMonitor> monitor, void *context)
{
mInputMonitor = monitor;
mContext = context;
}
void GpioInputHandle::CheckInputValue(void)
{
auto monitor = mInputMonitor.lock();
if (mInputMonitor.expired())
{
return;
}
SINT8 pinValue = 0;
GpioGet(mPin, pinValue);
// LogInfo("GpioInputHandle::CheckInputValue pin = %d, pinValue = %d\n", mPin, pinValue);
if (pinValue == mInvalidInput && mInvalidInput != mLastPinValue)
{
monitor->InputTransform(mGpio, GpioInputValue::INVALID, mContext);
}
if (pinValue != mInvalidInput && mInvalidInput == mLastPinValue)
{
monitor->InputTransform(mGpio, GpioInputValue::VALID, mContext);
}
mLastPinValue = pinValue;
}