Merge branch '测试2' of http://192.168.1.22:3000/zw/Linux_Front1056 into 测试2
This commit is contained in:
@@ -23,6 +23,14 @@ float ShorToFloat1000(short num) {
|
|||||||
float ShorToFloat10000(short num) {
|
float ShorToFloat10000(short num) {
|
||||||
return static_cast<float>(num) / 10000.0f;
|
return static_cast<float>(num) / 10000.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <20>ֽ<EFBFBD><D6BD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
void ReversalBuff(uint8_t* buff, int start, int length) {
|
||||||
|
for (int i = 0; i < length / 2; i++) {
|
||||||
|
std::swap(buff[start + i], buff[start + length - 1 - i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MAC<41><43>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>䵽<EFBFBD><E4B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MAC<41><43>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>䵽<EFBFBD><E4B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
void GetMAC(const std::string& strMAC, std::vector<unsigned char>& packet, size_t startIndex) {
|
void GetMAC(const std::string& strMAC, std::vector<unsigned char>& packet, size_t startIndex) {
|
||||||
// <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD>пո<D0BF><D5B8>Ͷ̺<CDB6><CCBA><EFBFBD>
|
// <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD>пո<D0BF><D5B8>Ͷ̺<CDB6><CCBA><EFBFBD>
|
||||||
@@ -405,4 +413,150 @@ std::vector<unsigned char> generate_getfilemenu_message(const std::string& filed
|
|||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD>GetMsg<73><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD>GetMsg<73><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
return GetMsg(dataBuf, static_cast<unsigned char>(MsgRequestType::Request_FileDir));
|
return GetMsg(dataBuf, static_cast<unsigned char>(MsgRequestType::Request_FileDir));
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
std::vector<unsigned char> generate_requestFixValue_message(unsigned char nCpuNo) {
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
if (nCpuNo < 1 || nCpuNo > 6)
|
||||||
|
return std::vector<unsigned char>();
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>4<EFBFBD>ֽڻ<D6BD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||||
|
std::vector<unsigned char> DataBuf(4, 0x00);
|
||||||
|
DataBuf[3] = nCpuNo; // CPU<50><55><EFBFBD>ŷ<EFBFBD><C5B7>ڵ<EFBFBD>4<EFBFBD>ֽ<EFBFBD>
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
return GetMsg(DataBuf, static_cast<unsigned char>(MsgRequestType::Request_FixValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
std::vector<unsigned char> generate_requestFixDes_message() {
|
||||||
|
// <20><><EFBFBD><EFBFBD>3<EFBFBD>ֽڻ<D6BD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||||
|
std::vector<unsigned char> DataBuf(3, 0x00);
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
return GetMsg(DataBuf, static_cast<unsigned char>(MsgRequestType::Request_FixDes));
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD>ö<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B>ĵĶ<C4B5>ֵ<EFBFBD><D6B5><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>
|
||||||
|
std::vector<unsigned char> generate_requestSetFixValue_message(
|
||||||
|
unsigned char nCpuNo,
|
||||||
|
const std::vector<float>& value)
|
||||||
|
{
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
if (nCpuNo < 1 || nCpuNo > 6)
|
||||||
|
return std::vector<unsigned char>();
|
||||||
|
|
||||||
|
// <20><><EFBFBD>㻺<EFBFBD><E3BBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С: 4(ͷ<><CDB7>) + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鳤<EFBFBD><E9B3A4>*4
|
||||||
|
const size_t bufSize = 4 + value.size() * 4;
|
||||||
|
std::vector<unsigned char> DataBuf(bufSize, 0x00);
|
||||||
|
DataBuf[3] = nCpuNo; // CPU<50><55><EFBFBD>ŷ<EFBFBD><C5B7>ڵ<EFBFBD>4<EFBFBD>ֽ<EFBFBD>
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||||
|
for (size_t i = 0; i < value.size(); i++) {
|
||||||
|
// <20><>floatת<74><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||||
|
uint32_t intValue;
|
||||||
|
memcpy(&intValue, &value[i], sizeof(float));
|
||||||
|
uint32_t netValue = htonl(intValue);
|
||||||
|
|
||||||
|
// <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
unsigned char* dest = DataBuf.data() + 4 + i * 4;
|
||||||
|
memcpy(dest, &netValue, sizeof(uint32_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
return GetMsg(DataBuf, static_cast<unsigned char>(MsgRequestType::Request_Set_Fix));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
|
||||||
|
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
std::vector<unsigned char> generate_requestinterfixvalue_message()
|
||||||
|
{
|
||||||
|
// <20><><EFBFBD><EFBFBD>3<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ0
|
||||||
|
std::vector<unsigned char> dataBuf(3, 0x00);
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>ͨ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD>
|
||||||
|
return GetMsg(dataBuf, static_cast<unsigned char>(MsgRequestType::Request_Read_InterFix));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
|
||||||
|
* @param nDesCW <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (1-<2D>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>, 2-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||||
|
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чʱ<D0A7><CAB1><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
std::vector<unsigned char> generate_requestinterfixdes_message(unsigned char nDesCW)
|
||||||
|
{
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>
|
||||||
|
if (nDesCW < 1 || nDesCW > 2) {
|
||||||
|
return std::vector<unsigned char>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>3<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
std::vector<unsigned char> dataBuf(3, 0x00);
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
dataBuf[0] = nDesCW;
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>ͨ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD>
|
||||||
|
return GetMsg(dataBuf, static_cast<unsigned char>(MsgRequestType::Request_Read_InterFixDes));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
|
||||||
|
* @param values Ҫ<><D2AA><EFBFBD>õĶ<C3B5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> (ushortֵ)
|
||||||
|
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
std::vector<unsigned char> generate_requestsetinterfixvalue_message(const std::vector<uint16_t>& values)
|
||||||
|
{
|
||||||
|
// <20><><EFBFBD>㻺<EFBFBD><E3BBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С: 3<>ֽ<EFBFBD>ͷ<EFBFBD><CDB7> + ÿ<><C3BF>ֵռ2<D5BC>ֽ<EFBFBD>
|
||||||
|
const size_t bufSize = 3 + values.size() * 2;
|
||||||
|
std::vector<unsigned char> dataBuf(bufSize, 0x00);
|
||||||
|
|
||||||
|
// <20><><EFBFBD>䶨ֵ<E4B6A8><D6B5><EFBFBD><EFBFBD>
|
||||||
|
for (size_t i = 0; i < values.size(); i++) {
|
||||||
|
// <20><>ushortֵת<D6B5><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD> (<28><><EFBFBD><EFBFBD>)
|
||||||
|
uint16_t netValue = htons(values[i]);
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>λ<EFBFBD><CEBB>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>3<EFBFBD>ֽ<EFBFBD>ͷ<EFBFBD><CDB7>)
|
||||||
|
unsigned char* dest = dataBuf.data() + 3 + i * 2;
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
memcpy(dest, &netValue, sizeof(uint16_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>ͨ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD>
|
||||||
|
return GetMsg(dataBuf, static_cast<unsigned char>(MsgRequestType::Request_Set_InterFix));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
|
||||||
|
* @param values Ҫ<><D2AA><EFBFBD>õĶ<C3B5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> (ushortֵ)
|
||||||
|
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
std::vector<unsigned char> generate_requestsetinterfixvalue_message_new(const std::vector<uint16_t>& value)
|
||||||
|
{
|
||||||
|
// <20><><EFBFBD>㻺<EFBFBD><E3BBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С: 3<>ֽ<EFBFBD>ͷ<EFBFBD><CDB7> + ÿ<><C3BF>ֵռ2<D5BC>ֽ<EFBFBD>
|
||||||
|
const size_t bufSize = 3 + value.size() * 2;
|
||||||
|
std::vector<unsigned char> dataBuf(bufSize, 0x00);
|
||||||
|
|
||||||
|
// <20><><EFBFBD>䶨ֵ<E4B6A8><D6B5><EFBFBD><EFBFBD>
|
||||||
|
for (size_t i = 0; i < value.size(); i++) {
|
||||||
|
// <20><>ֵת<D6B5><D7AA>Ϊ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
uint16_t rawValue = value[i];
|
||||||
|
unsigned char* bytes = reinterpret_cast<unsigned char*>(&rawValue);
|
||||||
|
|
||||||
|
// <20><>ת<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>C#<23><>ReversalBuff<66><66>
|
||||||
|
std::swap(bytes[0], bytes[1]);
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>λ<EFBFBD><CEBB>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>3<EFBFBD>ֽ<EFBFBD>ͷ<EFBFBD><CDB7>)
|
||||||
|
unsigned char* dest = dataBuf.data() + 3 + i * 2;
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
memcpy(dest, bytes, sizeof(uint16_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>ͨ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD>
|
||||||
|
return GetMsg(dataBuf, static_cast<unsigned char>(MsgRequestType::Request_Set_InterFix));
|
||||||
}
|
}
|
||||||
@@ -27,7 +27,19 @@ enum class MsgRequestType : unsigned char {
|
|||||||
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ļ<EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ļ<EFBFBD>
|
||||||
Request_File_Download = 0x07,
|
Request_File_Download = 0x07,
|
||||||
//ѯ<><D1AF><EFBFBD>ļ<EFBFBD>Ŀ¼
|
//ѯ<><D1AF><EFBFBD>ļ<EFBFBD>Ŀ¼
|
||||||
Request_FileDir = 0x02
|
Request_FileDir = 0x02,
|
||||||
|
//ѯ<><D1AF>װ<EFBFBD>ö<EFBFBD>ֵ
|
||||||
|
Request_FixValue = 0x20,
|
||||||
|
//ѯ<><D1AF>װ<EFBFBD>ö<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||||
|
Request_FixDes = 0x21,
|
||||||
|
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ֵ
|
||||||
|
Request_Set_Fix = 0x22,
|
||||||
|
//ѯ<><D1AF><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ
|
||||||
|
Request_Read_InterFix = 0x23,
|
||||||
|
//ѯ<><D1AF><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD>ֵor<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
Request_Read_InterFixDes = 0x24,
|
||||||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ
|
||||||
|
Request_Set_InterFix = 0x25
|
||||||
};
|
};
|
||||||
// <20><><EFBFBD>ձ<EFBFBD><D5B1>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>
|
// <20><><EFBFBD>ձ<EFBFBD><D5B1>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>
|
||||||
enum class MsgResponseType : unsigned char {
|
enum class MsgResponseType : unsigned char {
|
||||||
@@ -44,7 +56,23 @@ enum class MsgResponseType : unsigned char {
|
|||||||
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ļ<EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ļ<EFBFBD>
|
||||||
Response_File_Download = 0x87,
|
Response_File_Download = 0x87,
|
||||||
//ѯ<><D1AF><EFBFBD>ļ<EFBFBD>Ŀ¼
|
//ѯ<><D1AF><EFBFBD>ļ<EFBFBD>Ŀ¼
|
||||||
Response_FileDir = 0x82
|
Response_FileDir = 0x82,
|
||||||
|
//ѯ<><D1AF>װ<EFBFBD>ö<EFBFBD>ֵ
|
||||||
|
Response_FixValue = 0xA0,
|
||||||
|
//ѯ<><D1AF>װ<EFBFBD>ö<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||||
|
Response_FixDes = 0xA1,
|
||||||
|
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ֵ(δʹ<CEB4><CAB9>,<2C><><EFBFBD><EFBFBD>Ĭ<EFBFBD>Ͽ϶<CFBF><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>)
|
||||||
|
Response_Set_Fix = 0xA2,
|
||||||
|
//ѯ<><D1AF><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ
|
||||||
|
Response_Read_InterFix = 0xA3,
|
||||||
|
//ѯ<><D1AF><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||||
|
Response_Read_InterFixDes = 0xA4,
|
||||||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ(δʹ<CEB4><CAB9>,<2C><><EFBFBD><EFBFBD>Ĭ<EFBFBD>Ͽ϶<CFBF><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>)
|
||||||
|
Response_Set_InterFix = 0xA5,
|
||||||
|
//Ĭ<>Ͽ϶<CFBF>Ӧ<EFBFBD><D3A6>
|
||||||
|
Response_NewACK = 0x40,
|
||||||
|
//Ĭ<>Ϸ<EFBFBD><CFB7><EFBFBD>Ӧ<EFBFBD><D3A6>
|
||||||
|
Response_NewNACK = 0x41
|
||||||
};
|
};
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ
|
||||||
class MessageParser {
|
class MessageParser {
|
||||||
@@ -2061,6 +2089,42 @@ struct tag_dir_info {
|
|||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||||
|
struct DZ_TAB_STRUCT {
|
||||||
|
short LN_Num; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
short DZ_Num; // <20><><EFBFBD><EFBFBD>
|
||||||
|
char DZ_Name[66]; // <20><><EFBFBD><EFBFBD>
|
||||||
|
short DZ_Type; // <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||||
|
float DZ_Min; // <20><>Сֵ
|
||||||
|
float DZ_Max; // <20><><EFBFBD><EFBFBD>ֵ
|
||||||
|
float DZ_Default; // ȱʡֵ
|
||||||
|
char DZ_UNIT[10]; // <20><><EFBFBD><EFBFBD>
|
||||||
|
};
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD>嶨<EFBFBD><E5B6A8>
|
||||||
|
#pragma pack(push, 1) // ȷ<><C8B7><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>
|
||||||
|
struct DZ_kzz_bit {
|
||||||
|
char kzz_bit[40]; // <20><><EFBFBD>ƣ<EFBFBD><C6A3>̶<EFBFBD>40<34>ֽ<EFBFBD>
|
||||||
|
char bit_enable; // <20>Ƿ<EFBFBD>ʹ<EFBFBD>ñ<EFBFBD>־<EFBFBD><D6BE>1<EFBFBD>ֽڣ<D6BD>
|
||||||
|
};
|
||||||
|
#pragma pack(pop) // <20>ָ<EFBFBD>Ĭ<EFBFBD>϶<EFBFBD><CFB6><EFBFBD>
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||||
|
struct NameFixValue
|
||||||
|
{
|
||||||
|
char uNumber; // <20><><EFBFBD><EFBFBD>
|
||||||
|
char sFixValueName[20]; // <20><><EFBFBD><EFBFBD> (<28>̶<EFBFBD>20<32>ֽ<EFBFBD>)
|
||||||
|
char uBY; // <20><><EFBFBD><EFBFBD>
|
||||||
|
uint16_t DataType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
uint16_t MinValue; // <20><>Сֵ
|
||||||
|
uint16_t MaxValue; // <20><><EFBFBD><EFBFBD>ֵ
|
||||||
|
uint16_t DefaultValue; // ȱʡֵ
|
||||||
|
char sDimension[4]; // <20><>λ (<28>̶<EFBFBD>4<EFBFBD>ֽ<EFBFBD>)
|
||||||
|
};
|
||||||
|
|
||||||
|
// <20>ֽ<EFBFBD><D6BD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
void ReversalBuff(uint8_t* buff, int start, int length);
|
||||||
|
|
||||||
// <20><><EFBFBD>ɴ<EFBFBD>Э<EFBFBD><D0AD>ͷ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
|
// <20><><EFBFBD>ɴ<EFBFBD>Э<EFBFBD><D0AD>ͷ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
|
||||||
std::vector<unsigned char> generate_binary_message(
|
std::vector<unsigned char> generate_binary_message(
|
||||||
uint16_t msg_type,
|
uint16_t msg_type,
|
||||||
@@ -2077,4 +2141,28 @@ std::vector<unsigned char> generate_realstat_message(unsigned char nCpuNo, unsig
|
|||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǰ֡<C7B0><D6A1><EFBFBD><EFBFBD>+<2B>ļ<EFBFBD><C4BC><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǰ֡<C7B0><D6A1><EFBFBD><EFBFBD>+<2B>ļ<EFBFBD><C4BC><EFBFBD>
|
||||||
std::vector<unsigned char> generate_downloadfile_message(int frameIndex, const std::string& fileName);
|
std::vector<unsigned char> generate_downloadfile_message(int frameIndex, const std::string& fileName);
|
||||||
//<2F>ļ<EFBFBD>Ŀ¼<C4BF><C2BC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
|
//<2F>ļ<EFBFBD>Ŀ¼<C4BF><C2BC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
|
||||||
std::vector<unsigned char> generate_getfilemenu_message(const std::string& filedir);
|
std::vector<unsigned char> generate_getfilemenu_message(const std::string& filedir);
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
std::vector<unsigned char> generate_requestFixValue_message(unsigned char nCpuNo);
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
std::vector<unsigned char> generate_requestFixDes_message();
|
||||||
|
// <20><><EFBFBD>ö<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B>ĵĶ<C4B5>ֵ<EFBFBD><D6B5><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>
|
||||||
|
std::vector<unsigned char> generate_requestSetFixValue_message(unsigned char nCpuNo, const std::vector<float>& value);
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
|
||||||
|
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
std::vector<unsigned char> generate_requestinterfixvalue_message();
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
|
||||||
|
* @param nDesCW <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (1-<2D>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>, 2-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||||
|
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чʱ<D0A7><CAB1><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
std::vector<unsigned char> generate_requestinterfixdes_message(unsigned char nDesCW);
|
||||||
|
/**
|
||||||
|
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
|
||||||
|
* @param values Ҫ<><D2AA><EFBFBD>õĶ<C3B5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> (ushortֵ)
|
||||||
|
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
std::vector<unsigned char> generate_requestsetinterfixvalue_message(const std::vector<uint16_t>& values);
|
||||||
|
std::vector<unsigned char> generate_requestsetinterfixvalue_message_new(const std::vector<uint16_t>& value);
|
||||||
@@ -1081,6 +1081,176 @@ bool ClientManager::add_file_download_action_to_device(
|
|||||||
return false; // 设备未找到
|
return false; // 设备未找到
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取指定装置指定测点下的定值数据
|
||||||
|
bool ClientManager::get_fixedvalue_action_to_device(const std::string& identifier, ushort point_id) {
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
// 生成定值数据报文
|
||||||
|
auto packet = generate_requestFixValue_message(point_id);
|
||||||
|
|
||||||
|
// 添加动作到队列 (状态: 读取文件目录)
|
||||||
|
ctx->add_action(DeviceState::READING_FIXEDVALUE, packet);
|
||||||
|
|
||||||
|
// 如果当前空闲则立即执行
|
||||||
|
if (ctx->current_state_ == DeviceState::IDLE) {
|
||||||
|
ctx->process_next_action();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true; // 成功添加
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false; // 设备未找到
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取指定装置的定值描述
|
||||||
|
bool ClientManager::get_fixedvaluedes_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)
|
||||||
|
{
|
||||||
|
// 生成定值描述报文
|
||||||
|
auto packet = generate_requestFixDes_message();
|
||||||
|
|
||||||
|
// 添加动作到队列 (状态: 读取文件目录)
|
||||||
|
ctx->add_action(DeviceState::READING_FIXEDVALUEDES, packet);
|
||||||
|
|
||||||
|
// 如果当前空闲则立即执行
|
||||||
|
if (ctx->current_state_ == DeviceState::IDLE) {
|
||||||
|
ctx->process_next_action();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true; // 成功添加
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false; // 设备未找到
|
||||||
|
}
|
||||||
|
|
||||||
|
//设置指定测点定值配置
|
||||||
|
bool ClientManager::set_fixedvalue_action_to_device(const std::string& identifier, ushort point_id, const std::vector<float>& value) {
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
// 生成定值描述报文
|
||||||
|
auto packet = generate_requestSetFixValue_message(point_id, value);
|
||||||
|
|
||||||
|
// 添加动作到队列 (状态: 读取文件目录)
|
||||||
|
ctx->add_action(DeviceState::SET_FIXEDVALUE, packet);
|
||||||
|
|
||||||
|
// 如果当前空闲则立即执行
|
||||||
|
if (ctx->current_state_ == DeviceState::IDLE) {
|
||||||
|
ctx->process_next_action();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true; // 成功添加
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false; // 设备未找到
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取装置内部定值
|
||||||
|
bool ClientManager::get_interfixedvalue_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)
|
||||||
|
{
|
||||||
|
// 生成定值描述报文
|
||||||
|
auto packet = generate_requestinterfixvalue_message();
|
||||||
|
|
||||||
|
// 添加动作到队列 (状态: 读取文件目录)
|
||||||
|
ctx->add_action(DeviceState::READING_INTERFIXEDVALUE, packet);
|
||||||
|
|
||||||
|
// 如果当前空闲则立即执行
|
||||||
|
if (ctx->current_state_ == DeviceState::IDLE) {
|
||||||
|
ctx->process_next_action();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true; // 成功添加
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false; // 设备未找到
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取装置内部定值控制字描述or内部定值描述 1-内部定值描述,2-控制字位描述
|
||||||
|
bool ClientManager::get_fixedvalucontrolword_action_to_device(const std::string& identifier, unsigned char nDesCW) {
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
// 生成定值描述报文
|
||||||
|
auto packet = generate_requestinterfixdes_message(nDesCW);
|
||||||
|
|
||||||
|
if (nDesCW == 1) {
|
||||||
|
// 添加内部定值描述
|
||||||
|
ctx->add_action(DeviceState::READING_INTERFIXEDVALUEDES, packet);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// 添加控制字描述
|
||||||
|
ctx->add_action(DeviceState::READING_CONTROLWORD, packet);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果当前空闲则立即执行
|
||||||
|
if (ctx->current_state_ == DeviceState::IDLE) {
|
||||||
|
ctx->process_next_action();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true; // 成功添加
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false; // 设备未找到
|
||||||
|
}
|
||||||
|
|
||||||
|
//设置装置内部定值配置
|
||||||
|
bool ClientManager::set_interfixedvalue_action_to_device(const std::string& identifier, const std::vector<uint16_t>& values) {
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
// 生成定值描述报文
|
||||||
|
auto packet = generate_requestsetinterfixvalue_message(values);
|
||||||
|
//auto packet = generate_requestsetinterfixvalue_message_new(values);
|
||||||
|
|
||||||
|
// 添加动作到队列 (状态: 读取文件目录)
|
||||||
|
ctx->add_action(DeviceState::SET_INTERFIXEDVALUE, packet);
|
||||||
|
|
||||||
|
// 如果当前空闲则立即执行
|
||||||
|
if (ctx->current_state_ == DeviceState::IDLE) {
|
||||||
|
ctx->process_next_action();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true; // 成功添加
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false; // 设备未找到
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取指定装置测点的电压等级与接线方式
|
||||||
bool ClientManager::get_point_scale_and_pttype(const std::string& identifier,
|
bool ClientManager::get_point_scale_and_pttype(const std::string& identifier,
|
||||||
ushort nCpuNo,
|
ushort nCpuNo,
|
||||||
std::string& out_scale,
|
std::string& out_scale,
|
||||||
|
|||||||
@@ -42,13 +42,20 @@ enum class ConnectionState {
|
|||||||
|
|
||||||
// <20><><EFBFBD>ӵ<EFBFBD>״̬ö<CCAC><C3B6>
|
// <20><><EFBFBD>ӵ<EFBFBD>״̬ö<CCAC><C3B6>
|
||||||
enum class DeviceState {
|
enum class DeviceState {
|
||||||
IDLE, // <20><><EFBFBD><EFBFBD>״̬
|
IDLE, // <20><><EFBFBD><EFBFBD>״̬
|
||||||
READING_STATS, // <20><>ȡͳ<C8A1><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
READING_STATS, // <20><>ȡͳ<C8A1><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
READING_STATS_TIME, // <20><>ȡͳ<C8A1><CDB3>ʱ<EFBFBD><CAB1>
|
READING_STATS_TIME, // <20><>ȡͳ<C8A1><CDB3>ʱ<EFBFBD><CAB1>
|
||||||
READING_REALSTAT, // <20><>ȡʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>
|
READING_REALSTAT, // <20><>ȡʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>
|
||||||
READING_EVENTFILE, // <20><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
READING_EVENTFILE, // <20><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
READING_FILEMENU, // <20><>ȡ<EFBFBD>ļ<EFBFBD>Ŀ¼
|
READING_FILEMENU, // <20><>ȡ<EFBFBD>ļ<EFBFBD>Ŀ¼
|
||||||
READING_FILEDATA, // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
READING_FILEDATA, // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
READING_FIXEDVALUE, // <20><>ȡ<EFBFBD><C8A1><EFBFBD>㶨ֵ
|
||||||
|
READING_FIXEDVALUEDES, // <20><>ȡ<EFBFBD><C8A1><EFBFBD>㶨ֵ<E3B6A8><D6B5><EFBFBD><EFBFBD>
|
||||||
|
SET_FIXEDVALUE, // <20><><EFBFBD>ò<EFBFBD><C3B2>㶨ֵ
|
||||||
|
READING_INTERFIXEDVALUE, // <20><>ȡ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ
|
||||||
|
READING_INTERFIXEDVALUEDES, // <20><>ȡ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||||
|
READING_CONTROLWORD, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
SET_INTERFIXEDVALUE, // <20><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><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>״̬
|
||||||
CUSTOM_ACTION // <20>Զ<EFBFBD><D4B6>嶯<EFBFBD><E5B6AF>
|
CUSTOM_ACTION // <20>Զ<EFBFBD><D4B6>嶯<EFBFBD><E5B6AF>
|
||||||
};
|
};
|
||||||
@@ -370,6 +377,24 @@ public:
|
|||||||
|
|
||||||
//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD> <20><><EFBFBD><EFBFBD>mac/id + <20>ļ<EFBFBD>λ<EFBFBD><CEBB>
|
//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD> <20><><EFBFBD><EFBFBD>mac/id + <20>ļ<EFBFBD>λ<EFBFBD><CEBB>
|
||||||
bool add_file_download_action_to_device(const std::string& identifier, const std::string& file_path);
|
bool add_file_download_action_to_device(const std::string& identifier, const std::string& file_path);
|
||||||
|
|
||||||
|
//<2F><>ȡָ<C8A1><D6B8>װ<EFBFBD><D7B0>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µĶ<C2B5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>mac/id + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
bool get_fixedvalue_action_to_device(const std::string& identifier, ushort point_id);
|
||||||
|
|
||||||
|
//<2F><>ȡָ<C8A1><D6B8>װ<EFBFBD>ö<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>mac/id
|
||||||
|
bool get_fixedvaluedes_action_to_device(const std::string& identifier);
|
||||||
|
|
||||||
|
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>mac/id + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||||
|
bool set_fixedvalue_action_to_device(const std::string& identifier, ushort point_id, const std::vector<float>& value);
|
||||||
|
|
||||||
|
//<2F><>ȡװ<C8A1><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ <20><><EFBFBD><EFBFBD>mac/id
|
||||||
|
bool get_interfixedvalue_action_to_device(const std::string& identifier);
|
||||||
|
|
||||||
|
//<2F><>ȡװ<C8A1><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>or<6F>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> 1-<2D>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
||||||
|
bool get_fixedvalucontrolword_action_to_device(const std::string& identifier, unsigned char nDesCW);
|
||||||
|
|
||||||
|
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ <20><><EFBFBD><EFBFBD>mac/id + <20>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||||
|
bool set_interfixedvalue_action_to_device(const std::string& identifier, const std::vector<uint16_t>& values);
|
||||||
private:
|
private:
|
||||||
ClientManager() : loop_(nullptr) {}
|
ClientManager() : loop_(nullptr) {}
|
||||||
std::unordered_map<std::string, std::unique_ptr<ClientContext>> clients_;
|
std::unordered_map<std::string, std::unique_ptr<ClientContext>> clients_;
|
||||||
|
|||||||
@@ -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>
|
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>'/'<27><>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>ԭ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
void process_received_message(string mac, string id,const char* data, size_t length) {
|
void process_received_message(string mac, string id,const char* data, size_t length) {
|
||||||
// ʵ<>ʵ<EFBFBD><CAB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// ʵ<>ʵ<EFBFBD><CAB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
std::cout << "Active connections: " << mac << " id:" << id << " size:" << length << std::endl;
|
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().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_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().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) {
|
if (udata[19] == 0x00) {
|
||||||
std::cout << "cloud login: " << mac << " state: fail!" << std::endl;
|
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:
|
case DeviceState::READING_STATS:
|
||||||
// <20><>ȡͳ<C8A1><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
// <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)) {
|
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>
|
// һ<><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>֡
|
//<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:
|
case DeviceState::READING_STATS_TIME:
|
||||||
// <20><>ȡͳ<C8A1><CDB3>ʱ<EFBFBD><CAB1>״̬
|
// <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)) {
|
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_StatTime)) {
|
||||||
std::vector<PointInfo> points;//װ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
std::vector<PointInfo> points;//װ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
if (ClientManager::instance().get_device_points(mac, points)) {
|
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:
|
case DeviceState::READING_REALSTAT:
|
||||||
//<2F><>ȡʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>״̬
|
//<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)) {
|
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_New_3S)) {
|
||||||
unsigned char packet_type = udata[13];
|
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:
|
case DeviceState::READING_EVENTFILE:
|
||||||
// <20><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
// <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)) {
|
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>
|
// <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) |
|
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:
|
case DeviceState::READING_FILEMENU:
|
||||||
//<2F><>ȡ<EFBFBD>ļ<EFBFBD>Ŀ¼
|
//<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)) {
|
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_FileDir)) {
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>С
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>С
|
||||||
const size_t struct_size = sizeof(tag_dir_info);
|
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:
|
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>
|
//<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))
|
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>
|
// <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;
|
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:
|
case DeviceState::CUSTOM_ACTION:
|
||||||
// <20>Զ<EFBFBD><D4B6>嶯<EFBFBD><E5B6AF>״̬
|
// <20>Զ<EFBFBD><D4B6>嶯<EFBFBD><E5B6AF>״̬
|
||||||
std::cout << "CUSTOM_ACTION state: Processing custom response from " << mac << std::endl;
|
std::cout << "CUSTOM_ACTION state: Processing custom response from " << mac << std::endl;
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ void* client_manager_thread(void* arg) {
|
|||||||
std::vector<PointInfo> points2 = {
|
std::vector<PointInfo> points2 = {
|
||||||
{"P101", "Generator Output", "D002",1 ,1, 1, 1, 1,"0.38k",0}
|
{"P101", "Generator Output", "D002",1 ,1, 1, 1, 1,"0.38k",0}
|
||||||
};
|
};
|
||||||
//00-B7-8D-A8-00-D6 00-B7-8D-01-79-06
|
//00B78DA800D6 00-B7-8D-01-79-06
|
||||||
// <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>б<EFBFBD>
|
// <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>б<EFBFBD>
|
||||||
std::vector<DeviceInfo> devices = {
|
std::vector<DeviceInfo> devices = {
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user