123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- //此文件实现将控制命令封装成协议,具体协议内容请看:
- //链接:http://note.youdao.com/noteshare?id=dabda6c613adef7a416bd2625cd770a1
- //bcc校验码计算
- //arry: 要计算的数组
- //返回计算协议中校验位的校验码
- function calBcc(arry) {
- var bcc = 0;
- for (i = 0; i < arry.length; i++) {
- bcc ^= arry[i];
- }
- return bcc;
- }
- //数组打印,调试用
- function PrintArry(data) {
- var str = "";
- for (i = 0; i < data.length; i++) {
- str = str + data[i].toString(16).padStart(2, '0');
- }
- str = str.toUpperCase();
- return str;
- }
- //sn:板卡sn号,stirng
- //type:数据类型,数字
- //jsonCmd: json命令
- //返回值:生成一个Uint8Array,通过websocket发送给板卡
- function makeFrame(sn, dataType, jsonCmd) {
- var index = 0;
- var dataLen = jsonCmd.length;
- var frameLen = dataLen + 26;
- var outPut = new Uint8Array(frameLen);
- outPut[index++] = 0x68;
- outPut[index++] = (dataLen & 0xff000000) >> 24;
- outPut[index++] = (dataLen & 0x00ff0000) >> 16;
- outPut[index++] = (dataLen & 0x0000ff00) >> 8;
- outPut[index++] = dataLen & 0x000000ff;
- outPut[index++] = 0; //类型为client
- //sn号赋值,string转ascii
- for (i = 0; i < sn.length; i++) {
- outPut[index++] = sn[i].charCodeAt();
- }
- outPut[index++] = dataType; //指定数据类型为json
- //json string转ascii
- for (i = 0; i < jsonCmd.length; i++) {
- outPut[index++] = jsonCmd[i].charCodeAt();
- }
- var bccBuffer = outPut.slice(1, frameLen - 3 + 1); //忽略协议头和协议尾
- outPut[index++] = calBcc(bccBuffer);
- outPut[index++] = 0x16;
- // console.log("打印数组:%s", PrintArry(outPut));
- console.log("数组长度:%d", outPut.length);
- //return PrintArry(outPut);
- return outPut;
- }
- //触发键盘事件, code表示键盘值
- function ExexuteKeyDown(code, sn) {
- var jsonObj = {
- "data": {
- "keyCode": code,
- "event": "keyDown"
- }
- };
- var json = JSON.stringify(jsonObj);
- console.log("json==================", json);
- // var sn = "RK3923C1201900139";
- return makeFrame(sn, 0, json);
- }
- //触发鼠标按下事件,x:x坐标, y:y坐标
- function ExexuteMouseDown(x, y, sn) {
- var jsonObj = {
- "data": {
- "action": 0,
- "count": 1,
- "pointerId": 0,
- "x": x,
- "y": y
- },
- "event": "0"
- };
- var json = JSON.stringify(jsonObj);
- console.log("json==================", json);
- // var sn = "RK3923C1201900139";
- return makeFrame(sn, 0, json);
- }
- //触发鼠标移动事件,x:x坐标, y:y坐标
- function ExexuteMouseMove(x, y, sn) {
- var jsonObj = {
- "data": {
- "action": 2,
- "count": 1,
- "pointerId": 0,
- "x": x,
- "y": y
- },
- "event": "2"
- };
- var json = JSON.stringify(jsonObj);
- // var sn = "RK3923C1201900139";
- return makeFrame(sn, 0, json);
- }
- function ExexuteKeyBoard(keycode, sn) {
- var jsonObj = {
- "data": {
- "keyCode": keycode.toString()
- },
- "event": "keyCode"
- };
- var json = JSON.stringify(jsonObj);
- // var sn = "RK3923C1201900139";
- return makeFrame(sn, 0, json);
- }
- //触发鼠标抬起事件,x:x坐标, y:y坐标
- function ExexuteMouseUp(x, y, sn) {
- var jsonObj = {
- "data": {
- "action": 1,
- "count": 1,
- "pointerId": 0,
- "x": x,
- "y": y
- },
- "event": "1"
- };
- var json = JSON.stringify(jsonObj);
- // var sn = "RK3923C1201900139";
- return makeFrame(sn, 0, json);
- }
- //触发滑动事件
- function ExexuteMove(data, sn) {
- // var jsonObj = {"data":{"action":1, "count":1, "pointerId":0,"x":x, "y":y}, "event":"1"};
- // var json = JSON.stringify(jsonObj);
- // var sn = "RK3923C1201900139";
- return makeFrame(sn, 0, data);
- }
- //示例:
- //var sn = "RK3923C1201900139";
- //var json = "{\"data\":{\"keyCode\":24},\"type\":\"keyDown\"}";
- // makeFrame(sn, 0, json);
- //ExexuteKeyDown()
- // 加个请求I帧的报文
- function RequestIFrame(sn) {
- console.log('加个请求I帧的报文')
- var outPut = new Uint8Array([0x20])
- return makeFrameExtend(sn, 6, outPut)
- }
- function makeFrameExtend(sn, dataType, body) {
- var index = 0
- var dataLen = body.length
- var frameLen = dataLen + 26
- var outPut = new Uint8Array(frameLen)
- outPut[index++] = 0x68
- outPut[index++] = (dataLen & 0xff000000) >> 24
- outPut[index++] = (dataLen & 0x00ff0000) >> 16
- outPut[index++] = (dataLen & 0x0000ff00) >> 8
- outPut[index++] = dataLen & 0x000000ff
- outPut[index++] = 0 // 类型为client
- // sn号赋值,string转ascii
- for (let i = 0; i < sn.length; i++) {
- outPut[index++] = sn[i].charCodeAt()
- }
- outPut[index++] = dataType // 指定数据类型为json
- // json string转ascii
- for (let i = 0; i < body.length; i++) {
- outPut[index++] = body[i]
- }
- var bccBuffer = outPut.slice(1, frameLen - 3 + 1) // 忽略协议头和协议尾
- outPut[index++] = calBcc(bccBuffer)
- outPut[index++] = 0x16
- return outPut
- }
- function ConfigChannel(sn) {
- var outPut = new Uint8Array([0x07])
- return makeFrameExtend(sn, 6, outPut)
- }
|