script.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. let port;
  2. let outputDone;
  3. let outputStream;
  4. let inputDone;
  5. let inputStream;
  6. let reader;
  7. async function connect() {
  8. try {
  9. port = await navigator.serial.requestPort();
  10. await port.open({ baudRate: 115200 });
  11. } catch (err) {
  12. console.log(err);
  13. return false;
  14. }
  15. const encoder = new TextEncoderStream();
  16. outputDone = encoder.readable.pipeTo(port.writable);
  17. outputStream = encoder.writable;
  18. const decoder = new TextDecoderStream();
  19. inputDone = port.readable.pipeTo(decoder.writable);
  20. inputStream = decoder.readable;
  21. reader = inputStream.getReader();
  22. return true;
  23. }
  24. async function disconnect() {
  25. if (reader) {
  26. await reader.cancel();
  27. await inputDone.catch(() => {});
  28. reader = null;
  29. inputDone = null;
  30. }
  31. if (outputStream) {
  32. await outputStream.getWriter().close();
  33. await outputDone;
  34. outputStream = null;
  35. outputDone = null;
  36. }
  37. if (port) {
  38. await port.close();
  39. port = null;
  40. }
  41. }
  42. function send(message) {
  43. const writer = outputStream.getWriter();
  44. writer.write(message + "\n");
  45. writer.releaseLock();
  46. }
  47. async function readLoop() {
  48. let fullStr = "";
  49. while (true) {
  50. const { value, done } = await reader.read();
  51. if (value) {
  52. fullStr += value;
  53. const res = fullStr.match(/(.*)\r\n/);
  54. if (res) {
  55. fullStr = "";
  56. emitEvent("read", res[1]);
  57. }
  58. }
  59. if (done) {
  60. reader.releaseLock();
  61. break;
  62. }
  63. }
  64. }