Move settings/open of port into convenience initialiser.

This avoids attempting to open a serial port multiple times, which can be problematic if a blocking connection is used. Instead settings and port connection should be handled prior to designated inititializer.
This commit is contained in:
Piv
2020-09-13 21:19:34 +09:30
parent 970aac9025
commit d107baa1d8
2 changed files with 30 additions and 4 deletions

25
Package.resolved Normal file
View File

@@ -0,0 +1,25 @@
{
"object": {
"pins": [
{
"package": "SwiftSerial",
"repositoryURL": "https://vato.ddns.net/gitlab/vato007/SwiftSerial.git",
"state": {
"branch": "master",
"revision": "0e824cc38c6802e69543d0c1406d34babfd68e2e",
"version": null
}
},
{
"package": "SwiftyGPIO",
"repositoryURL": "https://github.com/uraimo/SwiftyGPIO.git",
"state": {
"branch": null,
"revision": "2038228e020cf12a62012b1ebe36bb9b8e6fdb6a",
"version": "1.2.5"
}
}
]
},
"version": 1
}

View File

@@ -30,14 +30,15 @@ public class Esp32ServoOutput : PWMOutput {
self.serialPort = port
}
public convenience init?(forChannel channel: UInt8, forPin pin: UInt8, onPort port: String) {
self.init(forChannel: channel, forPin: pin, onPort: SerialPort(path: port))
public convenience init?(forChannel channel: UInt8, forPin pin: UInt8, onPort port: String) throws {
let initPort = SerialPort(path: port)
try initPort.openPort()
initPort.setSettings(receiveRate: .baud115200, transmitRate: .baud115200, minimumBytesToRead: 1)
self.init(forChannel: channel, forPin: pin, onPort: initPort)
}
public func initPWM() {
do {
try serialPort.openPort()
serialPort.setSettings(receiveRate: .baud115200, transmitRate: .baud115200, minimumBytesToRead: 1)
let bytesWritten = try serialPort.writeData(Data([0, 1, channel, pin]))
if bytesWritten != 4 {
print("Wrote %d bytes, but should have written 4", bytesWritten)