helper.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. //此文件实现将控制命令封装成协议,具体协议内容请看:
  2. //链接:http://note.youdao.com/noteshare?id=dabda6c613adef7a416bd2625cd770a1
  3. //bcc校验码计算
  4. //arry: 要计算的数组
  5. //返回计算协议中校验位的校验码
  6. function calBcc(arry) {
  7. var bcc = 0;
  8. for (var i = 0; i < arry.length; i++) {
  9. bcc ^= arry[i];
  10. }
  11. return bcc;
  12. }
  13. //数组打印,调试用
  14. function PrintArry(data) {
  15. var str = "";
  16. for (var i = 0; i < data.length; i++) {
  17. str = str + data[i].toString(16).padStart(2, '0');
  18. }
  19. str = str.toUpperCase();
  20. return str;
  21. }
  22. //sn:板卡sn号,stirng
  23. //type:数据类型,数字
  24. //jsonCmd: json命令
  25. //返回值:生成一个Uint8Array,通过websocket发送给板卡
  26. function makeFrame(sn, dataType, jsonCmd) {
  27. var index = 0;
  28. var dataLen = jsonCmd.length;
  29. var frameLen = dataLen + 26;
  30. var outPut = new Uint8Array(frameLen);
  31. outPut[index++] = 0x68;
  32. outPut[index++] = (dataLen & 0xff000000) >> 24;
  33. outPut[index++] = (dataLen & 0x00ff0000) >> 16;
  34. outPut[index++] = (dataLen & 0x0000ff00) >> 8;
  35. outPut[index++] = dataLen & 0x000000ff;
  36. outPut[index++] = 0; //类型为client
  37. //sn号赋值,string转ascii
  38. for (var i = 0; i < sn.length; i++) {
  39. outPut[index++] = sn[i].charCodeAt();
  40. }
  41. outPut[index++] = dataType; //指定数据类型为json
  42. //json string转ascii
  43. for (var i = 0; i < jsonCmd.length; i++) {
  44. outPut[index++] = jsonCmd[i].charCodeAt();
  45. }
  46. var bccBuffer = outPut.slice(1, frameLen - 3 + 1); //忽略协议头和协议尾
  47. outPut[index++] = calBcc(bccBuffer);
  48. outPut[index++] = 0x16;
  49. return outPut;
  50. }
  51. //触发键盘事件, code表示键盘值
  52. function ExexuteKeyDown(code, sn) {
  53. var jsonObj = {
  54. "data": {
  55. "keyCode": code,
  56. "event": "keyDown"
  57. }
  58. };
  59. var json = JSON.stringify(jsonObj);
  60. return makeFrame(sn, 0, json);
  61. }
  62. //触发鼠标按下事件,x:x坐标, y:y坐标
  63. function ExexuteMouseDown(x, y, sn) {
  64. var jsonObj = {
  65. "data": {
  66. "action": 0,
  67. "count": 1,
  68. "pointerId": 0,
  69. "x": x,
  70. "y": y
  71. },
  72. "event": "0"
  73. };
  74. var json = JSON.stringify(jsonObj);
  75. // var sn = "RK3923C1201900139";
  76. return makeFrame(sn, 0, json);
  77. }
  78. //触发鼠标移动事件,x:x坐标, y:y坐标
  79. function ExexuteMouseMove(x, y, sn) {
  80. var jsonObj = {
  81. "data": {
  82. "action": 2,
  83. "count": 1,
  84. "pointerId": 0,
  85. "x": x,
  86. "y": y
  87. },
  88. "event": "2"
  89. };
  90. var json = JSON.stringify(jsonObj);
  91. return makeFrame(sn, 0, json);
  92. }
  93. function ExexuteKeyBoard(keycode) {
  94. var jsonObj = { "data": { "keyCode": keycode.toString() }, "event": "keyCode" };
  95. var json = JSON.stringify(jsonObj);
  96. var sn = "RK3923C1201900139";
  97. return json;
  98. }
  99. //触发鼠标抬起事件,x:x坐标, y:y坐标
  100. function ExexuteMouseUp(x, y, sn) {
  101. var jsonObj = {
  102. "data": {
  103. "action": 1,
  104. "count": 1,
  105. "pointerId": 0,
  106. "x": x,
  107. "y": y
  108. },
  109. "event": "1"
  110. };
  111. var json = JSON.stringify(jsonObj);
  112. return makeFrame(sn, 0, json);
  113. }
  114. //触发滑动事件
  115. function ExexuteMove(data, sn) {
  116. return makeFrame(sn, 0, data);
  117. }
  118. //示例:
  119. //var sn = "RK3923C1201900139";
  120. //var json = "{\"data\":{\"keyCode\":24},\"type\":\"keyDown\"}";
  121. // makeFrame(sn, 0, json);
  122. //ExexuteKeyDown()
  123. // 加个请求I帧的报文
  124. function RequestIFrame(sn) {
  125. var outPut = new Uint8Array([0x20])
  126. return makeFrameExtend(sn, 6, outPut)
  127. }
  128. function makeFrameExtend(sn, dataType, body) {
  129. var index = 0
  130. var dataLen = body.length
  131. var frameLen = dataLen + 26
  132. var outPut = new Uint8Array(frameLen)
  133. outPut[index++] = 0x68
  134. outPut[index++] = (dataLen & 0xff000000) >> 24
  135. outPut[index++] = (dataLen & 0x00ff0000) >> 16
  136. outPut[index++] = (dataLen & 0x0000ff00) >> 8
  137. outPut[index++] = dataLen & 0x000000ff
  138. outPut[index++] = 0 // 类型为client
  139. // sn号赋值,string转ascii
  140. for (var i = 0; i < sn.length; i++) {
  141. outPut[index++] = sn[i].charCodeAt()
  142. }
  143. outPut[index++] = dataType // 指定数据类型为json
  144. // json string转ascii
  145. for (var i = 0; i < body.length; i++) {
  146. outPut[index++] = body[i]
  147. }
  148. var bccBuffer = outPut.slice(1, frameLen - 3 + 1) // 忽略协议头和协议尾
  149. outPut[index++] = calBcc(bccBuffer)
  150. outPut[index++] = 0x16
  151. return outPut
  152. }
  153. function ConfigChannel(sn) {
  154. var outPut = new Uint8Array([0x07])
  155. return makeFrameExtend(sn, 6, outPut)
  156. }
  157. function makeFrameExtend(sn, dataType, body) {
  158. var index = 0;
  159. var dataLen = body.length;
  160. var frameLen = dataLen + 26;
  161. var outPut = new Uint8Array(frameLen);
  162. outPut[index++] = 0x68;
  163. outPut[index++] = (dataLen & 0xff000000) >> 24;
  164. outPut[index++] = (dataLen & 0x00ff0000) >> 16;
  165. outPut[index++] = (dataLen & 0x0000ff00) >> 8;
  166. outPut[index++] = dataLen & 0x000000ff;
  167. outPut[index++] = 0;//类型为client
  168. // sn号赋值,string转ascii
  169. for (var i = 0; i < sn.length; i++) {
  170. outPut[index++] = sn[i].charCodeAt();
  171. }
  172. outPut[index++] = dataType;//指定数据类型为json
  173. // json string转ascii
  174. for (var i = 0; i < body.length; i++) {
  175. outPut[index++] = body[i];
  176. }
  177. var bccBuffer = outPut.slice(1, frameLen - 3 + 1);//忽略协议头和协议尾
  178. outPut[index++] = calBcc(bccBuffer);
  179. outPut[index++] = 0x16;
  180. return outPut;
  181. }
  182. //根据报文识别屏幕方向, 0横屏,1竖屏
  183. function CheckScreenDirection(data) {
  184. if (data[0] == 0 && data[1] == 0 && data[2] == 0 && data[3] == 1) {
  185. if (data[4] == 1 && data[5] == 1) {
  186. if (data[6] == 1) {
  187. screen = data[7];
  188. return screen;
  189. }
  190. }
  191. }
  192. }
  193. var emptyCount = 0;
  194. function GetEmptyFrame() {
  195. var emptyFrame = new Uint8Array([0xFF, 0xF1, 0x50, 0x80, 0x12, 0x5F, 0xFC, 0x21, 0x1A, 0xC8, 0x01, 0x27, 0xFC, 0xC0, 0x00, 0x7E, 0x03, 0x10, 0x40, 0x63, 0x3D, 0x77, 0xE2, 0xB6, 0xE3, 0x6E, 0x00, 0x37, 0x56, 0x78, 0xEB, 0x70, 0xAB, 0xC5, 0x58, 0x08, 0x59, 0x76, 0xF0, 0x47, 0x3D, 0x23, 0x6C, 0xA6, 0x2B, 0x59, 0x4E, 0x9C, 0xE0, 0x23, 0x1C, 0x2D, 0x74, 0xCB, 0xE2, 0xFC, 0x77, 0x7D, 0x26, 0x13, 0xC3, 0x04, 0x40, 0x02, 0x60, 0xF6, 0x03, 0x20, 0x80, 0xC7, 0x9A, 0x11, 0x0E, 0x9B, 0xDA, 0xA0, 0x84, 0x00, 0x2A, 0x95, 0x4A, 0x1E, 0x74, 0xA5, 0x40, 0x2A, 0xCA, 0xA8, 0xCA, 0xF0, 0xF2, 0x1E, 0xA8, 0x77, 0x86, 0xA0, 0x62, 0x8C, 0xB8, 0x5F, 0xA6, 0x67, 0xBF, 0x0D, 0x27, 0x8B, 0xF9, 0x58, 0xBD, 0xE3, 0x2D, 0x0C, 0xBF, 0x48, 0x3C, 0xFD, 0x70, 0x78, 0x5E, 0xA9, 0x0B, 0x24, 0x9C, 0x13, 0x98, 0xA4, 0xA0, 0x6E, 0xCA, 0xAA, 0x7A, 0x88, 0xA5, 0x0C, 0x2E, 0x83, 0x59, 0x02, 0x24, 0x01, 0x41, 0x03, 0x92, 0x10, 0x40, 0x07])
  196. return emptyFrame;
  197. }
  198. //查询屏幕方向
  199. function GetScreenState() {
  200. var sn = "RK3923C1201900139";
  201. var outPut = new Uint8Array([0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02]);
  202. return makeFrameExtend(sn, 5, outPut);
  203. }
  204. //通道配置
  205. function ConfigChannel(sn) {
  206. var outPut = new Uint8Array([0x07]);
  207. return makeFrameExtend(sn, 6, outPut);
  208. }