emscripten-core / emscripten-core/emscripten

WebSerial not getting enough time to write to SerialPort

Open
#21,581 6 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
27.6k
Forks
3.6k
Avg merge
1d 1h
Merged PRs (30d)
105

Description

**Version of emscripten/emsdk:**
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.56 (cf90417346b78455089e64eb909d71d091ecc055)
clang version 19.0.0git (https:/github.com/llvm/llvm-project 34ba90745fa55777436a2429a51a3799c83c6d4c)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /home/koen/Documents/emsdk/upstream/bin

So I am using WebSerial in WebAssembly, when I try to write things like this my Arduino doesn't show any data recieved, but when I make the `emscripten_sleep` delay bigger, say 1000 it works fine. I suspect that JavaScript doesn't have enough time to process the write. How can I make sure JS does have that time?

```cpp
EM_ASYNC_JS(void, write_data, (EM_VAL data), {
data = new Uint8Array(Emval.toValue(data));
console.log("Sending: ", data);
const port = window.activePort;
await window.writeStream.ready;
await window.writeStream.write(data);
await window.writeStream.ready;
});

void serialPortWrite(const unsigned char *buf, size_t len) {
std::vector data(buf, buf + len);
write_data(val(typed_memory_view(data.size(), data.data())).as_handle());
emscripten_sleep(0);
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.