#include "access_controller.hpp" #include "factory.hpp" namespace acs { access_controller::access_controller() : state_( factory::get()->get_state()), extra_gpio_( factory::get()->get_devices()->extra()), reader_( factory::get()->get_reader()), writer_( factory::get()->get_writer()), timer_( factory::get()->get_await_timer()) {} void access_controller::authorized() { state_->set_status(state::entry_await); writer_->authorized(); extra_gpio_->stream_write(gpio::high); wait(4'000); } void access_controller::forbidden() { state_->set_status(state::entry_await); writer_->access_denied(); wait(1'000); } void access_controller::force_reset_if_idle() { if (state_->get_status() == state::idle) reset({ }); } void access_controller::wait(unsigned duration) { timer_->defer_with(duration, boost::bind( &access_controller::reset, this, boost::asio::placeholders::error)); } void access_controller::reset(const boost::system::error_code& ec) { if (ec) exit(1); writer_->refresh(); state_->set_status(state::idle); extra_gpio_->stream_write(gpio::low); writer_->write_qr_code(); } }