0

ハードウェアからデータを読み取ろうとしています。

手順は次のとおりです。

  1. ブックマークをハードウェアに送信する
await writer.write(encoder.encode("X"));
  1. デバイスはブックマークを取得し、データを送り返す必要があることを認識します。バッファをオーバーフローさせ、すべてのデータが到着するまで 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);
    }
}

ポートを最も効果的に閉じる方法を知っている人はいますか?

4

0 に答える 0