1
0

Terminal.swift 841 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import Foundation
  2. import SwiftSerial
  3. import ArgumentParser
  4. private var readTask: Task<Void, Error>?
  5. @main
  6. struct Terminal: AsyncParsableCommand {
  7. @Argument(help: "Path to port (aka /dev/cu.serialsomethingorother)")
  8. var path: String
  9. @Argument(help: "Baud Rate", transform: {
  10. let value = UInt($0) ?? 1
  11. return try BaudRate(value)
  12. })
  13. var baudRate: BaudRate
  14. private var writeBuffer: String = ""
  15. func run() async throws {
  16. let serialPort = SerialPort(path: path)
  17. try serialPort.openPort()
  18. try serialPort.setSettings(receiveRate: baudRate, transmitRate: baudRate, minimumBytesToRead: 1)
  19. readTask = Task {
  20. let lines = try serialPort.asyncLines()
  21. for await line in lines {
  22. print(line, terminator: "")
  23. }
  24. }
  25. while let line = readLine(strippingNewline: false) {
  26. _ = try serialPort.writeString(line)
  27. }
  28. }
  29. }