summaryrefslogtreecommitdiff
path: root/examples/device
diff options
context:
space:
mode:
authorraldone01 <[email protected]>2025-07-08 11:31:57 +0200
committerraldone01 <[email protected]>2025-07-08 11:31:57 +0200
commit1dcab4346889eb0c1906550ced954cdccfa8bedd (patch)
tree4a1a6e7595f422aa9d3ab8a7a4c24f70c5bb4bb7 /examples/device
parentce40b4c11e69520c9fe0274f9950d0557a0180a4 (diff)
Fix ui desync issue. Fix disconnection issue.
Diffstat (limited to 'examples/device')
-rw-r--r--examples/device/webusb_serial/website/application.js9
-rw-r--r--examples/device/webusb_serial/website/serial.js27
2 files changed, 10 insertions, 26 deletions
diff --git a/examples/device/webusb_serial/website/application.js b/examples/device/webusb_serial/website/application.js
index e9528a2ba..90d27c7d5 100644
--- a/examples/device/webusb_serial/website/application.js
+++ b/examples/device/webusb_serial/website/application.js
@@ -331,8 +331,11 @@
uiStatusSpan.className = 'status status-' + level;
}
- updateUIConnectionState() {
- if (this.currentPort && this.currentPort.isConnected) {
+ /// force_connected is used to instantly change the UI to the connected state while the device is still connecting
+ /// Otherwise we would have to wait for the connection to be established.
+ /// This can take until the device sends the first data packet.
+ updateUIConnectionState(force_connected = false) {
+ if (force_connected || (this.currentPort && this.currentPort.isConnected)) {
uiConnectWebUsbSerialBtn.style.display = 'none';
uiConnectSerialBtn.style.display = 'none';
uiDisconnectBtn.style.display = 'block';
@@ -397,6 +400,7 @@
try {
this.setStatus('Requesting device...', 'info');
this.currentPort = await serial.requestSerialPort();
+ this.updateUIConnectionState(true);
this.currentPort.onReceiveError = error => this.onReceiveError(error);
this.currentPort.onReceive = dataView => this.onReceive(dataView);
await this.currentPort.connect();
@@ -449,6 +453,7 @@
this.currentPort.onReceive = dataView => this.onReceive(dataView);
try {
+ this.updateUIConnectionState(true);
await this.currentPort.connect();
// save the port to localStorage
diff --git a/examples/device/webusb_serial/website/serial.js b/examples/device/webusb_serial/website/serial.js
index 18bb8a717..7068a7069 100644
--- a/examples/device/webusb_serial/website/serial.js
+++ b/examples/device/webusb_serial/website/serial.js
@@ -42,19 +42,9 @@ class SerialPort {
}
}
- async _waitForReadLoopToFinish() {
- if (this.readLoop) {
- try {
- await this.readLoop;
- } catch (error) {}
- this.readLoop = null;
- }
- }
-
/// Stop reading and release port
async disconnect() {
this.isConnected = false;
- await this._waitForReadLoopToFinish();
if (this.reader) {
try {
@@ -66,7 +56,8 @@ class SerialPort {
if (this.writer) {
try {
await this.writer.close();
- } catch (error) {}
+ } catch (error) { }
+ this.writer.releaseLock();
}
if (this.readableStreamClosed) {
@@ -160,15 +151,6 @@ class WebUsbSerialPort {
this.readLoop = this._readLoop();
}
- async _waitForReadLoopToFinish() {
- if (this.readLoop) {
- try {
- await this.readLoop;
- } catch (error) {}
- this.readLoop = null;
- }
- }
-
/// Internal continuous read loop
async _readLoop() {
while (this.isConnected) {
@@ -189,7 +171,6 @@ class WebUsbSerialPort {
/// Stop reading and release device
async disconnect() {
this.isConnected = false;
- await this._waitForReadLoopToFinish();
if (!this.device.opened) return;
try {
await this.device.controlTransferOut({
@@ -199,9 +180,7 @@ class WebUsbSerialPort {
value: 0x00,
index: this.interfaceNumber,
});
- } catch (error) {
- console.log(error);
- }
+ } catch (error) {}
await this.device.close();
}