blob: 90444df612e6e3fee06c6cd9154879c8ab7ed6d6 [file] [log] [blame]
cliechtic1c37602009-07-21 01:34:57 +00001==============
2 pySerial API
3==============
4
5.. module:: serial
6
7Classes
8=======
9
cliechti7aed8332009-08-05 14:19:31 +000010Native ports
11------------
12
cliechtic1c37602009-07-21 01:34:57 +000013.. class:: Serial
14
Chris Liechti518b0d32015-08-30 02:20:39 +020015 .. method:: __init__(port=None, baudrate=9600, bytesize=EIGHTBITS, parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=None, xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, inter_byte_timeout=None)
cliechtic1c37602009-07-21 01:34:57 +000016
17 :param port:
Chris Liechti518b0d32015-08-30 02:20:39 +020018 Device name or :const:`None`.
cliechtic1c37602009-07-21 01:34:57 +000019
Chris Liechtice621882015-08-06 19:29:31 +020020 :param int baudrate:
cliechtic1c37602009-07-21 01:34:57 +000021 Baud rate such as 9600 or 115200 etc.
22
23 :param bytesize:
cliechti4a567a02009-07-27 22:09:31 +000024 Number of data bits. Possible values:
25 :const:`FIVEBITS`, :const:`SIXBITS`, :const:`SEVENBITS`,
26 :const:`EIGHTBITS`
cliechtic1c37602009-07-21 01:34:57 +000027
28 :param parity:
cliechti4a567a02009-07-27 22:09:31 +000029 Enable parity checking. Possible values:
cliechti87686242009-08-18 00:58:31 +000030 :const:`PARITY_NONE`, :const:`PARITY_EVEN`, :const:`PARITY_ODD`
31 :const:`PARITY_MARK`, :const:`PARITY_SPACE`
cliechtic1c37602009-07-21 01:34:57 +000032
33 :param stopbits:
cliechti4a567a02009-07-27 22:09:31 +000034 Number of stop bits. Possible values:
cliechti87686242009-08-18 00:58:31 +000035 :const:`STOPBITS_ONE`, :const:`STOPBITS_ONE_POINT_FIVE`,
cliechti4a567a02009-07-27 22:09:31 +000036 :const:`STOPBITS_TWO`
cliechtic1c37602009-07-21 01:34:57 +000037
Chris Liechtice621882015-08-06 19:29:31 +020038 :param float timeout:
cliechtic1c37602009-07-21 01:34:57 +000039 Set a read timeout value.
40
Chris Liechtice621882015-08-06 19:29:31 +020041 :param bool xonxoff:
cliechtic1c37602009-07-21 01:34:57 +000042 Enable software flow control.
43
Chris Liechtice621882015-08-06 19:29:31 +020044 :param bool rtscts:
cliechtic1c37602009-07-21 01:34:57 +000045 Enable hardware (RTS/CTS) flow control.
46
Chris Liechtice621882015-08-06 19:29:31 +020047 :param bool dsrdtr:
cliechti07709e42010-05-21 00:30:09 +000048 Enable hardware (DSR/DTR) flow control.
49
Chris Liechti589c92a2015-09-04 23:04:34 +020050 :param float write_timeout:
cliechti07709e42010-05-21 00:30:09 +000051 Set a write timeout value.
52
Chris Liechti589c92a2015-09-04 23:04:34 +020053 :param float inter_byte_timeout:
cliechti4a567a02009-07-27 22:09:31 +000054 Inter-character timeout, :const:`None` to disable (default).
cliechtic1c37602009-07-21 01:34:57 +000055
cliechti6066f842009-07-24 00:05:45 +000056 :exception ValueError:
cliechti4a567a02009-07-27 22:09:31 +000057 Will be raised when parameter are out of range, e.g. baud rate, data bits.
cliechti6066f842009-07-24 00:05:45 +000058
59 :exception SerialException:
60 In case the device can not be found or can not be configured.
61
62
cliechti4a567a02009-07-27 22:09:31 +000063 The port is immediately opened on object creation, when a *port* is
64 given. It is not opened when *port* is :const:`None` and a successive call
Chris Liechti32ccf2e2015-12-19 23:42:40 +010065 to :meth:`open` is required.
cliechti4a567a02009-07-27 22:09:31 +000066
Chris Liechti518b0d32015-08-30 02:20:39 +020067 *port* is a device name: depending on operating system. e.g.
68 ``/dev/ttyUSB0`` on GNU/Linux or ``COM3`` on Windows.
cliechtic1c37602009-07-21 01:34:57 +000069
cliechti25375b52010-07-21 23:27:13 +000070 The parameter *baudrate* can be one of the standard values:
71 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
72 9600, 19200, 38400, 57600, 115200.
cliechti28b8fd02011-12-28 21:39:42 +000073 These are well supported on all platforms.
74
75 Standard values above 115200, such as: 230400, 460800, 500000, 576000,
76 921600, 1000000, 1152000, 1500000, 2000000, 2500000, 3000000, 3500000,
77 4000000 also work on many platforms and devices.
cliechti25375b52010-07-21 23:27:13 +000078
cliechti06281be2011-08-25 23:08:29 +000079 Non-standard values are also supported on some platforms (GNU/Linux, MAC
cliechti25375b52010-07-21 23:27:13 +000080 OSX >= Tiger, Windows). Though, even on these platforms some serial
81 ports may reject non-standard values.
82
Chris Liechti3e0dcc72015-12-18 23:23:26 +010083 Possible values for the parameter *timeout* which controls the behavior
84 of :meth:`read`:
cliechti5134aab2009-07-21 19:47:59 +000085
Chris Liechti3e0dcc72015-12-18 23:23:26 +010086 - ``timeout = None``: wait forever / until requested number of bytes
87 are received
88 - ``timeout = 0``: non-blocking mode, return immediately in any case,
89 returning zero or more, up to the requested number of bytes
cliechtif81362e2009-07-25 03:44:33 +000090 - ``timeout = x``: set timeout to ``x`` seconds (float allowed)
Chris Liechti3e0dcc72015-12-18 23:23:26 +010091 returns immediately when the requested number of bytes are available,
92 otherwise wait until the timeout expires and return all bytes that
93 were received until then.
cliechtic1c37602009-07-21 01:34:57 +000094
Chris Liechti3e0dcc72015-12-18 23:23:26 +010095 :meth:`write` is blocking by default, unless *write_timeout* is set.
96 For possible values refer to the list for *timeout* above.
cliechti07709e42010-05-21 00:30:09 +000097
cliechti8611bf42009-08-03 00:34:03 +000098 Note that enabling both flow control methods (*xonxoff* and *rtscts*)
99 together may not be supported. It is common to use one of the methods
100 at once, not both.
cliechtic1c37602009-07-21 01:34:57 +0000101
cliechti07709e42010-05-21 00:30:09 +0000102 *dsrdtr* is not supported by all platforms (silently ignored). Setting
103 it to ``None`` has the effect that its state follows *rtscts*.
104
cliechti25375b52010-07-21 23:27:13 +0000105 Also consider using the function :func:`serial_for_url` instead of
106 creating Serial instances directly.
107
cliechti5c72e4d2010-07-21 14:04:54 +0000108 .. versionchanged:: 2.5
cliechti06281be2011-08-25 23:08:29 +0000109 *dsrdtr* now defaults to ``False`` (instead of *None*)
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100110 .. versionchanged:: 3.0 numbers as *port* argument are no longer supported
cliechti5c72e4d2010-07-21 14:04:54 +0000111
cliechtic1c37602009-07-21 01:34:57 +0000112 .. method:: open()
113
Chris Liechtiaefbf032016-09-30 23:57:22 +0200114 Open port. The state of :attr:`rts` and :attr:`dtr` is applied.
115
Chris Liechti5e953c32016-09-28 18:18:25 +0200116 .. note::
Chris Liechtiaefbf032016-09-30 23:57:22 +0200117
Chris Liechti5e953c32016-09-28 18:18:25 +0200118 Some OS and/or drivers may activate RTS and or DTR automatically,
119 as soon as the port is opened. There may be a glitch on RTS/DTR
120 when :attr:`rts`` or :attr:`dtr` are set differently from their
121 default value (``True`` / active).
cliechtic1c37602009-07-21 01:34:57 +0000122
Chris Liechtiaefbf032016-09-30 23:57:22 +0200123 .. note::
124
125 For compatibility reasons, no error is reported when applying
126 :attr:`rts` or :attr:`dtr` fails on POSIX due to EINVAL (22) or
127 ENOTTY (25).
128
cliechtic1c37602009-07-21 01:34:57 +0000129 .. method:: close()
130
131 Close port immediately.
132
cliechti25375b52010-07-21 23:27:13 +0000133 .. method:: __del__()
134
135 Destructor, close port when serial port instance is freed.
136
cliechtic1c37602009-07-21 01:34:57 +0000137
Chris Liechti256ea212015-08-29 23:57:00 +0200138 The following methods may raise :exc:`SerialException` when applied to a closed
cliechti4a567a02009-07-27 22:09:31 +0000139 port.
cliechtic1c37602009-07-21 01:34:57 +0000140
141 .. method:: read(size=1)
142
cliechtibb5c3c52009-07-23 02:29:27 +0000143 :param size: Number of bytes to read.
144 :return: Bytes read from the port.
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100145 :rtype: bytes
cliechtic1c37602009-07-21 01:34:57 +0000146
cliechti4a567a02009-07-27 22:09:31 +0000147 Read *size* bytes from the serial port. If a timeout is set it may
cliechtibb5c3c52009-07-23 02:29:27 +0000148 return less characters as requested. With no timeout it will block
149 until the requested number of bytes is read.
cliechtic1c37602009-07-21 01:34:57 +0000150
cliechti4a567a02009-07-27 22:09:31 +0000151 .. versionchanged:: 2.5
152 Returns an instance of :class:`bytes` when available (Python 2.6
cliechti8611bf42009-08-03 00:34:03 +0000153 and newer) and :class:`str` otherwise.
cliechti4a567a02009-07-27 22:09:31 +0000154
cliechtibb5c3c52009-07-23 02:29:27 +0000155 .. method:: write(data)
156
157 :param data: Data to send.
cliechti4a567a02009-07-27 22:09:31 +0000158 :return: Number of bytes written.
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100159 :rtype: int
cliechti6066f842009-07-24 00:05:45 +0000160 :exception SerialTimeoutException:
161 In case a write timeout is configured for the port and the time is
162 exceeded.
163
Chris Liechti9ad044a2015-12-17 19:43:59 +0100164 Write the bytes *data* to the port. This should be of type ``bytes``
165 (or compatible such as ``bytearray`` or ``memoryview``). Unicode
166 strings must be encoded (e.g. ``'hello'.encode('utf-8'``).
cliechtic1c37602009-07-21 01:34:57 +0000167
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100168 .. versionchanged:: 2.5
cliechtiddd78132009-07-28 01:13:28 +0000169 Accepts instances of :class:`bytes` and :class:`bytearray` when
cliechti8611bf42009-08-03 00:34:03 +0000170 available (Python 2.6 and newer) and :class:`str` otherwise.
cliechti4a567a02009-07-27 22:09:31 +0000171
cliechti9a1c6952009-10-20 22:18:28 +0000172 .. versionchanged:: 2.5
173 Write returned ``None`` in previous versions.
174
Chris Liechti518b0d32015-08-30 02:20:39 +0200175 .. method:: flush()
176
177 Flush of file like objects. In this case, wait until all data is
178 written.
179
Chris Liechti256ea212015-08-29 23:57:00 +0200180 .. attribute:: in_waiting
cliechti4a567a02009-07-27 22:09:31 +0000181
Chris Liechti256ea212015-08-29 23:57:00 +0200182 :getter: Get the number of bytes in the input buffer
183 :type: int
184
185 Return the number of bytes in the receive buffer.
cliechti4a567a02009-07-27 22:09:31 +0000186
Chris Liechti518b0d32015-08-30 02:20:39 +0200187 .. versionchanged:: 3.0 changed to property from ``inWaiting()``
cliechtic1c37602009-07-21 01:34:57 +0000188
Chris Liechti518b0d32015-08-30 02:20:39 +0200189 .. attribute:: out_waiting
190
191 :getter: Get the number of bytes in the output buffer
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100192 :type: int
Chris Liechti518b0d32015-08-30 02:20:39 +0200193 :platform: Posix
194 :platform: Windows
195
196 Return the number of bytes in the output buffer.
197
198 .. versionchanged:: 2.7 (Posix support added)
199 .. versionchanged:: 3.0 changed to property from ``outWaiting()``
cliechtic1c37602009-07-21 01:34:57 +0000200
Chris Liechti256ea212015-08-29 23:57:00 +0200201 .. method:: reset_input_buffer()
cliechtic1c37602009-07-21 01:34:57 +0000202
203 Flush input buffer, discarding all it's contents.
204
Chris Liechti518b0d32015-08-30 02:20:39 +0200205 .. versionchanged:: 3.0 renamed from ``flushInput()``
206
Chris Liechti256ea212015-08-29 23:57:00 +0200207 .. method:: reset_output_buffer()
cliechtic1c37602009-07-21 01:34:57 +0000208
209 Clear output buffer, aborting the current output and
210 discarding all that is in the buffer.
211
Chris Liechti48e40e92016-05-24 00:09:12 +0200212 Note, for some USB serial adapters, this may only flush the buffer of
213 the OS and not all the data that may be present in the USB part.
214
Chris Liechti518b0d32015-08-30 02:20:39 +0200215 .. versionchanged:: 3.0 renamed from ``flushOutput()``
216
Chris Liechti256ea212015-08-29 23:57:00 +0200217 .. method:: send_break(duration=0.25)
cliechtic1c37602009-07-21 01:34:57 +0000218
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100219 :param float duration: Time to activate the BREAK condition.
cliechtibb5c3c52009-07-23 02:29:27 +0000220
cliechtic1c37602009-07-21 01:34:57 +0000221 Send break condition. Timed, returns to idle state after given
222 duration.
223
cliechtic1c37602009-07-21 01:34:57 +0000224
Chris Liechti256ea212015-08-29 23:57:00 +0200225 .. attribute:: break_condition
cliechtibb5c3c52009-07-23 02:29:27 +0000226
Chris Liechti256ea212015-08-29 23:57:00 +0200227 :getter: Get the current BREAK state
228 :setter: Control the BREAK state
229 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000230
Chris Liechti256ea212015-08-29 23:57:00 +0200231 When set to ``True`` activate BREAK condition, else disable.
232 Controls TXD. When active, no transmitting is possible.
cliechtic1c37602009-07-21 01:34:57 +0000233
Chris Liechti256ea212015-08-29 23:57:00 +0200234 .. attribute:: rts
cliechtibb5c3c52009-07-23 02:29:27 +0000235
Chris Liechti256ea212015-08-29 23:57:00 +0200236 :setter: Set the state of the RTS line
237 :getter: Return the state of the RTS line
238 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000239
Chris Liechti256ea212015-08-29 23:57:00 +0200240 Set RTS line to specified logic level. It is possible to assign this
241 value before opening the serial port, then the value is applied uppon
Chris Liechti5e953c32016-09-28 18:18:25 +0200242 :meth:`open` (with restrictions, see :meth:`open`).
cliechtic1c37602009-07-21 01:34:57 +0000243
Chris Liechti256ea212015-08-29 23:57:00 +0200244 .. attribute:: dtr
cliechtibb5c3c52009-07-23 02:29:27 +0000245
Chris Liechti256ea212015-08-29 23:57:00 +0200246 :setter: Set the state of the DTR line
247 :getter: Return the state of the DTR line
248 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000249
Chris Liechti256ea212015-08-29 23:57:00 +0200250 Set DTR line to specified logic level. It is possible to assign this
251 value before opening the serial port, then the value is applied uppon
Chris Liechti5e953c32016-09-28 18:18:25 +0200252 :meth:`open` (with restrictions, see :meth:`open`).
cliechtic1c37602009-07-21 01:34:57 +0000253
Chris Liechti518b0d32015-08-30 02:20:39 +0200254 Read-only attributes:
255
256 .. attribute:: name
257
258 :getter: Device name.
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100259 :type: str
Chris Liechti518b0d32015-08-30 02:20:39 +0200260
261 .. versionadded:: 2.5
262
Chris Liechti256ea212015-08-29 23:57:00 +0200263 .. attribute:: cts
264
265 :getter: Get the state of the CTS line
266 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000267
cliechtic1c37602009-07-21 01:34:57 +0000268 Return the state of the CTS line.
269
Chris Liechti256ea212015-08-29 23:57:00 +0200270 .. attribute:: dsr
cliechtic1c37602009-07-21 01:34:57 +0000271
Chris Liechti256ea212015-08-29 23:57:00 +0200272 :getter: Get the state of the DSR line
273 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000274
cliechtic1c37602009-07-21 01:34:57 +0000275 Return the state of the DSR line.
276
Chris Liechti256ea212015-08-29 23:57:00 +0200277 .. attribute:: ri
cliechtic1c37602009-07-21 01:34:57 +0000278
Chris Liechti256ea212015-08-29 23:57:00 +0200279 :getter: Get the state of the RI line
280 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000281
cliechtic1c37602009-07-21 01:34:57 +0000282 Return the state of the RI line.
283
Chris Liechti256ea212015-08-29 23:57:00 +0200284 .. attribute:: cd
cliechtic1c37602009-07-21 01:34:57 +0000285
Chris Liechti256ea212015-08-29 23:57:00 +0200286 :getter: Get the state of the CD line
287 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000288
cliechtic1c37602009-07-21 01:34:57 +0000289 Return the state of the CD line
290
Matthew Westfa58a972016-07-08 14:27:04 -0700291 .. attribute:: is_open
Chris Liechtiaefbf032016-09-30 23:57:22 +0200292
Chris Liechti5e953c32016-09-28 18:18:25 +0200293 :getter: Get the state of the serial port, whether it's open.
294 :type: bool
cliechtif81362e2009-07-25 03:44:33 +0000295
cliechti25375b52010-07-21 23:27:13 +0000296 New values can be assigned to the following attributes (properties), the
297 port will be reconfigured, even if it's opened at that time:
cliechtic1c37602009-07-21 01:34:57 +0000298
cliechtiedcdbe42009-07-22 00:48:34 +0000299
300 .. attribute:: port
301
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100302 :type: str
303
cliechtiedcdbe42009-07-22 00:48:34 +0000304 Read or write port. When the port is already open, it will be closed
305 and reopened with the new setting.
306
307 .. attribute:: baudrate
308
Chris Liechti518b0d32015-08-30 02:20:39 +0200309 :getter: Get current baud rate
310 :setter: Set new baud rate
311 :type: int
312
cliechti6066f842009-07-24 00:05:45 +0000313 Read or write current baud rate setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000314
315 .. attribute:: bytesize
316
Chris Liechti518b0d32015-08-30 02:20:39 +0200317 :getter: Get current byte size
318 :setter: Set new byte size. Possible values:
319 :const:`FIVEBITS`, :const:`SIXBITS`, :const:`SEVENBITS`,
320 :const:`EIGHTBITS`
321 :type: int
322
cliechti6066f842009-07-24 00:05:45 +0000323 Read or write current data byte size setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000324
325 .. attribute:: parity
326
Chris Liechti518b0d32015-08-30 02:20:39 +0200327 :getter: Get current parity setting
328 :setter: Set new parity mode. Possible values:
329 :const:`PARITY_NONE`, :const:`PARITY_EVEN`, :const:`PARITY_ODD`
330 :const:`PARITY_MARK`, :const:`PARITY_SPACE`
331
cliechti6066f842009-07-24 00:05:45 +0000332 Read or write current parity setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000333
334 .. attribute:: stopbits
335
Chris Liechti518b0d32015-08-30 02:20:39 +0200336 :getter: Get current stop bit setting
337 :setter: Set new stop bit setting. Possible values:
338 :const:`STOPBITS_ONE`, :const:`STOPBITS_ONE_POINT_FIVE`,
339 :const:`STOPBITS_TWO`
340
cliechti6066f842009-07-24 00:05:45 +0000341 Read or write current stop bit width setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000342
343 .. attribute:: timeout
344
Chris Liechti518b0d32015-08-30 02:20:39 +0200345 :getter: Get current read timeout setting
346 :setter: Set read timeout
347 :type: float (seconds)
348
cliechti6066f842009-07-24 00:05:45 +0000349 Read or write current read timeout setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000350
Chris Liechti518b0d32015-08-30 02:20:39 +0200351 .. attribute:: write_timeout
352
353 :getter: Get current write timeout setting
354 :setter: Set write timeout
355 :type: float (seconds)
cliechtiedcdbe42009-07-22 00:48:34 +0000356
cliechti6066f842009-07-24 00:05:45 +0000357 Read or write current write timeout setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000358
Chris Liechti518b0d32015-08-30 02:20:39 +0200359 .. versionchanged:: 3.0 renamed from ``writeTimeout``
360
361 .. attribute:: inter_byte_timeout
362
363 :getter: Get current inter byte timeout setting
364 :setter: Disable (``None``) or enable the inter byte timeout
365 :type: float or None
366
367 Read or write current inter byte timeout setting.
368
369 .. versionchanged:: 3.0 renamed from ``interCharTimeout``
370
cliechtiedcdbe42009-07-22 00:48:34 +0000371 .. attribute:: xonxoff
372
Chris Liechti518b0d32015-08-30 02:20:39 +0200373 :getter: Get current software flow control setting
374 :setter: Enable or disable software flow control
375 :type: bool
376
cliechti6066f842009-07-24 00:05:45 +0000377 Read or write current software flow control rate setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000378
379 .. attribute:: rtscts
380
Chris Liechti518b0d32015-08-30 02:20:39 +0200381 :getter: Get current hardware flow control setting
382 :setter: Enable or disable hardware flow control
383 :type: bool
384
cliechti6066f842009-07-24 00:05:45 +0000385 Read or write current hardware flow control setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000386
387 .. attribute:: dsrdtr
388
Chris Liechti518b0d32015-08-30 02:20:39 +0200389 :getter: Get current hardware flow control setting
390 :setter: Enable or disable hardware flow control
391 :type: bool
392
cliechti6066f842009-07-24 00:05:45 +0000393 Read or write current hardware flow control setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000394
Chris Liechtice621882015-08-06 19:29:31 +0200395 .. attribute:: rs485_mode
396
Chris Liechti518b0d32015-08-30 02:20:39 +0200397 :getter: Get the current RS485 settings
398 :setter: Disable (``None``) or enable the RS485 settings
399 :type: :class:`rs485.RS485Settings` or ``None``
400 :platform: Posix (Linux, limited set of hardware)
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100401 :platform: Windows (only RTS on TX possible)
Chris Liechtice621882015-08-06 19:29:31 +0200402
403 Attribute to configure RS485 support. When set to an instance of
404 :class:`rs485.RS485Settings` and supported by OS, RTS will be active
405 when data is sent and inactive otherwise (for reception). The
406 :class:`rs485.RS485Settings` class provides additional settings
407 supported on some platforms.
408
409 .. versionadded:: 3.0
410
411
cliechtiedcdbe42009-07-22 00:48:34 +0000412 The following constants are also provided:
413
414 .. attribute:: BAUDRATES
415
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100416 A list of valid baud rates. The list may be incomplete, such that higher
417 and/or intermediate baud rates may also be supported by the device
418 (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000419
420 .. attribute:: BYTESIZES
421
cliechti25375b52010-07-21 23:27:13 +0000422 A list of valid byte sizes for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000423
424 .. attribute:: PARITIES
425
cliechti25375b52010-07-21 23:27:13 +0000426 A list of valid parities for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000427
428 .. attribute:: STOPBITS
429
cliechti25375b52010-07-21 23:27:13 +0000430 A list of valid stop bit widths for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000431
cliechti4a567a02009-07-27 22:09:31 +0000432
cliechti25375b52010-07-21 23:27:13 +0000433 The following methods are for compatibility with the :mod:`io` library.
cliechti4a567a02009-07-27 22:09:31 +0000434
435 .. method:: readable()
436
437 :return: True
cliechtif4566342009-08-04 00:07:19 +0000438
cliechti4a567a02009-07-27 22:09:31 +0000439 .. versionadded:: 2.5
440
441 .. method:: writable()
442
443 :return: True
cliechtif4566342009-08-04 00:07:19 +0000444
cliechti4a567a02009-07-27 22:09:31 +0000445 .. versionadded:: 2.5
446
447 .. method:: seekable()
448
449 :return: False
cliechtif4566342009-08-04 00:07:19 +0000450
cliechti4a567a02009-07-27 22:09:31 +0000451 .. versionadded:: 2.5
452
453 .. method:: readinto(b)
454
cliechti8611bf42009-08-03 00:34:03 +0000455 :param b: bytearray or array instance
cliechti4a567a02009-07-27 22:09:31 +0000456 :return: Number of byte read
457
cliechtid7e7ce22009-08-03 02:01:07 +0000458 Read up to len(b) bytes into :class:`bytearray` *b* and return the
459 number of bytes read.
cliechti4a567a02009-07-27 22:09:31 +0000460
461 .. versionadded:: 2.5
462
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100463 The port settings can be read and written as dictionary. The following
464 keys are supported: ``write_timeout``, ``inter_byte_timeout``,
465 ``dsrdtr``, ``baudrate``, ``timeout``, ``parity``, ``bytesize``,
466 ``rtscts``, ``stopbits``, ``xonxoff``
cliechti25375b52010-07-21 23:27:13 +0000467
Chris Liechti256ea212015-08-29 23:57:00 +0200468 .. method:: get_settings()
cliechti4065dce2009-08-10 00:55:46 +0000469
470 :return: a dictionary with current port settings.
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100471 :rtype: dict
cliechti4065dce2009-08-10 00:55:46 +0000472
473 Get a dictionary with port settings. This is useful to backup the
474 current settings so that a later point in time they can be restored
Chris Liechti518b0d32015-08-30 02:20:39 +0200475 using :meth:`apply_settings`.
cliechti4065dce2009-08-10 00:55:46 +0000476
Chris Liechti19688bf2016-05-06 23:48:36 +0200477 Note that the state of control lines (RTS/DTR) are not part of the
478 settings.
cliechti4065dce2009-08-10 00:55:46 +0000479
480 .. versionadded:: 2.5
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100481 .. versionchanged:: 3.0 renamed from ``getSettingsDict``
cliechti4065dce2009-08-10 00:55:46 +0000482
Chris Liechti256ea212015-08-29 23:57:00 +0200483 .. method:: apply_settings(d)
cliechti4065dce2009-08-10 00:55:46 +0000484
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100485 :param dict d: a dictionary with port settings.
cliechti4065dce2009-08-10 00:55:46 +0000486
Chris Liechti518b0d32015-08-30 02:20:39 +0200487 Applies a dictionary that was created by :meth:`get_settings`. Only
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100488 changes are applied and when a key is missing, it means that the
489 setting stays unchanged.
cliechti4065dce2009-08-10 00:55:46 +0000490
491 Note that control lines (RTS/DTR) are not changed.
492
493 .. versionadded:: 2.5
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100494 .. versionchanged:: 3.0 renamed from ``applySettingsDict``
cliechti4065dce2009-08-10 00:55:46 +0000495
Chris Liechtic9f89962016-08-12 21:04:37 +0200496
Chris Liechti9e205742016-10-31 22:37:13 +0100497 .. _context-manager:
498
Chris Liechtic9f89962016-08-12 21:04:37 +0200499 This class can be used as context manager. The serial port is closed when
500 the context is left.
501
502 .. method:: __enter__()
503
504 :returns: Serial instance
505
506 Returns the instance that was used in the ``with`` statement.
507
508 Example:
509
510 >>> with serial.serial_for_url(port) as s:
511 ... s.write(b'hello')
512
513 Here no port argument is given, so it is not opened automatically:
514
515 >>> with serial.Serial() as s:
516 ... s.port = ...
517 ... s.open()
518 ... s.write(b'hello')
519
520
521 .. method:: __exit__(exc_type, exc_val, exc_tb)
522
523 Closes serial port.
524
525
cliechti25375b52010-07-21 23:27:13 +0000526 Platform specific methods.
527
cliechtic648da92011-12-29 01:17:51 +0000528 .. warning:: Programs using the following methods and attributes are not
529 portable to other platforms!
cliechti25375b52010-07-21 23:27:13 +0000530
531 .. method:: nonblocking()
532
Chris Liechtice621882015-08-06 19:29:31 +0200533 :platform: Posix
cliechti25375b52010-07-21 23:27:13 +0000534
Chris Liechti59848422016-06-04 22:28:14 +0200535 .. deprecated:: 3.2
536 The serial port is already opened in this mode. This method is not
537 needed and going away.
538
cliechti25375b52010-07-21 23:27:13 +0000539
540 .. method:: fileno()
541
Chris Liechtice621882015-08-06 19:29:31 +0200542 :platform: Posix
cliechti25375b52010-07-21 23:27:13 +0000543 :return: File descriptor.
544
545 Return file descriptor number for the port that is opened by this object.
546 It is useful when serial ports are used with :mod:`select`.
547
Chris Liechti518b0d32015-08-30 02:20:39 +0200548 .. method:: set_input_flow_control(enable)
cliechti25375b52010-07-21 23:27:13 +0000549
cliechti2f0f8a32011-12-28 22:10:00 +0000550 :platform: Posix
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100551 :param bool enable: Set flow control state.
cliechti25375b52010-07-21 23:27:13 +0000552
cliechti2f0f8a32011-12-28 22:10:00 +0000553 Manually control flow - when software flow control is enabled.
554
555 This will send XON (true) and XOFF (false) to the other device.
556
Chris Liechti518b0d32015-08-30 02:20:39 +0200557 .. versionadded:: 2.7 (Posix support added)
558 .. versionchanged:: 3.0 renamed from ``flowControlOut``
cliechti2f0f8a32011-12-28 22:10:00 +0000559
Chris Liechti518b0d32015-08-30 02:20:39 +0200560 .. method:: set_output_flow_control(enable)
cliechti2f0f8a32011-12-28 22:10:00 +0000561
Chris Liechti518b0d32015-08-30 02:20:39 +0200562 :platform: Posix (HW and SW flow control)
563 :platform: Windows (SW flow control only)
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100564 :param bool enable: Set flow control state.
cliechti2f0f8a32011-12-28 22:10:00 +0000565
566 Manually control flow of outgoing data - when hardware or software flow
567 control is enabled.
568
569 Sending will be suspended when called with ``False`` and enabled when
570 called with ``True``.
571
Chris Liechti518b0d32015-08-30 02:20:39 +0200572 .. versionchanged:: 2.7 (renamed on Posix, function was called ``flowControl``)
573 .. versionchanged:: 3.0 renamed from ``setXON``
Chris Liechti256ea212015-08-29 23:57:00 +0200574
Chris Liechti19688bf2016-05-06 23:48:36 +0200575 .. method:: cancel_read()
Chris Liechti256ea212015-08-29 23:57:00 +0200576
Chris Liechti9d893052016-05-18 22:03:29 +0200577 :platform: Posix
Chris Liechti19688bf2016-05-06 23:48:36 +0200578 :platform: Windows
579
Chris Liechti9d893052016-05-18 22:03:29 +0200580 Cancel a pending read operation from an other thread. A blocking
581 :meth:`read` call is aborted immediately. :meth:`read` will not report
582 any error but return all data received up to that point (similar to a
583 timeout).
584
585 On Posix a call to `cancel_read()` may cancel a future :meth:`read` call.
Chris Liechti19688bf2016-05-06 23:48:36 +0200586
587 .. versionadded:: 3.1
588
589 .. method:: cancel_write()
590
Chris Liechti9d893052016-05-18 22:03:29 +0200591 :platform: Posix
Chris Liechti19688bf2016-05-06 23:48:36 +0200592 :platform: Windows
593
Chris Liechti9d893052016-05-18 22:03:29 +0200594 Cancel a pending write operation from an other thread. The
595 :meth:`write` method will return immediately (no error indicated).
596 However the OS may still be sending from the buffer, a separate call to
597 :meth:`reset_output_buffer` may be needed.
598
599 On Posix a call to `cancel_write()` may cancel a future :meth:`write` call.
Chris Liechti19688bf2016-05-06 23:48:36 +0200600
601 .. versionadded:: 3.1
Chris Liechti518b0d32015-08-30 02:20:39 +0200602
Chris Liechti9a99cb22015-08-30 22:16:50 +0200603 .. note:: The following members are deprecated and will be removed in a
Chris Liechti518b0d32015-08-30 02:20:39 +0200604 future release.
Chris Liechti256ea212015-08-29 23:57:00 +0200605
606 .. attribute:: portstr
607
Chris Liechti518b0d32015-08-30 02:20:39 +0200608 .. deprecated:: 2.5 use :attr:`name` instead
Chris Liechti256ea212015-08-29 23:57:00 +0200609
610 .. method:: inWaiting()
611
Chris Liechti518b0d32015-08-30 02:20:39 +0200612 .. deprecated:: 3.0 see :attr:`in_waiting`
613
Matthew Westfa58a972016-07-08 14:27:04 -0700614 .. method:: isOpen()
615
616 .. deprecated:: 3.0 see :attr:`is_open`
617
Chris Liechti518b0d32015-08-30 02:20:39 +0200618 .. attribute:: writeTimeout
619
620 .. deprecated:: 3.0 see :attr:`write_timeout`
Chris Liechti256ea212015-08-29 23:57:00 +0200621
622 .. attribute:: interCharTimeout
623
Chris Liechti518b0d32015-08-30 02:20:39 +0200624 .. deprecated:: 3.0 see :attr:`inter_byte_timeout`
Chris Liechti256ea212015-08-29 23:57:00 +0200625
626 .. method:: sendBreak(duration=0.25)
627
Chris Liechti518b0d32015-08-30 02:20:39 +0200628 .. deprecated:: 3.0 see :meth:`send_break`
Chris Liechti256ea212015-08-29 23:57:00 +0200629
630 .. method:: flushInput()
631
Chris Liechti518b0d32015-08-30 02:20:39 +0200632 .. deprecated:: 3.0 see :meth:`reset_input_buffer`
Chris Liechti256ea212015-08-29 23:57:00 +0200633
634 .. method:: flushOutput()
635
Chris Liechti518b0d32015-08-30 02:20:39 +0200636 .. deprecated:: 3.0 see :meth:`reset_output_buffer`
Chris Liechti256ea212015-08-29 23:57:00 +0200637
638 .. method:: setBreak(level=True)
639
Chris Liechti518b0d32015-08-30 02:20:39 +0200640 .. deprecated:: 3.0 see :attr:`break_condition`
Chris Liechti256ea212015-08-29 23:57:00 +0200641
642 .. method:: setRTS(level=True)
643
Chris Liechti518b0d32015-08-30 02:20:39 +0200644 .. deprecated:: 3.0 see :attr:`rts`
Chris Liechti256ea212015-08-29 23:57:00 +0200645
646 .. method:: setDTR(level=True)
647
Chris Liechti518b0d32015-08-30 02:20:39 +0200648 .. deprecated:: 3.0 see :attr:`dtr`
Chris Liechti256ea212015-08-29 23:57:00 +0200649
650 .. method:: getCTS()
651
Chris Liechti518b0d32015-08-30 02:20:39 +0200652 .. deprecated:: 3.0 see :attr:`cts`
Chris Liechti256ea212015-08-29 23:57:00 +0200653
654 .. method:: getDSR()
655
Chris Liechti518b0d32015-08-30 02:20:39 +0200656 .. deprecated:: 3.0 see :attr:`dsr`
Chris Liechti256ea212015-08-29 23:57:00 +0200657
658 .. method:: getRI()
659
Chris Liechti518b0d32015-08-30 02:20:39 +0200660 .. deprecated:: 3.0 see :attr:`ri`
Chris Liechti256ea212015-08-29 23:57:00 +0200661
662 .. method:: getCD()
663
Chris Liechti518b0d32015-08-30 02:20:39 +0200664 .. deprecated:: 3.0 see :attr:`cd`
Chris Liechti256ea212015-08-29 23:57:00 +0200665
666 .. method:: getSettingsDict()
667
Chris Liechti518b0d32015-08-30 02:20:39 +0200668 .. deprecated:: 3.0 see :meth:`get_settings`
Chris Liechti256ea212015-08-29 23:57:00 +0200669
670 .. method:: applySettingsDict(d)
671
Chris Liechti518b0d32015-08-30 02:20:39 +0200672 .. deprecated:: 3.0 see :meth:`apply_settings`
Chris Liechti256ea212015-08-29 23:57:00 +0200673
674 .. method:: outWaiting()
675
Chris Liechti518b0d32015-08-30 02:20:39 +0200676 .. deprecated:: 3.0 see :attr:`out_waiting`
Chris Liechti256ea212015-08-29 23:57:00 +0200677
678 .. method:: setXON(level=True)
679
Chris Liechti518b0d32015-08-30 02:20:39 +0200680 .. deprecated:: 3.0 see :meth:`set_output_flow_control`
Chris Liechti256ea212015-08-29 23:57:00 +0200681
682 .. method:: flowControlOut(enable)
683
Chris Liechti518b0d32015-08-30 02:20:39 +0200684 .. deprecated:: 3.0 see :meth:`set_input_flow_control`
cliechtif4566342009-08-04 00:07:19 +0000685
cliechtic648da92011-12-29 01:17:51 +0000686 .. attribute:: rtsToggle
687
688 :platform: Windows
689
690 Attribute to configure RTS toggle control setting. When enabled and
691 supported by OS, RTS will be active when data is available and inactive
692 if no data is available.
693
694 .. versionadded:: 2.6
Chris Liechti518b0d32015-08-30 02:20:39 +0200695 .. versionchanged:: 3.0 (removed, see :attr:`rs485_mode` instead)
cliechtic648da92011-12-29 01:17:51 +0000696
697
cliechtic56e41d2011-08-25 22:06:38 +0000698Implementation detail: some attributes and functions are provided by the
699class :class:`SerialBase` and some by the platform specific class and
700others by the base class mentioned above.
cliechti25375b52010-07-21 23:27:13 +0000701
Chris Liechtice621882015-08-06 19:29:31 +0200702RS485 support
703-------------
704The :class:`Serial` class has a :attr:`Serial.rs485_mode` attribute which allows to
705enable RS485 specific support on some platforms. Currently Windows and Linux
706(only a small number of devices) are supported.
cliechti4a567a02009-07-27 22:09:31 +0000707
Chris Liechtice621882015-08-06 19:29:31 +0200708:attr:`Serial.rs485_mode` needs to be set to an instance of
709:class:`rs485.RS485Settings` to enable or to ``None`` to disable this feature.
cliechti4a567a02009-07-27 22:09:31 +0000710
Chris Liechtice621882015-08-06 19:29:31 +0200711Usage::
cliechti4a567a02009-07-27 22:09:31 +0000712
Chris Liechti11538242016-09-06 22:20:09 +0200713 import serial
714 import serial.rs485
Chris Liechtice621882015-08-06 19:29:31 +0200715 ser = serial.Serial(...)
716 ser.rs485_mode = serial.rs485.RS485Settings(...)
717 ser.write(b'hello')
cliechti4a567a02009-07-27 22:09:31 +0000718
Chris Liechtice621882015-08-06 19:29:31 +0200719There is a subclass :class:`rs485.RS485` available to emulate the RS485 support
Chris Liechti11538242016-09-06 22:20:09 +0200720on regular serial ports (``serial.rs485`` needs to be imported).
cliechti4a567a02009-07-27 22:09:31 +0000721
cliechti4a567a02009-07-27 22:09:31 +0000722
Chris Liechtice621882015-08-06 19:29:31 +0200723.. class:: rs485.RS485Settings
cliechti4a567a02009-07-27 22:09:31 +0000724
Chris Liechtice621882015-08-06 19:29:31 +0200725 A class that holds RS485 specific settings which are supported on
726 some platforms.
cliechti4a567a02009-07-27 22:09:31 +0000727
Chris Liechtice621882015-08-06 19:29:31 +0200728 .. versionadded:: 3.0
cliechti4a567a02009-07-27 22:09:31 +0000729
Chris Liechtice621882015-08-06 19:29:31 +0200730 .. method:: __init__(rts_level_for_tx=True, rts_level_for_rx=False, loopback=False, delay_before_tx=None, delay_before_rx=None):
cliechti4a567a02009-07-27 22:09:31 +0000731
Chris Liechtice621882015-08-06 19:29:31 +0200732 :param bool rts_level_for_tx:
733 RTS level for transmission
cliechti4a567a02009-07-27 22:09:31 +0000734
Chris Liechtice621882015-08-06 19:29:31 +0200735 :param bool rts_level_for_rx:
736 RTS level for reception
cliechti4a567a02009-07-27 22:09:31 +0000737
Chris Liechtice621882015-08-06 19:29:31 +0200738 :param bool loopback:
739 When set to ``True`` transmitted data is also received.
cliechti4a567a02009-07-27 22:09:31 +0000740
Chris Liechtice621882015-08-06 19:29:31 +0200741 :param float delay_before_tx:
742 Delay after setting RTS but before transmission starts
743
744 :param float delay_before_rx:
745 Delay after transmission ends and resetting RTS
746
747 .. attribute:: rts_level_for_tx
748
749 RTS level for transmission.
750
751 .. attribute:: rts_level_for_rx
752
753 RTS level for reception.
754
755 .. attribute:: loopback
756
757 When set to ``True`` transmitted data is also received.
758
759 .. attribute:: delay_before_tx
760
761 Delay after setting RTS but before transmission starts (seconds as float).
762
763 .. attribute:: delay_before_rx
764
765 Delay after transmission ends and resetting RTS (seconds as float).
cliechti4a567a02009-07-27 22:09:31 +0000766
767
Chris Liechtice621882015-08-06 19:29:31 +0200768.. class:: rs485.RS485
cliechti4a567a02009-07-27 22:09:31 +0000769
Chris Liechtice621882015-08-06 19:29:31 +0200770 A subclass that replaces the :meth:`Serial.write` method with one that toggles RTS
771 according to the RS485 settings.
cliechti4a567a02009-07-27 22:09:31 +0000772
Chris Liechti518b0d32015-08-30 02:20:39 +0200773 Usage::
774
775 ser = serial.rs485.RS485(...)
776 ser.rs485_mode = serial.rs485.RS485Settings(...)
777 ser.write(b'hello')
778
Chris Liechtice621882015-08-06 19:29:31 +0200779 .. warning:: This may work unreliably on some serial ports (control signals not
780 synchronized or delayed compared to data). Using delays may be unreliable
781 (varying times, larger than expected) as the OS may not support very fine
782 grained delays (no smaller than in the order of tens of milliseconds).
cliechti4a567a02009-07-27 22:09:31 +0000783
Chris Liechtice621882015-08-06 19:29:31 +0200784 .. note:: Some implementations support this natively in the class
785 :class:`Serial`. Better performance can be expected when the native version
786 is used.
cliechti4a567a02009-07-27 22:09:31 +0000787
Chris Liechtice621882015-08-06 19:29:31 +0200788 .. note:: The loopback property is ignored by this implementation. The actual
789 behavior depends on the used hardware.
cliechti4a567a02009-07-27 22:09:31 +0000790
cliechti4a567a02009-07-27 22:09:31 +0000791
cliechtie214ff82010-07-21 15:48:47 +0000792
cliechti25375b52010-07-21 23:27:13 +0000793
cliechti7aed8332009-08-05 14:19:31 +0000794:rfc:`2217` Network ports
795-------------------------
796
797.. warning:: This implementation is currently in an experimental state. Use
798 at your own risk.
cliechtiedcdbe42009-07-22 00:48:34 +0000799
cliechtiec4ac1b2009-08-02 00:47:21 +0000800.. class:: rfc2217.Serial
801
Chris Liechti2a1befc2015-10-21 17:37:08 +0200802 This implements a :rfc:`2217` compatible client. Port names are :ref:`URL
803 <URLs>` in the form: ``rfc2217://<host>:<port>[?<option>[&<option>]]``
cliechtiec4ac1b2009-08-02 00:47:21 +0000804
cliechtiec4ac1b2009-08-02 00:47:21 +0000805 This class API is compatible to :class:`Serial` with a few exceptions:
806
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100807 - ``write_timeout`` is not implemented
cliechtiec4ac1b2009-08-02 00:47:21 +0000808 - The current implementation starts a thread that keeps reading from the
809 (internal) socket. The thread is managed automatically by the
810 :class:`rfc2217.Serial` port object on :meth:`open`/:meth:`close`.
811 However it may be a problem for user applications that like to use select
812 instead of threads.
813
814 Due to the nature of the network and protocol involved there are a few
815 extra points to keep in mind:
816
817 - All operations have an additional latency time.
818 - Setting control lines (RTS/CTS) needs more time.
819 - Reading the status lines (DSR/DTR etc.) returns a cached value. When that
820 cache is updated depends entirely on the server. The server itself may
821 implement a polling at a certain rate and quick changes may be invisible.
822 - The network layer also has buffers. This means that :meth:`flush`,
Chris Liechti518b0d32015-08-30 02:20:39 +0200823 :meth:`reset_input_buffer` and :meth:`reset_output_buffer` may work with
824 additional delay. Likewise :attr:`in_waiting` returns the size of the
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100825 data arrived at the objects internal buffer and excludes any bytes in the
Chris Liechti518b0d32015-08-30 02:20:39 +0200826 network buffers or any server side buffer.
cliechtiec4ac1b2009-08-02 00:47:21 +0000827 - Closing and immediately reopening the same port may fail due to time
828 needed by the server to get ready again.
829
830 Not implemented yet / Possible problems with the implementation:
831
cliechti8611bf42009-08-03 00:34:03 +0000832 - :rfc:`2217` flow control between client and server (objects internal
833 buffer may eat all your memory when never read).
cliechtid7e7ce22009-08-03 02:01:07 +0000834 - No authentication support (servers may not prompt for a password etc.)
835 - No encryption.
836
837 Due to lack of authentication and encryption it is not suitable to use this
838 client for connections across the internet and should only be used in
839 controlled environments.
cliechtiec4ac1b2009-08-02 00:47:21 +0000840
cliechti7c640ed2009-08-02 00:54:51 +0000841 .. versionadded:: 2.5
cliechtiec4ac1b2009-08-02 00:47:21 +0000842
cliechti7aed8332009-08-05 14:19:31 +0000843
844.. class:: rfc2217.PortManager
845
846 This class provides helper functions for implementing :rfc:`2217`
847 compatible servers.
848
Chris Liechti518b0d32015-08-30 02:20:39 +0200849 Basically, it implements everything needed for the :rfc:`2217` protocol.
cliechti7aed8332009-08-05 14:19:31 +0000850 It just does not open sockets and read/write to serial ports (though it
851 changes other port settings). The user of this class must take care of the
852 data transmission itself. The reason for that is, that this way, this class
853 supports all programming models such as threads and select.
854
855 Usage examples can be found in the examples where two TCP/IP - serial
856 converters are shown, one using threads (the single port server) and an
857 other using select (the multi port server).
858
859 .. note:: Each new client connection must create a new instance as this
860 object (and the :rfc:`2217` protocol) has internal state.
861
862 .. method:: __init__(serial_port, connection, debug_output=False)
863
864 :param serial_port: a :class:`Serial` instance that is managed.
865 :param connection: an object implementing :meth:`write`, used to write
866 to the network.
cliechti86844e82009-08-12 00:05:33 +0000867 :param debug_output: enables debug messages: a :class:`logging.Logger`
868 instance or None.
cliechti7aed8332009-08-05 14:19:31 +0000869
870 Initializes the Manager and starts negotiating with client in Telnet
871 and :rfc:`2217` protocol. The negotiation starts immediately so that
872 the class should be instantiated in the moment the client connects.
873
874 The *serial_port* can be controlled by :rfc:`2217` commands. This
cliechti06281be2011-08-25 23:08:29 +0000875 object will modify the port settings (baud rate etc.) and control lines
cliechti7aed8332009-08-05 14:19:31 +0000876 (RTS/DTR) send BREAK etc. when the corresponding commands are found by
877 the :meth:`filter` method.
878
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100879 The *connection* object must implement a :meth:`write` function.
cliechti7aed8332009-08-05 14:19:31 +0000880 This function must ensure that *data* is written at once (no user data
881 mixed in, i.e. it must be thread-safe). All data must be sent in its
882 raw form (:meth:`escape` must not be used) as it is used to send Telnet
883 and :rfc:`2217` control commands.
884
cliechti86844e82009-08-12 00:05:33 +0000885 For diagnostics of the connection or the implementation, *debug_output*
886 can be set to an instance of a :class:`logging.Logger` (e.g.
887 ``logging.getLogger('rfc2217.server')``). The caller should configure
888 the logger using ``setLevel`` for the desired detail level of the logs.
889
cliechti7aed8332009-08-05 14:19:31 +0000890 .. method:: escape(data)
891
892 :param data: data to be sent over the network.
893 :return: data, escaped for Telnet/:rfc:`2217`
894
895 A generator that escapes all data to be compatible with :rfc:`2217`.
896 Implementors of servers should use this function to process all data
897 sent over the network.
898
899 The function returns a generator which can be used in ``for`` loops.
cliechtie214ff82010-07-21 15:48:47 +0000900 It can be converted to bytes using :func:`serial.to_bytes`.
cliechti7aed8332009-08-05 14:19:31 +0000901
902 .. method:: filter(data)
903
904 :param data: data read from the network, including Telnet and
905 :rfc:`2217` controls.
906 :return: data, free from Telnet and :rfc:`2217` controls.
907
908 A generator that filters and processes all data related to :rfc:`2217`.
909 Implementors of servers should use this function to process all data
910 received from the network.
911
912 The function returns a generator which can be used in ``for`` loops.
cliechtie214ff82010-07-21 15:48:47 +0000913 It can be converted to bytes using :func:`serial.to_bytes`.
cliechti7aed8332009-08-05 14:19:31 +0000914
cliechti7cb78e82009-08-05 15:47:57 +0000915 .. method:: check_modem_lines(force_notification=False)
916
917 :param force_notification: Set to false. Parameter is for internal use.
cliechti7aed8332009-08-05 14:19:31 +0000918
919 This function needs to be called periodically (e.g. every second) when
920 the server wants to send NOTIFY_MODEMSTATE messages. This is required
921 to support the client for reading CTS/DSR/RI/CD status lines.
922
923 The function reads the status line and issues the notifications
924 automatically.
925
926 .. versionadded:: 2.5
927
cliechtiec4ac1b2009-08-02 00:47:21 +0000928.. seealso::
929
930 :rfc:`2217` - Telnet Com Port Control Option
931
932
cliechtic1c37602009-07-21 01:34:57 +0000933Exceptions
934==========
935
936.. exception:: SerialException
937
938 Base class for serial port exceptions.
939
cliechti4a567a02009-07-27 22:09:31 +0000940 .. versionchanged:: 2.5
cliechti4cb94662013-10-17 03:17:50 +0000941 Now derives from :exc:`IOError` instead of :exc:`Exception`
cliechti4a567a02009-07-27 22:09:31 +0000942
cliechtic1c37602009-07-21 01:34:57 +0000943.. exception:: SerialTimeoutException
944
945 Exception that is raised on write timeouts.
946
947
948Constants
949=========
950
cliechti87686242009-08-18 00:58:31 +0000951*Parity*
952
cliechtic1c37602009-07-21 01:34:57 +0000953.. data:: PARITY_NONE
954.. data:: PARITY_EVEN
955.. data:: PARITY_ODD
956.. data:: PARITY_MARK
957.. data:: PARITY_SPACE
958
cliechti87686242009-08-18 00:58:31 +0000959*Stop bits*
960
cliechtic1c37602009-07-21 01:34:57 +0000961.. data:: STOPBITS_ONE
962.. data:: STOPBITS_ONE_POINT_FIVE
963.. data:: STOPBITS_TWO
964
cliechti06281be2011-08-25 23:08:29 +0000965Note that 1.5 stop bits are not supported on POSIX. It will fall back to 2 stop
cliechti41be0392010-01-02 03:02:38 +0000966bits.
967
cliechti87686242009-08-18 00:58:31 +0000968*Byte size*
969
cliechtic1c37602009-07-21 01:34:57 +0000970.. data:: FIVEBITS
971.. data:: SIXBITS
972.. data:: SEVENBITS
973.. data:: EIGHTBITS
cliechti5b7d16a2009-07-21 21:53:59 +0000974
cliechti87686242009-08-18 00:58:31 +0000975
976*Others*
977
cliechti8611bf42009-08-03 00:34:03 +0000978Default control characters (instances of :class:`bytes` for Python 3.0+) for
cliechtidaf47ba2009-07-28 01:28:16 +0000979software flow control:
cliechti6066f842009-07-24 00:05:45 +0000980
cliechti5b7d16a2009-07-21 21:53:59 +0000981.. data:: XON
982.. data:: XOFF
cliechtif81362e2009-07-25 03:44:33 +0000983
cliechti4a567a02009-07-27 22:09:31 +0000984Module version:
cliechtif81362e2009-07-25 03:44:33 +0000985
986.. data:: VERSION
987
Chris Liechti518b0d32015-08-30 02:20:39 +0200988 A string indicating the pySerial version, such as ``3.0``.
cliechtif81362e2009-07-25 03:44:33 +0000989
cliechti87686242009-08-18 00:58:31 +0000990 .. versionadded:: 2.3
991
cliechti44eb98f2011-03-21 21:41:10 +0000992
cliechtie542b362011-03-18 00:49:16 +0000993Module functions and attributes
994===============================
cliechtif81362e2009-07-25 03:44:33 +0000995
996.. function:: device(number)
997
Chris Liechti518b0d32015-08-30 02:20:39 +0200998 .. versionchanged:: 3.0 removed, use ``serial.tools.list_ports`` instead
999
cliechti7c640ed2009-08-02 00:54:51 +00001000
cliechtie3ab3532009-08-05 12:40:38 +00001001.. function:: serial_for_url(url, \*args, \*\*kwargs)
cliechti7c640ed2009-08-02 00:54:51 +00001002
cliechti86844e82009-08-12 00:05:33 +00001003 :param url: Device name, number or :ref:`URL <URLs>`
cliechti7c640ed2009-08-02 00:54:51 +00001004 :param do_not_open: When set to true, the serial port is not opened.
1005 :return: an instance of :class:`Serial` or a compatible object.
1006
1007 Get a native or a :rfc:`2217` implementation of the Serial class, depending
cliechtid7e7ce22009-08-03 02:01:07 +00001008 on port/url. This factory function is useful when an application wants
cliechti25375b52010-07-21 23:27:13 +00001009 to support both, local ports and remote ports. There is also support
Chris Liechti589c92a2015-09-04 23:04:34 +02001010 for other types, see :ref:`URL <URLs>` section.
cliechti7c640ed2009-08-02 00:54:51 +00001011
cliechtid7e7ce22009-08-03 02:01:07 +00001012 The port is not opened when a keyword parameter called *do_not_open* is
1013 given and true, by default it is opened.
cliechti7c640ed2009-08-02 00:54:51 +00001014
1015 .. versionadded:: 2.5
cliechtif4566342009-08-04 00:07:19 +00001016
cliechti87686242009-08-18 00:58:31 +00001017
cliechtie542b362011-03-18 00:49:16 +00001018.. attribute:: protocol_handler_packages
1019
1020 This attribute is a list of package names (strings) that is searched for
1021 protocol handlers.
1022
1023 e.g. we want to support a URL ``foobar://``. A module
1024 ``my_handlers.protocol_foobar`` is provided by the user::
1025
1026 serial.protocol_handler_packages.append("my_handlers")
1027 s = serial.serial_for_url("foobar://")
1028
1029 For an URL starting with ``XY://`` is the function :func:`serial_for_url`
1030 attempts to import ``PACKAGE.protocol_XY`` with each candidate for
1031 ``PACKAGE`` from this list.
1032
1033 .. versionadded:: 2.6
1034
1035
cliechti25375b52010-07-21 23:27:13 +00001036.. function:: to_bytes(sequence)
cliechtie214ff82010-07-21 15:48:47 +00001037
Chris Liechti32ccf2e2015-12-19 23:42:40 +01001038 :param sequence: bytes, bytearray or memoryview
cliechti25375b52010-07-21 23:27:13 +00001039 :returns: an instance of ``bytes``
cliechtie214ff82010-07-21 15:48:47 +00001040
cliechtie542b362011-03-18 00:49:16 +00001041 Convert a sequence to a ``bytes`` type. This is used to write code that is
cliechtie214ff82010-07-21 15:48:47 +00001042 compatible to Python 2.x and 3.x.
1043
cliechtie542b362011-03-18 00:49:16 +00001044 In Python versions prior 3.x, ``bytes`` is a subclass of str. They convert
cliechti25375b52010-07-21 23:27:13 +00001045 ``str([17])`` to ``'[17]'`` instead of ``'\x11'`` so a simple
cliechtie542b362011-03-18 00:49:16 +00001046 ``bytes(sequence)`` doesn't work for all versions of Python.
cliechtie214ff82010-07-21 15:48:47 +00001047
1048 This function is used internally and in the unit tests.
1049
cliechtie542b362011-03-18 00:49:16 +00001050 .. versionadded:: 2.5
1051
Chris Liechti32ccf2e2015-12-19 23:42:40 +01001052.. function:: iterbytes(sequence)
Chris Liechtid14b1ab2015-08-21 00:28:53 +02001053
Chris Liechti32ccf2e2015-12-19 23:42:40 +01001054 :param sequence: bytes, bytearray or memoryview
Chris Liechtid14b1ab2015-08-21 00:28:53 +02001055 :returns: a generator that yields bytes
1056
1057 Some versions of Python (3.x) would return integers instead of bytes when
1058 looping over an instance of ``bytes``. This helper function ensures that
1059 bytes are returned.
1060
1061 .. versionadded:: 3.0
1062
cliechtie214ff82010-07-21 15:48:47 +00001063
Chris Liechti811bf382015-10-10 00:54:47 +02001064Threading
1065=========
1066
1067.. module:: serial.threaded
1068.. versionadded:: 3.0
1069
1070.. warning:: This implementation is currently in an experimental state. Use
1071 at your own risk.
1072
1073This module provides classes to simplify working with threads and protocols.
1074
1075.. class:: Protocol
1076
Chris Liechti5665d572015-10-13 23:50:01 +02001077 Protocol as used by the :class:`ReaderThread`. This base class provides empty
Chris Liechti811bf382015-10-10 00:54:47 +02001078 implementations of all methods.
1079
1080
1081 .. method:: connection_made(transport)
1082
1083 :param transport: instance used to write to serial port.
1084
1085 Called when reader thread is started.
1086
1087 .. method:: data_received(data)
1088
Chris Liechtif8a09192015-12-20 23:36:38 +01001089 :param bytes data: received bytes
Chris Liechti811bf382015-10-10 00:54:47 +02001090
1091 Called with snippets received from the serial port.
1092
1093 .. method:: connection_lost(exc)
1094
1095 :param exc: Exception if connection was terminated by error else ``None``
1096
1097 Called when the serial port is closed or the reader loop terminated
1098 otherwise.
1099
1100.. class:: Packetizer(Protocol)
1101
1102 Read binary packets from serial port. Packets are expected to be terminated
1103 with a ``TERMINATOR`` byte (null byte by default).
1104
1105 The class also keeps track of the transport.
1106
1107 .. attribute:: TERMINATOR = b'\\0'
1108
1109 .. method:: __init__()
1110
1111 .. method:: connection_made(transport)
1112
Chris Liechtif8a09192015-12-20 23:36:38 +01001113 Stores transport.
Chris Liechti811bf382015-10-10 00:54:47 +02001114
1115 .. method:: connection_lost(exc)
1116
Chris Liechtif8a09192015-12-20 23:36:38 +01001117 Forgets transport.
Chris Liechti811bf382015-10-10 00:54:47 +02001118
1119 .. method:: data_received(data)
1120
Chris Liechtif8a09192015-12-20 23:36:38 +01001121 :param bytes data: partial received data
1122
1123 Buffer received data and search for :attr:`TERMINATOR`, when found,
Chris Liechti811bf382015-10-10 00:54:47 +02001124 call :meth:`handle_packet`.
1125
1126 .. method:: handle_packet(packet)
1127
Chris Liechti1c4c5992016-01-18 20:46:00 +01001128 :param bytes packet: a packet as defined by ``TERMINATOR``
1129
Chris Liechti811bf382015-10-10 00:54:47 +02001130 Process packets - to be overridden by subclassing.
1131
1132
1133.. class:: LineReader(Packetizer)
1134
1135 Read and write (Unicode) lines from/to serial port.
1136 The encoding is applied.
1137
1138
1139 .. attribute:: TERMINATOR = b'\\r\\n'
Chris Liechti1c4c5992016-01-18 20:46:00 +01001140
1141 Line ending.
1142
Chris Liechti811bf382015-10-10 00:54:47 +02001143 .. attribute:: ENCODING = 'utf-8'
Chris Liechti1c4c5992016-01-18 20:46:00 +01001144
1145 Encoding of the send and received data.
1146
Chris Liechti811bf382015-10-10 00:54:47 +02001147 .. attribute:: UNICODE_HANDLING = 'replace'
1148
Chris Liechti1c4c5992016-01-18 20:46:00 +01001149 Unicode error handly policy.
1150
Chris Liechti811bf382015-10-10 00:54:47 +02001151 .. method:: handle_packet(packet)
1152
Chris Liechti1c4c5992016-01-18 20:46:00 +01001153 :param bytes packet: a packet as defined by ``TERMINATOR``
1154
1155 In this case it will be a line, calls :meth:`handle_line` after applying
1156 the :attr:`ENCODING`.
1157
Chris Liechti811bf382015-10-10 00:54:47 +02001158 .. method:: handle_line(line)
1159
Chris Liechtif8a09192015-12-20 23:36:38 +01001160 :param str line: Unicode string with one line (excluding line terminator)
Chris Liechti811bf382015-10-10 00:54:47 +02001161
1162 Process one line - to be overridden by subclassing.
1163
1164 .. method:: write_line(text)
1165
Chris Liechtif8a09192015-12-20 23:36:38 +01001166 :param str text: Unicode string with one line (excluding line terminator)
Chris Liechti811bf382015-10-10 00:54:47 +02001167
Chris Liechtif8a09192015-12-20 23:36:38 +01001168 Write *text* to the transport. *text* is expected to be a Unicode
1169 string and the encoding is applied before sending and also the
1170 :attr:`TERMINATOR` (new line) is appended.
Chris Liechti811bf382015-10-10 00:54:47 +02001171
1172
Chris Liechti5665d572015-10-13 23:50:01 +02001173.. class:: ReaderThread(threading.Thread)
Chris Liechti811bf382015-10-10 00:54:47 +02001174
1175 Implement a serial port read loop and dispatch to a Protocol instance (like
1176 the :class:`asyncio.Protocol`) but do it with threads.
1177
Chris Liechtif8a09192015-12-20 23:36:38 +01001178 Calls to :meth:`close` will close the serial port but it is also possible
1179 to just :meth:`stop` this thread and continue to use the serial port
1180 instance otherwise.
Chris Liechti811bf382015-10-10 00:54:47 +02001181
1182 .. method:: __init__(serial_instance, protocol_factory)
1183
1184 :param serial_instance: serial port instance (opened) to be used.
1185 :param protocol_factory: a callable that returns a Protocol instance
1186
1187 Initialize thread.
1188
Chris Liechtif8a09192015-12-20 23:36:38 +01001189 Note that the ``serial_instance`` 's timeout is set to one second!
Chris Liechti811bf382015-10-10 00:54:47 +02001190 Other settings are not changed.
1191
1192 .. method:: stop()
1193
1194 Stop the reader thread.
1195
1196 .. method:: run()
1197
1198 The actual reader loop driven by the thread. It calls
1199 :meth:`Protocol.connection_made`, reads from the serial port calling
Chris Liechtif8a09192015-12-20 23:36:38 +01001200 :meth:`Protocol.data_received` and finally calls :meth:`Protocol.connection_lost`
Chris Liechti811bf382015-10-10 00:54:47 +02001201 when :meth:`close` is called or an error occurs.
1202
1203 .. method:: write(data)
1204
Chris Liechtif8a09192015-12-20 23:36:38 +01001205 :param bytes data: data to write
1206
Chris Liechti811bf382015-10-10 00:54:47 +02001207 Thread safe writing (uses lock).
1208
1209 .. method:: close()
1210
1211 Close the serial port and exit reader thread, calls :meth:`stop` (uses lock).
1212
1213 .. method:: connect()
1214
1215 Wait until connection is set up and return the transport and protocol
1216 instances.
1217
1218
1219 This class can be used as context manager, in this case it starts
1220 the thread and connects automatically. The serial port is closed
1221 when the context is left.
1222
1223 .. method:: __enter__()
1224
1225 :returns: protocol
1226
1227 Connect and return protocol instance.
1228
1229 .. method:: __exit__(exc_type, exc_val, exc_tb)
1230
1231 Closes serial port.
1232
Chris Liechtia1436b12015-10-12 23:19:04 +02001233Example::
1234
1235 class PrintLines(LineReader):
1236 def connection_made(self, transport):
1237 super(PrintLines, self).connection_made(transport)
1238 sys.stdout.write('port opened\n')
1239 self.write_line('hello world')
1240
1241 def handle_line(self, data):
1242 sys.stdout.write('line received: {}\n'.format(repr(data)))
1243
1244 def connection_lost(self, exc):
1245 if exc:
1246 traceback.print_exc(exc)
1247 sys.stdout.write('port closed\n')
1248
1249 ser = serial.serial_for_url('loop://', baudrate=115200, timeout=1)
Chris Liechti5665d572015-10-13 23:50:01 +02001250 with ReaderThread(ser, PrintLines) as protocol:
Chris Liechtia1436b12015-10-12 23:19:04 +02001251 protocol.write_line('hello')
1252 time.sleep(2)
1253
Chris Liechti811bf382015-10-10 00:54:47 +02001254
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001255asyncio
1256=======
1257
Chris Liechti2c5a31b2016-06-18 22:57:24 +02001258``asyncio`` was introduced with Python 3.4. Experimental support for pySerial
1259is provided via a separate distribution `pyserial-asyncio`_.
Chris Liechti589c92a2015-09-04 23:04:34 +02001260
Chris Liechti2c5a31b2016-06-18 22:57:24 +02001261It is currently under developement, see:
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001262
Chris Liechti2c5a31b2016-06-18 22:57:24 +02001263- http://pyserial-asyncio.readthedocs.io/
1264- https://github.com/pyserial/pyserial-asyncio
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001265
Chris Liechti2c5a31b2016-06-18 22:57:24 +02001266.. _`pyserial-asyncio`: https://pypi.python.org/pypi/pyserial-asyncio
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001267