#include "webdatathread.h" #include "ytservicecore.h" //#include //extern WebDataShm *webData; //extern UserInfoShm *userinfoShm; typedef union { float f; unsigned char c[4]; }FC; WebDataThread::WebDataThread(qintptr socketDescriptor, QObject *parent) : QThread(parent) { this->SocketDescriptor = socketDescriptor; } void WebDataThread::run(){ QTcpSocket *so = new QTcpSocket; if(!so->setSocketDescriptor(this->SocketDescriptor)){ so->abort(); // printf("setSocketDescriptor error\n"); return; } keepRunning = true; // printf("socket in %s \n", so->peerAddress().toString().toUtf8().data()); while(keepRunning){ if(so->state()!=QAbstractSocket::ConnectedState){ close_self(so); return; } if(so->waitForReadyRead()) getData(so); } } void WebDataThread::close_self(QTcpSocket *so){ so->abort(); keepRunning = false; } QByteArray WebDataThread::mkUserCountReturn(){ QByteArray ret = QByteArray(17,0x00); int crc=0; QDateTime datetime = QDateTime::currentDateTime(); ret[0] = 0x7e; ret[1] = 0x10; ret[2] = 0x00; ret[3] = 0x03; ret[4] = static_cast(0x82&0xff); ret[5] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[6] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[7] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[8] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[9] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[10] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[11] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[12] = static_cast(0x01); ret[13] = static_cast((webData->UsersCount>>8)&0xff); ret[14] = static_cast(webData->UsersCount&0xff); ret[15] = static_cast(0x00); ret[16] = static_cast(0xe7&0xff); for(int i=1;i<15;i++) crc += static_cast(ret[i]&0xff); ret[15] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkUserSyncData(quint16 uIdx) { int cur = 0; int crc = 0; QByteArray loginname = QByteArray(webData->users[uIdx].LoginName); QByteArray password = QByteArray(webData->users[uIdx].Password); QByteArray username = QByteArray(webData->users[uIdx].UserName); int l_loginname = loginname.length(); int l_password = password.length(); int l_username = username.length(); int datalen = l_loginname+l_password+l_username+13; QByteArray ret = QByteArray(datalen+14,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x01); ret[cur++] = static_cast((uIdx>>8)&0xff); ret[cur++] = static_cast(uIdx&0xff); ret[cur++] = static_cast(webData->users[uIdx].Status&0xff); ret[cur++] = static_cast((l_loginname>>8)&0xff); ret[cur++] = static_cast(l_loginname&0xff); for(int i=0;i(loginname.at(i)&0xff); ret[cur++] = static_cast(0x00); ret[cur++] = static_cast((l_password>>8)&0xff); ret[cur++] = static_cast(l_password&0xff); for(int i=0;i(password.at(i)&0xff); ret[cur++] = static_cast(0x00); ret[cur++] = static_cast((l_username>>8)&0xff); ret[cur++] = static_cast(l_username&0xff); for(int i=0;i(username.at(i)&0xff); ret[cur++] = static_cast(0x00); ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); } ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkCompanyCountReturn() { int cur = 0, crc = 0; quint16 datalen = 0x0003; QByteArray ret = QByteArray(17,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast(((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f); ret[cur++] = static_cast((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f); ret[cur++] = static_cast(((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f); ret[cur++] = static_cast(((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f); ret[cur++] = static_cast(((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f); ret[cur++] = static_cast(((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f); ret[cur++] = static_cast(((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f); ret[cur++] = static_cast(0x02); ret[cur++] = static_cast((webData->CompanysCount>>8)&0xff); ret[cur++] = static_cast(webData->CompanysCount&0xff); ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkCompanySyncData(quint16 cIdx) { int cur = 0, crc = 0; QByteArray CompanyCode = webData->companys[cIdx].CompanyCode; QByteArray CompanyName = webData->companys[cIdx].CompanyName; QByteArray ProjectType = webData->companys[cIdx].ProjectType; QByteArray UserName = webData->companys[cIdx].UserName; QByteArray Phone = webData->companys[cIdx].Phone; int l_CompanyCode = CompanyCode.length(); int l_CompanyName = CompanyName.length(); int l_ProjectType = ProjectType.length(); int l_UserName = UserName.length(); int l_Phone = Phone.length(); int datalen = l_CompanyCode+l_CompanyName+l_ProjectType+l_UserName+l_Phone+658; QByteArray ret = QByteArray(datalen+14,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x02); ret[cur++] = static_cast((cIdx>>8)&0xff); ret[cur++] = static_cast(cIdx&0xff); ret[cur++] = static_cast((l_CompanyCode>>8)&0xff); ret[cur++] = static_cast(l_CompanyCode&0xff); for(int i=0;i(CompanyCode.at(i)&0xff); } ret[cur++] = 0x00; ret[cur++] = static_cast((l_CompanyName>>8)&0xff); ret[cur++] = static_cast(l_CompanyName&0xff); for(int i=0;i(CompanyName.at(i)&0xff); } ret[cur++] = 0x00; ret[cur++] = static_cast((l_ProjectType>>8)&0xff); ret[cur++] = static_cast(l_ProjectType&0xff); for(int i=0;i(ProjectType.at(i)&0xff); } ret[cur++] = 0x00; ret[cur++] = static_cast((l_UserName>>8)&0xff); ret[cur++] = static_cast(l_UserName&0xff); for(int i=0;i(UserName.at(i)&0xff); } ret[cur++] = 0x00; ret[cur++] = static_cast((l_Phone>>8)&0xff); ret[cur++] = static_cast(l_Phone&0xff); for(int i=0;i(Phone.at(i)&0xff); } ret[cur++] = 0x00; for(int i=0;i<32;i++){ ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevCount>>24)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevCount>>16)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevCount>>8)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevCount)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevOutLineCount>>24)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevOutLineCount>>16)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevOutLineCount>>8)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevOutLineCount)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevOutConfirmCount>>24)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevOutConfirmCount>>16)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevOutConfirmCount>>8)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevOutConfirmCount)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevAlarmCount>>24)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevAlarmCount>>16)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevAlarmCount>>8)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevAlarmCount)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevAlarmConfirmCount>>24)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevAlarmConfirmCount>>16)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevAlarmConfirmCount>>8)&0xff); ret[cur++] = static_cast((webData->companys[cIdx].subType[i].DevAlarmConfirmCount)&0xff); } ret[cur] = 0x00; ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkUserCompanyCountReturn() { int cur = 0, crc = 0; quint16 datalen = 0x0003; QByteArray ret = QByteArray(17,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x03); ret[cur++] = static_cast((webData->UserCompanyCount>>8)&0xff); ret[cur++] = static_cast(webData->UserCompanyCount&0xff); ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkUserCompanySyncData(quint16 ucIdx) { int cur = 0, crc = 0; QByteArray Loginname = QByteArray(webData->userCompanys[ucIdx].Loginname); QByteArray CompanyCode = QByteArray(webData->userCompanys[ucIdx].CompanyCode); int l_Loginname = Loginname.length(); int l_CompanyCode = CompanyCode.length(); int datalen = l_Loginname+l_CompanyCode+9; QByteArray ret = QByteArray(datalen+14,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x03); ret[cur++] = static_cast((ucIdx>>8)&0xff); ret[cur++] = static_cast(ucIdx&0xff); ret[cur++] = static_cast((l_Loginname>>8)&0xff); ret[cur++] = static_cast(l_Loginname&0xff); for(int i=0;i(Loginname.at(i)&0xff); } ret[cur++] = static_cast(0x00); ret[cur++] = static_cast((l_CompanyCode>>8)&0xff); ret[cur++] = static_cast(l_CompanyCode&0xff); for(int i=0;i(CompanyCode.at(i)&0xff); } ret[cur++] = static_cast(0x00); ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkBuildingCountReturn() { int cur = 0, crc = 0; quint16 datalen = 0x0003; QByteArray ret = QByteArray(5,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x04); ret[cur++] = static_cast((webData->BuildingsCount>>8)&0xff); ret[cur++] = static_cast((webData->BuildingsCount)&0xff); ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkBuildingSyncData(quint16 bIdx) { int cur = 0, crc=0; QByteArray BuildingCode = QByteArray(webData->buildings[bIdx].BuildingCode); QByteArray BuildingName = QByteArray(webData->buildings[bIdx].BuildingName); QByteArray CompanyCode = QByteArray(webData->buildings[bIdx].CompanyCode); QByteArray Address = QByteArray(webData->buildings[bIdx].Address); QByteArray FullAddress = QByteArray(webData->buildings[bIdx].FullAddress); FC Lng, Lat; Lng.f = webData->buildings[bIdx].Lng; Lat.f = webData->buildings[bIdx].Lat; int l_BuildingCode = BuildingCode.length(); int l_BuildingName = BuildingName.length(); int l_CompanyCode = CompanyCode.length(); int l_Address = Address.length(); int l_FullAddress = FullAddress.length(); int datalen = l_BuildingCode+l_BuildingName+l_CompanyCode+l_Address+l_FullAddress+26; QByteArray ret = QByteArray(datalen+14,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x04); ret[cur++] = static_cast((bIdx>>8)&0xff); ret[cur++] = static_cast(bIdx&0xff); ret[cur++] = static_cast((l_BuildingCode>>8)&0xff); ret[cur++] = static_cast(l_BuildingCode&0xff); for(int i=0;i(BuildingCode.at(i)&0xff); ret[cur++] = static_cast(0x00); ret[cur++] = static_cast((l_BuildingName>>8)&0xff); ret[cur++] = static_cast(l_BuildingName&0xff); for(int i=0;i(BuildingName.at(i)&0xff); ret[cur++] = static_cast(0x00); ret[cur++] = static_cast((l_CompanyCode>>8)&0xff); ret[cur++] = static_cast(l_CompanyCode&0xff); for(int i=0;i(CompanyCode.at(i)&0xff); ret[cur++] = static_cast(0x00); ret[cur++] = static_cast((l_Address>>8)&0xff); ret[cur++] = static_cast(l_Address&0xff); for(int i=0;i(Address.at(i)&0xff); ret[cur++] = static_cast(0x00); ret[cur++] = static_cast((l_FullAddress>>8)&0xff); ret[cur++] = static_cast(l_FullAddress&0xff); for(int i=0;i(FullAddress.at(i)&0xff); ret[cur++]=static_cast(0x00); for(int i=0;i<4;i++) ret[cur++] = static_cast(Lng.c[i]&0xff); for(int i=0;i<4;i++) ret[cur++] = static_cast(Lat.c[i]&0xff); ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkDeviceCountReturn() { int cur = 0, crc = 0; quint16 datalen = 0x05; QByteArray ret = QByteArray(datalen+14,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x05); ret[cur++] = static_cast((webData->DevicesCount>>24)&0xff); ret[cur++] = static_cast((webData->DevicesCount>>16)&0xff); ret[cur++] = static_cast((webData->DevicesCount>>8)&0xff); ret[cur++] = static_cast(webData->DevicesCount&0xff); ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkDeviceSyncData(quint32 dIdx) { int cur = 0, crc = 0; QByteArray DevCode = QByteArray(webData->devices[dIdx].DevCode); QByteArray CompanyCode = QByteArray(webData->devices[dIdx].CompanyCode); QByteArray DevName = QByteArray(webData->devices[dIdx].DevName); QByteArray DevInfo = QByteArray(webData->devices[dIdx].DevInfo); int l_DevCode = DevCode.length(); int l_CompanyCode = CompanyCode.length(); int l_DevName = DevName.length(); int l_DevInfo = DevInfo.length(); int datalen = l_DevCode+l_CompanyCode+l_DevName+l_DevInfo+22; QByteArray ret = QByteArray(datalen+14,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x05); ret[cur++] = static_cast((dIdx>>24)&0xff); ret[cur++] = static_cast((dIdx>>16)&0xff); ret[cur++] = static_cast((dIdx>>8)&0xff); ret[cur++] = static_cast(dIdx&0xff); ret[cur++] = static_cast((webData->devices[dIdx].DevIdx>>24)&0xff); ret[cur++] = static_cast((webData->devices[dIdx].DevIdx>>16)&0xff); ret[cur++] = static_cast((webData->devices[dIdx].DevIdx>>8)&0xff); ret[cur++] = static_cast((webData->devices[dIdx].DevIdx)&0xff); ret[cur++] = static_cast(webData->devices[dIdx].Enabled&0xff); ret[cur++] = static_cast(webData->devices[dIdx].dwType&0xff); ret[cur++] = static_cast((l_DevCode>>8)&0xff); ret[cur++] = static_cast(l_DevCode&0xff); for(int i=0;i(DevCode.at(i)&0xff); ret[cur++] = static_cast(0x00); ret[cur++] = static_cast((l_CompanyCode>>8)&0xff); ret[cur++] = static_cast(l_CompanyCode&0xff); for(int i=0;i(CompanyCode.at(i)&0xff); ret[cur++] = static_cast(0x00); ret[cur++] = static_cast((l_DevName>>8)&0xff); ret[cur++] = static_cast(l_DevName&0xff); for(int i=0;i(DevName.at(i)&0xff); ret[cur++] = static_cast(0x00); ret[cur++] = static_cast((l_DevInfo>>8)&0xff); ret[cur++] = static_cast(l_DevInfo&0xff); for(int i=0;i(DevInfo.at(i)&0xff); ret[cur++] = static_cast(0x00); ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkCompanyAlarmCountReturn(quint16 cIdx) { int cur = 0, crc = 0; quint16 datalen = 0x0003; QByteArray ret = QByteArray(datalen+14,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e&0xff); ret[cur++] = static_cast(0x10&0xff); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x06); if((cIdx>webData->CompanysAlarmCount)&&(cIdx!=10239)){ ret[cur++] = static_cast((webData->CompanysAlarmCount>>8)&0xff); ret[cur++] = static_cast((webData->CompanysAlarmCount)&0xff); }else{ ret[cur++] = static_cast((cIdx>>8)&0xff); ret[cur++] = static_cast(cIdx&0xff); } ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkCompanyAlarmSyncData(quint16 cIdx) { int cur = 0, crc = 0; QList dataList; dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[0].Data)); dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[1].Data)); dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[2].Data)); dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[3].Data)); dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[4].Data)); dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[5].Data)); dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[6].Data)); dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[7].Data)); dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[8].Data)); dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[9].Data)); int datalen = 3; for(int i=0;i<10;i++) datalen += dataList.at(i).length()+9; QByteArray ret = QByteArray(datalen+14,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x06); ret[cur++] = static_cast((cIdx>>8)&0xff); ret[cur++] = static_cast(cIdx&0xff); for(int i=0;i<10;i++){ QByteArray Data = dataList.at(i); int len = Data.length(); ret[cur++] = static_cast((webData->CompanyAlarm[cIdx].alarmRec[i].DeviceIdx>>24)&0xff); ret[cur++] = static_cast((webData->CompanyAlarm[cIdx].alarmRec[i].DeviceIdx>>16)&0xff); ret[cur++] = static_cast((webData->CompanyAlarm[cIdx].alarmRec[i].DeviceIdx>>8)&0xff); ret[cur++] = static_cast((webData->CompanyAlarm[cIdx].alarmRec[i].DeviceIdx)&0xff); ret[cur++] = static_cast(webData->CompanyAlarm[cIdx].alarmRec[i].dwType&0xff); ret[cur++] = static_cast(webData->CompanyAlarm[cIdx].alarmRec[i].ShowFlag&0xff); ret[cur++] = static_cast((webData->CompanyAlarm[cIdx].alarmRec[i].Time_T>>24)&0xff); ret[cur++] = static_cast((webData->CompanyAlarm[cIdx].alarmRec[i].Time_T>>16)&0xff); ret[cur++] = static_cast((webData->CompanyAlarm[cIdx].alarmRec[i].Time_T>>8)&0xff); ret[cur++] = static_cast((webData->CompanyAlarm[cIdx].alarmRec[i].Time_T)&0xff); ret[cur++] = static_cast((len>>8)&0xff); ret[cur++]= static_cast(len&0xff); for(int j=0;j(Data.at(j)&0xff); } ret[cur++] = static_cast(0x00); } ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkHeartBeatReturn() { int crc = 0; QByteArray ret = QByteArray(14,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[0] = static_cast(0x7e); ret[1] = static_cast(0x10); ret[2] = static_cast(0x00); ret[3] = static_cast(0x00); ret[4] = static_cast(0x81&0xff); ret[5] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[6] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[7] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[8] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[9] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[10] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[11] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[12] = static_cast(0x00); ret[13] = static_cast(0xe7&0xff); for(int i=1;i<12;i++) crc += static_cast(ret[i]&0xff); ret[12] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkDataCountReturn() { quint16 datalen = 20; QByteArray ret = QByteArray(datalen+14,0x00); QDateTime datetime = QDateTime::currentDateTime(); int cur = 0, crc = 0; ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x87&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x07); ret[cur++] = static_cast((webData->CompanysCount>>24)&0xff); ret[cur++] = static_cast((webData->CompanysCount>>16)&0xff); ret[cur++] = static_cast((webData->CompanysCount>>8)&0xff); ret[cur++] = static_cast(webData->CompanysCount&0xff); ret[cur++] = static_cast((webData->BuildingsCount>>24)&0xff); ret[cur++] = static_cast((webData->BuildingsCount>>16)&0xff); ret[cur++] = static_cast((webData->BuildingsCount>>8)&0xff); ret[cur++] = static_cast(webData->BuildingsCount&0xff); ret[cur++] = static_cast((webData->DevicesCount>>24)&0xff); ret[cur++] = static_cast((webData->DevicesCount>>16)&0xff); ret[cur++] = static_cast((webData->DevicesCount>>8)&0xff); ret[cur++] = static_cast(webData->DevicesCount&0xff); ret[cur++] = static_cast((webData->UsersCount>>24)&0xff); ret[cur++] = static_cast((webData->UsersCount>>16)&0xff); ret[cur++] = static_cast((webData->UsersCount>>8)&0xff); ret[cur++] = static_cast(webData->UsersCount&0xff); ret[cur++] = static_cast((webData->UserCompanyCount>>24)&0xff); ret[cur++] = static_cast((webData->UserCompanyCount>>16)&0xff); ret[cur++] = static_cast((webData->UserCompanyCount>>8)&0xff); ret[cur++] = static_cast(webData->UserCompanyCount&0xff); ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkCompanyAlarmTimeCountReturn() { int cur = 0, crc = 0; quint16 datalen = 0x0003; QByteArray ret = QByteArray(datalen+14,0x00); QDateTime datetime = QDateTime::currentDateTime(); quint16 page = ((webData->CompanysAlarmCount>>8)&0x00ff)+1; ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x08); ret[cur++] = static_cast((page>>8)&0xff); ret[cur++] = static_cast(page&0xff); ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } QByteArray WebDataThread::mkCompanyAlarmSyncTime(quint16 page) { if(page<40){ int cur = 0, crc = 0; quint16 datalen = 1027; QByteArray ret = QByteArray(datalen+14,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x82&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(0x08); ret[cur++] = static_cast((page>>8)&0xff); ret[cur++] = static_cast(page&0xff); for(quint16 i=0;i<256;i++){ if(webData->CompanyAlarm[((page<<8)&0xff00)|(i&0x00ff)].alarmRec[0].ShowFlag==0x01){ ret[cur++] = static_cast((webData->CompanyAlarm[((page<<8)&0xff00)|(i&0x00ff)].alarmRec[0].Time_T>>24)&0xff); ret[cur++] = static_cast((webData->CompanyAlarm[((page<<8)&0xff00)|(i&0x00ff)].alarmRec[0].Time_T>>16)&0xff); ret[cur++] = static_cast((webData->CompanyAlarm[((page<<8)&0xff00)|(i&0x00ff)].alarmRec[0].Time_T>>8)&0xff); ret[cur++] = static_cast(webData->CompanyAlarm[((page<<8)&0xff00)|(i&0x00ff)].alarmRec[0].Time_T&0xff); }else{ ret[cur++] = static_cast(0x00); ret[cur++] = static_cast(0x00); ret[cur++] = static_cast(0x00); ret[cur++] = static_cast(0x00); } } ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; }else return mkCompanyAlarmTimeCountReturn(); } QByteArray WebDataThread::mkSyncRtn(quint8 subCmd) { int cur = 0, crc = 0; quint16 datalen = 0x01; QByteArray ret = QByteArray(datalen+14,0x00); QDateTime datetime = QDateTime::currentDateTime(); ret[cur++] = static_cast(0x7e); ret[cur++] = static_cast(0x10); ret[cur++] = static_cast((datalen>>8)&0xff); ret[cur++] = static_cast(datalen&0xff); ret[cur++] = static_cast(0x84&0xff); ret[cur++] = static_cast((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f)); ret[cur++] = static_cast(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f)); ret[cur++] = static_cast((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f)); ret[cur++] = static_cast((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f)); ret[cur++] = static_cast(subCmd); ret[cur] = static_cast(0x00); ret[cur+1] = static_cast(0xe7&0xff); for(int i=1;i(ret[i]&0xff); ret[cur] = static_cast(crc&0xff); return ret; } void WebDataThread::setAlarmCompanyInfo(int row, QByteArray data) { quint16 cur = 3; quint16 d_len = static_cast(data.length()); QList AlarmList; if(row>=10240) return; for(quint8 i=0;i<10;i++){ if(d_len>(cur+11)){ quint16 deviceIdx = static_cast(((data.at(cur+2)&0x00ff)<<8)|(data.at(cur+3)&0x00ff)); quint8 dwType = data.at(cur+4)&0xff; quint8 showFlag = data.at(cur+5)&0xff; uint a_time = static_cast(((data.at(cur+6)&0x000000ff)<<24)|((data.at(cur+7)&0x000000ff)<<16)|((data.at(cur+8)&0x000000ff)<<8)|(data.at(cur+9)&0x000000ff)); quint16 data_len = static_cast(((data.at(cur+10)&0x00ff)<<8)|(data.at(cur+11)&0x00ff)); if(d_len>(cur+data_len+12)){ QByteArray aData = data.mid(cur+12,data_len); if((deviceIdx<10240)&&(deviceIdxDevicesCount)){ AlarmList.append(AlarmSet(deviceIdx,webData->devices[deviceIdx].DevName, aData,dwType,a_time,showFlag)); } cur += data_len+13; } } } for(int i=(AlarmList.length()-1);i>=0;i--){ setCompanyAlarmSet(QString(webData->devices[AlarmList.at(i).DeviceIdx].DevCode),AlarmList.at(i)); } } void WebDataThread::setCompanyAlarmSet(QString deviceCode, AlarmSet set) { QString companyCode; quint16 companyIdx = 0xffff; quint32 deviceIdx = 0xffffffff; AlarmSet tmp = AlarmSet(0xffffffff,"","",0xff,0,0); for(quint32 i=0;i<102400;i++){ if(i>=webData->DevicesCount) break; if(QString::compare(QString(webData->devices[i].DevCode),deviceCode)==0){ deviceIdx = i; companyCode = QString(webData->devices[i].CompanyCode); set.DeviceIdx = deviceIdx; set.DevName = QString(webData->devices[i].DevName); break; } } for(quint16 i=0;i<10240;i++){ if(i>=webData->CompanysCount) break; if(QString::compare(QString(webData->companys[i].CompanyCode),companyCode)==0){ companyIdx = i; break; } } if(companyIdxCompanysCount){ for(quint8 i=0;i<10;i++){ if(set.AlarmTime>webData->CompanyAlarm[companyIdx].alarmRec[i].Time_T){ for(quint8 j=9;j>i;j--){ get_AlarmSet(companyIdx,j-1,&tmp); set_AlarmSet(companyIdx,j,tmp); } set_AlarmSet(companyIdx,i,set); break; } } for(quint8 i=0;i<10;i++){ if(set.AlarmTime>webData->CompanyAlarm[10239].alarmRec[i].Time_T){ for(quint8 j=9;j>i;j--){ get_AlarmSet(10239,j-1,&tmp); set_AlarmSet(10239,j,tmp); } set_AlarmSet(10239,i,set); break; } } } } void WebDataThread::set_AlarmSet(quint16 companyIdx, quint8 alarmIdx, AlarmSet set) { if(((companyIdxCompanysCount)||(companyIdx==10239))&&(alarmIdx<10)){ if(set.Enabled==0x01){ webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].DeviceIdx = set.DeviceIdx; sprintf(webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].DevName,"%s",set.DevName.toUtf8().data()); sprintf(webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].Data,"%s",set.AlarmData.toUtf8().data()); sprintf(webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].Time,"%s",QDateTime::fromTime_t(set.AlarmTime).toString("yyyy-MM-dd HH:mm:ss").toUtf8().data()); webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].dwType = set.dwType; webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].Time_T = set.AlarmTime; webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].ShowFlag = 0x01; }else webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].ShowFlag = 0x00; webData->CompanyAlarm[companyIdx].UpdateTime = QDateTime::currentDateTime().toTime_t(); } } void WebDataThread::get_AlarmSet(quint16 companyIdx, quint8 alarmIdx, AlarmSet *set) { if(((companyIdxCompanysCount)||(companyIdx==10239))&&(alarmIdx<10)){ if(webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].ShowFlag==0x01){ set->Enabled = 0x01; set->DeviceIdx = webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].DeviceIdx; set->dwType = webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].dwType; set->AlarmTime = webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].Time_T; set->DevName = QString::fromUtf8(webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].DevName); set->AlarmData = QString::fromUtf8(webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].Data); webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].ShowFlag = 0x01; }else{ set->Enabled = 0x00; } } } void WebDataThread::getData(QTcpSocket *so) { QByteArray cmd = so->readAll(); // printf("get cmd\n"); if(((cmd.at(0)&0xff)==0x7e)&&((cmd.at(1)&0xf0)==0x10)&&((cmd.at(cmd.length()-1)&0xff)==0xe7)&&(cmd.length()>13)){ quint16 datalen = static_cast(((cmd.at(2)&0x00ff)<<8)|(cmd.at(3)&0x00ff)); quint8 crc = 0x00; if(cmd.length()==(datalen+14)){ for(int i=1;i<(cmd.length()-2);i++) crc += static_cast(cmd.at(i)&0xff); if(static_cast(cmd.at(cmd.length()-2)&0xff)==static_cast(crc)){ switch(cmd.at(4)&0xff){ case 0x01: so->write(mkHeartBeatReturn()); so->flush(); break; case 0x02: { if(datalen==0x0003){ switch(cmd.at(12)&0xff){ case 0x01: { quint16 uIdx = static_cast(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff)); if(uIdxUsersCount){ so->write(mkUserSyncData(uIdx)); }else{ so->write(mkUserCountReturn()); } so->flush(); } break; case 0x02: { quint16 cIdx = static_cast(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff)); if(cIdxCompanysCount) so->write(mkCompanySyncData(cIdx)); else{ so->write(mkCompanyCountReturn()); } so->flush(); } break; case 0x03: { quint16 ucIdx = static_cast(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff)); if(ucIdxUserCompanyCount) so->write(mkUserCompanySyncData(ucIdx)); else{ so->write(mkUserCompanyCountReturn()); } so->flush(); } break; case 0x04: { quint16 bIdx = static_cast(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff)); if(bIdxBuildingsCount) so->write(mkBuildingSyncData(bIdx)); else so->write(mkBuildingCountReturn()); so->flush(); } break; case 0x06: { quint16 cIdx = static_cast(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff)); if((cIdx==10239)||(cIdxCompanysAlarmCount)) so->write(mkCompanyAlarmSyncData(cIdx)); else so->write(mkCompanyAlarmCountReturn(cIdx)); so->flush(); } break; case 0x08: { quint16 page = static_cast(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff)); if(page<=((webData->CompanysAlarmCount>>8)&0x00ff)) so->write(mkCompanyAlarmSyncTime(page)); else so->write(mkCompanyAlarmTimeCountReturn()); so->flush(); } break; default:break; } }else if(datalen==0x0005){ switch(cmd.at(12)&0xff){ case 0x05: { quint32 dIdx = static_cast(((cmd.at(13)&0x000000ff)<<24) |((cmd.at(14)&0x00000000ff)<<16) |((cmd.at(15)&0x00000000ff)<<8) |(cmd.at(16)&0x000000ff)); if(dIdxDevicesCount) so->write(mkDeviceSyncData(dIdx)); else so->write(mkDeviceCountReturn()); so->flush(); } break; default:break; } }else if(datalen==0x0001){ switch(cmd.at(12)&0xff){ case 0x07: so->write(mkDataCountReturn()); so->flush(); break; default:break; } }else{ switch(cmd.at(12)&0xff){ case 0x06: if(datalen>=170){ quint16 cIdx = static_cast(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff)); setAlarmCompanyInfo(cIdx,cmd.mid(12,datalen)); } break; default:break; } } } break; case 0x04: { switch(cmd.at(12)&0xff){ case 0x01: { int len = ((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff); if(cmd.length()==(len+18)){ QString deviceCode = QString(cmd.mid(15,len)); emit needSync(deviceCode); so->write(mkSyncRtn(0x01)); } } break; case 0x02: { quint8 dwtype = cmd.at(13)&0xff; quint8 showFalg = cmd.at(14)&0xff; int deviceCodeLen = ((cmd.at(15)&0x00ff)<<8)|(cmd.at(16)&0x00ff); if(cmd.length()>(deviceCodeLen+30)){ QString deviceCode = QString(cmd.mid(17,deviceCodeLen)); int companyCodeLen = ((cmd.at(19+deviceCodeLen)&0x00ff)<<8)|(cmd.at(20+deviceCodeLen)&0x00ff); if(cmd.length()>(deviceCodeLen+companyCodeLen+30)){ QString companyCode = QString(cmd.mid(21+deviceCodeLen,companyCodeLen)); uint t = static_cast(((cmd.at(23+deviceCodeLen+companyCodeLen)&0x000000ff)<<24) |((cmd.at(24+deviceCodeLen+companyCodeLen)&0x000000ff)<<16) |((cmd.at(25+deviceCodeLen+companyCodeLen)&0x000000ff)<<8) |(cmd.at(26+deviceCodeLen+companyCodeLen)&0x000000ff)); int dataLen = ((cmd.at(27+deviceCodeLen+companyCodeLen)&0x00ff)<<8)|(cmd.at(28+deviceCodeLen+companyCodeLen)); if(cmd.length()==(30+deviceCodeLen+companyCodeLen+dataLen)){ QString repData = QString(cmd.mid(29+deviceCodeLen+companyCodeLen,dataLen)); so->write(mkSyncRtn(0x02)); for(quint16 i=0;iDevicesCount;i++){ if(QString::compare(deviceCode,QString(webData->devices[i].DevCode))==0){ setCompanyAlarmSet(deviceCode,AlarmSet(i,QString(webData->devices[i].DevName),repData,dwtype,t,showFalg)); break; } } } } } } break; default:break; } } break; default:break; } }//else // printf("crc error %d %d\n",crc,static_cast(cmd.at(cmd.length()-2)&0xff)); }//else // printf("len error: %d\n",datalen); }//else // printf("frame error\n"); }