mirror of
https://github.com/binary-kitchen/doorlockd
synced 2024-12-22 18:34:25 +01:00
Fixed Button-close bug
Signed-off-by: Ralf Ramsauer <ralf@ramses-pyramidenbau.de>
This commit is contained in:
parent
39a9aa43b0
commit
368a22b9b1
@ -32,7 +32,7 @@ Door &Door::get()
|
|||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Door::State &Door::state() const
|
Door::State Door::state() const
|
||||||
{
|
{
|
||||||
return _state;
|
return _state;
|
||||||
}
|
}
|
||||||
@ -82,13 +82,6 @@ void Door::unlock()
|
|||||||
usleep(10000);
|
usleep(10000);
|
||||||
digitalWrite(_HEARTBEATPIN, LOW);
|
digitalWrite(_HEARTBEATPIN, LOW);
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
|
|
||||||
if (!digitalRead(_LOCKPIN)) {
|
|
||||||
std::thread([this] () {
|
|
||||||
_l(LogLevel::info, "Incoming door close request on button press");
|
|
||||||
lock();
|
|
||||||
}).detach();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// The default of the Schnapperpin: always high
|
// The default of the Schnapperpin: always high
|
||||||
@ -120,6 +113,16 @@ void Door::unlock()
|
|||||||
|
|
||||||
// Heartbeat
|
// Heartbeat
|
||||||
beat();
|
beat();
|
||||||
|
|
||||||
|
if (!digitalRead(_LOCKPIN)) {
|
||||||
|
std::thread([this] () {
|
||||||
|
_l(LogLevel::info, "Incoming door close request on button press");
|
||||||
|
lock();
|
||||||
|
}).detach();
|
||||||
|
|
||||||
|
// Busy wait till door is locked
|
||||||
|
while(_state == State::Unlocked);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ public:
|
|||||||
enum class State {Locked, Unlocked};
|
enum class State {Locked, Unlocked};
|
||||||
|
|
||||||
// Current state of the door
|
// Current state of the door
|
||||||
const State &state() const;
|
State state() const;
|
||||||
|
|
||||||
// Lock the door
|
// Lock the door
|
||||||
void lock();
|
void lock();
|
||||||
@ -44,7 +44,7 @@ private:
|
|||||||
const Logger &_l;
|
const Logger &_l;
|
||||||
|
|
||||||
// Indicates the internal state: Door is open or locked
|
// Indicates the internal state: Door is open or locked
|
||||||
State _state = { Door::State::Locked };
|
volatile State _state = { Door::State::Locked };
|
||||||
|
|
||||||
// A Heartbeat thread is started when the door is unlocked
|
// A Heartbeat thread is started when the door is unlocked
|
||||||
std::thread _heartbeat = { };
|
std::thread _heartbeat = { };
|
||||||
|
Loading…
Reference in New Issue
Block a user