1
0
mirror of https://github.com/binary-kitchen/doorlockd synced 2024-11-19 21:43:15 +01:00
doorlockd-mirror/doorlockd/door.cpp

77 lines
1.4 KiB
C++
Raw Normal View History

2015-05-11 00:18:22 +02:00
#include <iostream>
2015-05-11 00:18:22 +02:00
#include <wiringPi.h>
#include <unistd.h>
2015-05-11 00:18:22 +02:00
#include "logger.h"
#include "door.h"
using namespace std;
Door::Door() :
_l(Logger::get())
2015-05-11 00:18:22 +02:00
{
_l(LogLevel::info, "Initializing Raspberry Pi GPIOs");
wiringPiSetup();
pinMode(_LOCKPIN, OUTPUT);
pinMode(_SCHNAPPER, OUTPUT);
2015-05-11 00:18:22 +02:00
lock();
}
Door::~Door()
{
lock();
2015-05-11 00:18:22 +02:00
}
Door &Door::get()
{
static Door d;
return d;
}
void Door::lock()
{
digitalWrite(_SCHNAPPER, HIGH);
2015-05-11 00:18:22 +02:00
_l(LogLevel::info, "Door closed");
if (_open == true)
{
_open = false;
_heartbeat.join();
}
2015-05-18 22:22:08 +02:00
system("wget -O /dev/null --timeout 3 \"http://homer.binary.kitchen:8080/set?color=000000\" 2>&1 > /dev/null");
2015-05-11 00:18:22 +02:00
}
void Door::unlock()
{
_schnapper = true;
if (_open == true)
{
return;
}
_open = true;
_heartbeat = std::thread([this] () {
digitalWrite(_SCHNAPPER, HIGH);
auto beat = [] () {
digitalWrite(_LOCKPIN, HIGH);
usleep(10000);
digitalWrite(_LOCKPIN, LOW);
usleep(10000);
};
while (_open) {
if (_schnapper == true)
{
digitalWrite(_SCHNAPPER, LOW);
for (int i = 0; i < 32 ; i++) beat();
digitalWrite(_SCHNAPPER, HIGH);
_schnapper = false;
}
beat();
}
});
2015-05-11 00:18:22 +02:00
_l(LogLevel::info, "Door opened");
}