From 860221c029efad31bbbe64c6793e2591dbca80f7 Mon Sep 17 00:00:00 2001 From: Yeo Kheng Meng Date: Tue, 25 Oct 2016 23:57:25 +0800 Subject: [PATCH] adjust code to read until new character is encountered. Example code now tests for this. --- .../SwiftSerialExample/Sources/main.swift | 36 +++++++++++++++++++ Sources/SwiftSerial.swift | 20 ++++++----- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/Examples/SwiftSerialExample/Sources/main.swift b/Examples/SwiftSerialExample/Sources/main.swift index 904439c..0d1dc8e 100644 --- a/Examples/SwiftSerialExample/Sources/main.swift +++ b/Examples/SwiftSerialExample/Sources/main.swift @@ -5,6 +5,10 @@ print("You should do a loopback i.e short the TX and RX pins of the target seria let testString: String = "The quick brown fox jumps over the lazy dog 01234567890." +let numberOfMultiNewLineTest : Int = 5 + +let test3Strings: String = testString + "\n" + testString + "\n" + testString + "\n" + let arguments = CommandLine.arguments guard arguments.count >= 2 else { print("Need serial port name, e.g. /dev/ttyUSB0 as the first argument.") @@ -15,6 +19,8 @@ let portName = arguments[1] let serialPort: SerialPort = SerialPort(path: portName) do { + + print("Attempting to open port: \(portName)") try serialPort.openPort() print("Serial port \(portName) opened successfully.") defer { @@ -41,6 +47,36 @@ do { print("<\(stringReceived)>") } + + print("Now testing reading/writing of \(numberOfMultiNewLineTest) lines") + + var multiLineString: String = "" + + + for i in 1...numberOfMultiNewLineTest { + multiLineString += testString + "\n" + } + + print("Now writing multiLineString") + + var _ = try serialPort.writeString(multiLineString) + + + for i in 1...numberOfMultiNewLineTest { + let stringReceived = try serialPort.readLine() + + if testString == stringReceived { + print("Received string \(i) is the same as transmitted section. Moving on...") + } else { + print("Uh oh! Received string \(i) is not the same as what was transmitted. This was what we received,") + print("<\(stringReceived)>") + break + } + } + + + print("We successfully received back \(numberOfMultiNewLineTest) lines") + } catch PortError.failedToOpen { print("Serial port \(portName) failed to open. You might need root permissions.") } catch { diff --git a/Sources/SwiftSerial.swift b/Sources/SwiftSerial.swift index 77b6f04..be9c9ba 100644 --- a/Sources/SwiftSerial.swift +++ b/Sources/SwiftSerial.swift @@ -420,14 +420,18 @@ extension SerialPort { buffer.deallocate(capacity: 1) } - // Read byte by byte - while try readBytes(into: buffer, size: 1) > 0 { - let character = CChar(buffer[0]) - if character != terminator { - data.append(buffer, count: 1) - } else { - break - } + while true { + let bytesRead = try readBytes(into: buffer, size: 1) + + if bytesRead > 0 { + let character = CChar(buffer[0]) + + if character == terminator { + break + } else { + data.append(buffer, count: 1) + } + } } if let string = String(data: data, encoding: String.Encoding.utf8) {