定值与内部定值修改完毕
This commit is contained in:
@@ -46,6 +46,8 @@ std::string extract_filename(const std::string& path) {
|
||||
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>'/'<27><>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>ԭ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
return path;
|
||||
}
|
||||
|
||||
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void process_received_message(string mac, string id,const char* data, size_t length) {
|
||||
// ʵ<>ʵ<EFBFBD><CAB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::cout << "Active connections: " << mac << " id:" << id << " size:" << length << std::endl;
|
||||
@@ -71,6 +73,12 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
||||
//ClientManager::instance().set_real_state_count("D002", 1,1);//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵʱ
|
||||
//ClientManager::instance().add_file_menu_action_to_device("D002","/etc");//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>Ŀ¼<C4BF><C2BC>ȡ
|
||||
//ClientManager::instance().add_file_download_action_to_device("D002", "/etc/NPQS570_VX_ZJ_2(V103).icd");//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ClientManager::instance().get_fixedvalue_action_to_device(id,1);//<2F><><EFBFBD>Ի<EFBFBD>ȡװ<C8A1>ò<EFBFBD><C3B2>㶨ֵ<E3B6A8><D6B5><EFBFBD><EFBFBD>
|
||||
//ClientManager::instance().get_fixedvaluedes_action_to_device(id);//<2F><><EFBFBD>Ի<EFBFBD>ȡװ<C8A1>ö<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
//ClientManager::instance().set_fixedvalue_action_to_device();//װ<><D7B0><EFBFBD>Ķ<DEB8>ֵ<EFBFBD><D6B5><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ⲿ<EFBFBD>ṩ<EFBFBD><E1B9A9>
|
||||
//ClientManager::instance().get_interfixedvalue_action_to_device(id);//װ<>û<EFBFBD>ȡ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ
|
||||
//ClientManager::instance().get_fixedvalucontrolword_action_to_device(id,1);//<2F><>ȡ 1-<2D>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 2-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ClientManager::instance().set_interfixedvalue_action_to_device();װ<><D7B0><EFBFBD><EFBFBD><DEB8>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD>ṩ<EFBFBD><E1B9A9>
|
||||
}
|
||||
if (udata[19] == 0x00) {
|
||||
std::cout << "cloud login: " << mac << " state: fail!" << std::endl;
|
||||
@@ -240,8 +248,6 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
||||
|
||||
case DeviceState::READING_STATS:
|
||||
// <20><>ȡͳ<C8A1><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
std::cout << "READING_STATS state: Processing stats data from " << mac << std::endl;
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1>ĵ<EFBFBD><C4B5><EFBFBD>
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_Stat)) {
|
||||
// һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><D5A3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD> һ֡1K ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><>ǰ֡δ<D6A1><CEB4>ȫ<EFBFBD><C8AB>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>֡
|
||||
@@ -412,7 +418,6 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
||||
|
||||
case DeviceState::READING_STATS_TIME:
|
||||
// <20><>ȡͳ<C8A1><CDB3>ʱ<EFBFBD><CAB1>״̬
|
||||
std::cout << "READING_STATS_TIME state: Processing stats time from " << mac << std::endl;
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_StatTime)) {
|
||||
std::vector<PointInfo> points;//װ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
if (ClientManager::instance().get_device_points(mac, points)) {
|
||||
@@ -452,7 +457,6 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
||||
|
||||
case DeviceState::READING_REALSTAT:
|
||||
//<2F><>ȡʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>״̬
|
||||
std::cout << "READING_REALSTAT state: Processing stats data from " << mac << std::endl;
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_New_3S)) {
|
||||
unsigned char packet_type = udata[13];
|
||||
|
||||
@@ -568,7 +572,6 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
||||
|
||||
case DeviceState::READING_EVENTFILE:
|
||||
// <20><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::cout << "READING_EVENTFILE state: Processing stats time from " << mac << std::endl;
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_File_Download)) {
|
||||
// <20><>ȡ<EFBFBD><C8A1>ǰ֡<C7B0><D6A1><EFBFBD>ţ<EFBFBD>12-15<31>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int current_frame = (static_cast<int>(udata[12]) << 24) |
|
||||
@@ -660,7 +663,6 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
||||
|
||||
case DeviceState::READING_FILEMENU:
|
||||
//<2F><>ȡ<EFBFBD>ļ<EFBFBD>Ŀ¼
|
||||
std::cout << "READING_FILEMENU state: Processing stats time from " << mac << std::endl;
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_FileDir)) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>С
|
||||
const size_t struct_size = sizeof(tag_dir_info);
|
||||
@@ -704,7 +706,6 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
||||
|
||||
case DeviceState::READING_FILEDATA:
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>̬<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::cout << "READING_FILEDATA state: Processing stats time from " << mac << std::endl;
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_File_Download))
|
||||
{
|
||||
// <20><>ȡ<EFBFBD><C8A1>ǰ֡<C7B0><D6A1><EFBFBD>ţ<EFBFBD>12-15<31>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
@@ -794,6 +795,377 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
||||
}
|
||||
break;
|
||||
|
||||
case DeviceState::READING_FIXEDVALUE:
|
||||
//<2F><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>㶨ֵ<E3B6A8><D6B5><EFBFBD><EFBFBD>
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_FixValue)) {
|
||||
// ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD>㹻<EFBFBD><E3B9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (parser.RecvData.size() < 1) {
|
||||
std::cout << "Invalid fix value data length" << std::endl;
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
break;
|
||||
}
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>)
|
||||
uint8_t monitor_index = parser.RecvData[0];
|
||||
std::cout << "Monitor Index: " << static_cast<int>(monitor_index) << std::endl;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> (<28>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
size_t bufflen = parser.RecvData.size() - 1;
|
||||
const size_t structlen = 4; // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ4<D5BC>ֽ<EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ϸ<EFBFBD>
|
||||
if (bufflen % structlen != 0) {
|
||||
std::cout << "Invalid fix value data length: " << bufflen
|
||||
<< " (not multiple of 4)" << std::endl;
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
break;
|
||||
}
|
||||
|
||||
// <20>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector<float> fList;
|
||||
fList.reserve(bufflen / structlen); // Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>ӵڶ<D3B5><DAB6><EFBFBD><EFBFBD>ֽڿ<D6BD>ʼ)
|
||||
for (size_t i = 1; i < parser.RecvData.size(); i += structlen) {
|
||||
// <20><><EFBFBD><EFBFBD>4<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t bytes[4] = {
|
||||
parser.RecvData[i],
|
||||
parser.RecvData[i + 1],
|
||||
parser.RecvData[i + 2],
|
||||
parser.RecvData[i + 3]
|
||||
};
|
||||
|
||||
// <20><>ת<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD> (<28><><EFBFBD><EFBFBD>תС<D7AA><D0A1>)
|
||||
std::swap(bytes[0], bytes[3]);
|
||||
std::swap(bytes[1], bytes[2]);
|
||||
|
||||
// ת<><D7AA>Ϊfloat
|
||||
float value;
|
||||
memcpy(&value, bytes, sizeof(float));
|
||||
fList.push_back(value);
|
||||
}
|
||||
|
||||
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::cout << "Parsed " << fList.size() << " fix values:" << std::endl;
|
||||
for (size_t j = 0; j < fList.size(); ++j) {
|
||||
std::cout << " Value[" << j << "]: " << fList[j] << std::endl;
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD>Զ<EFBFBD>ֵ<EFBFBD>Ĺ<DEB8><C4B9><EFBFBD>
|
||||
//ClientManager::instance().set_fixedvalue_action_to_device(id, monitor_index, fList);
|
||||
|
||||
//<2F><>ֵ<EFBFBD><D6B5>ȡ<EFBFBD><C8A1><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
else {
|
||||
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
||||
// <20><>ȡ<EFBFBD><C8A1>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><F3A3ACB5><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case DeviceState::READING_FIXEDVALUEDES:
|
||||
//<2F><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>㶨ֵ<E3B6A8><D6B5><EFBFBD><EFBFBD>
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_FixDes)) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>С
|
||||
const size_t structlen = sizeof(DZ_TAB_STRUCT);
|
||||
const size_t bufflen = parser.RecvData.size();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
||||
if (bufflen == 0 || bufflen % structlen != 0) {
|
||||
std::cerr << "Invalid fixdes data length: " << bufflen
|
||||
<< " (expected multiple of " << structlen << ")" << std::endl;
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
break;
|
||||
}
|
||||
|
||||
// <20>洢<EFBFBD><E6B4A2><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
std::vector<DZ_TAB_STRUCT> dz_list;
|
||||
dz_list.reserve(bufflen / structlen);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
for (size_t i = 0, j = 1; i < bufflen; i += structlen, j++) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector<uint8_t> buff(structlen);
|
||||
memcpy(buff.data(), parser.RecvData.data() + i, structlen);
|
||||
|
||||
// ִ<><D6B4><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C#<23><>ͬ<EFBFBD><CDAC>
|
||||
ReversalBuff(buff.data(), 0, 2); // LN_Num
|
||||
ReversalBuff(buff.data(), 2, 2); // DZ_Num
|
||||
ReversalBuff(buff.data(), 70, 2); // DZ_Type
|
||||
ReversalBuff(buff.data(), 72, 4); // DZ_Min
|
||||
ReversalBuff(buff.data(), 76, 4); // DZ_Max
|
||||
ReversalBuff(buff.data(), 80, 4); // DZ_Default
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
DZ_TAB_STRUCT dz_info;
|
||||
memcpy(&dz_info, buff.data(), structlen);
|
||||
|
||||
// <20><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> - <20><><EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB>'\0'<27><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
auto find_string_end = [](const char* arr, size_t max_len) -> size_t {
|
||||
for (size_t i = 0; i < max_len; i++) {
|
||||
if (arr[i] == '\0') return i;
|
||||
}
|
||||
return max_len;
|
||||
};
|
||||
|
||||
// <20><>ȡԭʼGBK<42>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
size_t name_len = find_string_end(dz_info.DZ_Name, sizeof(dz_info.DZ_Name));
|
||||
size_t unit_len = find_string_end(dz_info.DZ_UNIT, sizeof(dz_info.DZ_UNIT));
|
||||
|
||||
// ת<><D7AA>Ϊ<EFBFBD>ɴ<EFBFBD>ӡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>(GBK<42><4B><EFBFBD><EFBFBD>)
|
||||
std::string dz_name(dz_info.DZ_Name, name_len);
|
||||
std::string dz_unit(dz_info.DZ_UNIT, unit_len);
|
||||
|
||||
// <20><><EFBFBD>浽<EFBFBD><E6B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dz_list.push_back(dz_info);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
||||
std::cout << "Parsed DZ entry #" << j << ": "
|
||||
<< "LN=" << dz_info.LN_Num
|
||||
<< ", ID=" << dz_info.DZ_Num
|
||||
<< ", Name=" << dz_name
|
||||
<< ", Type=" << dz_info.DZ_Type
|
||||
<< ", Min=" << dz_info.DZ_Min
|
||||
<< ", Max=" << dz_info.DZ_Max
|
||||
<< ", Default=" << dz_info.DZ_Default
|
||||
<< ", Unit=" << dz_unit << std::endl;
|
||||
}
|
||||
|
||||
|
||||
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
else {
|
||||
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
||||
// <20><>ȡ<EFBFBD><C8A1>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case DeviceState::SET_FIXEDVALUE:
|
||||
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ֵ
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_NewACK)) {
|
||||
std::cout << "set success" << mac << std::endl;
|
||||
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD>óɹ<C3B3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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;
|
||||
// װ<>÷<EFBFBD><C3B7><EFBFBD>Ӧ<EFBFBD>𣬶<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
// <20><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ֵʧ<D6B5>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
else {
|
||||
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
||||
// <20><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ֵʧ<D6B5>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case DeviceState::READING_INTERFIXEDVALUE:
|
||||
//<2F><>ȡ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_Read_InterFix)) {
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
size_t bufflen = parser.RecvData.size();
|
||||
const size_t structlen = 2; // ÿ<><C3BF>ushortռ2<D5BC>ֽ<EFBFBD>
|
||||
|
||||
// <20>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector<ushort> fList;
|
||||
fList.reserve(bufflen / structlen); // Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ushort<72><74><EFBFBD><EFBFBD>
|
||||
for (size_t i = 0; i < bufflen; i += structlen) {
|
||||
// <20><><EFBFBD><EFBFBD>2<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t bytes[2] = {
|
||||
parser.RecvData[i],
|
||||
parser.RecvData[i + 1]
|
||||
};
|
||||
|
||||
// <20><>ת<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD> (<28><><EFBFBD><EFBFBD>תС<D7AA><D0A1>)
|
||||
std::swap(bytes[0], bytes[1]);
|
||||
|
||||
// ת<><D7AA>Ϊushort - ʹ<><CAB9>memcpyȷ<79><C8B7><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
ushort value;
|
||||
memcpy(&value, bytes, sizeof(ushort));
|
||||
fList.push_back(value);
|
||||
}
|
||||
|
||||
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
|
||||
std::cout << "Parsed " << fList.size() << " internal fixed values:" << std::endl;
|
||||
for (size_t j = 0; j < fList.size(); ++j) {
|
||||
std::cout << " Value[" << j << "]: " << fList[j] << std::endl;
|
||||
}
|
||||
|
||||
//<2F>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD>IJ<DEB8><C4B2><EFBFBD>
|
||||
//ClientManager::instance().set_interfixedvalue_action_to_device(id, fList);
|
||||
|
||||
//<2F>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5>ȡ<EFBFBD><C8A1><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
else {
|
||||
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
||||
// <20><>ȡװ<C8A1><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵʧ<D6B5>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case DeviceState::READING_INTERFIXEDVALUEDES:
|
||||
//<2F><>ȡ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_Read_InterFixDes)) {
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector<uint8_t>& recvData = parser.RecvData;
|
||||
size_t bufflen = recvData.size();
|
||||
const size_t structlen = sizeof(NameFixValue);
|
||||
|
||||
// <20>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector<NameFixValue> fixValueList;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ϸ<EFBFBD>
|
||||
if (bufflen == 0 || bufflen % structlen != 0) {
|
||||
std::cerr << "Invalid internal fixdes data length: " << bufflen
|
||||
<< " (expected multiple of " << structlen << ")" << std::endl;
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
size_t structCount = bufflen / structlen;
|
||||
fixValueList.reserve(structCount);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>нṹ<D0BD><E1B9B9>
|
||||
for (size_t i = 0, k = 1; i < bufflen; i += structlen, k++)
|
||||
{
|
||||
// <20><><EFBFBD>Ƶ<EFBFBD>ǰ<EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector<uint8_t> buff(structlen);
|
||||
memcpy(buff.data(), recvData.data() + i, structlen);
|
||||
|
||||
// <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DataType (ƫ<><C6AB>22, 2<>ֽ<EFBFBD>)
|
||||
ReversalBuff(buff.data(), 22, 2);
|
||||
// <20><>ת<EFBFBD><D7AA>СֵMinValue (ƫ<><C6AB>24, 2<>ֽ<EFBFBD>)
|
||||
ReversalBuff(buff.data(), 24, 2);
|
||||
// <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ֵMaxValue (ƫ<><C6AB>26, 2<>ֽ<EFBFBD>)
|
||||
ReversalBuff(buff.data(), 26, 2);
|
||||
// <20><>תȱʡֵDefaultValue (ƫ<><C6AB>28, 2<>ֽ<EFBFBD>)
|
||||
ReversalBuff(buff.data(), 28, 2);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
NameFixValue dz_info;
|
||||
memcpy(&dz_info, buff.data(), structlen);
|
||||
|
||||
// <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
fixValueList.push_back(dz_info);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::string fixName(dz_info.sFixValueName,
|
||||
strnlen(dz_info.sFixValueName, sizeof(dz_info.sFixValueName)));
|
||||
std::string dimension(dz_info.sDimension,
|
||||
strnlen(dz_info.sDimension, sizeof(dz_info.sDimension)));
|
||||
|
||||
std::cout << "Parsed internal fix value #" << k << ": "
|
||||
<< "Name=" << fixName << ", "
|
||||
<< "Type=" << dz_info.DataType << ", "
|
||||
<< "Min=" << dz_info.MinValue << ", "
|
||||
<< "Max=" << dz_info.MaxValue << ", "
|
||||
<< "Default=" << dz_info.DefaultValue << ", "
|
||||
<< "Unit=" << dimension << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
//<2F>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
else {
|
||||
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
||||
// <20><>ȡװ<C8A1><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case DeviceState::READING_CONTROLWORD:
|
||||
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_Read_InterFixDes)) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>С
|
||||
const size_t structlen = sizeof(DZ_kzz_bit);
|
||||
const size_t bufflen = parser.RecvData.size();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
||||
if (bufflen == 0 || bufflen % structlen != 0) {
|
||||
std::cerr << "Invalid control word data length: " << bufflen
|
||||
<< " (expected multiple of " << structlen << ")" << std::endl;
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
break;
|
||||
}
|
||||
|
||||
// <20>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector<DZ_kzz_bit> control_words;
|
||||
control_words.reserve(bufflen / structlen);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
for (size_t i = 0; i < bufflen; i += structlen) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector<uint8_t> buff(structlen);
|
||||
memcpy(buff.data(), parser.RecvData.data() + i, structlen);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
DZ_kzz_bit dz_info;
|
||||
memcpy(&dz_info, buff.data(), structlen);
|
||||
|
||||
// <20><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> - <20><><EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB>'\0'<27><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
auto find_string_end = [](const char* arr, size_t max_len) -> size_t {
|
||||
for (size_t i = 0; i < max_len; i++) {
|
||||
if (arr[i] == '\0') return i;
|
||||
}
|
||||
return max_len;
|
||||
};
|
||||
|
||||
// <20><>ȡԭʼGBK<42>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
size_t name_len = find_string_end(dz_info.kzz_bit, sizeof(dz_info.kzz_bit));
|
||||
|
||||
|
||||
// ֱ<>Ӵ洢ԭʼGBK<42><4B><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ת<EFBFBD><D7AA>UTF-8<><38>
|
||||
control_words.push_back(dz_info);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
||||
std::string gbk_name(dz_info.kzz_bit,name_len);
|
||||
std::cout << "Control word: " << gbk_name
|
||||
<< ", enable: " << static_cast<int>(dz_info.bit_enable) << std::endl;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
else {
|
||||
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
||||
// <20><>ȡװ<C8A1>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case DeviceState::SET_INTERFIXEDVALUE:
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_NewACK)) {
|
||||
std::cout << "set success" << mac << std::endl;
|
||||
//<2F>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>óɹ<C3B3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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;
|
||||
|
||||
// װ<>÷<EFBFBD><C3B7><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
// <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵʧ<D6B5>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
else {
|
||||
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
||||
// <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵʧ<D6B5>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case DeviceState::CUSTOM_ACTION:
|
||||
// <20>Զ<EFBFBD><D4B6>嶯<EFBFBD><E5B6AF>״̬
|
||||
std::cout << "CUSTOM_ACTION state: Processing custom response from " << mac << std::endl;
|
||||
|
||||
Reference in New Issue
Block a user