HW_WebSerial.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. var serialPort = null;
  2. async function SerialConnect() {
  3. serialPort = await navigator.serial.requestPort();
  4. // ports = await navigator.serial.getPorts();
  5. try {
  6. await serialPort.open({
  7. baudRate: "115200",
  8. dataBits: "8",
  9. stopBits: "1",
  10. parity: "none",
  11. flowControl: "none"
  12. });
  13. HintWindow("Connected", 3000);
  14. console.log("Connected");
  15. ReadUntilClosed();
  16. } catch (error) {
  17. if (String(error).indexOf("The port is already open") != -1)
  18. HintWindow("Port has opened", 3000);
  19. else
  20. HintWindow("Open port fail", 3000);
  21. console.log(error);
  22. }
  23. }
  24. async function ReadUntilClosed() {
  25. while (serialPort.readable) {
  26. const serialReader = serialPort.readable.getReader();
  27. try {
  28. while (true) {
  29. const { value, done } = await serialReader.read();
  30. if (done) {
  31. // serialReader.releaseLock();
  32. break;
  33. }
  34. if (value) {
  35. // console.log(value);
  36. for (let i in value)
  37. UserDataProcess(value[i]);
  38. }
  39. }
  40. } catch (error) {
  41. }
  42. finally {
  43. serialReader.releaseLock();
  44. }
  45. }
  46. await serialPort.close();
  47. }
  48. async function SerialSend(uint8Array) {
  49. // console.log("#SerialSend", uint8Array);
  50. console.log("#SerialSend", arrayBuffer2Hex(uint8Array));
  51. if (serialPort) {
  52. const writer = serialPort.writable.getWriter();
  53. await writer.write(uint8Array);
  54. writer.releaseLock();
  55. }
  56. }
  57. function arrayBuffer2Hex(buffer) {
  58. const hexArr = Array.prototype.map.call(
  59. new Uint8Array(buffer),
  60. function (bit) {
  61. return "0x" + (('00' + bit.toString(16).toUpperCase()).slice(-2))
  62. }
  63. )
  64. return hexArr.join(', ')
  65. }