webdatathread.cpp 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072
  1. #include "webdatathread.h"
  2. #include "ytservicecore.h"
  3. //#include <QtDebug>
  4. //extern WebDataShm *webData;
  5. //extern UserInfoShm *userinfoShm;
  6. typedef union {
  7. float f;
  8. unsigned char c[4];
  9. }FC;
  10. WebDataThread::WebDataThread(qintptr socketDescriptor, QObject *parent) :
  11. QThread(parent)
  12. {
  13. this->SocketDescriptor = socketDescriptor;
  14. }
  15. void WebDataThread::run(){
  16. QTcpSocket *so = new QTcpSocket;
  17. if(!so->setSocketDescriptor(this->SocketDescriptor)){
  18. so->abort();
  19. // printf("setSocketDescriptor error\n");
  20. return;
  21. }
  22. keepRunning = true;
  23. // printf("socket in %s \n", so->peerAddress().toString().toUtf8().data());
  24. while(keepRunning){
  25. if(so->state()!=QAbstractSocket::ConnectedState){
  26. close_self(so);
  27. return;
  28. }
  29. if(so->waitForReadyRead())
  30. getData(so);
  31. }
  32. }
  33. void WebDataThread::close_self(QTcpSocket *so){
  34. so->abort();
  35. keepRunning = false;
  36. }
  37. QByteArray WebDataThread::mkUserCountReturn(){
  38. QByteArray ret = QByteArray(17,0x00);
  39. int crc=0;
  40. QDateTime datetime = QDateTime::currentDateTime();
  41. ret[0] = 0x7e;
  42. ret[1] = 0x10;
  43. ret[2] = 0x00;
  44. ret[3] = 0x03;
  45. ret[4] = static_cast<char>(0x82&0xff);
  46. ret[5] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  47. ret[6] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  48. ret[7] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  49. ret[8] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  50. ret[9] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  51. ret[10] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  52. ret[11] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  53. ret[12] = static_cast<char>(0x01);
  54. ret[13] = static_cast<char>((webData->UsersCount>>8)&0xff);
  55. ret[14] = static_cast<char>(webData->UsersCount&0xff);
  56. ret[15] = static_cast<char>(0x00);
  57. ret[16] = static_cast<char>(0xe7&0xff);
  58. for(int i=1;i<15;i++)
  59. crc += static_cast<int>(ret[i]&0xff);
  60. ret[15] = static_cast<char>(crc&0xff);
  61. return ret;
  62. }
  63. QByteArray WebDataThread::mkUserSyncData(quint16 uIdx)
  64. {
  65. int cur = 0;
  66. int crc = 0;
  67. QByteArray loginname = QByteArray(webData->users[uIdx].LoginName);
  68. QByteArray password = QByteArray(webData->users[uIdx].Password);
  69. QByteArray username = QByteArray(webData->users[uIdx].UserName);
  70. int l_loginname = loginname.length();
  71. int l_password = password.length();
  72. int l_username = username.length();
  73. int datalen = l_loginname+l_password+l_username+13;
  74. QByteArray ret = QByteArray(datalen+14,0x00);
  75. QDateTime datetime = QDateTime::currentDateTime();
  76. ret[cur++] = static_cast<char>(0x7e);
  77. ret[cur++] = static_cast<char>(0x10);
  78. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  79. ret[cur++] = static_cast<char>(datalen&0xff);
  80. ret[cur++] = static_cast<char>(0x82&0xff);
  81. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  82. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  83. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  84. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  85. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  86. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  87. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  88. ret[cur++] = static_cast<char>(0x01);
  89. ret[cur++] = static_cast<char>((uIdx>>8)&0xff);
  90. ret[cur++] = static_cast<char>(uIdx&0xff);
  91. ret[cur++] = static_cast<char>(webData->users[uIdx].Status&0xff);
  92. ret[cur++] = static_cast<char>((l_loginname>>8)&0xff);
  93. ret[cur++] = static_cast<char>(l_loginname&0xff);
  94. for(int i=0;i<l_loginname;i++)
  95. ret[cur++] = static_cast<char>(loginname.at(i)&0xff);
  96. ret[cur++] = static_cast<char>(0x00);
  97. ret[cur++] = static_cast<char>((l_password>>8)&0xff);
  98. ret[cur++] = static_cast<char>(l_password&0xff);
  99. for(int i=0;i<l_password;i++)
  100. ret[cur++] = static_cast<char>(password.at(i)&0xff);
  101. ret[cur++] = static_cast<char>(0x00);
  102. ret[cur++] = static_cast<char>((l_username>>8)&0xff);
  103. ret[cur++] = static_cast<char>(l_username&0xff);
  104. for(int i=0;i<l_username;i++)
  105. ret[cur++] = static_cast<char>(username.at(i)&0xff);
  106. ret[cur++] = static_cast<char>(0x00);
  107. ret[cur] = static_cast<char>(0x00);
  108. ret[cur+1] = static_cast<char>(0xe7&0xff);
  109. for(int i=1;i<cur;i++){
  110. crc += static_cast<int>(ret[i]&0xff);
  111. }
  112. ret[cur] = static_cast<char>(crc&0xff);
  113. return ret;
  114. }
  115. QByteArray WebDataThread::mkCompanyCountReturn()
  116. {
  117. int cur = 0, crc = 0;
  118. quint16 datalen = 0x0003;
  119. QByteArray ret = QByteArray(17,0x00);
  120. QDateTime datetime = QDateTime::currentDateTime();
  121. ret[cur++] = static_cast<char>(0x7e);
  122. ret[cur++] = static_cast<char>(0x10);
  123. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  124. ret[cur++] = static_cast<char>(datalen&0xff);
  125. ret[cur++] = static_cast<char>(0x82&0xff);
  126. ret[cur++] = static_cast<char>(((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f);
  127. ret[cur++] = static_cast<char>((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f);
  128. ret[cur++] = static_cast<char>(((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f);
  129. ret[cur++] = static_cast<char>(((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f);
  130. ret[cur++] = static_cast<char>(((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f);
  131. ret[cur++] = static_cast<char>(((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f);
  132. ret[cur++] = static_cast<char>(((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f);
  133. ret[cur++] = static_cast<char>(0x02);
  134. ret[cur++] = static_cast<char>((webData->CompanysCount>>8)&0xff);
  135. ret[cur++] = static_cast<char>(webData->CompanysCount&0xff);
  136. ret[cur] = static_cast<char>(0x00);
  137. ret[cur+1] = static_cast<char>(0xe7&0xff);
  138. for(int i=1;i<cur;i++)
  139. crc += static_cast<int>(ret[i]&0xff);
  140. ret[cur] = static_cast<char>(crc&0xff);
  141. return ret;
  142. }
  143. QByteArray WebDataThread::mkCompanySyncData(quint16 cIdx)
  144. {
  145. int cur = 0, crc = 0;
  146. QByteArray CompanyCode = webData->companys[cIdx].CompanyCode;
  147. QByteArray CompanyName = webData->companys[cIdx].CompanyName;
  148. QByteArray ProjectType = webData->companys[cIdx].ProjectType;
  149. QByteArray UserName = webData->companys[cIdx].UserName;
  150. QByteArray Phone = webData->companys[cIdx].Phone;
  151. int l_CompanyCode = CompanyCode.length();
  152. int l_CompanyName = CompanyName.length();
  153. int l_ProjectType = ProjectType.length();
  154. int l_UserName = UserName.length();
  155. int l_Phone = Phone.length();
  156. int datalen = l_CompanyCode+l_CompanyName+l_ProjectType+l_UserName+l_Phone+658;
  157. QByteArray ret = QByteArray(datalen+14,0x00);
  158. QDateTime datetime = QDateTime::currentDateTime();
  159. ret[cur++] = static_cast<char>(0x7e);
  160. ret[cur++] = static_cast<char>(0x10);
  161. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  162. ret[cur++] = static_cast<char>(datalen&0xff);
  163. ret[cur++] = static_cast<char>(0x82&0xff);
  164. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  165. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  166. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  167. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  168. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  169. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  170. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  171. ret[cur++] = static_cast<char>(0x02);
  172. ret[cur++] = static_cast<char>((cIdx>>8)&0xff);
  173. ret[cur++] = static_cast<char>(cIdx&0xff);
  174. ret[cur++] = static_cast<char>((l_CompanyCode>>8)&0xff);
  175. ret[cur++] = static_cast<char>(l_CompanyCode&0xff);
  176. for(int i=0;i<l_CompanyCode;i++){
  177. ret[cur++] = static_cast<char>(CompanyCode.at(i)&0xff);
  178. }
  179. ret[cur++] = 0x00;
  180. ret[cur++] = static_cast<char>((l_CompanyName>>8)&0xff);
  181. ret[cur++] = static_cast<char>(l_CompanyName&0xff);
  182. for(int i=0;i<l_CompanyName;i++){
  183. ret[cur++] = static_cast<char>(CompanyName.at(i)&0xff);
  184. }
  185. ret[cur++] = 0x00;
  186. ret[cur++] = static_cast<char>((l_ProjectType>>8)&0xff);
  187. ret[cur++] = static_cast<char>(l_ProjectType&0xff);
  188. for(int i=0;i<l_ProjectType;i++){
  189. ret[cur++] = static_cast<char>(ProjectType.at(i)&0xff);
  190. }
  191. ret[cur++] = 0x00;
  192. ret[cur++] = static_cast<char>((l_UserName>>8)&0xff);
  193. ret[cur++] = static_cast<char>(l_UserName&0xff);
  194. for(int i=0;i<l_UserName;i++){
  195. ret[cur++] = static_cast<char>(UserName.at(i)&0xff);
  196. }
  197. ret[cur++] = 0x00;
  198. ret[cur++] = static_cast<char>((l_Phone>>8)&0xff);
  199. ret[cur++] = static_cast<char>(l_Phone&0xff);
  200. for(int i=0;i<l_Phone;i++){
  201. ret[cur++] = static_cast<char>(Phone.at(i)&0xff);
  202. }
  203. ret[cur++] = 0x00;
  204. for(int i=0;i<32;i++){
  205. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevCount>>24)&0xff);
  206. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevCount>>16)&0xff);
  207. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevCount>>8)&0xff);
  208. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevCount)&0xff);
  209. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevOutLineCount>>24)&0xff);
  210. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevOutLineCount>>16)&0xff);
  211. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevOutLineCount>>8)&0xff);
  212. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevOutLineCount)&0xff);
  213. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevOutConfirmCount>>24)&0xff);
  214. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevOutConfirmCount>>16)&0xff);
  215. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevOutConfirmCount>>8)&0xff);
  216. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevOutConfirmCount)&0xff);
  217. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevAlarmCount>>24)&0xff);
  218. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevAlarmCount>>16)&0xff);
  219. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevAlarmCount>>8)&0xff);
  220. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevAlarmCount)&0xff);
  221. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevAlarmConfirmCount>>24)&0xff);
  222. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevAlarmConfirmCount>>16)&0xff);
  223. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevAlarmConfirmCount>>8)&0xff);
  224. ret[cur++] = static_cast<char>((webData->companys[cIdx].subType[i].DevAlarmConfirmCount)&0xff);
  225. }
  226. ret[cur] = 0x00;
  227. ret[cur+1] = static_cast<char>(0xe7&0xff);
  228. for(int i=1;i<cur;i++)
  229. crc += static_cast<int>(ret[i]&0xff);
  230. ret[cur] = static_cast<char>(crc&0xff);
  231. return ret;
  232. }
  233. QByteArray WebDataThread::mkUserCompanyCountReturn()
  234. {
  235. int cur = 0, crc = 0;
  236. quint16 datalen = 0x0003;
  237. QByteArray ret = QByteArray(17,0x00);
  238. QDateTime datetime = QDateTime::currentDateTime();
  239. ret[cur++] = static_cast<char>(0x7e);
  240. ret[cur++] = static_cast<char>(0x10);
  241. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  242. ret[cur++] = static_cast<char>(datalen&0xff);
  243. ret[cur++] = static_cast<char>(0x82&0xff);
  244. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  245. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  246. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  247. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  248. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  249. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  250. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  251. ret[cur++] = static_cast<char>(0x03);
  252. ret[cur++] = static_cast<char>((webData->UserCompanyCount>>8)&0xff);
  253. ret[cur++] = static_cast<char>(webData->UserCompanyCount&0xff);
  254. ret[cur] = static_cast<char>(0x00);
  255. ret[cur+1] = static_cast<char>(0xe7&0xff);
  256. for(int i=1;i<cur;i++)
  257. crc += static_cast<int>(ret[i]&0xff);
  258. ret[cur] = static_cast<char>(crc&0xff);
  259. return ret;
  260. }
  261. QByteArray WebDataThread::mkUserCompanySyncData(quint16 ucIdx)
  262. {
  263. int cur = 0, crc = 0;
  264. QByteArray Loginname = QByteArray(webData->userCompanys[ucIdx].Loginname);
  265. QByteArray CompanyCode = QByteArray(webData->userCompanys[ucIdx].CompanyCode);
  266. int l_Loginname = Loginname.length();
  267. int l_CompanyCode = CompanyCode.length();
  268. int datalen = l_Loginname+l_CompanyCode+9;
  269. QByteArray ret = QByteArray(datalen+14,0x00);
  270. QDateTime datetime = QDateTime::currentDateTime();
  271. ret[cur++] = static_cast<char>(0x7e);
  272. ret[cur++] = static_cast<char>(0x10);
  273. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  274. ret[cur++] = static_cast<char>(datalen&0xff);
  275. ret[cur++] = static_cast<char>(0x82&0xff);
  276. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  277. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  278. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  279. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  280. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  281. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  282. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  283. ret[cur++] = static_cast<char>(0x03);
  284. ret[cur++] = static_cast<char>((ucIdx>>8)&0xff);
  285. ret[cur++] = static_cast<char>(ucIdx&0xff);
  286. ret[cur++] = static_cast<char>((l_Loginname>>8)&0xff);
  287. ret[cur++] = static_cast<char>(l_Loginname&0xff);
  288. for(int i=0;i<l_Loginname;i++){
  289. ret[cur++] = static_cast<char>(Loginname.at(i)&0xff);
  290. }
  291. ret[cur++] = static_cast<char>(0x00);
  292. ret[cur++] = static_cast<char>((l_CompanyCode>>8)&0xff);
  293. ret[cur++] = static_cast<char>(l_CompanyCode&0xff);
  294. for(int i=0;i<l_CompanyCode;i++){
  295. ret[cur++] = static_cast<char>(CompanyCode.at(i)&0xff);
  296. }
  297. ret[cur++] = static_cast<char>(0x00);
  298. ret[cur] = static_cast<char>(0x00);
  299. ret[cur+1] = static_cast<char>(0xe7&0xff);
  300. for(int i=1;i<cur;i++)
  301. crc += static_cast<int>(ret[i]&0xff);
  302. ret[cur] = static_cast<char>(crc&0xff);
  303. return ret;
  304. }
  305. QByteArray WebDataThread::mkBuildingCountReturn()
  306. {
  307. int cur = 0, crc = 0;
  308. quint16 datalen = 0x0003;
  309. QByteArray ret = QByteArray(5,0x00);
  310. QDateTime datetime = QDateTime::currentDateTime();
  311. ret[cur++] = static_cast<char>(0x7e);
  312. ret[cur++] = static_cast<char>(0x10);
  313. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  314. ret[cur++] = static_cast<char>(datalen&0xff);
  315. ret[cur++] = static_cast<char>(0x82&0xff);
  316. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  317. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  318. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  319. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  320. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  321. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  322. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  323. ret[cur++] = static_cast<char>(0x04);
  324. ret[cur++] = static_cast<char>((webData->BuildingsCount>>8)&0xff);
  325. ret[cur++] = static_cast<char>((webData->BuildingsCount)&0xff);
  326. ret[cur] = static_cast<char>(0x00);
  327. ret[cur+1] = static_cast<char>(0xe7&0xff);
  328. for(int i=1;i<cur;i++)
  329. crc += static_cast<int>(ret[i]&0xff);
  330. ret[cur] = static_cast<char>(crc&0xff);
  331. return ret;
  332. }
  333. QByteArray WebDataThread::mkBuildingSyncData(quint16 bIdx)
  334. {
  335. int cur = 0, crc=0;
  336. QByteArray BuildingCode = QByteArray(webData->buildings[bIdx].BuildingCode);
  337. QByteArray BuildingName = QByteArray(webData->buildings[bIdx].BuildingName);
  338. QByteArray CompanyCode = QByteArray(webData->buildings[bIdx].CompanyCode);
  339. QByteArray Address = QByteArray(webData->buildings[bIdx].Address);
  340. QByteArray FullAddress = QByteArray(webData->buildings[bIdx].FullAddress);
  341. FC Lng, Lat;
  342. Lng.f = webData->buildings[bIdx].Lng;
  343. Lat.f = webData->buildings[bIdx].Lat;
  344. int l_BuildingCode = BuildingCode.length();
  345. int l_BuildingName = BuildingName.length();
  346. int l_CompanyCode = CompanyCode.length();
  347. int l_Address = Address.length();
  348. int l_FullAddress = FullAddress.length();
  349. int datalen = l_BuildingCode+l_BuildingName+l_CompanyCode+l_Address+l_FullAddress+26;
  350. QByteArray ret = QByteArray(datalen+14,0x00);
  351. QDateTime datetime = QDateTime::currentDateTime();
  352. ret[cur++] = static_cast<char>(0x7e);
  353. ret[cur++] = static_cast<char>(0x10);
  354. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  355. ret[cur++] = static_cast<char>(datalen&0xff);
  356. ret[cur++] = static_cast<char>(0x82&0xff);
  357. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  358. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  359. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  360. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  361. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  362. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  363. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  364. ret[cur++] = static_cast<char>(0x04);
  365. ret[cur++] = static_cast<char>((bIdx>>8)&0xff);
  366. ret[cur++] = static_cast<char>(bIdx&0xff);
  367. ret[cur++] = static_cast<char>((l_BuildingCode>>8)&0xff);
  368. ret[cur++] = static_cast<char>(l_BuildingCode&0xff);
  369. for(int i=0;i<l_BuildingCode;i++)
  370. ret[cur++] = static_cast<char>(BuildingCode.at(i)&0xff);
  371. ret[cur++] = static_cast<char>(0x00);
  372. ret[cur++] = static_cast<char>((l_BuildingName>>8)&0xff);
  373. ret[cur++] = static_cast<char>(l_BuildingName&0xff);
  374. for(int i=0;i<l_BuildingName;i++)
  375. ret[cur++] = static_cast<char>(BuildingName.at(i)&0xff);
  376. ret[cur++] = static_cast<char>(0x00);
  377. ret[cur++] = static_cast<char>((l_CompanyCode>>8)&0xff);
  378. ret[cur++] = static_cast<char>(l_CompanyCode&0xff);
  379. for(int i=0;i<l_CompanyCode;i++)
  380. ret[cur++] = static_cast<char>(CompanyCode.at(i)&0xff);
  381. ret[cur++] = static_cast<char>(0x00);
  382. ret[cur++] = static_cast<char>((l_Address>>8)&0xff);
  383. ret[cur++] = static_cast<char>(l_Address&0xff);
  384. for(int i=0;i<l_Address;i++)
  385. ret[cur++] = static_cast<char>(Address.at(i)&0xff);
  386. ret[cur++] = static_cast<char>(0x00);
  387. ret[cur++] = static_cast<char>((l_FullAddress>>8)&0xff);
  388. ret[cur++] = static_cast<char>(l_FullAddress&0xff);
  389. for(int i=0;i<l_FullAddress;i++)
  390. ret[cur++] = static_cast<char>(FullAddress.at(i)&0xff);
  391. ret[cur++]=static_cast<char>(0x00);
  392. for(int i=0;i<4;i++)
  393. ret[cur++] = static_cast<char>(Lng.c[i]&0xff);
  394. for(int i=0;i<4;i++)
  395. ret[cur++] = static_cast<char>(Lat.c[i]&0xff);
  396. ret[cur] = static_cast<char>(0x00);
  397. ret[cur+1] = static_cast<char>(0xe7&0xff);
  398. for(int i=1;i<cur;i++)
  399. crc += static_cast<int>(ret[i]&0xff);
  400. ret[cur] = static_cast<char>(crc&0xff);
  401. return ret;
  402. }
  403. QByteArray WebDataThread::mkDeviceCountReturn()
  404. {
  405. int cur = 0, crc = 0;
  406. quint16 datalen = 0x05;
  407. QByteArray ret = QByteArray(datalen+14,0x00);
  408. QDateTime datetime = QDateTime::currentDateTime();
  409. ret[cur++] = static_cast<char>(0x7e);
  410. ret[cur++] = static_cast<char>(0x10);
  411. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  412. ret[cur++] = static_cast<char>(datalen&0xff);
  413. ret[cur++] = static_cast<char>(0x82&0xff);
  414. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  415. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  416. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  417. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  418. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  419. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  420. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  421. ret[cur++] = static_cast<char>(0x05);
  422. ret[cur++] = static_cast<char>((webData->DevicesCount>>24)&0xff);
  423. ret[cur++] = static_cast<char>((webData->DevicesCount>>16)&0xff);
  424. ret[cur++] = static_cast<char>((webData->DevicesCount>>8)&0xff);
  425. ret[cur++] = static_cast<char>(webData->DevicesCount&0xff);
  426. ret[cur] = static_cast<char>(0x00);
  427. ret[cur+1] = static_cast<char>(0xe7&0xff);
  428. for(int i=1;i<cur;i++)
  429. crc += static_cast<int>(ret[i]&0xff);
  430. ret[cur] = static_cast<char>(crc&0xff);
  431. return ret;
  432. }
  433. QByteArray WebDataThread::mkDeviceSyncData(quint32 dIdx)
  434. {
  435. int cur = 0, crc = 0;
  436. QByteArray DevCode = QByteArray(webData->devices[dIdx].DevCode);
  437. QByteArray CompanyCode = QByteArray(webData->devices[dIdx].CompanyCode);
  438. QByteArray DevName = QByteArray(webData->devices[dIdx].DevName);
  439. QByteArray DevInfo = QByteArray(webData->devices[dIdx].DevInfo);
  440. int l_DevCode = DevCode.length();
  441. int l_CompanyCode = CompanyCode.length();
  442. int l_DevName = DevName.length();
  443. int l_DevInfo = DevInfo.length();
  444. int datalen = l_DevCode+l_CompanyCode+l_DevName+l_DevInfo+22;
  445. QByteArray ret = QByteArray(datalen+14,0x00);
  446. QDateTime datetime = QDateTime::currentDateTime();
  447. ret[cur++] = static_cast<char>(0x7e);
  448. ret[cur++] = static_cast<char>(0x10);
  449. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  450. ret[cur++] = static_cast<char>(datalen&0xff);
  451. ret[cur++] = static_cast<char>(0x82&0xff);
  452. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  453. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  454. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  455. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  456. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  457. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  458. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  459. ret[cur++] = static_cast<char>(0x05);
  460. ret[cur++] = static_cast<char>((dIdx>>24)&0xff);
  461. ret[cur++] = static_cast<char>((dIdx>>16)&0xff);
  462. ret[cur++] = static_cast<char>((dIdx>>8)&0xff);
  463. ret[cur++] = static_cast<char>(dIdx&0xff);
  464. ret[cur++] = static_cast<char>((webData->devices[dIdx].DevIdx>>24)&0xff);
  465. ret[cur++] = static_cast<char>((webData->devices[dIdx].DevIdx>>16)&0xff);
  466. ret[cur++] = static_cast<char>((webData->devices[dIdx].DevIdx>>8)&0xff);
  467. ret[cur++] = static_cast<char>((webData->devices[dIdx].DevIdx)&0xff);
  468. ret[cur++] = static_cast<char>(webData->devices[dIdx].Enabled&0xff);
  469. ret[cur++] = static_cast<char>(webData->devices[dIdx].dwType&0xff);
  470. ret[cur++] = static_cast<char>((l_DevCode>>8)&0xff);
  471. ret[cur++] = static_cast<char>(l_DevCode&0xff);
  472. for(int i=0;i<l_DevCode;i++)
  473. ret[cur++] = static_cast<char>(DevCode.at(i)&0xff);
  474. ret[cur++] = static_cast<char>(0x00);
  475. ret[cur++] = static_cast<char>((l_CompanyCode>>8)&0xff);
  476. ret[cur++] = static_cast<char>(l_CompanyCode&0xff);
  477. for(int i=0;i<l_CompanyCode;i++)
  478. ret[cur++] = static_cast<char>(CompanyCode.at(i)&0xff);
  479. ret[cur++] = static_cast<char>(0x00);
  480. ret[cur++] = static_cast<char>((l_DevName>>8)&0xff);
  481. ret[cur++] = static_cast<char>(l_DevName&0xff);
  482. for(int i=0;i<l_DevName;i++)
  483. ret[cur++] = static_cast<char>(DevName.at(i)&0xff);
  484. ret[cur++] = static_cast<char>(0x00);
  485. ret[cur++] = static_cast<char>((l_DevInfo>>8)&0xff);
  486. ret[cur++] = static_cast<char>(l_DevInfo&0xff);
  487. for(int i=0;i<l_DevInfo;i++)
  488. ret[cur++] = static_cast<char>(DevInfo.at(i)&0xff);
  489. ret[cur++] = static_cast<char>(0x00);
  490. ret[cur] = static_cast<char>(0x00);
  491. ret[cur+1] = static_cast<char>(0xe7&0xff);
  492. for(int i=1;i<cur;i++)
  493. crc += static_cast<int>(ret[i]&0xff);
  494. ret[cur] = static_cast<char>(crc&0xff);
  495. return ret;
  496. }
  497. QByteArray WebDataThread::mkCompanyAlarmCountReturn(quint16 cIdx)
  498. {
  499. int cur = 0, crc = 0;
  500. quint16 datalen = 0x0003;
  501. QByteArray ret = QByteArray(datalen+14,0x00);
  502. QDateTime datetime = QDateTime::currentDateTime();
  503. ret[cur++] = static_cast<char>(0x7e&0xff);
  504. ret[cur++] = static_cast<char>(0x10&0xff);
  505. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  506. ret[cur++] = static_cast<char>(datalen&0xff);
  507. ret[cur++] = static_cast<char>(0x82&0xff);
  508. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  509. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  510. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  511. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  512. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  513. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  514. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  515. ret[cur++] = static_cast<char>(0x06);
  516. if((cIdx>webData->CompanysAlarmCount)&&(cIdx!=10239)){
  517. ret[cur++] = static_cast<char>((webData->CompanysAlarmCount>>8)&0xff);
  518. ret[cur++] = static_cast<char>((webData->CompanysAlarmCount)&0xff);
  519. }else{
  520. ret[cur++] = static_cast<char>((cIdx>>8)&0xff);
  521. ret[cur++] = static_cast<char>(cIdx&0xff);
  522. }
  523. ret[cur] = static_cast<char>(0x00);
  524. ret[cur+1] = static_cast<char>(0xe7&0xff);
  525. for(int i=1;i<cur;i++)
  526. crc += static_cast<int>(ret[i]&0xff);
  527. ret[cur] = static_cast<char>(crc&0xff);
  528. return ret;
  529. }
  530. QByteArray WebDataThread::mkCompanyAlarmSyncData(quint16 cIdx)
  531. {
  532. int cur = 0, crc = 0;
  533. QList<QByteArray> dataList;
  534. dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[0].Data));
  535. dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[1].Data));
  536. dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[2].Data));
  537. dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[3].Data));
  538. dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[4].Data));
  539. dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[5].Data));
  540. dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[6].Data));
  541. dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[7].Data));
  542. dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[8].Data));
  543. dataList.append(QByteArray(webData->CompanyAlarm[cIdx].alarmRec[9].Data));
  544. int datalen = 3;
  545. for(int i=0;i<10;i++)
  546. datalen += dataList.at(i).length()+9;
  547. QByteArray ret = QByteArray(datalen+14,0x00);
  548. QDateTime datetime = QDateTime::currentDateTime();
  549. ret[cur++] = static_cast<char>(0x7e);
  550. ret[cur++] = static_cast<char>(0x10);
  551. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  552. ret[cur++] = static_cast<char>(datalen&0xff);
  553. ret[cur++] = static_cast<char>(0x82&0xff);
  554. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  555. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  556. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  557. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  558. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  559. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  560. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  561. ret[cur++] = static_cast<char>(0x06);
  562. ret[cur++] = static_cast<char>((cIdx>>8)&0xff);
  563. ret[cur++] = static_cast<char>(cIdx&0xff);
  564. for(int i=0;i<10;i++){
  565. QByteArray Data = dataList.at(i);
  566. int len = Data.length();
  567. ret[cur++] = static_cast<char>((webData->CompanyAlarm[cIdx].alarmRec[i].DeviceIdx>>24)&0xff);
  568. ret[cur++] = static_cast<char>((webData->CompanyAlarm[cIdx].alarmRec[i].DeviceIdx>>16)&0xff);
  569. ret[cur++] = static_cast<char>((webData->CompanyAlarm[cIdx].alarmRec[i].DeviceIdx>>8)&0xff);
  570. ret[cur++] = static_cast<char>((webData->CompanyAlarm[cIdx].alarmRec[i].DeviceIdx)&0xff);
  571. ret[cur++] = static_cast<char>(webData->CompanyAlarm[cIdx].alarmRec[i].dwType&0xff);
  572. ret[cur++] = static_cast<char>(webData->CompanyAlarm[cIdx].alarmRec[i].ShowFlag&0xff);
  573. ret[cur++] = static_cast<char>((webData->CompanyAlarm[cIdx].alarmRec[i].Time_T>>24)&0xff);
  574. ret[cur++] = static_cast<char>((webData->CompanyAlarm[cIdx].alarmRec[i].Time_T>>16)&0xff);
  575. ret[cur++] = static_cast<char>((webData->CompanyAlarm[cIdx].alarmRec[i].Time_T>>8)&0xff);
  576. ret[cur++] = static_cast<char>((webData->CompanyAlarm[cIdx].alarmRec[i].Time_T)&0xff);
  577. ret[cur++] = static_cast<char>((len>>8)&0xff);
  578. ret[cur++]= static_cast<char>(len&0xff);
  579. for(int j=0;j<len;j++){
  580. ret[cur++] = static_cast<char>(Data.at(j)&0xff);
  581. }
  582. ret[cur++] = static_cast<char>(0x00);
  583. }
  584. ret[cur] = static_cast<char>(0x00);
  585. ret[cur+1] = static_cast<char>(0xe7&0xff);
  586. for(int i=1;i<cur;i++)
  587. crc += static_cast<int>(ret[i]&0xff);
  588. ret[cur] = static_cast<char>(crc&0xff);
  589. return ret;
  590. }
  591. QByteArray WebDataThread::mkHeartBeatReturn()
  592. {
  593. int crc = 0;
  594. QByteArray ret = QByteArray(14,0x00);
  595. QDateTime datetime = QDateTime::currentDateTime();
  596. ret[0] = static_cast<char>(0x7e);
  597. ret[1] = static_cast<char>(0x10);
  598. ret[2] = static_cast<char>(0x00);
  599. ret[3] = static_cast<char>(0x00);
  600. ret[4] = static_cast<char>(0x81&0xff);
  601. ret[5] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  602. ret[6] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  603. ret[7] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  604. ret[8] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  605. ret[9] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  606. ret[10] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  607. ret[11] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  608. ret[12] = static_cast<char>(0x00);
  609. ret[13] = static_cast<char>(0xe7&0xff);
  610. for(int i=1;i<12;i++)
  611. crc += static_cast<int>(ret[i]&0xff);
  612. ret[12] = static_cast<char>(crc&0xff);
  613. return ret;
  614. }
  615. QByteArray WebDataThread::mkDataCountReturn()
  616. {
  617. quint16 datalen = 20;
  618. QByteArray ret = QByteArray(datalen+14,0x00);
  619. QDateTime datetime = QDateTime::currentDateTime();
  620. int cur = 0, crc = 0;
  621. ret[cur++] = static_cast<char>(0x7e);
  622. ret[cur++] = static_cast<char>(0x10);
  623. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  624. ret[cur++] = static_cast<char>(datalen&0xff);
  625. ret[cur++] = static_cast<char>(0x87&0xff);
  626. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  627. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  628. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  629. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  630. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  631. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  632. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  633. ret[cur++] = static_cast<char>(0x07);
  634. ret[cur++] = static_cast<char>((webData->CompanysCount>>24)&0xff);
  635. ret[cur++] = static_cast<char>((webData->CompanysCount>>16)&0xff);
  636. ret[cur++] = static_cast<char>((webData->CompanysCount>>8)&0xff);
  637. ret[cur++] = static_cast<char>(webData->CompanysCount&0xff);
  638. ret[cur++] = static_cast<char>((webData->BuildingsCount>>24)&0xff);
  639. ret[cur++] = static_cast<char>((webData->BuildingsCount>>16)&0xff);
  640. ret[cur++] = static_cast<char>((webData->BuildingsCount>>8)&0xff);
  641. ret[cur++] = static_cast<char>(webData->BuildingsCount&0xff);
  642. ret[cur++] = static_cast<char>((webData->DevicesCount>>24)&0xff);
  643. ret[cur++] = static_cast<char>((webData->DevicesCount>>16)&0xff);
  644. ret[cur++] = static_cast<char>((webData->DevicesCount>>8)&0xff);
  645. ret[cur++] = static_cast<char>(webData->DevicesCount&0xff);
  646. ret[cur++] = static_cast<char>((webData->UsersCount>>24)&0xff);
  647. ret[cur++] = static_cast<char>((webData->UsersCount>>16)&0xff);
  648. ret[cur++] = static_cast<char>((webData->UsersCount>>8)&0xff);
  649. ret[cur++] = static_cast<char>(webData->UsersCount&0xff);
  650. ret[cur++] = static_cast<char>((webData->UserCompanyCount>>24)&0xff);
  651. ret[cur++] = static_cast<char>((webData->UserCompanyCount>>16)&0xff);
  652. ret[cur++] = static_cast<char>((webData->UserCompanyCount>>8)&0xff);
  653. ret[cur++] = static_cast<char>(webData->UserCompanyCount&0xff);
  654. ret[cur] = static_cast<char>(0x00);
  655. ret[cur+1] = static_cast<char>(0xe7&0xff);
  656. for(int i=1;i<cur;i++)
  657. crc += static_cast<int>(ret[i]&0xff);
  658. ret[cur] = static_cast<char>(crc&0xff);
  659. return ret;
  660. }
  661. QByteArray WebDataThread::mkCompanyAlarmTimeCountReturn()
  662. {
  663. int cur = 0, crc = 0;
  664. quint16 datalen = 0x0003;
  665. QByteArray ret = QByteArray(datalen+14,0x00);
  666. QDateTime datetime = QDateTime::currentDateTime();
  667. quint16 page = ((webData->CompanysAlarmCount>>8)&0x00ff)+1;
  668. ret[cur++] = static_cast<char>(0x7e);
  669. ret[cur++] = static_cast<char>(0x10);
  670. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  671. ret[cur++] = static_cast<char>(datalen&0xff);
  672. ret[cur++] = static_cast<char>(0x82&0xff);
  673. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  674. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  675. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  676. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  677. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  678. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  679. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  680. ret[cur++] = static_cast<char>(0x08);
  681. ret[cur++] = static_cast<char>((page>>8)&0xff);
  682. ret[cur++] = static_cast<char>(page&0xff);
  683. ret[cur] = static_cast<char>(0x00);
  684. ret[cur+1] = static_cast<char>(0xe7&0xff);
  685. for(int i=1;i<cur;i++)
  686. crc += static_cast<int>(ret[i]&0xff);
  687. ret[cur] = static_cast<char>(crc&0xff);
  688. return ret;
  689. }
  690. QByteArray WebDataThread::mkCompanyAlarmSyncTime(quint16 page)
  691. {
  692. if(page<40){
  693. int cur = 0, crc = 0;
  694. quint16 datalen = 1027;
  695. QByteArray ret = QByteArray(datalen+14,0x00);
  696. QDateTime datetime = QDateTime::currentDateTime();
  697. ret[cur++] = static_cast<char>(0x7e);
  698. ret[cur++] = static_cast<char>(0x10);
  699. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  700. ret[cur++] = static_cast<char>(datalen&0xff);
  701. ret[cur++] = static_cast<char>(0x82&0xff);
  702. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  703. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  704. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  705. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  706. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  707. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  708. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  709. ret[cur++] = static_cast<char>(0x08);
  710. ret[cur++] = static_cast<char>((page>>8)&0xff);
  711. ret[cur++] = static_cast<char>(page&0xff);
  712. for(quint16 i=0;i<256;i++){
  713. if(webData->CompanyAlarm[((page<<8)&0xff00)|(i&0x00ff)].alarmRec[0].ShowFlag==0x01){
  714. ret[cur++] = static_cast<char>((webData->CompanyAlarm[((page<<8)&0xff00)|(i&0x00ff)].alarmRec[0].Time_T>>24)&0xff);
  715. ret[cur++] = static_cast<char>((webData->CompanyAlarm[((page<<8)&0xff00)|(i&0x00ff)].alarmRec[0].Time_T>>16)&0xff);
  716. ret[cur++] = static_cast<char>((webData->CompanyAlarm[((page<<8)&0xff00)|(i&0x00ff)].alarmRec[0].Time_T>>8)&0xff);
  717. ret[cur++] = static_cast<char>(webData->CompanyAlarm[((page<<8)&0xff00)|(i&0x00ff)].alarmRec[0].Time_T&0xff);
  718. }else{
  719. ret[cur++] = static_cast<char>(0x00);
  720. ret[cur++] = static_cast<char>(0x00);
  721. ret[cur++] = static_cast<char>(0x00);
  722. ret[cur++] = static_cast<char>(0x00);
  723. }
  724. }
  725. ret[cur] = static_cast<char>(0x00);
  726. ret[cur+1] = static_cast<char>(0xe7&0xff);
  727. for(int i=1;i<cur;i++)
  728. crc += static_cast<int>(ret[i]&0xff);
  729. ret[cur] = static_cast<char>(crc&0xff);
  730. return ret;
  731. }else
  732. return mkCompanyAlarmTimeCountReturn();
  733. }
  734. QByteArray WebDataThread::mkSyncRtn(quint8 subCmd)
  735. {
  736. int cur = 0, crc = 0;
  737. quint16 datalen = 0x01;
  738. QByteArray ret = QByteArray(datalen+14,0x00);
  739. QDateTime datetime = QDateTime::currentDateTime();
  740. ret[cur++] = static_cast<char>(0x7e);
  741. ret[cur++] = static_cast<char>(0x10);
  742. ret[cur++] = static_cast<char>((datalen>>8)&0xff);
  743. ret[cur++] = static_cast<char>(datalen&0xff);
  744. ret[cur++] = static_cast<char>(0x84&0xff);
  745. ret[cur++] = static_cast<char>((((datetime.date().year()/1000)&0x0f)<<4)|(((datetime.date().year()%1000)/100)&0x0f));
  746. ret[cur++] = static_cast<char>(((((datetime.date().year()%100)/10)&0x0f)<<4)|((datetime.date().year()%10)&0x0f));
  747. ret[cur++] = static_cast<char>((((datetime.date().month()/10)&0x0f)<<4)|((datetime.date().month()%10)&0x0f));
  748. ret[cur++] = static_cast<char>((((datetime.date().day()/10)&0x0f)<<4)|((datetime.date().day()%10)&0x0f));
  749. ret[cur++] = static_cast<char>((((datetime.time().hour()/10)&0x0f)<<4)|((datetime.time().hour()%10)&0x0f));
  750. ret[cur++] = static_cast<char>((((datetime.time().minute()/10)&0x0f)<<4)|((datetime.time().minute()%10)&0x0f));
  751. ret[cur++] = static_cast<char>((((datetime.time().second()/10)&0x0f)<<4)|((datetime.time().second()%10)&0x0f));
  752. ret[cur++] = static_cast<char>(subCmd);
  753. ret[cur] = static_cast<char>(0x00);
  754. ret[cur+1] = static_cast<char>(0xe7&0xff);
  755. for(int i=1;i<cur;i++)
  756. crc += static_cast<int>(ret[i]&0xff);
  757. ret[cur] = static_cast<char>(crc&0xff);
  758. return ret;
  759. }
  760. void WebDataThread::setAlarmCompanyInfo(int row, QByteArray data)
  761. {
  762. quint16 cur = 3;
  763. quint16 d_len = static_cast<quint16>(data.length());
  764. QList<AlarmSet> AlarmList;
  765. if(row>=10240)
  766. return;
  767. for(quint8 i=0;i<10;i++){
  768. if(d_len>(cur+11)){
  769. quint16 deviceIdx = static_cast<quint16>(((data.at(cur+2)&0x00ff)<<8)|(data.at(cur+3)&0x00ff));
  770. quint8 dwType = data.at(cur+4)&0xff;
  771. quint8 showFlag = data.at(cur+5)&0xff;
  772. uint a_time = static_cast<uint>(((data.at(cur+6)&0x000000ff)<<24)|((data.at(cur+7)&0x000000ff)<<16)|((data.at(cur+8)&0x000000ff)<<8)|(data.at(cur+9)&0x000000ff));
  773. quint16 data_len = static_cast<quint16>(((data.at(cur+10)&0x00ff)<<8)|(data.at(cur+11)&0x00ff));
  774. if(d_len>(cur+data_len+12)){
  775. QByteArray aData = data.mid(cur+12,data_len);
  776. if((deviceIdx<10240)&&(deviceIdx<webData->DevicesCount)){
  777. AlarmList.append(AlarmSet(deviceIdx,webData->devices[deviceIdx].DevName,
  778. aData,dwType,a_time,showFlag));
  779. }
  780. cur += data_len+13;
  781. }
  782. }
  783. }
  784. for(int i=(AlarmList.length()-1);i>=0;i--){
  785. setCompanyAlarmSet(QString(webData->devices[AlarmList.at(i).DeviceIdx].DevCode),AlarmList.at(i));
  786. }
  787. }
  788. void WebDataThread::setCompanyAlarmSet(QString deviceCode, AlarmSet set)
  789. {
  790. QString companyCode;
  791. quint16 companyIdx = 0xffff;
  792. quint32 deviceIdx = 0xffffffff;
  793. AlarmSet tmp = AlarmSet(0xffffffff,"","",0xff,0,0);
  794. for(quint32 i=0;i<102400;i++){
  795. if(i>=webData->DevicesCount)
  796. break;
  797. if(QString::compare(QString(webData->devices[i].DevCode),deviceCode)==0){
  798. deviceIdx = i;
  799. companyCode = QString(webData->devices[i].CompanyCode);
  800. set.DeviceIdx = deviceIdx;
  801. set.DevName = QString(webData->devices[i].DevName);
  802. break;
  803. }
  804. }
  805. for(quint16 i=0;i<10240;i++){
  806. if(i>=webData->CompanysCount)
  807. break;
  808. if(QString::compare(QString(webData->companys[i].CompanyCode),companyCode)==0){
  809. companyIdx = i;
  810. break;
  811. }
  812. }
  813. if(companyIdx<webData->CompanysCount){
  814. for(quint8 i=0;i<10;i++){
  815. if(set.AlarmTime>webData->CompanyAlarm[companyIdx].alarmRec[i].Time_T){
  816. for(quint8 j=9;j>i;j--){
  817. get_AlarmSet(companyIdx,j-1,&tmp);
  818. set_AlarmSet(companyIdx,j,tmp);
  819. }
  820. set_AlarmSet(companyIdx,i,set);
  821. break;
  822. }
  823. }
  824. for(quint8 i=0;i<10;i++){
  825. if(set.AlarmTime>webData->CompanyAlarm[10239].alarmRec[i].Time_T){
  826. for(quint8 j=9;j>i;j--){
  827. get_AlarmSet(10239,j-1,&tmp);
  828. set_AlarmSet(10239,j,tmp);
  829. }
  830. set_AlarmSet(10239,i,set);
  831. break;
  832. }
  833. }
  834. }
  835. }
  836. void WebDataThread::set_AlarmSet(quint16 companyIdx, quint8 alarmIdx, AlarmSet set)
  837. {
  838. if(((companyIdx<webData->CompanysCount)||(companyIdx==10239))&&(alarmIdx<10)){
  839. if(set.Enabled==0x01){
  840. webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].DeviceIdx = set.DeviceIdx;
  841. sprintf(webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].DevName,"%s",set.DevName.toUtf8().data());
  842. sprintf(webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].Data,"%s",set.AlarmData.toUtf8().data());
  843. sprintf(webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].Time,"%s",QDateTime::fromTime_t(set.AlarmTime).toString("yyyy-MM-dd HH:mm:ss").toUtf8().data());
  844. webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].dwType = set.dwType;
  845. webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].Time_T = set.AlarmTime;
  846. webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].ShowFlag = 0x01;
  847. }else
  848. webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].ShowFlag = 0x00;
  849. webData->CompanyAlarm[companyIdx].UpdateTime = QDateTime::currentDateTime().toTime_t();
  850. }
  851. }
  852. void WebDataThread::get_AlarmSet(quint16 companyIdx, quint8 alarmIdx, AlarmSet *set)
  853. {
  854. if(((companyIdx<webData->CompanysCount)||(companyIdx==10239))&&(alarmIdx<10)){
  855. if(webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].ShowFlag==0x01){
  856. set->Enabled = 0x01;
  857. set->DeviceIdx = webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].DeviceIdx;
  858. set->dwType = webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].dwType;
  859. set->AlarmTime = webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].Time_T;
  860. set->DevName = QString::fromUtf8(webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].DevName);
  861. set->AlarmData = QString::fromUtf8(webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].Data);
  862. webData->CompanyAlarm[companyIdx].alarmRec[alarmIdx].ShowFlag = 0x01;
  863. }else{
  864. set->Enabled = 0x00;
  865. }
  866. }
  867. }
  868. void WebDataThread::getData(QTcpSocket *so)
  869. {
  870. QByteArray cmd = so->readAll();
  871. // printf("get cmd\n");
  872. if(((cmd.at(0)&0xff)==0x7e)&&((cmd.at(1)&0xf0)==0x10)&&((cmd.at(cmd.length()-1)&0xff)==0xe7)&&(cmd.length()>13)){
  873. quint16 datalen = static_cast<quint16>(((cmd.at(2)&0x00ff)<<8)|(cmd.at(3)&0x00ff));
  874. quint8 crc = 0x00;
  875. if(cmd.length()==(datalen+14)){
  876. for(int i=1;i<(cmd.length()-2);i++)
  877. crc += static_cast<quint8>(cmd.at(i)&0xff);
  878. if(static_cast<quint8>(cmd.at(cmd.length()-2)&0xff)==static_cast<quint8>(crc)){
  879. switch(cmd.at(4)&0xff){
  880. case 0x01:
  881. so->write(mkHeartBeatReturn());
  882. so->flush();
  883. break;
  884. case 0x02:
  885. {
  886. if(datalen==0x0003){
  887. switch(cmd.at(12)&0xff){
  888. case 0x01:
  889. {
  890. quint16 uIdx = static_cast<quint16>(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff));
  891. if(uIdx<webData->UsersCount){
  892. so->write(mkUserSyncData(uIdx));
  893. }else{
  894. so->write(mkUserCountReturn());
  895. }
  896. so->flush();
  897. }
  898. break;
  899. case 0x02:
  900. {
  901. quint16 cIdx = static_cast<quint16>(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff));
  902. if(cIdx<webData->CompanysCount)
  903. so->write(mkCompanySyncData(cIdx));
  904. else{
  905. so->write(mkCompanyCountReturn());
  906. }
  907. so->flush();
  908. }
  909. break;
  910. case 0x03:
  911. {
  912. quint16 ucIdx = static_cast<quint16>(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff));
  913. if(ucIdx<webData->UserCompanyCount)
  914. so->write(mkUserCompanySyncData(ucIdx));
  915. else{
  916. so->write(mkUserCompanyCountReturn());
  917. }
  918. so->flush();
  919. }
  920. break;
  921. case 0x04:
  922. {
  923. quint16 bIdx = static_cast<quint16>(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff));
  924. if(bIdx<webData->BuildingsCount)
  925. so->write(mkBuildingSyncData(bIdx));
  926. else
  927. so->write(mkBuildingCountReturn());
  928. so->flush();
  929. }
  930. break;
  931. case 0x06:
  932. {
  933. quint16 cIdx = static_cast<quint16>(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff));
  934. if((cIdx==10239)||(cIdx<webData->CompanysAlarmCount))
  935. so->write(mkCompanyAlarmSyncData(cIdx));
  936. else
  937. so->write(mkCompanyAlarmCountReturn(cIdx));
  938. so->flush();
  939. }
  940. break;
  941. case 0x08:
  942. {
  943. quint16 page = static_cast<quint16>(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff));
  944. if(page<=((webData->CompanysAlarmCount>>8)&0x00ff))
  945. so->write(mkCompanyAlarmSyncTime(page));
  946. else
  947. so->write(mkCompanyAlarmTimeCountReturn());
  948. so->flush();
  949. }
  950. break;
  951. default:break;
  952. }
  953. }else if(datalen==0x0005){
  954. switch(cmd.at(12)&0xff){
  955. case 0x05:
  956. {
  957. quint32 dIdx = static_cast<quint32>(((cmd.at(13)&0x000000ff)<<24)
  958. |((cmd.at(14)&0x00000000ff)<<16)
  959. |((cmd.at(15)&0x00000000ff)<<8)
  960. |(cmd.at(16)&0x000000ff));
  961. if(dIdx<webData->DevicesCount)
  962. so->write(mkDeviceSyncData(dIdx));
  963. else
  964. so->write(mkDeviceCountReturn());
  965. so->flush();
  966. }
  967. break;
  968. default:break;
  969. }
  970. }else if(datalen==0x0001){
  971. switch(cmd.at(12)&0xff){
  972. case 0x07:
  973. so->write(mkDataCountReturn());
  974. so->flush();
  975. break;
  976. default:break;
  977. }
  978. }else{
  979. switch(cmd.at(12)&0xff){
  980. case 0x06:
  981. if(datalen>=170){
  982. quint16 cIdx = static_cast<quint16>(((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff));
  983. setAlarmCompanyInfo(cIdx,cmd.mid(12,datalen));
  984. }
  985. break;
  986. default:break;
  987. }
  988. }
  989. }
  990. break;
  991. case 0x04:
  992. {
  993. switch(cmd.at(12)&0xff){
  994. case 0x01:
  995. {
  996. int len = ((cmd.at(13)&0x00ff)<<8)|(cmd.at(14)&0x00ff);
  997. if(cmd.length()==(len+18)){
  998. QString deviceCode = QString(cmd.mid(15,len));
  999. emit needSync(deviceCode);
  1000. so->write(mkSyncRtn(0x01));
  1001. }
  1002. }
  1003. break;
  1004. case 0x02:
  1005. {
  1006. quint8 dwtype = cmd.at(13)&0xff;
  1007. quint8 showFalg = cmd.at(14)&0xff;
  1008. int deviceCodeLen = ((cmd.at(15)&0x00ff)<<8)|(cmd.at(16)&0x00ff);
  1009. if(cmd.length()>(deviceCodeLen+30)){
  1010. QString deviceCode = QString(cmd.mid(17,deviceCodeLen));
  1011. int companyCodeLen = ((cmd.at(19+deviceCodeLen)&0x00ff)<<8)|(cmd.at(20+deviceCodeLen)&0x00ff);
  1012. if(cmd.length()>(deviceCodeLen+companyCodeLen+30)){
  1013. QString companyCode = QString(cmd.mid(21+deviceCodeLen,companyCodeLen));
  1014. uint t = static_cast<uint>(((cmd.at(23+deviceCodeLen+companyCodeLen)&0x000000ff)<<24)
  1015. |((cmd.at(24+deviceCodeLen+companyCodeLen)&0x000000ff)<<16)
  1016. |((cmd.at(25+deviceCodeLen+companyCodeLen)&0x000000ff)<<8)
  1017. |(cmd.at(26+deviceCodeLen+companyCodeLen)&0x000000ff));
  1018. int dataLen = ((cmd.at(27+deviceCodeLen+companyCodeLen)&0x00ff)<<8)|(cmd.at(28+deviceCodeLen+companyCodeLen));
  1019. if(cmd.length()==(30+deviceCodeLen+companyCodeLen+dataLen)){
  1020. QString repData = QString(cmd.mid(29+deviceCodeLen+companyCodeLen,dataLen));
  1021. so->write(mkSyncRtn(0x02));
  1022. for(quint16 i=0;i<webData->DevicesCount;i++){
  1023. if(QString::compare(deviceCode,QString(webData->devices[i].DevCode))==0){
  1024. setCompanyAlarmSet(deviceCode,AlarmSet(i,QString(webData->devices[i].DevName),repData,dwtype,t,showFalg));
  1025. break;
  1026. }
  1027. }
  1028. }
  1029. }
  1030. }
  1031. }
  1032. break;
  1033. default:break;
  1034. }
  1035. }
  1036. break;
  1037. default:break;
  1038. }
  1039. }//else
  1040. // printf("crc error %d %d\n",crc,static_cast<quint8>(cmd.at(cmd.length()-2)&0xff));
  1041. }//else
  1042. // printf("len error: %d\n",datalen);
  1043. }//else
  1044. // printf("frame error\n");
  1045. }