root / trunk / twisted / internet / _posixserialport.py

Revision 19815, 1.8 kB (checked in by therve, 2 years ago)

Merge fdesc-2419-2

Author: itamar
Reviewer: exarkun, therve
Fixes #2419

Improve twisted.internet.fdesc: add writeToFD, add tests, and manage EINTR
errors.

Line 
1 # Copyright (c) 2001-2007 Twisted Matrix Laboratories.
2 # See LICENSE for details.
3
4
5 """
6 Serial Port Protocol
7 """
8
9 # system imports
10 import os, errno
11
12 # dependent on pyserial ( http://pyserial.sf.net/ )
13 # only tested w/ 1.18 (5 Dec 2002)
14 import serial
15 from serial import PARITY_NONE, PARITY_EVEN, PARITY_ODD
16 from serial import STOPBITS_ONE, STOPBITS_TWO
17 from serial import FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS
18
19 from serialport import BaseSerialPort
20
21 # twisted imports
22 from twisted.internet import abstract, fdesc, main
23
24 class SerialPort(BaseSerialPort, abstract.FileDescriptor):
25     """
26     A select()able serial device, acting as a transport.
27     """
28
29     connected = 1
30
31     def __init__(self, protocol, deviceNameOrPortNumber, reactor,
32         baudrate = 9600, bytesize = EIGHTBITS, parity = PARITY_NONE,
33         stopbits = STOPBITS_ONE, timeout = 0, xonxoff = 0, rtscts = 0):
34         abstract.FileDescriptor.__init__(self, reactor)
35         self._serial = serial.Serial(deviceNameOrPortNumber, baudrate = baudrate, bytesize = bytesize, parity = parity, stopbits = stopbits, timeout = timeout, xonxoff = xonxoff, rtscts = rtscts)
36         self.reactor = reactor
37         self.flushInput()
38         self.flushOutput()
39         self.protocol = protocol
40         self.protocol.makeConnection(self)
41         self.startReading()
42
43     def fileno(self):
44         return self._serial.fd
45
46     def writeSomeData(self, data):
47         """
48         Write some data to the serial device.
49         """
50         return fdesc.writeToFD(self.fileno(), data)
51
52     def doRead(self):
53         """
54         Some data's readable from serial device.
55         """
56         return fdesc.readFromFD(self.fileno(), self.protocol.dataReceived)
57
58     def connectionLost(self, reason):
59         abstract.FileDescriptor.connectionLost(self, reason)
60         self._serial.close()
Note: See TracBrowser for help on using the browser.