helper.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. //此文件实现将控制命令封装成协议,具体协议内容请看:
  2. //链接:http://note.youdao.com/noteshare?id=dabda6c613adef7a416bd2625cd770a1
  3. //bcc校验码计算
  4. //arry: 要计算的数组
  5. //返回计算协议中校验位的校验码
  6. function calBcc(arry) {
  7. var bcc = 0;
  8. for (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 (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. console.log("makeFramemakeFrame",sn)
  28. var index = 0;
  29. var dataLen = jsonCmd.length;
  30. var frameLen = dataLen + 26;
  31. var outPut = new Uint8Array(frameLen);
  32. outPut[index++] = 0x68;
  33. outPut[index++] = (dataLen & 0xff000000) >> 24;
  34. outPut[index++] = (dataLen & 0x00ff0000) >> 16;
  35. outPut[index++] = (dataLen & 0x0000ff00) >> 8;
  36. outPut[index++] = dataLen & 0x000000ff;
  37. outPut[index++] = 0; //类型为client
  38. //sn号赋值,string转ascii
  39. for (i = 0; i < sn.length; i++) {
  40. outPut[index++] = sn[i].charCodeAt();
  41. }
  42. outPut[index++] = dataType; //指定数据类型为json
  43. //json string转ascii
  44. for (i = 0; i < jsonCmd.length; i++) {
  45. outPut[index++] = jsonCmd[i].charCodeAt();
  46. }
  47. var bccBuffer = outPut.slice(1, frameLen - 3 + 1); //忽略协议头和协议尾
  48. outPut[index++] = calBcc(bccBuffer);
  49. outPut[index++] = 0x16;
  50. // console.log("打印数组:%s", PrintArry(outPut));
  51. console.log("数组长度:%d", outPut.length);
  52. //return PrintArry(outPut);
  53. return outPut;
  54. }
  55. //触发键盘事件, code表示键盘值
  56. function ExexuteKeyDown(code, sn) {
  57. var jsonObj = {
  58. "data": {
  59. "keyCode": code,
  60. "event": "keyDown"
  61. }
  62. };
  63. var json = JSON.stringify(jsonObj);
  64. console.log("json==================", json);
  65. // var sn = "RK3923C1201900139";
  66. return makeFrame(sn, 0, json);
  67. }
  68. //触发鼠标按下事件,x:x坐标, y:y坐标
  69. function ExexuteMouseDown(x, y, sn) {
  70. var jsonObj = {
  71. "data": {
  72. "action": 0,
  73. "count": 1,
  74. "pointerId": 0,
  75. "x": x,
  76. "y": y
  77. },
  78. "event": "0"
  79. };
  80. var json = JSON.stringify(jsonObj);
  81. console.log("json==================", json);
  82. // var sn = "RK3923C1201900139";
  83. return makeFrame(sn, 0, json);
  84. }
  85. //触发鼠标移动事件,x:x坐标, y:y坐标
  86. function ExexuteMouseMove(x, y, sn) {
  87. var jsonObj = {
  88. "data": {
  89. "action": 2,
  90. "count": 1,
  91. "pointerId": 0,
  92. "x": x,
  93. "y": y
  94. },
  95. "event": "2"
  96. };
  97. var json = JSON.stringify(jsonObj);
  98. // var sn = "RK3923C1201900139";
  99. return makeFrame(sn, 0, json);
  100. }
  101. function ExexuteKeyBoard(keycode, sn) {
  102. var jsonObj = {
  103. "data": {
  104. "keyCode": keycode.toString()
  105. },
  106. "event": "keyCode"
  107. };
  108. var json = JSON.stringify(jsonObj);
  109. // var sn = "RK3923C1201900139";
  110. console.log("ExexuteKeyBoard-------------",sn)
  111. return makeFrame(sn, 0, json);
  112. }
  113. //触发鼠标抬起事件,x:x坐标, y:y坐标
  114. function ExexuteMouseUp(x, y, sn) {
  115. var jsonObj = {
  116. "data": {
  117. "action": 1,
  118. "count": 1,
  119. "pointerId": 0,
  120. "x": x,
  121. "y": y
  122. },
  123. "event": "1"
  124. };
  125. var json = JSON.stringify(jsonObj);
  126. // var sn = "RK3923C1201900139";
  127. return makeFrame(sn, 0, json);
  128. }
  129. //触发滑动事件
  130. function ExexuteMove(data, sn) {
  131. console.log("打开安卓卡ExexuteMove", sn)
  132. // var jsonObj = {"data":{"action":1, "count":1, "pointerId":0,"x":x, "y":y}, "event":"1"};
  133. // var json = JSON.stringify(jsonObj);
  134. // var sn = "RK3923C1201900139";
  135. return makeFrame(sn, 0, data);
  136. }
  137. //示例:
  138. //var sn = "RK3923C1201900139";
  139. //var json = "{\"data\":{\"keyCode\":24},\"type\":\"keyDown\"}";
  140. // makeFrame(sn, 0, json);
  141. //ExexuteKeyDown()
  142. // 加个请求I帧的报文
  143. function RequestIFrame(sn) {
  144. console.log('加个请求I帧的报文')
  145. var outPut = new Uint8Array([0x20])
  146. return makeFrameExtend(sn, 6, outPut)
  147. }
  148. function makeFrameExtend(sn, dataType, body) {
  149. var index = 0
  150. var dataLen = body.length
  151. var frameLen = dataLen + 26
  152. var outPut = new Uint8Array(frameLen)
  153. outPut[index++] = 0x68
  154. outPut[index++] = (dataLen & 0xff000000) >> 24
  155. outPut[index++] = (dataLen & 0x00ff0000) >> 16
  156. outPut[index++] = (dataLen & 0x0000ff00) >> 8
  157. outPut[index++] = dataLen & 0x000000ff
  158. outPut[index++] = 0 // 类型为client
  159. // sn号赋值,string转ascii
  160. for (let i = 0; i < sn.length; i++) {
  161. outPut[index++] = sn[i].charCodeAt()
  162. }
  163. outPut[index++] = dataType // 指定数据类型为json
  164. // json string转ascii
  165. for (let i = 0; i < body.length; i++) {
  166. outPut[index++] = body[i]
  167. }
  168. var bccBuffer = outPut.slice(1, frameLen - 3 + 1) // 忽略协议头和协议尾
  169. outPut[index++] = calBcc(bccBuffer)
  170. outPut[index++] = 0x16
  171. return outPut
  172. }
  173. function ConfigChannel(sn) {
  174. var outPut = new Uint8Array([0x07])
  175. return makeFrameExtend(sn, 6, outPut)
  176. }
  177. function makeFrameExtend(sn, dataType, body)
  178. {
  179. var index = 0;
  180. var dataLen = body.length;
  181. var frameLen = dataLen + 26;
  182. var outPut = new Uint8Array(frameLen);
  183. outPut[index++] = 0x68;
  184. outPut[index++] = (dataLen & 0xff000000) >> 24;
  185. outPut[index++] = (dataLen & 0x00ff0000) >> 16;
  186. outPut[index++] = (dataLen & 0x0000ff00) >> 8;
  187. outPut[index++] = dataLen & 0x000000ff;
  188. outPut[index++] = 0;//类型为client
  189. //sn号赋值,string转ascii
  190. for( i = 0;i< sn.length;i++)
  191. {
  192. outPut[index++] = sn[i].charCodeAt();
  193. }
  194. outPut[index++] = dataType;//指定数据类型为json
  195. //json string转ascii
  196. for( i = 0;i < body.length;i++)
  197. {
  198. outPut[index++] = body[i];
  199. }
  200. var bccBuffer = outPut.slice(1, frameLen-3 + 1);//忽略协议头和协议尾
  201. outPut[index++] = calBcc(bccBuffer);
  202. outPut[index++] = 0x16;
  203. var str = PrintArry(outPut);
  204. //console.log("打印数组:%s", PrintArry(outPut));
  205. //return PrintArry(outPut);
  206. return outPut;
  207. }
  208. //根据报文识别屏幕方向, 0横屏,1竖屏
  209. function CheckScreenDirection(data)
  210. {
  211. if (data[0] == 0 && data[1] == 0 && data[2] == 0 &&data[3] == 1)
  212. {
  213. if (data[4] == 1 && data[5] == 1)
  214. {
  215. if (data[6] == 1)
  216. {
  217. screen = data[7];
  218. return screen;
  219. }
  220. }
  221. }
  222. }
  223. var emptyCount = 0;
  224. function GetEmptyFrame()
  225. {
  226. 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])
  227. return emptyFrame;
  228. }
  229. //查询屏幕方向
  230. function GetScreenState()
  231. {
  232. var sn = "RK3923C1201900139";
  233. var outPut = new Uint8Array([0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02]);
  234. return makeFrameExtend(sn, 5, outPut);
  235. }
  236. //通道配置
  237. function ConfigChannel(sn)
  238. {
  239. var outPut = new Uint8Array([0x07]);
  240. return makeFrameExtend(sn, 6, outPut);
  241. }