45 lines
1.0 KiB
C++
45 lines
1.0 KiB
C++
/*
|
|
* DiscreteOutputDelayed.cpp
|
|
*
|
|
* Created on: 12 ÿíâ. 2018 ã.
|
|
* Author: titov
|
|
*/
|
|
|
|
#include "DiscreteOutputDelayed.hh"
|
|
|
|
void driver::detail::DiscreteOutputDelayed::on() {
|
|
gpio_pin.write(active_level);
|
|
|
|
if( not prev_state_on )
|
|
timer_completed.start(timeout);
|
|
|
|
prev_state_on = true;
|
|
}
|
|
|
|
void driver::detail::DiscreteOutputDelayed::off() {
|
|
gpio_pin.write(!active_level);
|
|
|
|
if( prev_state_on )
|
|
timer_completed.start(timeout);
|
|
|
|
prev_state_on = false;
|
|
}
|
|
|
|
bool driver::detail::DiscreteOutputDelayed::isCompleted() const {
|
|
return timer_completed.delayElapsed();
|
|
}
|
|
|
|
driver::detail::DiscreteOutputDelayed::DiscreteOutputDelayed(
|
|
peripheral::IGpio & gpio_pin, bool active_level,
|
|
unsigned int timeout_in_ms) :
|
|
gpio_pin(gpio_pin), active_level(active_level), timeout(timeout_in_ms), prev_state_on(false) {
|
|
|
|
gpio_pin.write(!active_level);
|
|
timer_completed.start(timeout);
|
|
}
|
|
|
|
driver::detail::DiscreteOutputDelayed::~DiscreteOutputDelayed() noexcept {
|
|
gpio_pin.write(!active_level);
|
|
}
|
|
|