单个 Twisted 反应器中的多个串行端口
Multiple SerialPorts within single Twisted reactor
我正在尝试设置一个带有扭曲的程序来模拟 sends/receives AT 命令的串行设备。不同的设备打开不同数量的串行端口并将这些端口用于不同的事情。
我希望我的应用程序能够根据需要打开尽可能多的 SerialPorts 并知道哪个串行设备正在写入 dataReceived。我不想 运行 每个端口在不同的反应器或线程上。
有没有办法做到这一点?
class VirtualDeviceBase(LineReceiver):
def __init__(self, reactor, serial_address):
[...]
def open_port(self):
self.serial_device = SerialPort(self, serial_address, reactor)
self.serial_device2 = SerialPort(? , serial_address, reactor)
def dataReceived(self,data):
[...]
我试过这个:
class VirtualDeviceBase(LineReceiver):
class Protocol(LineReceiver):
def __init__(self,reactor,address):
[...]
def open_port(self):
new_protocol = self.Protocol()
self.serial_device = SerialPort(self, serial_address, reactor)
self.serial_device2 = SerialPort(new_protocol , serial_address, reactor)
它不会抛出任何错误,但它们都不再调用 dataRecevied。
只需实例化两个 SerialPort
。给他们你喜欢的任何协议。他们可以共享一个反应堆。单个反应器可以处理许多不同的事件源。
from twisted.internet.protocol import Protocol
from twisted.internet.serial import SerialPort
from twisted.internet.task import react
class Echo(Protocol):
def dataReceived(self, data):
print("Received: {}".format(data))
def main(reactor):
SerialPort(Echo(), "com0", reactor)
SerialPort(Echo(), "com1", reactor)
react(main, [])
我正在尝试设置一个带有扭曲的程序来模拟 sends/receives AT 命令的串行设备。不同的设备打开不同数量的串行端口并将这些端口用于不同的事情。
我希望我的应用程序能够根据需要打开尽可能多的 SerialPorts 并知道哪个串行设备正在写入 dataReceived。我不想 运行 每个端口在不同的反应器或线程上。
有没有办法做到这一点?
class VirtualDeviceBase(LineReceiver):
def __init__(self, reactor, serial_address):
[...]
def open_port(self):
self.serial_device = SerialPort(self, serial_address, reactor)
self.serial_device2 = SerialPort(? , serial_address, reactor)
def dataReceived(self,data):
[...]
我试过这个:
class VirtualDeviceBase(LineReceiver):
class Protocol(LineReceiver):
def __init__(self,reactor,address):
[...]
def open_port(self):
new_protocol = self.Protocol()
self.serial_device = SerialPort(self, serial_address, reactor)
self.serial_device2 = SerialPort(new_protocol , serial_address, reactor)
它不会抛出任何错误,但它们都不再调用 dataRecevied。
只需实例化两个 SerialPort
。给他们你喜欢的任何协议。他们可以共享一个反应堆。单个反应器可以处理许多不同的事件源。
from twisted.internet.protocol import Protocol
from twisted.internet.serial import SerialPort
from twisted.internet.task import react
class Echo(Protocol):
def dataReceived(self, data):
print("Received: {}".format(data))
def main(reactor):
SerialPort(Echo(), "com0", reactor)
SerialPort(Echo(), "com1", reactor)
react(main, [])