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 "DEBUG.hpp"
#include "utils.hpp"
using namespace eprosima::fastdds::dds;
@ -215,33 +216,42 @@ void SubscriberApp::run(std::shared_ptr<MsgHandler> handler)
MsgData::BarCommandUpdate_queue_.pop();
lock.unlock();
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");
handler->new_bar_state.FrontBarState = 1;
}
else if (cmd.FrontBarSignalDown() == 1)
{
port.push_back("FrontBarDown");
handler->new_bar_state.FrontBarState = 2;
if (cmd.FrontBarSignalUp() == 1)
{
port.push_back("FrontBarUp");
handler->new_bar_state.FrontBarState = 1;
}
else if (cmd.FrontBarSignalDown() == 1)
{
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)
{
port.push_back("BackBarUp");
handler->new_bar_state.BackBarState = 1;
}
else if (cmd.BackBarSignalDown() == 1)
if (cmd.BackBarEnable() == true)
{
port.push_back("BackBarDown");
handler->new_bar_state.BackBarState = 2;
if (cmd.BackBarSignalUp() == 1)
{
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())
{

@ -37,6 +37,7 @@
#include "json.hpp"
#include "msg.hpp"
#include "DEBUG.hpp"
#include "utils.hpp"
using namespace eprosima::fastdds::dds;
using json = nlohmann::json;
@ -463,6 +464,17 @@ void PublisherApp::run(std::shared_ptr<mqtt::async_client> dev)
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)
{
if (cmd["value"] == 1)

Loading…
Cancel
Save