添加手动对时类型
This commit is contained in:
@@ -1630,7 +1630,7 @@ bool ClientManager::set_interfixedvalue_action_to_device(const std::string& iden
|
|||||||
return false; // 设备未找到
|
return false; // 设备未找到
|
||||||
}
|
}
|
||||||
|
|
||||||
//读取装置运行信息
|
//读取装置运行信息(外部触发调用)
|
||||||
bool ClientManager::read_runninginformation_action_to_device(const std::string& identifier) {
|
bool ClientManager::read_runninginformation_action_to_device(const std::string& identifier) {
|
||||||
std::lock_guard<std::mutex> lock(mutex_);
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
|
|
||||||
@@ -1657,6 +1657,35 @@ bool ClientManager::read_runninginformation_action_to_device(const std::string&
|
|||||||
return false; // 设备未找到
|
return false; // 设备未找到
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//装置主动对时动作(外部触发调用)
|
||||||
|
bool ClientManager::set_righttime_action_to_device(const std::string& identifier) {
|
||||||
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
|
|
||||||
|
// 查找匹配的设备
|
||||||
|
for (auto& pair : clients_) {
|
||||||
|
auto& ctx = pair.second;
|
||||||
|
if ((ctx->device_info.device_id == identifier ||
|
||||||
|
ctx->device_info.mac == identifier) && ctx->device_info.righttime && isVersionGreaterOrEqual(ctx->dev_CloudProtocolVer, "V1.5"))
|
||||||
|
{
|
||||||
|
// 获取当前时间
|
||||||
|
auto now = std::chrono::system_clock::now();
|
||||||
|
std::time_t time = std::chrono::system_clock::to_time_t(now);
|
||||||
|
std::tm tm_time = *std::localtime(&time);
|
||||||
|
auto sendbuff = generate_righttime_message(tm_time);//组装装置对时报文
|
||||||
|
// 添加动作到队列 (状态: 手动对时)
|
||||||
|
ctx->add_action(DeviceState::SET_RIGHTTIME_2, sendbuff);//将该状态以及待发送报文存入队列
|
||||||
|
|
||||||
|
// 如果当前空闲则立即执行
|
||||||
|
if (ctx->current_state_ == DeviceState::IDLE) {
|
||||||
|
ctx->process_next_action();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true; // 成功添加
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false; // 设备未找到
|
||||||
|
}
|
||||||
|
|
||||||
//读取装置版本配置信息
|
//读取装置版本配置信息
|
||||||
bool ClientManager::read_devversion_action_to_device(const std::string& identifier) {
|
bool ClientManager::read_devversion_action_to_device(const std::string& identifier) {
|
||||||
std::lock_guard<std::mutex> lock(mutex_);
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
|
|||||||
@@ -60,7 +60,8 @@ enum class DeviceState {
|
|||||||
READING_RUNNINGINFORMATION_1,// <20><>ȡװ<C8A1><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
READING_RUNNINGINFORMATION_1,// <20><>ȡװ<C8A1><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||||
READING_RUNNINGINFORMATION_2,// <20><>ȡװ<C8A1><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ(<28><>ʱִ<CAB1><D6B4>)
|
READING_RUNNINGINFORMATION_2,// <20><>ȡװ<C8A1><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ(<28><>ʱִ<CAB1><D6B4>)
|
||||||
READING_DEVVERSION, // <20><>ȡװ<C8A1>ð汾<C3B0><E6B1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
READING_DEVVERSION, // <20><>ȡװ<C8A1>ð汾<C3B0><E6B1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
SET_RIGHTTIME, // <20><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ʱ
|
SET_RIGHTTIME, // <20><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱִ<EFBFBD>У<EFBFBD>
|
||||||
|
SET_RIGHTTIME_2, // <20><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
READING_EVENTLOG, // <20><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>־
|
READING_EVENTLOG, // <20><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>־
|
||||||
READING_STATSFILE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
READING_STATSFILE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||||
// <20>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD>״̬
|
// <20>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD>״̬
|
||||||
@@ -442,6 +443,9 @@ public:
|
|||||||
//<2F><>ȡװ<C8A1>ð汾<C3B0><E6B1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
//<2F><>ȡװ<C8A1>ð汾<C3B0><E6B1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
bool read_devversion_action_to_device(const std::string& identifier);
|
bool read_devversion_action_to_device(const std::string& identifier);
|
||||||
|
|
||||||
|
//װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||||
|
bool set_righttime_action_to_device(const std::string& identifier);
|
||||||
|
|
||||||
//<2F>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
//<2F>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||||
bool get_dev_status(const std::string& identifier);
|
bool get_dev_status(const std::string& identifier);
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1933,7 +1933,30 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case DeviceState::SET_RIGHTTIME:
|
case DeviceState::SET_RIGHTTIME:
|
||||||
//设置装置对时
|
//设置装置对时(定时触发)
|
||||||
|
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_NewACK)) {
|
||||||
|
std::cout << "set success" << mac << std::endl;
|
||||||
|
//对时设置成功,调整为空闲,处理后续工作。
|
||||||
|
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||||
|
}
|
||||||
|
else if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_NewNACK)) {
|
||||||
|
std::cout << "set error" << mac << std::endl;
|
||||||
|
|
||||||
|
std::cout << "reason code: " << static_cast<int>(udata[8]) << "-" << static_cast<int>(udata[9]) << "-" << static_cast<int>(udata[10]) << "-" << static_cast<int>(udata[11]) << std::endl;
|
||||||
|
|
||||||
|
// 装置否定应答,对时设置失败
|
||||||
|
// 设置对时失败,调整为空闲状态,处理下一项工作。
|
||||||
|
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// 装置答非所问异常
|
||||||
|
// 设置对时失败,调整为空闲状态,处理下一项工作。
|
||||||
|
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DeviceState::SET_RIGHTTIME_2:
|
||||||
|
//设置装置对时(主动对时)
|
||||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_NewACK)) {
|
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_NewACK)) {
|
||||||
std::cout << "set success" << mac << std::endl;
|
std::cout << "set success" << mac << std::endl;
|
||||||
//对时设置成功,调整为空闲,处理后续工作。
|
//对时设置成功,调整为空闲,处理后续工作。
|
||||||
|
|||||||
Reference in New Issue
Block a user