Index: ssts-web/src/main/webapp/disinfectsystem/packing/setPlugInRFID.js =================================================================== diff -u -r34395 -r34428 --- ssts-web/src/main/webapp/disinfectsystem/packing/setPlugInRFID.js (.../setPlugInRFID.js) (revision 34395) +++ ssts-web/src/main/webapp/disinfectsystem/packing/setPlugInRFID.js (.../setPlugInRFID.js) (revision 34428) @@ -1,328 +1,72 @@ -var socket; -var lastCom; -var lastTime = ''; -var lastStrObj = { - name: '', - count: 0 -}; +var keepReading = true; +var reader; +var writer; -var timer;//获取客户端信息定时器 -var LastSelectClientsIndex = null; - -function Connect() { - socket = new WebSocket('ws://127.0.0.1:4649'); - socket.onopen = sOpen; - socket.onerror = sError; - socket.onmessage = sMessage; - socket.onclose = sClose; -} - -function sOpen() { - //setTimeout(GetCom(), 500); -} - -function sError(e) { - showMessage("连接失败:请检查 PlugInRFID.exe 是否已打开!"); -} - -function sMessage(messageEvent) { - var data = messageEvent.data;//来自服务器的数据 - recallback(data); -} - -function sClose(e) { - showMessage("连接已关闭!"); -} - -function Send(msg) { - socket.send(msg); -} -function Close() { - socket.close(); -} - - -//WebSocket 连接/断开 -function WebSocketAction() { - Connect(); -} - -//获取串口 -function GetCom() { - var JsonData = { - Sr_DataType: "DownData", Sr_MethodName: "GetCom", Sr_Parameter: "", - Sr_ParameterNum: "0", Sr_ParameterType: "" - }; - Send(JSON.stringify(JsonData)); -} - -//串口操作 打开/关闭 串口 -function SerialAction(value) { - if (value == 1) { - OpenSerial(); - } else { - CloseSerial(); - } - var timer = setTimeout(GetClientInfo, 1000); -} - -//打开串口 -function OpenSerial() { - var JsonData = { - Sr_DataType: "DownData", Sr_MethodName: "ComStart", Sr_Parameter: lastCom, - Sr_ParameterNum: "1", Sr_ParameterType: "string" - }; - Send(JSON.stringify(JsonData)); -} - -//关闭串口 -function CloseSerial() { - var JsonData = { - Sr_DataType: "DownData", Sr_MethodName: "ComClose", Sr_Parameter: "", - Sr_ParameterNum: "0", Sr_ParameterType: "" - }; - Send(JSON.stringify(JsonData)); -} - -//获取 客户端/设备 信息 -function GetClientInfo() { - var JsonData = { - Sr_DataType: "DownData", Sr_MethodName: "GetClientInfo", Sr_Parameter: "", - Sr_ParameterNum: "0", Sr_ParameterType: "" - }; - Send(JSON.stringify(JsonData)); -} - -//开始执行获取客户端定时器 -function StartTimer() { - timer = setInterval(GetClientInfo, 3000); -} - -//清除定时器 -function StopTimer() { - clearInterval(timer) -} - -function SetCurrentClient(value) { - var JsonData = { - Sr_DataType: "DownData", Sr_MethodName: "SetCurrentClient", Sr_Parameter: value, - Sr_ParameterNum: "1", Sr_ParameterType: "" - }; - Send(JSON.stringify(JsonData)); -} - -//处理PlugInRFID插件发来的数据 -function recallback(data) { +//打开串口并连接 +async function openPort(params, callback) { try { - var JsonClass = JSON.parse(data); - if (JsonClass.Sr_DataType == "PlugInRespondData") { - switch (JsonClass.Sr_RespondMethodName) { - case "GetCom": - LoadCom(JsonClass.Sr_RespondData); - break; - case "ComStart": - case "ComClose": - ComActionResult(JsonClass.Sr_RespondMethodName, JsonClass.Sr_RespondData); - break; - case "GetNet": - LoadNet(JsonClass.Sr_RespondData); - break; - case "ServerStart": - case "ServerClose": - ServerActionResult(JsonClass.Sr_RespondMethodName, JsonClass.Sr_RespondData); - break; - case "GetClientInfo": - UpdateClientInfo(JsonClass.Sr_RespondData); - break; - case "SetCurrentClient": - ShowSetCurrentClientResult(JsonClass.Sr_RespondData); - break; - default: - break; - } - } - else if (JsonClass.Sr_DataType == "DevRespondData") { - DevRespondDataHandle(JsonClass.Sr_RespondData); - } - } - catch (ex) { - showMessage("报错:" + ex); - } -} - - -//根据插件发来的数据加载串口列表 -function LoadCom(SerialName) { - var strs = new Array(); //定义一数组 - strs = SerialName.split("/"); //字符分割 - lastCom = strs[0] -} - -//处理 串口 打开/关闭 结果 -function ComActionResult(ActionType, RespondData) { - if (ActionType == "ComStart") { - if (RespondData == "0") { - + // 获取用户之前授予该网站访问权限的所有串口 + const filters = params.filters; + const ports = await navigator.serial.getPorts(); + var port; + if (ports.length == 1) { + port = ports[0]; } else { - showMessage("串口打开失败!" + "\r\n" + "[请重新打开PlugInRFID.exe!]"); - } - } else { - if (RespondData == "0") { - - } else { - showMessage("串口关闭失败!"); - } - } -} - - - -//更新客户端下拉框信息 -function UpdateClientInfo(StrClientMsg) { - try { - SetCurrentClient(StrClientMsg) - } catch (ex) { - - } -} - -//更新设置当前操作客户端结果 -function ShowSetCurrentClientResult(result) { - //if (result == "0") { - // showMessage("设置客户端对象结果:成功"); - //} else { - // showMessage("设置客户端对象结果:失败"); - //} -} - -function hex2int(hex) { - var str = ''; - for (var i = 0; i < hex.split('-').length - 2; i++) { - var item = hex.split('-')[i]; - var curCharCode = parseInt(item, 16); - str += '' + String.fromCharCode(curCharCode); - } - if (parseInt(str) == 0) { - return '' - } else { - return str; - } -} - -//开始群读标签 -function StartMuiltTagsUser() { - var JsonData; - var AccessPwd = "00000000";//访问密码,默认为00000000 - var StartAddr = "0"; - var Len = "6"; - JsonData = { - Sr_DataType: "DownData", Sr_MethodName: "StartMultiTagsUser", Sr_Parameter: "currentclients" + "," + AccessPwd + "," + StartAddr + "," + Len, - Sr_ParameterNum: "4", Sr_ParameterType: "DevClient,byte[],int,int" - }; - Send(JSON.stringify(JsonData)); -} - -//设备上送数据解析 -function DevRespondDataHandle(data) { - var CmdRespondStr = new Array(); //定义一数组 - CmdRespondStr = data.split(","); //字符分割 - switch (CmdRespondStr[1]) { - case "79": - var CmdRespondStr4 = CmdRespondStr[4];//天线号 - var CmdRespondStr5 = CmdRespondStr[5];//标签EPC - var CmdRespondStr6 = CmdRespondStr[6];//EPC长度/PC - var CmdRespondStr7 = CmdRespondStr[7];//场强/Rssi - var CmdRespondStr12 = CmdRespondStr[12];//上次读取时间 - var CmdRespondStr13 = CmdRespondStr[13];//标签TID - var CmdRespondStr16 = CmdRespondStr[16];//标签USER - CmdRespondStr16 = CmdRespondStr16.replace(/-/g, ''); - CmdRespondStr16 = CmdRespondStr16.substring(0, CmdRespondStr16.indexOf('FF')); - if (lastTime == '') { - lastTime = CmdRespondStr12; + if (filters) { + for (var i = 0; i < ports.length; i++) { + const { usbProductId, usbVendorId } = ports[i].getInfo(); + if (filters[0].usbProductId == usbProductId && filters[0].usbVendorId == usbVendorId) { + port = ports[i]; + break; + } + } } else { - var newDate = new Date(lastTime).getTime(); - var timeStr = new Date(CmdRespondStr12).getTime(); - if (newDate + 1000 < timeStr) { - lastTime = CmdRespondStr12; - if (lastStrObj.name == '') { - lastStrObj = { - name: CmdRespondStr16, - count: 1 - } - } else { - if (lastStrObj.name == CmdRespondStr16) { - lastStrObj.count = parseInt(lastStrObj.count) + 1; - } else { - lastStrObj = { - name: CmdRespondStr16, - count: 1 - } - } + port = await navigator.serial.requestPort(); + } + } + await port.open({ baudRate: 115200 }, { dataBits: 8 }, { stopBits: 1 }, { parity: 'none' }); + callback('设备已连接!', false); + reader = port.readable.getReader(); + writer = port.writable.getWriter(); + //设置循环查询获取用户区的数据 + await writer.write(params.data); + while (port.readable && keepReading) { + try { + while (true) { + var { value, done } = await reader.read(); + if (done) { + reader.releaseLock(); + writer.releaseLock(); + break; } - if (lastStrObj.count % 3 == 0) { - var item = lastStrObj.name; - if (item !== '') { - showMessage(item, true); - } + if (value) { + callback(value, true); } } + } catch (error) { + callback('连接失败!', false); + } finally { + var { value, done } = await reader.read(); + if (done) { + reader.releaseLock(); + writer.releaseLock(); + return; + } + if (value) { + dealWithData(value); + } } - break; - case "97": - - break; - case "98": - - break; - case "8C"://获取功率响应 - - break; - case "80"://设置功率响应 - - break; - case "E3": - - break; - case "E2": - - break; - case "99": - - break; - case "9A": - - break; - case "9B": - - break; - case "9C": - break; - default: - //StrRespondResult = "接到设备响应数据"; - break; + } + } catch (error) { + callback('连接失败:' + error, false); } } -function showMessage(message, success) { - var obj = { - success: success || false, - message: message +window.addEventListener('beforeunload', function () { + if (keepReading && reader) { + keepReading = false; + reader.cancel(); + reader.releaseLock(); + writer.releaseLock(); } - postMessage(obj); -} - -onmessage = function (e) { - if (e.data == 'start') { - WebSocketAction(); - } else if (e.data == 'StartMuiltTagsUser') { - StartMuiltTagsUser(); - } else if (e.data == 'StopMuiltTags') { - StopMuiltTags(); - } else if (e.data == 'ComStart') { - SerialAction(1); - } else if (e.data == 'ComEnd') { - SerialAction(0); - } else { - Close(); - } -} \ No newline at end of file +}) \ No newline at end of file