function WaitForResponceBTPR2() {
try {
var printComplete = false;
var recvBuffer = new String();
var sendBuffer = new String();
var objRecv = new Bt.LibDef.CommSppRecvData("");
for (var loopCount = 0; loopCount < 10; loopCount++) {
if (SPPRecv(objRecv, 1, 1) != Bt.LibDef.BT_OK) {
//continue;
}
recvBuffer = objRecv.data;
// ACK receive=>Xmit ENQ and re-receive
if (recvBuffer.charAt(0) == ACK) {
sendBuffer = "";
sendBuffer = ENQ;
if (SPPSend(sendBuffer) != Bt.LibDef.BT_OK) {
window.alert("error:1");
continue;
}
}
// NACK reception=>End response processing
if (recvBuffer.charAt(0) == NAK) {
window.alert("error:NAK");
break;
}
// Check STX
if (recvBuffer.charAt(0) != STX) {
loopCount = 0;
continue;
}
// STX reception=>Start telegram reception
if (SPPRecv(objRecv, 10, 10) != Bt.LibDef.BT_OK) {
window.alert("error:3");
continue;
}
recvBuffer = objRecv.data;
// Check ETX
if (recvBuffer.charAt(9) != ETX) {
window.alert(recvBuffer.charAt(9) + 2);
continue;
}
// Response processing 1 (ENQ transmission)
if ((recvBuffer.charAt(2) == "\x47") ||
(recvBuffer.charAt(2) == "\x48") ||
(recvBuffer.charAt(2) == "\x53") ||
(recvBuffer.charAt(2) == "\x54")) {
Sleep(200);
sendBuffer = "";
sendBuffer = ENQ;
if (SPPSend(sendBuffer) != Bt.LibDef.BT_OK) {
window.alert("error:5");
continue;
}
}
// Response processing 2
// recvBuffer.charAt(2) 打印机状态代码,打印时获取
if ((recvBuffer.charAt(2) != "\x00") &&
(recvBuffer.charAt(2) != "\x01") &&
(recvBuffer.charAt(2) != "\x41") &&
(recvBuffer.charAt(2) != "\x42") &&
(recvBuffer.charAt(2) != "\x4E") &&
(recvBuffer.charAt(2) != "\x4D")) {
continue;
}
printComplete = true;
break;
}
if (printComplete) {
window.alert("The printing operation was completed successfully.");
return;
}
}
catch (e) {
window.alert("error:" + e);
}
window.alert("Printing failed.");
return;
}
基恩士手持如何通过JS实时获取sato蓝牙打印机的状态,目前只能在打印的时候获取到状态,求救!
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
她嫌我菜呜呜呜 2024-04-17 11:55关注要实时获取 Sato 蓝牙打印机的状态,你需要修改你的代码,以便定期发送查询打印机状态的指令,并在收到响应时处理状态信息。你当前的代码只在打印时获取状态,因此需要进行一些更改。
首先,你需要明确了解 Sato 蓝牙打印机的通信协议和指令集,以便正确发送查询状态的指令并解析响应。
以下是一个基本的修改示例,用于实时查询打印机状态:
function CheckPrinterStatus() { try { var objRecv = new Bt.LibDef.CommSppRecvData(""); var statusCommand = "STATUS\n"; // 发送查询状态的指令,具体指令可能根据 Sato 打印机的规格而有所不同 // 发送查询状态指令 if (SPPSend(statusCommand) != Bt.LibDef.BT_OK) { window.alert("Failed to send status command."); return; } // 接收打印机响应 if (SPPRecv(objRecv, 10, 10) != Bt.LibDef.BT_OK) { window.alert("Failed to receive printer response."); return; } var printerStatus = objRecv.data; // 解析打印机状态并处理 // 这里根据具体的状态代码进行处理,例如: // if (printerStatus == "READY\n") { // window.alert("Printer is ready."); // } else if (printerStatus == "BUSY\n") { // window.alert("Printer is busy."); // } else { // window.alert("Printer status unknown."); // } // 根据实际情况处理打印机状态信息 } catch (e) { window.alert("Error: " + e); } } // 定时查询打印机状态 setInterval(CheckPrinterStatus, 5000); // 每隔5秒查询一次状态在这个示例中,我们创建了一个名为
CheckPrinterStatus的函数,它负责发送查询打印机状态的指令,并处理打印机的响应。然后,我们使用setInterval函数定时调用这个函数,以便每隔一定时间查询一次打印机状态。请注意,这只是一个基本的示例,实际情况可能会更复杂。你需要根据 Sato 打印机的具体规格和通信协议来调整代码,并确保正确处理打印机的各种状态。
解决 无用评论 打赏 举报