On 07:42 pm, ltaylor.vo...@gmail.com wrote:

On Oct 21, 2013, at 6:57 AM, Robert Voigtländer wrote:
Thanks for the fast reply.
I don't yet understand your answer. I may have to dig more into Python.

On 21 October 2013 13:45, Itamar Turner-Trauring <ita...@itamarst.org> wrote:

<snip guidance to avoid threads>

3. A reasonable place for the write() might be in your Protocol's connectionMade method.

The Protocol has access to a .transport attribute, which is the SerialPort() instance.

Therefore, you can write to the serial port (the transport) from within your protocol:


class Echo(LineReceiver):

   def connectionMade(self):
       self.transport.write('HELLO\n')

   def lineReceived(self, line):
       self.transport.write(line + '\n')

Additionally, since the serial transport tries hard to look just like a tcp transport or an ssl transport, the generic protocol code in LineReceiver.sendLine will work just fine with it. So in addition to using the `lineReceived` callback to handle lines that arrive you can use `sendLine` to write lines out to the serial port:

   class Echo(LineReceiver):
       delimiter = b"\n"

       def connectionMade(self):
           self.sendLine(b"HELLO")

       def lineReceived(self, line):
           self.sendLine(line)

This is part of the power of the transport/protocol separation: reusable protocol logic. :)

Jean-Paul

The connectionMade method will be called once the transport (the SerialPort instance) is ready (the serial port is open), making it an appropriate place to kick off an init sequence or similar.


Lucas

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to