Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e4b905e7b | ||
|
|
e73ea6056d | ||
|
|
640cf2f7c3 | ||
|
|
21adc2c8f4 |
@@ -25,6 +25,7 @@ do {
|
|||||||
print("Serial port \(portName) opened successfully.")
|
print("Serial port \(portName) opened successfully.")
|
||||||
defer {
|
defer {
|
||||||
serialPort.closePort()
|
serialPort.closePort()
|
||||||
|
print("Port Closed")
|
||||||
}
|
}
|
||||||
|
|
||||||
serialPort.setSettings(receiveRate: .baud9600,
|
serialPort.setSettings(receiveRate: .baud9600,
|
||||||
@@ -74,8 +75,8 @@ do {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print("End of example");
|
||||||
|
|
||||||
print("We successfully received back \(numberOfMultiNewLineTest) lines")
|
|
||||||
|
|
||||||
} catch PortError.failedToOpen {
|
} catch PortError.failedToOpen {
|
||||||
print("Serial port \(portName) failed to open. You might need root permissions.")
|
print("Serial port \(portName) failed to open. You might need root permissions.")
|
||||||
|
|||||||
16
README.md
16
README.md
@@ -66,9 +66,13 @@ To get started quickly, you can take a look at my example project [here](Example
|
|||||||
git clone https://github.com/yeokm1/SwiftSerial.git
|
git clone https://github.com/yeokm1/SwiftSerial.git
|
||||||
cd SwiftSerial/Examples/SwiftSerialExample/
|
cd SwiftSerial/Examples/SwiftSerialExample/
|
||||||
swift build
|
swift build
|
||||||
#You need root to access the serial port. Replace /dev/ttyUSB0 with the name of your serial port under test
|
|
||||||
|
#For Linux: You need root to access the serial port. Replace /dev/ttyUSB0 with the name of your serial port under test
|
||||||
sudo ./.build/debug/SwiftSerialExample /dev/ttyUSB0
|
sudo ./.build/debug/SwiftSerialExample /dev/ttyUSB0
|
||||||
|
|
||||||
|
#For Mac: Root is not required
|
||||||
|
./.build/debug/SwiftSerialExample /dev/tty.usbserial
|
||||||
|
|
||||||
#If all goes well you should see a series of messages informing you that data transmitted has been received properly.
|
#If all goes well you should see a series of messages informing you that data transmitted has been received properly.
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -162,6 +166,11 @@ func readUntilChar(_ terminator: CChar) throws -> String
|
|||||||
```
|
```
|
||||||
Keep reading until the specified CChar is encountered. Return the string read so far without that value.
|
Keep reading until the specified CChar is encountered. Return the string read so far without that value.
|
||||||
|
|
||||||
|
```swift
|
||||||
|
func readChar() throws -> UnicodeScalar
|
||||||
|
```
|
||||||
|
Read only one character. This works best if `minimumBytesToRead` has been set to `1` when opening the port. This function internally calls `readBytes()`.
|
||||||
|
|
||||||
### Writing data to the port
|
### Writing data to the port
|
||||||
|
|
||||||
There are several functions you can use to write data. All functions here are blocking till all the data has been written. All functions can throw `PortError.mustBeOpen`.
|
There are several functions you can use to write data. All functions here are blocking till all the data has been written. All functions can throw `PortError.mustBeOpen`.
|
||||||
@@ -181,6 +190,11 @@ func writeBytes(from buffer: UnsafeMutablePointer<UInt8>, size: Int) throws -> I
|
|||||||
```
|
```
|
||||||
Function for those that want to mess with unsafe pointers. You have to specify how many bytes have to be written. Will return how many bytes actually written.
|
Function for those that want to mess with unsafe pointers. You have to specify how many bytes have to be written. Will return how many bytes actually written.
|
||||||
|
|
||||||
|
```swift
|
||||||
|
func writeChar(_ character: UnicodeScalar) throws -> Int{
|
||||||
|
```
|
||||||
|
Writes only one character. Will return `1` if successful. This function internally calls `writeString()`. Pull requests for a better way of doing this is appreciated.
|
||||||
|
|
||||||
### Closing the port
|
### Closing the port
|
||||||
|
|
||||||
Just do `serialPort.closePort()` to close the port once you are done using it.
|
Just do `serialPort.closePort()` to close the port once you are done using it.
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ public enum ParityType {
|
|||||||
case even
|
case even
|
||||||
case odd
|
case odd
|
||||||
|
|
||||||
var parityValue: tcflag_t {
|
var parityValue: tcflag_t {
|
||||||
switch self {
|
switch self {
|
||||||
case .none:
|
case .none:
|
||||||
return 0
|
return 0
|
||||||
@@ -389,7 +389,7 @@ extension SerialPort {
|
|||||||
data = Data(bytes: buffer, count: bytesRead)
|
data = Data(bytes: buffer, count: bytesRead)
|
||||||
} else {
|
} else {
|
||||||
//This is to avoid the case where bytesRead can be negative causing problems allocating the Data buffer
|
//This is to avoid the case where bytesRead can be negative causing problems allocating the Data buffer
|
||||||
data = Data(bytes: buffer, count: 0)
|
data = Data(bytes: buffer, count: 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
return data
|
return data
|
||||||
@@ -421,17 +421,17 @@ extension SerialPort {
|
|||||||
}
|
}
|
||||||
|
|
||||||
while true {
|
while true {
|
||||||
let bytesRead = try readBytes(into: buffer, size: 1)
|
let bytesRead = try readBytes(into: buffer, size: 1)
|
||||||
|
|
||||||
if bytesRead > 0 {
|
if bytesRead > 0 {
|
||||||
let character = CChar(buffer[0])
|
let character = CChar(buffer[0])
|
||||||
|
|
||||||
if character == terminator {
|
if character == terminator {
|
||||||
break
|
break
|
||||||
} else {
|
} else {
|
||||||
data.append(buffer, count: 1)
|
data.append(buffer, count: 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let string = String(data: data, encoding: String.Encoding.utf8) {
|
if let string = String(data: data, encoding: String.Encoding.utf8) {
|
||||||
@@ -445,6 +445,25 @@ extension SerialPort {
|
|||||||
let newlineChar = CChar(10) // Newline/Line feed character `\n` is 10
|
let newlineChar = CChar(10) // Newline/Line feed character `\n` is 10
|
||||||
return try readUntilChar(newlineChar)
|
return try readUntilChar(newlineChar)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func readChar() throws -> UnicodeScalar {
|
||||||
|
let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: 1)
|
||||||
|
|
||||||
|
defer {
|
||||||
|
buffer.deallocate(capacity: 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
while true {
|
||||||
|
let bytesRead = try readBytes(into: buffer, size: 1)
|
||||||
|
|
||||||
|
if bytesRead > 0 {
|
||||||
|
let character = UnicodeScalar(buffer[0])
|
||||||
|
return character
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Transmitting
|
// MARK: Transmitting
|
||||||
@@ -480,4 +499,10 @@ extension SerialPort {
|
|||||||
|
|
||||||
return try writeData(data)
|
return try writeData(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func writeChar(_ character: UnicodeScalar) throws -> Int{
|
||||||
|
let stringEquiv = String(character)
|
||||||
|
let bytesWritten = try writeString(stringEquiv)
|
||||||
|
return bytesWritten
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user