1. 增加拦车器锁定功能。

main
baocm 8 months ago
parent 2e6c1a3385
commit ec2b03473c

@ -0,0 +1,14 @@
#pragma once
#include <filesystem>
#include <fstream>
#include <iostream>
#include <limits.h>
#include <unistd.h>
std::filesystem::path getExeDir()
{
char buf[PATH_MAX] = {0};
ssize_t len = readlink("/proc/self/exe", buf, sizeof(buf)-1);
return std::filesystem::path(std::string(buf, len)).parent_path();
}

@ -36,6 +36,7 @@
#include "msg.hpp" #include "msg.hpp"
#include "DEBUG.hpp" #include "DEBUG.hpp"
#include "utils.hpp"
using namespace eprosima::fastdds::dds; using namespace eprosima::fastdds::dds;
@ -215,33 +216,42 @@ void SubscriberApp::run(std::shared_ptr<MsgHandler> handler)
MsgData::BarCommandUpdate_queue_.pop(); MsgData::BarCommandUpdate_queue_.pop();
lock.unlock(); lock.unlock();
std::vector<std::string> port; std::vector<std::string> port;
if (cmd.FrontBarEnable() == true) if (!std::filesystem::exists(getExeDir() / "frontbar.lock"))
{ {
if (cmd.FrontBarSignalUp() == 1) if (cmd.FrontBarEnable() == true)
{ {
port.push_back("FrontBarUp"); if (cmd.FrontBarSignalUp() == 1)
handler->new_bar_state.FrontBarState = 1; {
} port.push_back("FrontBarUp");
else if (cmd.FrontBarSignalDown() == 1) handler->new_bar_state.FrontBarState = 1;
{ }
port.push_back("FrontBarDown"); else if (cmd.FrontBarSignalDown() == 1)
handler->new_bar_state.FrontBarState = 2; {
port.push_back("FrontBarDown");
handler->new_bar_state.FrontBarState = 2;
}
} }
} }
if (cmd.BackBarEnable() == true) if (!std::filesystem::exists(getExeDir() / "backbar.lock"))
{ {
if (cmd.BackBarSignalUp() == 1) if (cmd.BackBarEnable() == true)
{
port.push_back("BackBarUp");
handler->new_bar_state.BackBarState = 1;
}
else if (cmd.BackBarSignalDown() == 1)
{ {
port.push_back("BackBarDown"); if (cmd.BackBarSignalUp() == 1)
handler->new_bar_state.BackBarState = 2; {
port.push_back("BackBarUp");
handler->new_bar_state.BackBarState = 1;
}
else if (cmd.BackBarSignalDown() == 1)
{
port.push_back("BackBarDown");
handler->new_bar_state.BackBarState = 2;
}
} }
} }
handler->CtrlBar(port); if (!port.empty())
{
handler->CtrlBar(port);
}
} }
else if(!MsgData::LightsCommandUpdate_queue_.empty()) else if(!MsgData::LightsCommandUpdate_queue_.empty())
{ {

@ -37,6 +37,7 @@
#include "json.hpp" #include "json.hpp"
#include "msg.hpp" #include "msg.hpp"
#include "DEBUG.hpp" #include "DEBUG.hpp"
#include "utils.hpp"
using namespace eprosima::fastdds::dds; using namespace eprosima::fastdds::dds;
using json = nlohmann::json; using json = nlohmann::json;
@ -463,6 +464,17 @@ void PublisherApp::run(std::shared_ptr<mqtt::async_client> dev)
bar_ctrl(ctrl); bar_ctrl(ctrl);
} }
} }
else if (topic.find("barrier/frontlock") != std::string::npos)
{
if (cmd["value"] == 1)
{
std::ofstream(getExeDir() / "frontbar.lock") << getpid();
}
else
{
std::filesystem::remove(getExeDir() / "frontbar.lock");
}
}
else if (topic.find("light/frontsignal") != std::string::npos) else if (topic.find("light/frontsignal") != std::string::npos)
{ {
if (cmd["value"] == 1) if (cmd["value"] == 1)

Loading…
Cancel
Save