无法从 ORSSerialPort 接收数据
Cannot receive data from ORSSerialPort
我正在尝试使用 ORSSerialPort 向串行端口发送数据和从串行端口接收数据。
我正在按照此处的示例进行操作,但我使用的是命令行应用程序:
https://github.com/armadsen/ORSSerialPort/tree/master/Examples/ORSSerialPortDemo
我相信我copied/implemented每个需要的方法,但问题是虽然我可以向我的串口发送数据(我从我的串口日志中双重确认并且发送成功),但我无法收到任何东西。
我的代码非常简单,如下所示 - 它只是为了作为原型,所以代码可能设计得不好。
那么我是否遗漏了无法从串口接收数据的任何内容?任何建议表示赞赏。
import ORSSerial
class SerialController : NSObject, ORSSerialPortDelegate {
var port : ORSSerialPort?
init(path: String){
port = ORSSerialPort(path: path)
port?.close()
}
func open(){
port?.baudRate=115200
port?.delegate=self
port?.open()
}
func close(){
port?.delegate=nil
port?.close()
}
func SendString(data: String){
let dataa = Data(data.utf8)
port?.send(dataa)
}
func serialPortWasOpened(_ serialPort: ORSSerialPort) {
print("PORT IS OPEN....")
}
func serialPortWasClosed(_ serialPort: ORSSerialPort) {
print("PORT IS CLOSE")
}
func serialPort(_ serialPort: ORSSerialPort, didReceive data: Data) {
print(NSString(data: data as Data, encoding: String.Encoding.utf8.rawValue)!)
}
func serialPortWasRemovedFromSystem(_ serialPort: ORSSerialPort) {
print("PORT REMOVED")
}
private func serialPort(serialPort: ORSSerialPort!, didEncounterError error: NSError!) {
print("PORT ERR \(String(describing: error))")
}
}
var mySerial = SerialController(path: "/dev/myserialport")
mySerial.open()
mySerial.SendString(data: "test")
假设您包含的代码是完整的程序源代码(即您将其编译为命令行应用程序),问题是程序在调用 sendString()
后立即终止,因此端口没有机会接收任何东西。您需要让程序保持活动状态并 运行ning。有多种方法可以做到这一点,但最简单的就是调用 RunLoop.main.run()
作为程序的最后一行。这将导致 运行 循环 运行 无限期地处理来自所有来源的输入,并且将使程序保持活动状态并 运行 ORSSerialPort 所依赖的系统机制。
// SerialController class you has looks good, and goes here
let mySerial = SerialController(path: "/dev/myserialport")
mySerial.open()
mySerial.SendString(data: "test")
RunLoop.main.run()
我正在尝试使用 ORSSerialPort 向串行端口发送数据和从串行端口接收数据。
我正在按照此处的示例进行操作,但我使用的是命令行应用程序: https://github.com/armadsen/ORSSerialPort/tree/master/Examples/ORSSerialPortDemo
我相信我copied/implemented每个需要的方法,但问题是虽然我可以向我的串口发送数据(我从我的串口日志中双重确认并且发送成功),但我无法收到任何东西。
我的代码非常简单,如下所示 - 它只是为了作为原型,所以代码可能设计得不好。
那么我是否遗漏了无法从串口接收数据的任何内容?任何建议表示赞赏。
import ORSSerial
class SerialController : NSObject, ORSSerialPortDelegate {
var port : ORSSerialPort?
init(path: String){
port = ORSSerialPort(path: path)
port?.close()
}
func open(){
port?.baudRate=115200
port?.delegate=self
port?.open()
}
func close(){
port?.delegate=nil
port?.close()
}
func SendString(data: String){
let dataa = Data(data.utf8)
port?.send(dataa)
}
func serialPortWasOpened(_ serialPort: ORSSerialPort) {
print("PORT IS OPEN....")
}
func serialPortWasClosed(_ serialPort: ORSSerialPort) {
print("PORT IS CLOSE")
}
func serialPort(_ serialPort: ORSSerialPort, didReceive data: Data) {
print(NSString(data: data as Data, encoding: String.Encoding.utf8.rawValue)!)
}
func serialPortWasRemovedFromSystem(_ serialPort: ORSSerialPort) {
print("PORT REMOVED")
}
private func serialPort(serialPort: ORSSerialPort!, didEncounterError error: NSError!) {
print("PORT ERR \(String(describing: error))")
}
}
var mySerial = SerialController(path: "/dev/myserialport")
mySerial.open()
mySerial.SendString(data: "test")
假设您包含的代码是完整的程序源代码(即您将其编译为命令行应用程序),问题是程序在调用 sendString()
后立即终止,因此端口没有机会接收任何东西。您需要让程序保持活动状态并 运行ning。有多种方法可以做到这一点,但最简单的就是调用 RunLoop.main.run()
作为程序的最后一行。这将导致 运行 循环 运行 无限期地处理来自所有来源的输入,并且将使程序保持活动状态并 运行 ORSSerialPort 所依赖的系统机制。
// SerialController class you has looks good, and goes here
let mySerial = SerialController(path: "/dev/myserialport")
mySerial.open()
mySerial.SendString(data: "test")
RunLoop.main.run()