Kaynağa Gözat

(feat) add BaudRateSetting

Michael Redig 2 yıl önce
ebeveyn
işleme
87b5af7433

+ 2 - 2
README.md

@@ -15,8 +15,7 @@ let serialPort = SerialPort(path: "/dev/cu.usbmodem1234") // you'll need to find
 try serialPort.openPort()
 try serialPort.openPort()
 
 
 serialPort.setSettings(
 serialPort.setSettings(
-	receiveRate: 115200,
-	transmitRate: 115200,
+	baudRateSetting: .symmetrical(.baud115200),
 	minimumBytesToRead: 1)
 	minimumBytesToRead: 1)
 
 
 
 
@@ -29,6 +28,7 @@ Task {
 	}
 	}
 }
 }
 
 
+
 // send data
 // send data
 try serialPort.writeString("foo")
 try serialPort.writeString("foo")
 // or
 // or

+ 1 - 1
Sources/SerialTerminal/Terminal.swift

@@ -20,7 +20,7 @@ struct Terminal: AsyncParsableCommand {
 	func run() async throws {
 	func run() async throws {
 		let serialPort = SerialPort(path: path)
 		let serialPort = SerialPort(path: path)
 		try serialPort.openPort()
 		try serialPort.openPort()
-		try serialPort.setSettings(receiveRate: baudRate, transmitRate: baudRate, minimumBytesToRead: 1)
+		try serialPort.setSettings(baudRateSetting: .symmetrical(baudRate), minimumBytesToRead: 1)
 
 
 		readTask = Task {
 		readTask = Task {
 			let lines = try serialPort.asyncLines()
 			let lines = try serialPort.asyncLines()

+ 21 - 4
Sources/SwiftSerial/SerialPort.swift

@@ -73,9 +73,26 @@ public class SerialPort {
 		self.readDataStream = stream
 		self.readDataStream = stream
 	}
 	}
 
 
+	public struct BaudRateSetting {
+		public let receiveRate: BaudRate
+		public let transmitRate: BaudRate
+
+		public init(receiveRate: BaudRate, transmitRate: BaudRate) {
+			self.receiveRate = receiveRate
+			self.transmitRate = transmitRate
+		}
+
+		public static func symmetrical(_ baudRate: BaudRate) -> BaudRateSetting {
+			Self(receiveRate: baudRate, transmitRate: baudRate)
+		}
+
+		public static func asymmetrical(receiveRate: BaudRate, transmitRate: BaudRate) -> BaudRateSetting {
+			Self(receiveRate: receiveRate, transmitRate: transmitRate)
+		}
+	}
+
 	public func setSettings(
 	public func setSettings(
-		receiveRate: BaudRate,
-		transmitRate: BaudRate,
+		baudRateSetting: BaudRateSetting,
 		minimumBytesToRead: Int,
 		minimumBytesToRead: Int,
 		timeout: Int = 0, /* 0 means wait indefinitely */
 		timeout: Int = 0, /* 0 means wait indefinitely */
 		parityType: ParityType = .none,
 		parityType: ParityType = .none,
@@ -98,8 +115,8 @@ public class SerialPort {
 		tcgetattr(fileDescriptor, &settings)
 		tcgetattr(fileDescriptor, &settings)
 
 
 		// Set baud rates
 		// Set baud rates
-		cfsetispeed(&settings, receiveRate.speedValue)
-		cfsetospeed(&settings, transmitRate.speedValue)
+		cfsetispeed(&settings, baudRateSetting.receiveRate.speedValue)
+		cfsetospeed(&settings, baudRateSetting.transmitRate.speedValue)
 
 
 		// Enable parity (even/odd) if needed
 		// Enable parity (even/odd) if needed
 		settings.c_cflag |= parityType.parityValue
 		settings.c_cflag |= parityType.parityValue

+ 25 - 1
Sources/SwiftSerial/SerialPortDeprecated.swift

@@ -1,6 +1,31 @@
 import Foundation
 import Foundation
 
 
 extension SerialPort {
 extension SerialPort {
+	@available(*, deprecated, message: "Use `setSettings(baudRateSetting:.....)` instead")
+	public func setSettings(
+		receiveRate: BaudRate,
+		transmitRate: BaudRate,
+		minimumBytesToRead: Int,
+		timeout: Int = 0, /* 0 means wait indefinitely */
+		parityType: ParityType = .none,
+		sendTwoStopBits: Bool = false, /* 1 stop bit is the default */
+		dataBitsSize: DataBitsSize = .bits8,
+		useHardwareFlowControl: Bool = false,
+		useSoftwareFlowControl: Bool = false,
+		processOutput: Bool = false
+	) throws {
+		try setSettings(
+			baudRateSetting: .asymmetrical(receiveRate: receiveRate, transmitRate: transmitRate),
+			minimumBytesToRead: minimumBytesToRead,
+			timeout: timeout,
+			parityType: parityType,
+			sendTwoStopBits: sendTwoStopBits,
+			dataBitsSize: dataBitsSize,
+			useHardwareFlowControl: useHardwareFlowControl,
+			useSoftwareFlowControl: useSoftwareFlowControl,
+			processOutput: processOutput)
+	}
+
 	@available(*, deprecated, message: "Use `open(portMode:)` instead")
 	@available(*, deprecated, message: "Use `open(portMode:)` instead")
 	public func openPort(toReceive receive: Bool, andTransmit transmit: Bool) throws {
 	public func openPort(toReceive receive: Bool, andTransmit transmit: Bool) throws {
 		switch (receive, transmit) {
 		switch (receive, transmit) {
@@ -15,7 +40,6 @@ extension SerialPort {
 		}
 		}
 	}
 	}
 
 
-
 	@available(*, deprecated, message: "Use async reading methods")
 	@available(*, deprecated, message: "Use async reading methods")
 	public func readBytes(into buffer: UnsafeMutablePointer<UInt8>, size: Int) throws -> Int {
 	public func readBytes(into buffer: UnsafeMutablePointer<UInt8>, size: Int) throws -> Int {
 		guard let fileDescriptor = fileDescriptor else {
 		guard let fileDescriptor = fileDescriptor else {