|
|
|
@ -32,6 +32,7 @@
|
|
|
|
#include "Subscriber.hpp"
|
|
|
|
#include "Subscriber.hpp"
|
|
|
|
#include "msg.hpp"
|
|
|
|
#include "msg.hpp"
|
|
|
|
#include "DEBUG.hpp"
|
|
|
|
#include "DEBUG.hpp"
|
|
|
|
|
|
|
|
#include "utils.hpp"
|
|
|
|
#include "YQNetCom.h"
|
|
|
|
#include "YQNetCom.h"
|
|
|
|
|
|
|
|
|
|
|
|
using eprosima::fastdds::dds::Log;
|
|
|
|
using eprosima::fastdds::dds::Log;
|
|
|
|
@ -146,9 +147,7 @@ void send_text(std::string ip_addr, int port, std::string text)
|
|
|
|
std::vector<char> ip(ip_addr.begin(), ip_addr.end());
|
|
|
|
std::vector<char> ip(ip_addr.begin(), ip_addr.end());
|
|
|
|
ip.push_back('\0');
|
|
|
|
ip.push_back('\0');
|
|
|
|
|
|
|
|
|
|
|
|
std::string encoded_str = base64_encode(text);
|
|
|
|
std::string wcstring = base64_encode(text);
|
|
|
|
std::vector<char> wcstring(encoded_str.begin(), encoded_str.end());
|
|
|
|
|
|
|
|
wcstring.push_back('\0');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int b = check_time(ip.data(), port, user_name, user_pwd);
|
|
|
|
int b = check_time(ip.data(), port, user_name, user_pwd);
|
|
|
|
DEBUG("check_time==" << b);
|
|
|
|
DEBUG("check_time==" << b);
|
|
|
|
@ -177,7 +176,7 @@ void send_text(std::string ip_addr, int port, std::string text)
|
|
|
|
delete_playlist(play_list);
|
|
|
|
delete_playlist(play_list);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void send_default(std::string ip_addr, int port)
|
|
|
|
void send_file(std::string ip_addr, int port, std::string wcstring)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
char *user_name = "guest", *user_pwd = "guest";
|
|
|
|
char *user_name = "guest", *user_pwd = "guest";
|
|
|
|
int dynamic_type = 1;
|
|
|
|
int dynamic_type = 1;
|
|
|
|
@ -197,8 +196,6 @@ void send_default(std::string ip_addr, int port)
|
|
|
|
std::vector<char> ip(ip_addr.begin(), ip_addr.end());
|
|
|
|
std::vector<char> ip(ip_addr.begin(), ip_addr.end());
|
|
|
|
ip.push_back('\0');
|
|
|
|
ip.push_back('\0');
|
|
|
|
|
|
|
|
|
|
|
|
std::string wcstring = "led.txt";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int b = check_time(ip.data(), port, user_name, user_pwd);
|
|
|
|
int b = check_time(ip.data(), port, user_name, user_pwd);
|
|
|
|
DEBUG("check_time==" << b);
|
|
|
|
DEBUG("check_time==" << b);
|
|
|
|
unsigned long play_list = create_playlist(128, 128, 8280);
|
|
|
|
unsigned long play_list = create_playlist(128, 128, 8280);
|
|
|
|
@ -226,9 +223,38 @@ void send_default(std::string ip_addr, int port)
|
|
|
|
delete_playlist(play_list);
|
|
|
|
delete_playlist(play_list);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::string readfile(std::string name)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
auto exeDir = getExeDir();
|
|
|
|
|
|
|
|
auto configPath = exeDir / name;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 检查文件是否存在
|
|
|
|
|
|
|
|
if (!std::filesystem::exists(configPath))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
std::cerr << "文件不存在: " << configPath << std::endl;
|
|
|
|
|
|
|
|
return "";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::ifstream file(configPath);
|
|
|
|
|
|
|
|
if (!file.is_open())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
std::cerr << "无法打开文件: " << configPath << std::endl;
|
|
|
|
|
|
|
|
return "";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 方法1:使用 stringstream 读取整个文件
|
|
|
|
|
|
|
|
std::stringstream buffer;
|
|
|
|
|
|
|
|
buffer << file.rdbuf(); // 读取所有内容
|
|
|
|
|
|
|
|
std::string config = buffer.str();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
file.close();
|
|
|
|
|
|
|
|
return config;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
std::queue<WeighingSystem::ScaleInfo> DdsMsgData::ScaleInfo_queue_;
|
|
|
|
std::queue<WeighingSystem::ScaleInfo> DdsMsgData::ScaleInfo_queue_;
|
|
|
|
std::queue<WeighingSystem::WeightInfoOk> DdsMsgData::WeightInfoOk_queue_;
|
|
|
|
std::queue<WeighingSystem::WeightInfoOk> DdsMsgData::WeightInfoOk_queue_;
|
|
|
|
std::queue<WeighingSystem::WeightInfoError> DdsMsgData::WeightInfoError_queue_;
|
|
|
|
std::queue<WeighingSystem::WeightInfoError> DdsMsgData::WeightInfoError_queue_;
|
|
|
|
|
|
|
|
std::queue<WeighingSystem::LicenseSnapUpdate> DdsMsgData::LicenseSnapUpdate_queue_;
|
|
|
|
std::mutex DdsMsgData::queue_cv_mtx_;
|
|
|
|
std::mutex DdsMsgData::queue_cv_mtx_;
|
|
|
|
|
|
|
|
|
|
|
|
std::atomic<bool> running(true);
|
|
|
|
std::atomic<bool> running(true);
|
|
|
|
@ -240,8 +266,11 @@ int main(int argc, char** argv)
|
|
|
|
|
|
|
|
|
|
|
|
int domain_id = 0;
|
|
|
|
int domain_id = 0;
|
|
|
|
int port = 80;
|
|
|
|
int port = 80;
|
|
|
|
|
|
|
|
int type = 0;
|
|
|
|
std::string addr = "192.168.1.100";
|
|
|
|
std::string addr = "192.168.1.100";
|
|
|
|
uint8_t clear_led = 1;
|
|
|
|
uint8_t clear_led = 1;
|
|
|
|
|
|
|
|
uint8_t weight_stable = 0;
|
|
|
|
|
|
|
|
std::string license = "";
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i < argc; i++)
|
|
|
|
for (int i = 1; i < argc; i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
@ -257,6 +286,10 @@ int main(int argc, char** argv)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
port = atoi(argv[++i]);
|
|
|
|
port = atoi(argv[++i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (strcmp(argv[i], "--type") == 0 && i + 1 < argc)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
type = atoi(argv[++i]);
|
|
|
|
|
|
|
|
}
|
|
|
|
else if (strcmp(argv[i], "--version") == 0)
|
|
|
|
else if (strcmp(argv[i], "--version") == 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
std::cout << "Vesrion: " << PROGRAM_VERSION << "\n";
|
|
|
|
std::cout << "Vesrion: " << PROGRAM_VERSION << "\n";
|
|
|
|
@ -269,6 +302,7 @@ int main(int argc, char** argv)
|
|
|
|
<< " --domain Set domain ID\n"
|
|
|
|
<< " --domain Set domain ID\n"
|
|
|
|
<< " --addr Set led addr (e.g., 192.168.1.1)\n"
|
|
|
|
<< " --addr Set led addr (e.g., 192.168.1.1)\n"
|
|
|
|
<< " --port Set port name (e.g., 80)\n"
|
|
|
|
<< " --port Set port name (e.g., 80)\n"
|
|
|
|
|
|
|
|
<< " --type Set port name (0: in car, 1: not in car)\n"
|
|
|
|
<< " --version Show software Version\n"
|
|
|
|
<< " --version Show software Version\n"
|
|
|
|
<< " --help Show this help message\n";
|
|
|
|
<< " --help Show this help message\n";
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
@ -281,6 +315,7 @@ int main(int argc, char** argv)
|
|
|
|
<< " --domain Set domain ID\n"
|
|
|
|
<< " --domain Set domain ID\n"
|
|
|
|
<< " --addr Set led addr (e.g., 192.168.1.1)\n"
|
|
|
|
<< " --addr Set led addr (e.g., 192.168.1.1)\n"
|
|
|
|
<< " --port Set port name (e.g., 80)\n"
|
|
|
|
<< " --port Set port name (e.g., 80)\n"
|
|
|
|
|
|
|
|
<< " --type Set port name (0: in car, 1: not in car)\n"
|
|
|
|
<< " --version Show software Version\n"
|
|
|
|
<< " --version Show software Version\n"
|
|
|
|
<< " --help Show this help message\n";
|
|
|
|
<< " --help Show this help message\n";
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
@ -298,7 +333,8 @@ int main(int argc, char** argv)
|
|
|
|
return oss.str();
|
|
|
|
return oss.str();
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
send_default(addr, port);
|
|
|
|
std::string default_text = readfile("led.txt");
|
|
|
|
|
|
|
|
send_text(addr, port, default_text);
|
|
|
|
|
|
|
|
|
|
|
|
while(running.load())
|
|
|
|
while(running.load())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
@ -333,10 +369,29 @@ int main(int argc, char** argv)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (clear_led == 0)
|
|
|
|
if (clear_led == 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
send_default(addr, port);
|
|
|
|
send_text(addr, port, default_text);
|
|
|
|
clear_led = 1;
|
|
|
|
clear_led = 1;
|
|
|
|
|
|
|
|
license.clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (info.WeightOK() == true)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
weight_stable = 1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
weight_stable = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (!DdsMsgData::LicenseSnapUpdate_queue_.empty())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
WeighingSystem::LicenseSnapUpdate info = std::move(DdsMsgData::LicenseSnapUpdate_queue_.front());
|
|
|
|
|
|
|
|
DdsMsgData::LicenseSnapUpdate_queue_.pop();
|
|
|
|
|
|
|
|
lock.unlock();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
license = info.License();
|
|
|
|
|
|
|
|
weight_stable = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
@ -344,6 +399,18 @@ int main(int argc, char** argv)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (type == 1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if ((weight_stable == 1) && (!license.empty()))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
std::string text = license + std::string(",司机请下车等候,切勿停留在车上!");
|
|
|
|
|
|
|
|
send_text(addr, port, text);
|
|
|
|
|
|
|
|
clear_led = 0;
|
|
|
|
|
|
|
|
weight_stable = 0;
|
|
|
|
|
|
|
|
license.clear();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|