123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- //此文件实现将控制命令封装成协议,具体协议内容请看:
- //链接:http://note.youdao.com/noteshare?id=dabda6c613adef7a416bd2625cd770a1
- //bcc校验码计算
- //arry: 要计算的数组
- //返回计算协议中校验位的校验码
- function calBcc(arry) {
- var bcc = 0;
- for (var i = 0; i < arry.length; i++) {
- bcc ^= arry[i];
- }
- return bcc;
- }
- //数组打印,调试用
- function PrintArry(data) {
- var str = '';
- for (var 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 (var i = 0; i < sn.length; i++) {
- outPut[index++] = sn[i].charCodeAt();
- }
- outPut[index++] = dataType; //指定数据类型为json
- //json string转ascii
- for (var 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));
- // return PrintArry(outPut);//C# 转发器专用
- return outPut;
- }
- //{"data":{"keyCode":"25"},"event":"keyCode"}
- //触发键盘事件, code表示键盘值
- function ExexuteKeyDown(code) {
- var jsonObj = { data: { keyCode: code }, event: 'keyCode' };
- var json = JSON.stringify(jsonObj);
- var sn = 'RK3923C1201900139';
- return makeFrame(sn, 0, json);
- }
- //触发鼠标按下事件,x:x坐标, y:y坐标
- function ExexuteMouseDown(x, y) {
- var jsonObj = {
- data: { action: 0, count: 1, pointerId: 0, x: x, y: y },
- event: '0',
- };
- var json = JSON.stringify(jsonObj);
- var sn = 'RK3923C1201900139';
- return makeFrame(sn, 0, json);
- }
- //触发鼠标移动事件,x:x坐标, y:y坐标
- function ExexuteMouseMove(x, y) {
- 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);
- }
- //触发鼠标抬起事件,x:x坐标, y:y坐标
- function ExexuteMouseUp(x, y) {
- 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 ExexuteKeyBoard(keycode) {
- // 187:虚拟按键菜单键,3:虚拟按键home键,4:虚拟按键返回键,24:音量增大,25:音量减小
- var jsonObj = { data: { keyCode: keycode.toString() }, type: 'keyCode' };
- return JSON.stringify(jsonObj);
- }
- 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 (var i = 0; i < sn.length; i++) {
- outPut[index++] = sn[i].charCodeAt();
- }
- outPut[index++] = dataType; //指定数据类型为json
- //json string转ascii
- for (var 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;
- //var str = PrintArry(outPut);
- //console.log("打印数组:%s", PrintArry(outPut));
- //return PrintArry(outPut);
- return outPut;
- }
- //根据报文识别屏幕方向, 0横屏,1竖屏
- function CheckScreenDirection(data) {
- if (data[0] == 0 && data[1] == 0 && data[2] == 0 && data[3] == 1) {
- if (data[4] == 1 && data[5] == 1) {
- if (data[6] == 1) {
- screen = data[7];
- return screen;
- }
- }
- }
- }
- var emptyCount = 0;
- function GetEmptyFrame() {
- 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,
- ]);
- return emptyFrame;
- }
- //查询屏幕方向
- function GetScreenState() {
- var sn = 'RK3923C1201900139';
- var outPut = new Uint8Array([0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02]);
- return makeFrameExtend(sn, 5, outPut);
- }
- //生成鉴权报文
- function VerifyCode(sn, code) {
- var len = code.length + 1;
- var codeBuffer = new TextEncoder('utf-8').encode(code); //获取字符串ascii码
- var buffer = new Uint8Array(len);
- buffer[0] = 0x04;
- for (var i = 0; i < codeBuffer.length; i++) {
- buffer[i + 1] = codeBuffer[i];
- }
- return makeFrameExtend(sn, 6, buffer);
- }
- //
- function CheckVerifyCode(data) {
- var dataLen = data.length - 26;
- var body = data.slice(24, 24 + dataLen);
- console.log('打印:' + PrintArry(body));
- if (body[3] == 0x03) {
- return true;
- }
- return false;
- }
- //通道配置
- function ConfigChannel(sn, channelName) {
- var chanelBuffer = new TextEncoder('utf-8').encode(channelName);
- var outPut = [];
- outPut.push(0x07);
- for (var i = 0; i < chanelBuffer.length; i++) {
- outPut.push(chanelBuffer[i]);
- }
- return makeFrameExtend(sn, 6, outPut);
- }
- function OpenFileLog(sn) {
- var outPut = new Uint8Array([0x01]);
- return makeFrameExtend(sn, 7, outPut);
- }
- //多端登录json 汇报生成
- function makeMultiLogin(sn, jsonData) {
- var jsonObj = {
- type: 3,
- data: jsonData,
- };
- var jsonStr = JSON.stringify(jsonObj);
- var outPut = new TextEncoder('utf-8').encode(jsonStr);
- return makeFrameExtend(sn, 0x0d, outPut);
- }
- //统计登录信息
- function makeStatistics(sn, jsonData) {
- var jsonObj = {
- type: 4,
- data: jsonData,
- };
- var jsonStr = JSON.stringify(jsonObj);
- var outPut = new TextEncoder('utf-8').encode(jsonStr);
- return makeFrameExtend(sn, 0x0d, outPut);
- }
- //多端登录数据解析
- function checkMultiLoginInfo(input) {
- var dataLen = input.length - 26; //得到json 长度
- var jsonHex = input.slice(24, 24 + dataLen); //截取json hex二进制数据
- var jsonStr = new TextDecoder('utf-8').decode(jsonHex);
- console.log('取得json 字符串:' + jsonStr);
- var jsonObj = JSON.parse(jsonStr);
- return jsonObj;
- }
- //切换清晰度
- function makeSharpness(level) {
- var sn = 'RK3923C1201900139';
- var jsonObj = {
- type: 2,
- data: { definition: level, clientType: 'h5', sceneType: 'cloudPhone' },
- };
- var jsonStr = JSON.stringify(jsonObj);
- var outPut = new TextEncoder('utf-8').encode(jsonStr);
- return makeFrameExtend(sn, 0xd, outPut);
- }
- //I 帧请求报文生成
- function RequestIFrame() {
- var sn = 'RK3923C1201900139';
- var outPut = new Uint8Array([0x20]);
- return makeFrameExtend(sn, 6, outPut);
- }
|