Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
41ddf0247a | ||
|
|
f3c3a214e3 | ||
|
|
5536368ba7 | ||
|
|
e2063420e9 | ||
|
|
cfaf24357c | ||
|
|
543e7d39e0 | ||
|
|
f9981b1cec | ||
|
|
d36d0132a8 | ||
|
|
b29775dfbe | ||
|
|
8a8dfcb190 | ||
|
|
25600e48fb | ||
|
|
7c06c99bd1 | ||
|
|
ad3142da95 |
@@ -44,10 +44,10 @@ func printToScreenFrom(myself: Bool, characterToPrint: UnicodeScalar){
|
|||||||
|
|
||||||
if(myturn && !myself){
|
if(myturn && !myself){
|
||||||
myturn = false
|
myturn = false
|
||||||
print("\nOther: ", terminator:"")
|
print("\n\nOther: ", terminator:"")
|
||||||
} else if (!myturn && myself){
|
} else if (!myturn && myself){
|
||||||
myturn = true
|
myturn = true
|
||||||
print("\nMe: ", terminator:"")
|
print("\n\nMe: ", terminator:"")
|
||||||
}
|
}
|
||||||
|
|
||||||
print(characterToPrint, terminator:"")
|
print(characterToPrint, terminator:"")
|
||||||
@@ -95,6 +95,7 @@ do {
|
|||||||
observer in
|
observer in
|
||||||
|
|
||||||
backgroundRead()
|
backgroundRead()
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_create(&readingThread, nil, pthreadFunc, nil)
|
pthread_create(&readingThread, nil, pthreadFunc, nil)
|
||||||
|
|||||||
21
README.md
21
README.md
@@ -9,6 +9,14 @@ This library is an improvement over my previous now deprecated library [SwiftLin
|
|||||||
<a href="https://developer.apple.com/swift"><img src="https://img.shields.io/badge/swift3-compatible-orange.svg?style=flat" alt="Swift 3 compatible" /></a>
|
<a href="https://developer.apple.com/swift"><img src="https://img.shields.io/badge/swift3-compatible-orange.svg?style=flat" alt="Swift 3 compatible" /></a>
|
||||||
<a href="https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/LICENSE"><img src="http://img.shields.io/badge/license-MIT-blue.svg?style=flat" alt="License: MIT" /></a>
|
<a href="https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/LICENSE"><img src="http://img.shields.io/badge/license-MIT-blue.svg?style=flat" alt="License: MIT" /></a>
|
||||||
|
|
||||||
|
## Talk on this library
|
||||||
|
|
||||||
|
I gave a talk on this library and one of its examples SwiftSerialIM. Click on the links below to see the slides and video.
|
||||||
|
|
||||||
|
[](http://www.slideshare.net/yeokm1/a-science-project-swift-serial-chat)
|
||||||
|
|
||||||
|
[](https://www.youtube.com/watch?v=6PWP1eZo53s)
|
||||||
|
|
||||||
## Mac OS Preparation
|
## Mac OS Preparation
|
||||||
|
|
||||||
You should have Xcode 8 installed with the command line tools.
|
You should have Xcode 8 installed with the command line tools.
|
||||||
@@ -63,7 +71,7 @@ To get started quickly, you can take a look at my example projects [here](Exampl
|
|||||||
|
|
||||||
### Example 1: Loopback Test
|
### Example 1: Loopback Test
|
||||||
|
|
||||||
In order to run this example properly, you need to connect one of your (USB/UART) serial ports in a loopback manner. Basically, you short the TX and RX pins of the serial port.
|
In order to run this example properly, you need to connect one of your (USB/UART) serial ports in a loopback manner. Basically, you short the TX and RX pins of the serial port. This library currently only support the `/dev/cu.*` variant on Mac. Read the beginning of the API usage section for more details.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/yeokm1/SwiftSerial.git
|
git clone https://github.com/yeokm1/SwiftSerial.git
|
||||||
@@ -79,7 +87,7 @@ sudo ./.build/debug/SwiftSerialExample /dev/ttyUSB0
|
|||||||
#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.
|
||||||
```
|
```
|
||||||
|
|
||||||
### Example 2: An chat app between 2 machines
|
### Example 2: A chat app between 2 machines
|
||||||
|
|
||||||
In order to run this example properly, you need 2 machines connected by a [null-modem cable](https://en.wikipedia.org/wiki/Null_modem) or 2 USB-Serial adapters with the TX-RX pins connected to each other. Run a copy of my program on both machines.
|
In order to run this example properly, you need 2 machines connected by a [null-modem cable](https://en.wikipedia.org/wiki/Null_modem) or 2 USB-Serial adapters with the TX-RX pins connected to each other. Run a copy of my program on both machines.
|
||||||
|
|
||||||
@@ -124,7 +132,7 @@ let serialPort: SerialPort = SerialPort(path: portName)
|
|||||||
```
|
```
|
||||||
Supply the portname that you wish to open like `/dev/ttyUSB0` or `/dev/cu.usbserial`.
|
Supply the portname that you wish to open like `/dev/ttyUSB0` or `/dev/cu.usbserial`.
|
||||||
|
|
||||||
For Macs, this library currently only works with the `/dev/cu.*` ports instead of the `/dev/tty.*`. I have enabled blocking on the serial port to prevent high CPU usage which will prevent the `/dev/tty.*` from working. Read more about the differences between the two [here](http://stackoverflow.com/questions/8632586/macos-whats-the-difference-between-dev-tty-and-dev-cu). If there is an problem, open an issue describing your situation and let me look into it.
|
For Macs, this library currently only works with the `/dev/cu.*` ports instead of the `/dev/tty.*`. I have enabled blocking on the serial port to prevent high CPU usage which will prevent the `/dev/tty.*` from working. Read more about the differences between the two [here](http://stackoverflow.com/questions/8632586/macos-whats-the-difference-between-dev-tty-and-dev-cu). If there is a problem, open an issue describing your situation and let me look into it.
|
||||||
|
|
||||||
### Opening the Serial Port
|
### Opening the Serial Port
|
||||||
|
|
||||||
@@ -188,10 +196,15 @@ 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 readByte() throws -> UInt8
|
||||||
|
```
|
||||||
|
Read only one byte. This works best if `minimumBytesToRead` has been set to `1` when opening the port. This function internally calls `readBytes()`.
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
func readChar() throws -> UnicodeScalar
|
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()`.
|
Read only one character. This works best if `minimumBytesToRead` has been set to `1` when opening the port. This function internally calls `readByte()`.
|
||||||
|
|
||||||
### Writing data to the port
|
### Writing data to the port
|
||||||
|
|
||||||
|
|||||||
@@ -446,7 +446,7 @@ extension SerialPort {
|
|||||||
return try readUntilChar(newlineChar)
|
return try readUntilChar(newlineChar)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func readChar() throws -> UnicodeScalar {
|
public func readByte() throws -> UInt8 {
|
||||||
let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: 1)
|
let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: 1)
|
||||||
|
|
||||||
defer {
|
defer {
|
||||||
@@ -457,11 +457,15 @@ extension SerialPort {
|
|||||||
let bytesRead = try readBytes(into: buffer, size: 1)
|
let bytesRead = try readBytes(into: buffer, size: 1)
|
||||||
|
|
||||||
if bytesRead > 0 {
|
if bytesRead > 0 {
|
||||||
let character = UnicodeScalar(buffer[0])
|
return buffer[0]
|
||||||
return character
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func readChar() throws -> UnicodeScalar {
|
||||||
|
let byteRead = readByte()
|
||||||
|
let character = UnicodeScalar(buffer[0])
|
||||||
|
return character
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
first-slide.png
Normal file
BIN
first-slide.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 311 KiB |
BIN
swift-serial-talk-slides.pptx
Normal file
BIN
swift-serial-talk-slides.pptx
Normal file
Binary file not shown.
Reference in New Issue
Block a user