
On 2 February 2011 06:36, Jason Heeris <jason.heeris@gmail.com> wrote:
This is a bit long, sorry...
I have a PyGTK program that uses threads and pyserial's blocking methods to interact with an RS232 connected device. I'd like to throw out the threading awfulness and redo it in Twisted, if possible, but I'm a little lost.
The real protocol is a bit convoluted, but basically: - You can issue single character commands to the device that give a fixed length response, such as sending 'C' and getting an eight-digit hex string back (the program flash CRC) - You can put the device into "programming mode" (command 'P'), where it takes an arbitrary length sequence of records, verifying each record and stopping when it sees the special "end record" - The device will send back '!' to indicate an error - The device will send back '>' to indicate that it's ready for more commands
The job of the protocol class is to assemble the bytes that you receive into packets or messages. Ideally the protocol will have characters that frame a message, and it sounds like you might have this if > or ! is always sent at the end of every reply. The protocol dataReceived method will be called as data arrives at the serial port once enough data has arrived to complete a message this method calls stringReceived with the complete message. There are some protocol that might be suitable in twisted/protocols/basic.py
<snip> I'd also like to structure things so that successive calls to the DeviceProtocol object queue up, something like:
You can use a DeferredSemaphore for this. <snip> Michael