emscripten-core / emscripten-core/emscripten
WebSerial not getting enough time to write to SerialPort
- 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
Assessment
This issue has not been assessed yet.