data.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889
  1. const MAGIC=0xdead;
  2. const PKT_TYPE=function(){
  3. var len = 0;
  4. return {
  5. PKT_TYPE_ACK:len++,
  6. PKT_TYPE_PARAS:len++,
  7. PKT_TYPE_POWER_CH:len++, //power_ch_t
  8. PKT_TYPE_POWER_TOTAL:len++, //power_total_t
  9. PKT_TYPE_POWER_RESET:len++,
  10. PKT_TYPE_CH_ALL:len++,
  11. PKT_TYPE_SCAN:len++,
  12. PKT_TYPE_FACTORY:len++,
  13. PKT_TYPE_ALARM:len++,
  14. PKT_TYPE_SENSOR:len++,
  15. PKT_TYPE_BREAKER:len++,
  16. PKT_TYPE_STAT:len++,
  17. PKT_TYPE_MESG:len++,
  18. PKT_TYPE_FILE:len++,
  19. }
  20. }();
  21. const SUB_TYPE=function(){
  22. var len = 0;
  23. return {
  24. SUB_TYPE_POWER_SWITCH:len++,
  25. SUB_TYPE_POWER_ALARM:len++,
  26. SUB_TYPE_POWER_THRESHOLD:len++, //power_ch_t
  27. SUB_TYPE_POWER_START_DELAY:len++, //power_total_t
  28. SUB_TYPE_POWER_STOP_DELAY:len++,
  29. }
  30. }();
  31. ///////////////////////////////////////////////////////
  32. function array_to_string(data){
  33. var s = "";
  34. for(var i=0;i<data.length && data[i] !=0;i++){
  35. s +=String.fromCharCode(data[i]);
  36. }
  37. return s;
  38. }
  39. function string_to_array(data,len){
  40. var buffer = new ArrayBuffer(len);
  41. for(var i=0;i<data.length;i++){
  42. buffer[i] = data.charCodeAt(i);
  43. }
  44. buffer[len-1] = 0;
  45. return buffer;
  46. }
  47. function array_cat(a1,a2){
  48. var tlen=a1.byteLength+a2.byteLength;
  49. var buffer = new ArrayBuffer(tlen);
  50. var vw = new Uint8Array(buffer);
  51. var vw1 = new Uint8Array(a1);
  52. for(var i=0; i<a1.byteLength; i++) {
  53. vw[i] = vw1[i];
  54. }
  55. var vw2 = new Uint8Array(a2);
  56. for(var i=0; i<a2.byteLength; i++) {
  57. vw[i+a1.byteLength] = vw2[i];
  58. }
  59. return buffer;
  60. }
  61. function mk_hdr(type,flag)
  62. {
  63. var tmp,length=0;
  64. var buffer = new ArrayBuffer(13);
  65. tmp = new DataView(buffer, length);
  66. var t = MAGIC;
  67. tmp.setUint16(0,t,true);//magic
  68. length += 2;
  69. tmp = new DataView(buffer, length);
  70. tmp.setUint8(0,type,true); //type
  71. length += 1;
  72. tmp = new DataView(buffer, length);
  73. tmp.setUint8(0,0,true); //subtype
  74. length += 1;
  75. tmp = new DataView(buffer, length);
  76. tmp.setUint8(0,0,true); //nack
  77. length += 1;
  78. tmp = new DataView(buffer, length);
  79. tmp.setUint32(0,flag,true); //flag
  80. length += 4;
  81. tmp = new DataView(buffer, length);
  82. tmp.setUint32(0,0,true); //dlen
  83. length += 4;
  84. return buffer;
  85. }
  86. ///////////////////////////////////////////////////
  87. function bin_to_hdr(bin) {
  88. var tmp, length=0;
  89. tmp = new DataView(bin, length);
  90. this.magic = tmp.getUint16(0,true);
  91. length += 2;
  92. tmp = new DataView(bin, length);
  93. this.type = tmp.getUint8(0,true);
  94. length += 1;
  95. tmp = new DataView(bin, length);
  96. this.subtype = tmp.getUint8(0,true);
  97. length += 1;
  98. tmp = new DataView(bin, length);
  99. this.nack = tmp.getUint8(0,true);
  100. length += 1;
  101. tmp = new DataView(bin, length);
  102. this.flag = tmp.getUint8(0,true);
  103. length += 4;
  104. tmp = new DataView(bin, length);
  105. this.dlen = tmp.getUint32(0,true);
  106. length += 4;
  107. this.len = length;
  108. }
  109. function bin_to_info(bin) {
  110. var tmp, length=0;
  111. this.name = array_to_string(bin.slice(0,32));
  112. length += 32;
  113. tmp = new DataView(bin, length);
  114. this.type = tmp.getUint8(0,true);
  115. length += 1;
  116. tmp = new DataView(bin, length);
  117. this.addr = tmp.getUint8(0,true);
  118. length += 1;
  119. tmp = new DataView(bin, length);
  120. this.ch = tmp.getUint8(0,true);
  121. length += 1;
  122. tmp = new DataView(bin, length);
  123. this.sch = tmp.getUint8(0,true);
  124. length += 1;
  125. tmp = new DataView(bin, length);
  126. this.ph_id = tmp.getUint8(0,true);
  127. length += 1;
  128. tmp = new DataView(bin, length);
  129. this.ph_val = tmp.getUint8(0,true);
  130. length += 1;
  131. tmp = new DataView(bin, length);
  132. this.start_delay = tmp.getUint32(0,true);
  133. length += 4;
  134. tmp = new DataView(bin, length);
  135. this.stop_delay = tmp.getUint32(0,true);
  136. length += 4;
  137. this.len = length;
  138. }
  139. function bin_to_power(bin) {
  140. var tmp, length=0;
  141. tmp = new DataView(bin, length);
  142. this.voltage = tmp.getFloat32(0,true);
  143. length += 4;
  144. tmp = new DataView(bin, length);
  145. this.current = tmp.getFloat32(0,true);
  146. length += 4;
  147. tmp = new DataView(bin, length);
  148. this.power = tmp.getFloat32(0,true);
  149. length += 4;
  150. tmp = new DataView(bin, length);
  151. this.freq = tmp.getFloat32(0,true);
  152. length += 4;
  153. tmp = new DataView(bin, length);
  154. this.factor = tmp.getFloat32(0,true);
  155. length += 4;
  156. tmp = new DataView(bin, length);
  157. this.consump = tmp.getFloat32(0,true);
  158. length += 4;
  159. tmp = new DataView(bin, length);
  160. this.active = tmp.getFloat32(0,true);
  161. length += 4;
  162. tmp = new DataView(bin, length);
  163. this.reactive = tmp.getFloat32(0,true);
  164. length += 4;
  165. tmp = new DataView(bin, length);
  166. this.ph_out = tmp.getUint8(0,true);
  167. length += 1;
  168. tmp = new DataView(bin, length);
  169. this.status = tmp.getUint8(0,true);
  170. length += 1;
  171. tmp = new DataView(bin, length);
  172. this.nwire = tmp.getUint8(0,true);
  173. length += 1;
  174. this.len = length;
  175. }
  176. function bin_to_alarm(bin) {
  177. var tmp, length=0;
  178. tmp = new DataView(bin, length);
  179. this.v_upper = tmp.getUint8(0,true);
  180. length += 1;
  181. tmp = new DataView(bin, length);
  182. this.v_lower = tmp.getUint8(0,true);
  183. length += 1;
  184. tmp = new DataView(bin, length);
  185. this.c_upper = tmp.getUint8(0,true);
  186. length += 1;
  187. tmp = new DataView(bin, length);
  188. this.p_upper = tmp.getUint8(0,true);
  189. length += 1;
  190. tmp = new DataView(bin, length);
  191. this.w_upper = tmp.getUint8(0,true);
  192. length += 1;
  193. tmp = new DataView(bin, length);
  194. this.ph_loss = tmp.getUint8(0,true);
  195. length += 1;
  196. this.len = length;
  197. }
  198. function bin_to_thrval(bin) {
  199. var tmp, length=0;
  200. tmp = new DataView(bin, length);
  201. this.en = tmp.getUint8(0,true);
  202. length += 1;
  203. tmp = new DataView(bin, length);
  204. this.val = tmp.getFloat32(0,true);
  205. length += 4;
  206. tmp = new DataView(bin, length);
  207. this.act = tmp.getUint8(0,true);
  208. length += 1;
  209. this.act_para = [];
  210. tmp = new DataView(bin, length);
  211. for(var i=0; i<14; i++) {
  212. this.act_para[i] = tmp.getUint8(i,true);
  213. }
  214. length += 14;
  215. this.len = length;
  216. }
  217. function bin_to_thr(bin) {
  218. var tmp, length=0;
  219. this.v_upper = new bin_to_thrval(bin.slice(length));
  220. length += this.v_upper.len;
  221. this.v_lower = new bin_to_thrval(bin.slice(length));
  222. length += this.v_lower.len;
  223. this.c_upper = new bin_to_thrval(bin.slice(length));
  224. length += this.c_upper.len;
  225. this.p_upper = new bin_to_thrval(bin.slice(length));
  226. length += this.p_upper.len;
  227. this.w_upper = new bin_to_thrval(bin.slice(length));
  228. length += this.w_upper.len;
  229. this.len = length;
  230. }
  231. function bin_to_powerc(bin) {
  232. var tmp, bin2, length=0;
  233. this.info = new bin_to_info(bin);
  234. length += this.info.len;
  235. this.power = [];
  236. for(var i=0; i<3; i++) {
  237. this.power[i] = new bin_to_power(bin.slice(length));
  238. length += this.power[i].len;
  239. }
  240. this.thr = new bin_to_thr(bin.slice(length));
  241. length += this.thr.len;
  242. this.alarm = new bin_to_alarm(bin.slice(length));
  243. length += this.alarm.len;
  244. tmp = new DataView(bin, length);
  245. this.time = tmp.getUint32(0,true);
  246. length += 4;
  247. tmp = new DataView(bin, length);
  248. this.pbrd = tmp.getUint32(0,true);
  249. length += 4;
  250. this.len = length;
  251. }
  252. function bin_to_total(bin) {
  253. var tmp, length=0;
  254. tmp = new DataView(bin, length);
  255. this.voltage = tmp.getFloat32 (0,true);
  256. length += 4;
  257. tmp = new DataView(bin, length);
  258. this.current = tmp.getFloat32(0,true);
  259. length += 4;
  260. tmp = new DataView(bin, length);
  261. this.power = tmp.getFloat32(0,true);
  262. length += 4;
  263. tmp = new DataView(bin, length);
  264. this.freq = tmp.getFloat32(0,true);
  265. length += 4;
  266. tmp = new DataView(bin, length);
  267. this.consump = tmp.getFloat32 (0,true);
  268. length += 4;
  269. tmp = new DataView(bin, length);
  270. this.active = tmp.getFloat32(0,true);
  271. length += 4;
  272. tmp = new DataView(bin, length);
  273. this.reactive = tmp.getFloat32(0,true);
  274. length += 4;
  275. this.len = length;
  276. }
  277. function bin_to_powert(bin) {
  278. var tmp, length=0;
  279. tmp = new DataView(bin, length);
  280. this.type = tmp.getUint8(0,true);
  281. length += 1;
  282. this.total = [];
  283. for(var i=0; i<3; i++) {
  284. this.total[i] = new bin_to_total(bin.slice(length));
  285. length += this.total[i].len;
  286. }
  287. this.len = length;
  288. }
  289. function bin_to_alarmd(bin) {
  290. var tmp, length=0;
  291. tmp = new DataView(bin, length);
  292. this.ch = tmp.getUint8(0,true);
  293. length += 1;
  294. this.alarm = new bin_to_alarm(bin.slice(length));
  295. length += this.alarm.len;
  296. tmp = new DataView(bin, length);
  297. this.time = tmp.getUint32(0,true);
  298. length += 1;
  299. this.len = length;
  300. }
  301. ///////////////////////////////////////////////////
  302. function hdr_to_bin(js) {
  303. var tmp, length=0;
  304. var buffer = new ArrayBuffer(js.len);
  305. tmp = new DataView(buffer, length);
  306. tmp.setUint16(0,js.magic,true);
  307. length += 2;
  308. tmp = new DataView(buffer, length);
  309. tmp.setUint8(0,js.type,true);
  310. length += 1;
  311. tmp = new DataView(buffer, length);
  312. tmp.setUint8(0,js.subtype,true);
  313. length += 1;
  314. tmp = new DataView(buffer, length);
  315. tmp.setUint8(0,js.nack,true);
  316. length += 1;
  317. tmp = new DataView(buffer, length);
  318. tmp.setUint32(0,js.flag,true);
  319. length += 4;
  320. tmp = new DataView(buffer, length);
  321. tmp.setUint32(0,js.dlen,true);
  322. length += 4;
  323. return buffer;
  324. }
  325. function info_to_bin(js) {
  326. var tmp, length=0;
  327. var buffer = new ArrayBuffer(js.len);
  328. var name = string_to_array(js.name);
  329. tmp = new DataView(buffer, length);
  330. tmp.setUint8(0,js.type,true);
  331. length += 1;
  332. tmp = new DataView(buffer, length);
  333. tmp.setUint8(0,js.addr,true);
  334. length += 1;
  335. tmp = new DataView(buffer, length);
  336. tmp.setUint8(0,js.ch,true);
  337. length += 1;
  338. tmp = new DataView(buffer, length);
  339. tmp.setUint8(0,js.sch,true);
  340. length += 1;
  341. tmp = new DataView(buffer, length);
  342. tmp.setUint8(0,js.ph_id,true);
  343. length += 1;
  344. tmp = new DataView(buffer, length);
  345. tmp.setUint8(0,js.ph_val,true);
  346. length += 1;
  347. tmp = new DataView(buffer, length);
  348. tmp.setUint32(0,js.start_delay,true);
  349. length += 4;
  350. tmp = new DataView(buffer, length);
  351. tmp.setUint32(0,js.stop_delay,true);
  352. length += 4;
  353. return array_cat(name,buffer);
  354. }
  355. function power_to_bin(js) {
  356. var tmp, length=0;
  357. var buffer = new ArrayBuffer(js.len);
  358. tmp = new DataView(buffer, length);
  359. tmp.setFloat32(0,js.voltage,true);
  360. length += 4;
  361. tmp = new DataView(buffer, length);
  362. tmp.setFloat32(0,js.current,true);
  363. length += 4;
  364. tmp = new DataView(buffer, length);
  365. tmp.setFloat32(0,js.power,true);
  366. length += 4;
  367. tmp = new DataView(buffer, length);
  368. tmp.setFloat32(0,js.freq,true);
  369. length += 4;
  370. tmp = new DataView(buffer, length);
  371. tmp.setFloat32(0,js.factor,true);
  372. length += 4;
  373. tmp = new DataView(buffer, length);
  374. tmp.setFloat32(0,js.consump,true);
  375. length += 4;
  376. tmp = new DataView(buffer, length);
  377. tmp.setFloat32(0,js.active,true);
  378. length += 4;
  379. tmp = new DataView(buffer, length);
  380. tmp.setFloat32(0,js.reactive,true);
  381. length += 4;
  382. tmp = new DataView(buffer, length);
  383. tmp.setUint8(0,js.ph_put,true);
  384. length += 1;
  385. tmp = new DataView(buffer, length);
  386. tmp.setUint8(0,js.status,true);
  387. length += 1;
  388. tmp = new DataView(buffer, length);
  389. tmp.setUint8(0,js.nwire,true);
  390. length += 1;
  391. return buffer;
  392. }
  393. function alarm_to_bin(js) {
  394. var tmp, length=0;
  395. var buffer = new ArrayBuffer(js.len);
  396. tmp = new DataView(buffer, length);
  397. tmp.setUint8(0,js.v_upper,true);
  398. length += 1;
  399. tmp = new DataView(buffer, length);
  400. tmp.setUint8(0,js.v_lower,true);
  401. length += 1;
  402. tmp = new DataView(buffer, length);
  403. tmp.setUint8(0,js.c_upper,true);
  404. length += 1;
  405. tmp = new DataView(buffer, length);
  406. tmp.setUint8(0,js.p_upper,true);
  407. length += 1;
  408. tmp = new DataView(buffer, length);
  409. tmp.setUint8(0,js.w_upper,true);
  410. length += 1;
  411. tmp = new DataView(buffer, length);
  412. tmp.setUint8(0,js.ph_loss,true);
  413. length += 1;
  414. return buffer;
  415. }
  416. function thrval_to_js(js) {
  417. var tmp, length=0;
  418. var buffer = new ArrayBuffer(js.len);
  419. tmp = new DataView(buffer, length);
  420. tmp.setUint8(0,js.en,true);
  421. length += 1;
  422. tmp = new DataView(buffer, length);
  423. tmp.setFloat32(0,js.val,true);
  424. length += 4;
  425. tmp = new DataView(buffer, length);
  426. tmp.getUint8(0,js.act,true);
  427. length += 1;
  428. tmp = new DataView(buffer, length);
  429. for(var i=0; i<14; i++) {
  430. tmp.setUint8(i,js.act_para[i],true);
  431. }
  432. length += 14;
  433. return buffer;
  434. }
  435. function thr_to_bin(js) {
  436. var bin,tmp, length=0;
  437. bin = thrval_to_js(js.v_upper);
  438. tmp = thrval_to_js(js.v_lower);
  439. bin = array_cat(bin, tmp);
  440. tmp = thrval_to_js(js.c_upper);
  441. bin = array_cat(bin, tmp);
  442. tmp = thrval_to_js(js.p_upper);
  443. bin = array_cat(bin, tmp);
  444. tmp = thrval_to_js(js.w_upper);
  445. bin = array_cat(bin, tmp);
  446. return bin;
  447. }
  448. function powerc_to_bin(js) {
  449. var bin,tmp, length=0;
  450. bin = info_to_bin(js.info);
  451. for(var i=0; i<3; i++) {
  452. tmp = power_to_bin(js.power[i]);
  453. bin = array_cat(bin, tmp);
  454. }
  455. tmp = thr_to_bin(js.thr);
  456. bin = array_cat(bin, tmp);
  457. tmp = alarm_to_bin(js.alarm);
  458. bin = array_cat(bin, tmp);
  459. var buf = new ArrayBuffer(8);
  460. tmp = new DataView(buf, 0);
  461. tmp.setUint32(0,js.time,true);
  462. tmp.setUint32(4,js.pbrd,true);
  463. bin = array_cat(bin, buf);
  464. return bin;
  465. }
  466. function total_to_bin(js) {
  467. var tmp, length=0;
  468. var buffer = new ArrayBuffer(js.len);
  469. tmp = new DataView(buffer, length);
  470. tmp.setFloat32(0,js.voltage,true);
  471. length += 4;
  472. tmp = new DataView(buffer, length);
  473. tmp.setFloat32(0,js.current,true);
  474. length += 4;
  475. tmp = new DataView(buffer, length);
  476. tmp.setFloat32(0,js.power,true);
  477. length += 4;
  478. tmp = new DataView(buffer, length);
  479. tmp.setFloat32(0,js.freq,true);
  480. length += 4;
  481. tmp = new DataView(buffer, length);
  482. tmp.setFloat32(0,js.consump,true);
  483. length += 4;
  484. tmp = new DataView(buffer, length);
  485. tmp.setFloat32(0,js.factor,true);
  486. length += 4;
  487. tmp = new DataView(buffer, length);
  488. tmp.setFloat32(0,js.active,true);
  489. length += 4;
  490. tmp = new DataView(buffer, length);
  491. tmp.setFloat32(0,js.reactive,true);
  492. length += 4;
  493. return buffer;
  494. }
  495. function powert_to_bin(js) {
  496. var tmp,bin2,length=0;
  497. var bin = new ArrayBuffer(1);
  498. tmp = new DataView(bin, length);
  499. tmp.setUint8(0,js.type,true);
  500. length += 4;
  501. for(var i=0; i<3; i++) {
  502. bin2 = total_to_bin(js.total[i]);
  503. bin = array_cat(bin, bin2);
  504. }
  505. return bin;
  506. }
  507. function alarmd_to_bin(js) {
  508. var tmp, length=0;
  509. var bin,buffer = new ArrayBuffer(1);
  510. tmp = new DataView(buffer, 0);
  511. tmp.setUint8(0,js.ch,true);
  512. var alarm = alarm_to_bin(js.alarm);
  513. bin = array_cat(buffer, alarm);
  514. buffer = new ArrayBuffer(4);
  515. tmp = new DataView(buffer, 0);
  516. tmp.setUint32(0,js.time,true);
  517. return array_cat(bin, buffer);
  518. }
  519. //////////////////////////////////////////////////////////////
  520. var XXX ={};
  521. XXX.hdr = function() {
  522. this.j2b = function (js) {
  523. var tmp;
  524. var hdr = new hdr_to_bin(js);
  525. switch(js.type){
  526. case PKT_TYPE.PKT_TYPE_POWER_CH:
  527. tmp = BIN.powerc.j2b(js.powerc);
  528. break;
  529. case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
  530. tmp = BIN.powert.j2b(js.powert);
  531. break;
  532. case PKT_TYPE.PKT_TYPE_ALARM:
  533. tmp = BIN.alarm.j2b(js.alarmd);
  534. break;
  535. default:
  536. return tmp;
  537. }
  538. return array_cat(hdr,tmp);
  539. };
  540. this.b2j = function (bin) {
  541. var tmp;
  542. var hdr = new bin_to_hdr(bin);
  543. if(hdr.nack == 1){
  544. //tmp = myBinary.ack.bin2js(bin,this.hdr.len,true);
  545. //myLog('log',tmp);
  546. //var data = tmp.data;
  547. }
  548. var data = bin.slice(hdr.len);
  549. switch(hdr.type) {
  550. case PKT_TYPE.PKT_TYPE_POWER_CH:
  551. hdr.powerc = BIN.powerc.b2j(data);
  552. break;
  553. case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
  554. hdr.powert = BIN.powert.b2j(data);
  555. break;
  556. case PKT_TYPE.PKT_TYPE_ALARM:
  557. hdr.alarmd = BIN.alarmd.b2j(data);
  558. break;
  559. default :
  560. console.log("wrong hdr type: "+hdr.type);
  561. }
  562. return hdr;
  563. }
  564. };
  565. XXX.paras=function() {
  566. this.j2b = function (js) {
  567. }
  568. this.b2j = function (bin) {
  569. }
  570. };
  571. XXX.powerc=function() {
  572. this.j2b = function (js) {
  573. return new powerc_to_bin(js);
  574. }
  575. this.b2j = function (bin) {
  576. var tmp=[],length=0;
  577. for(var i=0;; i++) {
  578. tmp[i] = new bin_to_powerc(bin.slice(length));
  579. length += tmp[i].len;
  580. if(length >= bin.byteLength) {
  581. break;
  582. }
  583. }
  584. return tmp;
  585. }
  586. };
  587. XXX.powert=function() {
  588. this.j2b = function (js) {
  589. return new powert_to_bin(js);
  590. }
  591. this.b2j = function (bin) {
  592. return new bin_to_powert(bin);
  593. }
  594. };
  595. XXX.alarmd=function() {
  596. this.j2b = function (js) {
  597. return new alarmd_to_bin(js);
  598. }
  599. this.b2j = function (bin) {
  600. return new bin_to_alarmd(bin);
  601. }
  602. };
  603. var BIN=new function() {
  604. this.hdr = new XXX.hdr();
  605. this.paras = new XXX.paras();
  606. this.powerc = new XXX.powerc();
  607. this.powert = new XXX.powert();
  608. this.alarmd = new XXX.alarmd();
  609. }();
  610. //////////////////////////////////////////
  611. function LOG(){
  612. var data = [];
  613. for(var i= 1,len=arguments.length;i<len;i++){
  614. data.push(arguments[i])
  615. }
  616. console.log(data);
  617. }
  618. function WS(url,fn) {
  619. this.url = url;
  620. this.name = 'myWebs';
  621. this.open = _open;
  622. this.reopen = _reopen;
  623. this.close = _close;
  624. this.send = _send;
  625. this.state = _state;
  626. this.setcb = _setcb;
  627. this.closeCount = 0;
  628. this.maxConnect = 100;
  629. var his = this;
  630. this.open();
  631. function _open() {
  632. console.log("____url: ", his.url);
  633. his.ws = new WebSocket(his.url);
  634. his.ws.binaryType = 'arraybuffer';
  635. his.ws.onopen = _onopen;
  636. his.ws.onclose = _onclose;
  637. his.ws.onmessage = _onmsg;
  638. his.ws.onerror = _onerror;
  639. }
  640. function _reopen() {
  641. _close();
  642. _open(his.url);
  643. }
  644. function _close() {
  645. his.ws.close();
  646. }
  647. function _send(msg) {
  648. if (his.ws.readyState != WebSocket.OPEN)
  649. return;
  650. his.ws.send(msg);
  651. }
  652. function _state() {
  653. return his.ws.readyState;
  654. }
  655. function _setcb(tp, f) {
  656. switch (tp) {
  657. case "open":
  658. his.ws.onopen = f;
  659. break;
  660. case "close":
  661. his.ws.onclose = f;
  662. break;
  663. case "msg":
  664. his.ws.onmessage = f;
  665. break;
  666. case "err":
  667. his.ws.onerror = f;
  668. break;
  669. }
  670. }
  671. function loop_send() {
  672. console.log("PKT_TYPE_POWER_CH request");
  673. _send(mk_hdr(PKT_TYPE.PKT_TYPE_POWER_CH));
  674. setTimeout(loop_send, 2000);
  675. }
  676. function _onopen(evt) {
  677. his.closeCount = 0;
  678. console.log("___ ws.onopen");
  679. setTimeout(loop_send, 2000);
  680. }
  681. function _onclose(evt) {
  682. LOG("ws.onclose");
  683. setTimeout(_reopen, 3000);
  684. his.closeCount += 1;
  685. }
  686. function _onmsg(evt) {
  687. console.log("___ ws.onmsg");
  688. if (evt.data instanceof ArrayBuffer) {
  689. fn(evt.data);
  690. }
  691. }
  692. function _onerror(evt) {
  693. console.log("___ ws.onerror");
  694. //write_scr('<span style="color: red;">ERROR:</span> '+ evt.data);
  695. }
  696. }