ハードウェアからデータを読み取ろうとしています。
手順は次のとおりです。
- ブックマークをハードウェアに送信する
await writer.write(encoder.encode("X"));
- デバイスはブックマークを取得し、データを送り返す必要があることを認識します。バッファをオーバーフローさせ、すべてのデータが到着するまで 1 秒待ちます。さらに、データは AJAX 経由でバックグラウンド ソフトウェアに送信されます。
setTimeout(async function () {
...
}, 1000);
次のステップでは、COM ポートを閉じて、ユーザーが必要に応じて再度読み出せるようにします。最も簡単な方法は、ポートを閉じて同じメソッドを呼び出すことです。
しかし、私はそれを行う方法がわかりません。実際、データ転送が成功した後、私のプログラムは
if (done){
}
ループ。しかし、これは起こりません。少なくとも console.log はリストされていません。
コード:
if ("serial" in navigator) {
hardwareData = '';
readData();
async function readData() {
console.log('read');
//Prompt the user to select any serial port.
const port = await navigator.serial.requestPort();
// Waits until the serial interface is open. + hardware Parameter.
await port.open({ baudRate: 115200, dataBits: 8, stopBits: 1, parity: "none" });
//Send "X" to hardware
const encoder = new TextEncoder();
const writer = port.writable.getWriter();
await writer.write(encoder.encode("X"));
writer.releaseLock();
//Wait 1 second and read Port
setTimeout(async function () {
// Port read
while (port.readable) {
const reader = port.readable.getReader();
try {
while (true) {
const { value, done } = await reader.read();
if (done) {
// Allow the serial interface to be closed.
reader.releaseLock();
console.log('test');
break;
}
if (value) {
//console.log(value);
hardwareData = hardwareData + new TextDecoder().decode(value);
hardwareData = hardwareData.replace(/\s/g, '');
var res = et2Daten.split(";");
var anzahl = res.length;
if (anzahl == 173 || anzahl == 169) {
console.log("Anzahl: " + anzahl);
//console.log(et2Daten);
$.ajax({
url: APPLICATION_PATH + 'Home/ReadDataFromET2',
type: 'POST',
dataType: 'json',
data: JSON.stringify({
'data': et2Daten,
}),
contentType: "application/json; charset=utf-8",
success: function (data) {
console.log(data);
},
error: function (request) {
}
});
}
}
}
} catch (error) {
console.log("Error");
}
}
}, 1000);
}
}
ポートを最も効果的に閉じる方法を知っている人はいますか?