浏览代码

ability to choose parity even or odd if enabled

Yeo Kheng Meng 9 年之前
父节点
当前提交
d69f2a8f04
共有 1 个文件被更改,包括 21 次插入7 次删除
  1. 21 7
      Sources/SwiftSerial.swift

+ 21 - 7
Sources/SwiftSerial.swift

@@ -183,6 +183,24 @@ public enum DataBitsSize {
             return tcflag_t(CS8)
         }
     }
+
+}
+
+public enum ParityType {
+	case none
+	case even
+	case odd
+
+	var parityValue: tcflag_t {
+        switch self {
+        case .none:
+            return 0
+        case .even:
+            return tcflag_t(PARENB)
+        case .odd:
+            return tcflag_t(PARENB | PARODD)
+        }
+    }
 }
 
 public enum PortError: Int32, Error {
@@ -235,7 +253,7 @@ public class SerialPort {
                             transmitRate: BaudRate,
                             minimumBytesToRead: Int,
                             timeout: Int = 0, /* 0 means wait indefinitely */
-                            enableParity: Bool = false,
+                            parityType: ParityType = .none,
                             sendTwoStopBits: Bool = false, /* 1 stop bit is the default */
                             dataBitsSize: DataBitsSize = .bits8,
                             useHardwareFlowControl: Bool = false,
@@ -255,12 +273,8 @@ public class SerialPort {
         cfsetispeed(&settings, receiveRate.speedValue)
         cfsetospeed(&settings, transmitRate.speedValue)
 
-        // Set parity enable flag
-        if enableParity {
-            settings.c_cflag |= ~tcflag_t(PARENB)
-        } else {
-            settings.c_cflag &= ~tcflag_t(PARENB)
-        }
+        // Enable parity (even/odd) if needed
+        settings.c_cflag |= parityType.parityValue
 
         // Set stop bit flag
         if sendTwoStopBits {