blob: 12a7765012ff48e7ae89b3f500462a2ed194e97d [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
Rob Gaddi636cc642017-02-24 11:39:46 -080015 .. 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, exclusive=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:
Chris Liechtiba3f6e72019-02-08 01:22:50 +010039 Set a read timeout value in seconds.
cliechtic1c37602009-07-21 01:34:57 +000040
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:
Chris Liechtiba3f6e72019-02-08 01:22:50 +010051 Set a write timeout value in seconds.
cliechti07709e42010-05-21 00:30:09 +000052
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).
Chris Liechti1c4bc812017-03-08 02:44:04 +010055
Rob Gaddi636cc642017-02-24 11:39:46 -080056 :param bool exclusive:
Rob Gaddib1e3e322017-02-24 11:40:06 -080057 Set exclusive access mode (POSIX only). A port cannot be opened in
58 exclusive access mode if it is already open in exclusive access mode.
cliechtic1c37602009-07-21 01:34:57 +000059
cliechti6066f842009-07-24 00:05:45 +000060 :exception ValueError:
cliechti4a567a02009-07-27 22:09:31 +000061 Will be raised when parameter are out of range, e.g. baud rate, data bits.
cliechti6066f842009-07-24 00:05:45 +000062
63 :exception SerialException:
64 In case the device can not be found or can not be configured.
65
66
cliechti4a567a02009-07-27 22:09:31 +000067 The port is immediately opened on object creation, when a *port* is
68 given. It is not opened when *port* is :const:`None` and a successive call
Chris Liechti32ccf2e2015-12-19 23:42:40 +010069 to :meth:`open` is required.
cliechti4a567a02009-07-27 22:09:31 +000070
Chris Liechti518b0d32015-08-30 02:20:39 +020071 *port* is a device name: depending on operating system. e.g.
72 ``/dev/ttyUSB0`` on GNU/Linux or ``COM3`` on Windows.
cliechtic1c37602009-07-21 01:34:57 +000073
cliechti25375b52010-07-21 23:27:13 +000074 The parameter *baudrate* can be one of the standard values:
75 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
76 9600, 19200, 38400, 57600, 115200.
cliechti28b8fd02011-12-28 21:39:42 +000077 These are well supported on all platforms.
78
79 Standard values above 115200, such as: 230400, 460800, 500000, 576000,
80 921600, 1000000, 1152000, 1500000, 2000000, 2500000, 3000000, 3500000,
81 4000000 also work on many platforms and devices.
cliechti25375b52010-07-21 23:27:13 +000082
cliechti06281be2011-08-25 23:08:29 +000083 Non-standard values are also supported on some platforms (GNU/Linux, MAC
cliechti25375b52010-07-21 23:27:13 +000084 OSX >= Tiger, Windows). Though, even on these platforms some serial
85 ports may reject non-standard values.
86
Chris Liechti3e0dcc72015-12-18 23:23:26 +010087 Possible values for the parameter *timeout* which controls the behavior
88 of :meth:`read`:
cliechti5134aab2009-07-21 19:47:59 +000089
Chris Liechti3e0dcc72015-12-18 23:23:26 +010090 - ``timeout = None``: wait forever / until requested number of bytes
91 are received
92 - ``timeout = 0``: non-blocking mode, return immediately in any case,
93 returning zero or more, up to the requested number of bytes
cliechtif81362e2009-07-25 03:44:33 +000094 - ``timeout = x``: set timeout to ``x`` seconds (float allowed)
Chris Liechti3e0dcc72015-12-18 23:23:26 +010095 returns immediately when the requested number of bytes are available,
96 otherwise wait until the timeout expires and return all bytes that
97 were received until then.
cliechtic1c37602009-07-21 01:34:57 +000098
Chris Liechti3e0dcc72015-12-18 23:23:26 +010099 :meth:`write` is blocking by default, unless *write_timeout* is set.
100 For possible values refer to the list for *timeout* above.
cliechti07709e42010-05-21 00:30:09 +0000101
cliechti8611bf42009-08-03 00:34:03 +0000102 Note that enabling both flow control methods (*xonxoff* and *rtscts*)
103 together may not be supported. It is common to use one of the methods
104 at once, not both.
cliechtic1c37602009-07-21 01:34:57 +0000105
cliechti07709e42010-05-21 00:30:09 +0000106 *dsrdtr* is not supported by all platforms (silently ignored). Setting
107 it to ``None`` has the effect that its state follows *rtscts*.
108
cliechti25375b52010-07-21 23:27:13 +0000109 Also consider using the function :func:`serial_for_url` instead of
110 creating Serial instances directly.
111
cliechti5c72e4d2010-07-21 14:04:54 +0000112 .. versionchanged:: 2.5
cliechti06281be2011-08-25 23:08:29 +0000113 *dsrdtr* now defaults to ``False`` (instead of *None*)
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100114 .. versionchanged:: 3.0 numbers as *port* argument are no longer supported
Chris Liechti1c4bc812017-03-08 02:44:04 +0100115 .. versionadded:: 3.3 ``exclusive`` flag
cliechti5c72e4d2010-07-21 14:04:54 +0000116
cliechtic1c37602009-07-21 01:34:57 +0000117 .. method:: open()
118
Chris Liechtiaefbf032016-09-30 23:57:22 +0200119 Open port. The state of :attr:`rts` and :attr:`dtr` is applied.
120
Chris Liechti5e953c32016-09-28 18:18:25 +0200121 .. note::
Chris Liechtiaefbf032016-09-30 23:57:22 +0200122
Chris Liechti5e953c32016-09-28 18:18:25 +0200123 Some OS and/or drivers may activate RTS and or DTR automatically,
124 as soon as the port is opened. There may be a glitch on RTS/DTR
Jakub Wilkbbe6d832017-04-08 15:43:36 +0200125 when :attr:`rts` or :attr:`dtr` are set differently from their
Chris Liechti5e953c32016-09-28 18:18:25 +0200126 default value (``True`` / active).
cliechtic1c37602009-07-21 01:34:57 +0000127
Chris Liechtiaefbf032016-09-30 23:57:22 +0200128 .. note::
129
130 For compatibility reasons, no error is reported when applying
131 :attr:`rts` or :attr:`dtr` fails on POSIX due to EINVAL (22) or
132 ENOTTY (25).
133
cliechtic1c37602009-07-21 01:34:57 +0000134 .. method:: close()
135
136 Close port immediately.
137
cliechti25375b52010-07-21 23:27:13 +0000138 .. method:: __del__()
139
140 Destructor, close port when serial port instance is freed.
141
cliechtic1c37602009-07-21 01:34:57 +0000142
Chris Liechti256ea212015-08-29 23:57:00 +0200143 The following methods may raise :exc:`SerialException` when applied to a closed
cliechti4a567a02009-07-27 22:09:31 +0000144 port.
cliechtic1c37602009-07-21 01:34:57 +0000145
146 .. method:: read(size=1)
147
cliechtibb5c3c52009-07-23 02:29:27 +0000148 :param size: Number of bytes to read.
149 :return: Bytes read from the port.
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100150 :rtype: bytes
cliechtic1c37602009-07-21 01:34:57 +0000151
cliechti4a567a02009-07-27 22:09:31 +0000152 Read *size* bytes from the serial port. If a timeout is set it may
cliechtibb5c3c52009-07-23 02:29:27 +0000153 return less characters as requested. With no timeout it will block
154 until the requested number of bytes is read.
cliechtic1c37602009-07-21 01:34:57 +0000155
cliechti4a567a02009-07-27 22:09:31 +0000156 .. versionchanged:: 2.5
157 Returns an instance of :class:`bytes` when available (Python 2.6
cliechti8611bf42009-08-03 00:34:03 +0000158 and newer) and :class:`str` otherwise.
cliechti4a567a02009-07-27 22:09:31 +0000159
David Pattersondaaf33e2018-06-16 21:13:15 -0400160 .. method:: read_until(expected=LF, size=None)
161
162 :param expected: The byte string to search for.
163 :param size: Number of bytes to read.
164 :return: Bytes read from the port.
165 :rtype: bytes
166
David Patterson997ea882018-06-20 17:56:26 -0400167 Read until an expected sequence is found ('\\n' by default), the size
David Pattersondaaf33e2018-06-16 21:13:15 -0400168 is exceeded or until timeout occurs. If a timeout is set it may
169 return less characters as requested. With no timeout it will block
170 until the requested number of bytes is read.
171
172 .. versionchanged:: 2.5
173 Returns an instance of :class:`bytes` when available (Python 2.6
174 and newer) and :class:`str` otherwise.
175
Jonathan Reichelt Gjertsen16b5a8b2021-05-08 15:45:38 +0200176 .. versionchanged:: 3.5
177 First argument was called ``terminator`` in previous versions.
178
cliechtibb5c3c52009-07-23 02:29:27 +0000179 .. method:: write(data)
180
181 :param data: Data to send.
cliechti4a567a02009-07-27 22:09:31 +0000182 :return: Number of bytes written.
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100183 :rtype: int
cliechti6066f842009-07-24 00:05:45 +0000184 :exception SerialTimeoutException:
185 In case a write timeout is configured for the port and the time is
186 exceeded.
187
Chris Liechti9ad044a2015-12-17 19:43:59 +0100188 Write the bytes *data* to the port. This should be of type ``bytes``
189 (or compatible such as ``bytearray`` or ``memoryview``). Unicode
Steven Conaway5d2c1092020-06-27 15:47:32 -0700190 strings must be encoded (e.g. ``'hello'.encode('utf-8')``.
cliechtic1c37602009-07-21 01:34:57 +0000191
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100192 .. versionchanged:: 2.5
cliechtiddd78132009-07-28 01:13:28 +0000193 Accepts instances of :class:`bytes` and :class:`bytearray` when
cliechti8611bf42009-08-03 00:34:03 +0000194 available (Python 2.6 and newer) and :class:`str` otherwise.
cliechti4a567a02009-07-27 22:09:31 +0000195
cliechti9a1c6952009-10-20 22:18:28 +0000196 .. versionchanged:: 2.5
197 Write returned ``None`` in previous versions.
198
Chris Liechti518b0d32015-08-30 02:20:39 +0200199 .. method:: flush()
200
201 Flush of file like objects. In this case, wait until all data is
202 written.
203
Chris Liechti256ea212015-08-29 23:57:00 +0200204 .. attribute:: in_waiting
cliechti4a567a02009-07-27 22:09:31 +0000205
Chris Liechti256ea212015-08-29 23:57:00 +0200206 :getter: Get the number of bytes in the input buffer
207 :type: int
208
209 Return the number of bytes in the receive buffer.
cliechti4a567a02009-07-27 22:09:31 +0000210
Chris Liechti518b0d32015-08-30 02:20:39 +0200211 .. versionchanged:: 3.0 changed to property from ``inWaiting()``
cliechtic1c37602009-07-21 01:34:57 +0000212
Chris Liechti518b0d32015-08-30 02:20:39 +0200213 .. attribute:: out_waiting
214
215 :getter: Get the number of bytes in the output buffer
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100216 :type: int
Chris Liechti518b0d32015-08-30 02:20:39 +0200217 :platform: Posix
218 :platform: Windows
219
220 Return the number of bytes in the output buffer.
221
222 .. versionchanged:: 2.7 (Posix support added)
223 .. versionchanged:: 3.0 changed to property from ``outWaiting()``
cliechtic1c37602009-07-21 01:34:57 +0000224
Chris Liechti256ea212015-08-29 23:57:00 +0200225 .. method:: reset_input_buffer()
cliechtic1c37602009-07-21 01:34:57 +0000226
Chris Liechti4f988d42017-03-20 23:59:40 +0100227 Flush input buffer, discarding all its contents.
cliechtic1c37602009-07-21 01:34:57 +0000228
Chris Liechti518b0d32015-08-30 02:20:39 +0200229 .. versionchanged:: 3.0 renamed from ``flushInput()``
230
Chris Liechti256ea212015-08-29 23:57:00 +0200231 .. method:: reset_output_buffer()
cliechtic1c37602009-07-21 01:34:57 +0000232
233 Clear output buffer, aborting the current output and
234 discarding all that is in the buffer.
235
Chris Liechti48e40e92016-05-24 00:09:12 +0200236 Note, for some USB serial adapters, this may only flush the buffer of
237 the OS and not all the data that may be present in the USB part.
238
Chris Liechti518b0d32015-08-30 02:20:39 +0200239 .. versionchanged:: 3.0 renamed from ``flushOutput()``
240
Chris Liechti256ea212015-08-29 23:57:00 +0200241 .. method:: send_break(duration=0.25)
cliechtic1c37602009-07-21 01:34:57 +0000242
Chris Liechtiba3f6e72019-02-08 01:22:50 +0100243 :param float duration: Time in seconds, to activate the BREAK condition.
cliechtibb5c3c52009-07-23 02:29:27 +0000244
cliechtic1c37602009-07-21 01:34:57 +0000245 Send break condition. Timed, returns to idle state after given
246 duration.
247
cliechtic1c37602009-07-21 01:34:57 +0000248
Chris Liechti256ea212015-08-29 23:57:00 +0200249 .. attribute:: break_condition
cliechtibb5c3c52009-07-23 02:29:27 +0000250
Chris Liechti256ea212015-08-29 23:57:00 +0200251 :getter: Get the current BREAK state
252 :setter: Control the BREAK state
253 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000254
Chris Liechti256ea212015-08-29 23:57:00 +0200255 When set to ``True`` activate BREAK condition, else disable.
256 Controls TXD. When active, no transmitting is possible.
cliechtic1c37602009-07-21 01:34:57 +0000257
Chris Liechti256ea212015-08-29 23:57:00 +0200258 .. attribute:: rts
cliechtibb5c3c52009-07-23 02:29:27 +0000259
Chris Liechti256ea212015-08-29 23:57:00 +0200260 :setter: Set the state of the RTS line
261 :getter: Return the state of the RTS line
262 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000263
Chris Liechti256ea212015-08-29 23:57:00 +0200264 Set RTS line to specified logic level. It is possible to assign this
Connor Weeksc9661f72018-04-06 09:49:15 -0600265 value before opening the serial port, then the value is applied upon
Chris Liechti5e953c32016-09-28 18:18:25 +0200266 :meth:`open` (with restrictions, see :meth:`open`).
cliechtic1c37602009-07-21 01:34:57 +0000267
Chris Liechti256ea212015-08-29 23:57:00 +0200268 .. attribute:: dtr
cliechtibb5c3c52009-07-23 02:29:27 +0000269
Chris Liechti256ea212015-08-29 23:57:00 +0200270 :setter: Set the state of the DTR line
271 :getter: Return the state of the DTR line
272 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000273
Chris Liechti256ea212015-08-29 23:57:00 +0200274 Set DTR line to specified logic level. It is possible to assign this
Connor Weeksc9661f72018-04-06 09:49:15 -0600275 value before opening the serial port, then the value is applied upon
Chris Liechti5e953c32016-09-28 18:18:25 +0200276 :meth:`open` (with restrictions, see :meth:`open`).
cliechtic1c37602009-07-21 01:34:57 +0000277
Chris Liechti518b0d32015-08-30 02:20:39 +0200278 Read-only attributes:
279
280 .. attribute:: name
281
282 :getter: Device name.
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100283 :type: str
Chris Liechti518b0d32015-08-30 02:20:39 +0200284
285 .. versionadded:: 2.5
286
Chris Liechti256ea212015-08-29 23:57:00 +0200287 .. attribute:: cts
288
289 :getter: Get the state of the CTS line
290 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000291
cliechtic1c37602009-07-21 01:34:57 +0000292 Return the state of the CTS line.
293
Chris Liechti256ea212015-08-29 23:57:00 +0200294 .. attribute:: dsr
cliechtic1c37602009-07-21 01:34:57 +0000295
Chris Liechti256ea212015-08-29 23:57:00 +0200296 :getter: Get the state of the DSR line
297 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000298
cliechtic1c37602009-07-21 01:34:57 +0000299 Return the state of the DSR line.
300
Chris Liechti256ea212015-08-29 23:57:00 +0200301 .. attribute:: ri
cliechtic1c37602009-07-21 01:34:57 +0000302
Chris Liechti256ea212015-08-29 23:57:00 +0200303 :getter: Get the state of the RI line
304 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000305
cliechtic1c37602009-07-21 01:34:57 +0000306 Return the state of the RI line.
307
Chris Liechti256ea212015-08-29 23:57:00 +0200308 .. attribute:: cd
cliechtic1c37602009-07-21 01:34:57 +0000309
Chris Liechti256ea212015-08-29 23:57:00 +0200310 :getter: Get the state of the CD line
311 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000312
cliechtic1c37602009-07-21 01:34:57 +0000313 Return the state of the CD line
314
Matthew Westfa58a972016-07-08 14:27:04 -0700315 .. attribute:: is_open
Chris Liechtiaefbf032016-09-30 23:57:22 +0200316
Chris Liechti5e953c32016-09-28 18:18:25 +0200317 :getter: Get the state of the serial port, whether it's open.
318 :type: bool
cliechtif81362e2009-07-25 03:44:33 +0000319
cliechti25375b52010-07-21 23:27:13 +0000320 New values can be assigned to the following attributes (properties), the
321 port will be reconfigured, even if it's opened at that time:
cliechtic1c37602009-07-21 01:34:57 +0000322
cliechtiedcdbe42009-07-22 00:48:34 +0000323
324 .. attribute:: port
325
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100326 :type: str
327
cliechtiedcdbe42009-07-22 00:48:34 +0000328 Read or write port. When the port is already open, it will be closed
329 and reopened with the new setting.
330
331 .. attribute:: baudrate
332
Chris Liechti518b0d32015-08-30 02:20:39 +0200333 :getter: Get current baud rate
334 :setter: Set new baud rate
335 :type: int
336
cliechti6066f842009-07-24 00:05:45 +0000337 Read or write current baud rate setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000338
339 .. attribute:: bytesize
340
Chris Liechti518b0d32015-08-30 02:20:39 +0200341 :getter: Get current byte size
342 :setter: Set new byte size. Possible values:
343 :const:`FIVEBITS`, :const:`SIXBITS`, :const:`SEVENBITS`,
344 :const:`EIGHTBITS`
345 :type: int
346
cliechti6066f842009-07-24 00:05:45 +0000347 Read or write current data byte size setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000348
349 .. attribute:: parity
350
Chris Liechti518b0d32015-08-30 02:20:39 +0200351 :getter: Get current parity setting
352 :setter: Set new parity mode. Possible values:
353 :const:`PARITY_NONE`, :const:`PARITY_EVEN`, :const:`PARITY_ODD`
354 :const:`PARITY_MARK`, :const:`PARITY_SPACE`
355
cliechti6066f842009-07-24 00:05:45 +0000356 Read or write current parity setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000357
358 .. attribute:: stopbits
359
Chris Liechti518b0d32015-08-30 02:20:39 +0200360 :getter: Get current stop bit setting
361 :setter: Set new stop bit setting. Possible values:
362 :const:`STOPBITS_ONE`, :const:`STOPBITS_ONE_POINT_FIVE`,
363 :const:`STOPBITS_TWO`
364
cliechti6066f842009-07-24 00:05:45 +0000365 Read or write current stop bit width setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000366
367 .. attribute:: timeout
368
Chris Liechti518b0d32015-08-30 02:20:39 +0200369 :getter: Get current read timeout setting
370 :setter: Set read timeout
371 :type: float (seconds)
372
cliechti6066f842009-07-24 00:05:45 +0000373 Read or write current read timeout setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000374
Chris Liechti518b0d32015-08-30 02:20:39 +0200375 .. attribute:: write_timeout
376
377 :getter: Get current write timeout setting
378 :setter: Set write timeout
379 :type: float (seconds)
cliechtiedcdbe42009-07-22 00:48:34 +0000380
cliechti6066f842009-07-24 00:05:45 +0000381 Read or write current write timeout setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000382
Chris Liechti518b0d32015-08-30 02:20:39 +0200383 .. versionchanged:: 3.0 renamed from ``writeTimeout``
384
385 .. attribute:: inter_byte_timeout
386
387 :getter: Get current inter byte timeout setting
388 :setter: Disable (``None``) or enable the inter byte timeout
389 :type: float or None
390
391 Read or write current inter byte timeout setting.
392
393 .. versionchanged:: 3.0 renamed from ``interCharTimeout``
394
cliechtiedcdbe42009-07-22 00:48:34 +0000395 .. attribute:: xonxoff
396
Chris Liechti518b0d32015-08-30 02:20:39 +0200397 :getter: Get current software flow control setting
398 :setter: Enable or disable software flow control
399 :type: bool
400
cliechti6066f842009-07-24 00:05:45 +0000401 Read or write current software flow control rate setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000402
403 .. attribute:: rtscts
404
Chris Liechti518b0d32015-08-30 02:20:39 +0200405 :getter: Get current hardware flow control setting
406 :setter: Enable or disable hardware flow control
407 :type: bool
408
cliechti6066f842009-07-24 00:05:45 +0000409 Read or write current hardware flow control setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000410
411 .. attribute:: dsrdtr
412
Chris Liechti518b0d32015-08-30 02:20:39 +0200413 :getter: Get current hardware flow control setting
414 :setter: Enable or disable hardware flow control
415 :type: bool
416
cliechti6066f842009-07-24 00:05:45 +0000417 Read or write current hardware flow control setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000418
Chris Liechtice621882015-08-06 19:29:31 +0200419 .. attribute:: rs485_mode
420
Chris Liechti518b0d32015-08-30 02:20:39 +0200421 :getter: Get the current RS485 settings
422 :setter: Disable (``None``) or enable the RS485 settings
423 :type: :class:`rs485.RS485Settings` or ``None``
424 :platform: Posix (Linux, limited set of hardware)
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100425 :platform: Windows (only RTS on TX possible)
Chris Liechtice621882015-08-06 19:29:31 +0200426
427 Attribute to configure RS485 support. When set to an instance of
428 :class:`rs485.RS485Settings` and supported by OS, RTS will be active
429 when data is sent and inactive otherwise (for reception). The
430 :class:`rs485.RS485Settings` class provides additional settings
431 supported on some platforms.
432
433 .. versionadded:: 3.0
434
435
cliechtiedcdbe42009-07-22 00:48:34 +0000436 The following constants are also provided:
437
438 .. attribute:: BAUDRATES
439
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100440 A list of valid baud rates. The list may be incomplete, such that higher
441 and/or intermediate baud rates may also be supported by the device
442 (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000443
444 .. attribute:: BYTESIZES
445
cliechti25375b52010-07-21 23:27:13 +0000446 A list of valid byte sizes for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000447
448 .. attribute:: PARITIES
449
cliechti25375b52010-07-21 23:27:13 +0000450 A list of valid parities for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000451
452 .. attribute:: STOPBITS
453
cliechti25375b52010-07-21 23:27:13 +0000454 A list of valid stop bit widths for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000455
cliechti4a567a02009-07-27 22:09:31 +0000456
cliechti25375b52010-07-21 23:27:13 +0000457 The following methods are for compatibility with the :mod:`io` library.
cliechti4a567a02009-07-27 22:09:31 +0000458
459 .. method:: readable()
460
461 :return: True
cliechtif4566342009-08-04 00:07:19 +0000462
cliechti4a567a02009-07-27 22:09:31 +0000463 .. versionadded:: 2.5
464
465 .. method:: writable()
466
467 :return: True
cliechtif4566342009-08-04 00:07:19 +0000468
cliechti4a567a02009-07-27 22:09:31 +0000469 .. versionadded:: 2.5
470
471 .. method:: seekable()
472
473 :return: False
cliechtif4566342009-08-04 00:07:19 +0000474
cliechti4a567a02009-07-27 22:09:31 +0000475 .. versionadded:: 2.5
476
477 .. method:: readinto(b)
478
cliechti8611bf42009-08-03 00:34:03 +0000479 :param b: bytearray or array instance
cliechti4a567a02009-07-27 22:09:31 +0000480 :return: Number of byte read
481
cliechtid7e7ce22009-08-03 02:01:07 +0000482 Read up to len(b) bytes into :class:`bytearray` *b* and return the
483 number of bytes read.
cliechti4a567a02009-07-27 22:09:31 +0000484
485 .. versionadded:: 2.5
486
Chris Liechti22d39002018-05-08 03:39:20 +0200487 .. method:: readline(size=-1)
488
489 Provided via :meth:`io.IOBase.readline`
490
491 .. method:: readlines(hint=-1)
492
493 Provided via :meth:`io.IOBase.readlines`
494
495 .. method:: writelines(lines)
496
497 Provided via :meth:`io.IOBase.writelines`
498
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100499 The port settings can be read and written as dictionary. The following
500 keys are supported: ``write_timeout``, ``inter_byte_timeout``,
501 ``dsrdtr``, ``baudrate``, ``timeout``, ``parity``, ``bytesize``,
502 ``rtscts``, ``stopbits``, ``xonxoff``
cliechti25375b52010-07-21 23:27:13 +0000503
Chris Liechti256ea212015-08-29 23:57:00 +0200504 .. method:: get_settings()
cliechti4065dce2009-08-10 00:55:46 +0000505
506 :return: a dictionary with current port settings.
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100507 :rtype: dict
cliechti4065dce2009-08-10 00:55:46 +0000508
509 Get a dictionary with port settings. This is useful to backup the
510 current settings so that a later point in time they can be restored
Chris Liechti518b0d32015-08-30 02:20:39 +0200511 using :meth:`apply_settings`.
cliechti4065dce2009-08-10 00:55:46 +0000512
Chris Liechti19688bf2016-05-06 23:48:36 +0200513 Note that the state of control lines (RTS/DTR) are not part of the
514 settings.
cliechti4065dce2009-08-10 00:55:46 +0000515
516 .. versionadded:: 2.5
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100517 .. versionchanged:: 3.0 renamed from ``getSettingsDict``
cliechti4065dce2009-08-10 00:55:46 +0000518
Chris Liechti256ea212015-08-29 23:57:00 +0200519 .. method:: apply_settings(d)
cliechti4065dce2009-08-10 00:55:46 +0000520
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100521 :param dict d: a dictionary with port settings.
cliechti4065dce2009-08-10 00:55:46 +0000522
Chris Liechti518b0d32015-08-30 02:20:39 +0200523 Applies a dictionary that was created by :meth:`get_settings`. Only
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100524 changes are applied and when a key is missing, it means that the
525 setting stays unchanged.
cliechti4065dce2009-08-10 00:55:46 +0000526
527 Note that control lines (RTS/DTR) are not changed.
528
529 .. versionadded:: 2.5
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100530 .. versionchanged:: 3.0 renamed from ``applySettingsDict``
cliechti4065dce2009-08-10 00:55:46 +0000531
Chris Liechtic9f89962016-08-12 21:04:37 +0200532
Chris Liechti9e205742016-10-31 22:37:13 +0100533 .. _context-manager:
534
Chris Liechtic9f89962016-08-12 21:04:37 +0200535 This class can be used as context manager. The serial port is closed when
536 the context is left.
537
538 .. method:: __enter__()
539
540 :returns: Serial instance
541
542 Returns the instance that was used in the ``with`` statement.
543
544 Example:
545
546 >>> with serial.serial_for_url(port) as s:
547 ... s.write(b'hello')
548
Chris Liechtifd70a552017-07-20 23:46:34 +0200549 The port is opened automatically:
Chris Liechtic9f89962016-08-12 21:04:37 +0200550
Chris Liechtifd70a552017-07-20 23:46:34 +0200551 >>> port = serial.Serial()
552 >>> port.port = '...'
553 >>> with port as s:
Chris Liechtic9f89962016-08-12 21:04:37 +0200554 ... s.write(b'hello')
555
Chris Liechtifd70a552017-07-20 23:46:34 +0200556 Which also means that ``with`` statements can be used repeatedly,
557 each time opening and closing the port.
558
559 .. versionchanged:: 3.4 the port is automatically opened
560
Chris Liechtic9f89962016-08-12 21:04:37 +0200561
562 .. method:: __exit__(exc_type, exc_val, exc_tb)
563
Chris Liechti4f988d42017-03-20 23:59:40 +0100564 Closes serial port (exceptions are not handled by ``__exit__``).
Chris Liechtic9f89962016-08-12 21:04:37 +0200565
566
cliechti25375b52010-07-21 23:27:13 +0000567 Platform specific methods.
568
cliechtic648da92011-12-29 01:17:51 +0000569 .. warning:: Programs using the following methods and attributes are not
570 portable to other platforms!
cliechti25375b52010-07-21 23:27:13 +0000571
572 .. method:: nonblocking()
573
Chris Liechtice621882015-08-06 19:29:31 +0200574 :platform: Posix
cliechti25375b52010-07-21 23:27:13 +0000575
Chris Liechti59848422016-06-04 22:28:14 +0200576 .. deprecated:: 3.2
577 The serial port is already opened in this mode. This method is not
578 needed and going away.
579
cliechti25375b52010-07-21 23:27:13 +0000580
581 .. method:: fileno()
582
Chris Liechtice621882015-08-06 19:29:31 +0200583 :platform: Posix
cliechti25375b52010-07-21 23:27:13 +0000584 :return: File descriptor.
585
586 Return file descriptor number for the port that is opened by this object.
587 It is useful when serial ports are used with :mod:`select`.
588
Chris Liechti518b0d32015-08-30 02:20:39 +0200589 .. method:: set_input_flow_control(enable)
cliechti25375b52010-07-21 23:27:13 +0000590
cliechti2f0f8a32011-12-28 22:10:00 +0000591 :platform: Posix
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100592 :param bool enable: Set flow control state.
cliechti25375b52010-07-21 23:27:13 +0000593
cliechti2f0f8a32011-12-28 22:10:00 +0000594 Manually control flow - when software flow control is enabled.
595
596 This will send XON (true) and XOFF (false) to the other device.
597
Chris Liechti518b0d32015-08-30 02:20:39 +0200598 .. versionadded:: 2.7 (Posix support added)
599 .. versionchanged:: 3.0 renamed from ``flowControlOut``
cliechti2f0f8a32011-12-28 22:10:00 +0000600
Chris Liechti518b0d32015-08-30 02:20:39 +0200601 .. method:: set_output_flow_control(enable)
cliechti2f0f8a32011-12-28 22:10:00 +0000602
Chris Liechti518b0d32015-08-30 02:20:39 +0200603 :platform: Posix (HW and SW flow control)
604 :platform: Windows (SW flow control only)
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100605 :param bool enable: Set flow control state.
cliechti2f0f8a32011-12-28 22:10:00 +0000606
607 Manually control flow of outgoing data - when hardware or software flow
608 control is enabled.
609
610 Sending will be suspended when called with ``False`` and enabled when
611 called with ``True``.
612
Chris Liechti518b0d32015-08-30 02:20:39 +0200613 .. versionchanged:: 2.7 (renamed on Posix, function was called ``flowControl``)
614 .. versionchanged:: 3.0 renamed from ``setXON``
Chris Liechti256ea212015-08-29 23:57:00 +0200615
Chris Liechti19688bf2016-05-06 23:48:36 +0200616 .. method:: cancel_read()
Chris Liechti256ea212015-08-29 23:57:00 +0200617
Chris Liechti9d893052016-05-18 22:03:29 +0200618 :platform: Posix
Chris Liechti19688bf2016-05-06 23:48:36 +0200619 :platform: Windows
620
Jakub Wilk772a6fa2016-12-20 21:59:27 +0100621 Cancel a pending read operation from another thread. A blocking
Chris Liechti9d893052016-05-18 22:03:29 +0200622 :meth:`read` call is aborted immediately. :meth:`read` will not report
623 any error but return all data received up to that point (similar to a
624 timeout).
625
626 On Posix a call to `cancel_read()` may cancel a future :meth:`read` call.
Chris Liechti19688bf2016-05-06 23:48:36 +0200627
628 .. versionadded:: 3.1
629
630 .. method:: cancel_write()
631
Chris Liechti9d893052016-05-18 22:03:29 +0200632 :platform: Posix
Chris Liechti19688bf2016-05-06 23:48:36 +0200633 :platform: Windows
634
Jakub Wilk772a6fa2016-12-20 21:59:27 +0100635 Cancel a pending write operation from another thread. The
Chris Liechti9d893052016-05-18 22:03:29 +0200636 :meth:`write` method will return immediately (no error indicated).
637 However the OS may still be sending from the buffer, a separate call to
638 :meth:`reset_output_buffer` may be needed.
639
640 On Posix a call to `cancel_write()` may cancel a future :meth:`write` call.
Chris Liechti19688bf2016-05-06 23:48:36 +0200641
642 .. versionadded:: 3.1
Chris Liechti518b0d32015-08-30 02:20:39 +0200643
Chris Liechti9a99cb22015-08-30 22:16:50 +0200644 .. note:: The following members are deprecated and will be removed in a
Chris Liechti518b0d32015-08-30 02:20:39 +0200645 future release.
Chris Liechti256ea212015-08-29 23:57:00 +0200646
647 .. attribute:: portstr
648
Chris Liechti518b0d32015-08-30 02:20:39 +0200649 .. deprecated:: 2.5 use :attr:`name` instead
Chris Liechti256ea212015-08-29 23:57:00 +0200650
651 .. method:: inWaiting()
652
Chris Liechti518b0d32015-08-30 02:20:39 +0200653 .. deprecated:: 3.0 see :attr:`in_waiting`
654
Matthew Westfa58a972016-07-08 14:27:04 -0700655 .. method:: isOpen()
656
Chris Liechtifd70a552017-07-20 23:46:34 +0200657 .. deprecated:: 3.0 see :attr:`is_open`
Matthew Westfa58a972016-07-08 14:27:04 -0700658
Chris Liechti518b0d32015-08-30 02:20:39 +0200659 .. attribute:: writeTimeout
660
661 .. deprecated:: 3.0 see :attr:`write_timeout`
Chris Liechti256ea212015-08-29 23:57:00 +0200662
663 .. attribute:: interCharTimeout
664
Chris Liechti518b0d32015-08-30 02:20:39 +0200665 .. deprecated:: 3.0 see :attr:`inter_byte_timeout`
Chris Liechti256ea212015-08-29 23:57:00 +0200666
667 .. method:: sendBreak(duration=0.25)
668
Chris Liechti518b0d32015-08-30 02:20:39 +0200669 .. deprecated:: 3.0 see :meth:`send_break`
Chris Liechti256ea212015-08-29 23:57:00 +0200670
671 .. method:: flushInput()
672
Chris Liechti518b0d32015-08-30 02:20:39 +0200673 .. deprecated:: 3.0 see :meth:`reset_input_buffer`
Chris Liechti256ea212015-08-29 23:57:00 +0200674
675 .. method:: flushOutput()
676
Chris Liechti518b0d32015-08-30 02:20:39 +0200677 .. deprecated:: 3.0 see :meth:`reset_output_buffer`
Chris Liechti256ea212015-08-29 23:57:00 +0200678
679 .. method:: setBreak(level=True)
680
Chris Liechti518b0d32015-08-30 02:20:39 +0200681 .. deprecated:: 3.0 see :attr:`break_condition`
Chris Liechti256ea212015-08-29 23:57:00 +0200682
683 .. method:: setRTS(level=True)
684
Chris Liechti518b0d32015-08-30 02:20:39 +0200685 .. deprecated:: 3.0 see :attr:`rts`
Chris Liechti256ea212015-08-29 23:57:00 +0200686
687 .. method:: setDTR(level=True)
688
Chris Liechti518b0d32015-08-30 02:20:39 +0200689 .. deprecated:: 3.0 see :attr:`dtr`
Chris Liechti256ea212015-08-29 23:57:00 +0200690
691 .. method:: getCTS()
692
Chris Liechti518b0d32015-08-30 02:20:39 +0200693 .. deprecated:: 3.0 see :attr:`cts`
Chris Liechti256ea212015-08-29 23:57:00 +0200694
695 .. method:: getDSR()
696
Chris Liechti518b0d32015-08-30 02:20:39 +0200697 .. deprecated:: 3.0 see :attr:`dsr`
Chris Liechti256ea212015-08-29 23:57:00 +0200698
699 .. method:: getRI()
700
Chris Liechti518b0d32015-08-30 02:20:39 +0200701 .. deprecated:: 3.0 see :attr:`ri`
Chris Liechti256ea212015-08-29 23:57:00 +0200702
703 .. method:: getCD()
704
Chris Liechti518b0d32015-08-30 02:20:39 +0200705 .. deprecated:: 3.0 see :attr:`cd`
Chris Liechti256ea212015-08-29 23:57:00 +0200706
707 .. method:: getSettingsDict()
708
Chris Liechti518b0d32015-08-30 02:20:39 +0200709 .. deprecated:: 3.0 see :meth:`get_settings`
Chris Liechti256ea212015-08-29 23:57:00 +0200710
711 .. method:: applySettingsDict(d)
712
Chris Liechti518b0d32015-08-30 02:20:39 +0200713 .. deprecated:: 3.0 see :meth:`apply_settings`
Chris Liechti256ea212015-08-29 23:57:00 +0200714
715 .. method:: outWaiting()
716
Chris Liechti518b0d32015-08-30 02:20:39 +0200717 .. deprecated:: 3.0 see :attr:`out_waiting`
Chris Liechti256ea212015-08-29 23:57:00 +0200718
719 .. method:: setXON(level=True)
720
Chris Liechti518b0d32015-08-30 02:20:39 +0200721 .. deprecated:: 3.0 see :meth:`set_output_flow_control`
Chris Liechti256ea212015-08-29 23:57:00 +0200722
723 .. method:: flowControlOut(enable)
724
Chris Liechti518b0d32015-08-30 02:20:39 +0200725 .. deprecated:: 3.0 see :meth:`set_input_flow_control`
cliechtif4566342009-08-04 00:07:19 +0000726
cliechtic648da92011-12-29 01:17:51 +0000727 .. attribute:: rtsToggle
728
729 :platform: Windows
730
731 Attribute to configure RTS toggle control setting. When enabled and
732 supported by OS, RTS will be active when data is available and inactive
733 if no data is available.
734
735 .. versionadded:: 2.6
Chris Liechti518b0d32015-08-30 02:20:39 +0200736 .. versionchanged:: 3.0 (removed, see :attr:`rs485_mode` instead)
cliechtic648da92011-12-29 01:17:51 +0000737
738
cliechtic56e41d2011-08-25 22:06:38 +0000739Implementation detail: some attributes and functions are provided by the
Chris Liechti22d39002018-05-08 03:39:20 +0200740class :class:`serial.SerialBase` which inherits from :class:`io.RawIOBase`
741and some by the platform specific class and others by the base class
742mentioned above.
cliechti25375b52010-07-21 23:27:13 +0000743
Chris Liechti4f988d42017-03-20 23:59:40 +0100744
Chris Liechtice621882015-08-06 19:29:31 +0200745RS485 support
746-------------
747The :class:`Serial` class has a :attr:`Serial.rs485_mode` attribute which allows to
748enable RS485 specific support on some platforms. Currently Windows and Linux
749(only a small number of devices) are supported.
cliechti4a567a02009-07-27 22:09:31 +0000750
Chris Liechtice621882015-08-06 19:29:31 +0200751:attr:`Serial.rs485_mode` needs to be set to an instance of
752:class:`rs485.RS485Settings` to enable or to ``None`` to disable this feature.
cliechti4a567a02009-07-27 22:09:31 +0000753
Chris Liechtice621882015-08-06 19:29:31 +0200754Usage::
cliechti4a567a02009-07-27 22:09:31 +0000755
Chris Liechti11538242016-09-06 22:20:09 +0200756 import serial
757 import serial.rs485
Chris Liechtice621882015-08-06 19:29:31 +0200758 ser = serial.Serial(...)
759 ser.rs485_mode = serial.rs485.RS485Settings(...)
760 ser.write(b'hello')
cliechti4a567a02009-07-27 22:09:31 +0000761
Chris Liechtice621882015-08-06 19:29:31 +0200762There is a subclass :class:`rs485.RS485` available to emulate the RS485 support
Chris Liechti11538242016-09-06 22:20:09 +0200763on regular serial ports (``serial.rs485`` needs to be imported).
cliechti4a567a02009-07-27 22:09:31 +0000764
cliechti4a567a02009-07-27 22:09:31 +0000765
Chris Liechtice621882015-08-06 19:29:31 +0200766.. class:: rs485.RS485Settings
cliechti4a567a02009-07-27 22:09:31 +0000767
Chris Liechtice621882015-08-06 19:29:31 +0200768 A class that holds RS485 specific settings which are supported on
769 some platforms.
cliechti4a567a02009-07-27 22:09:31 +0000770
Chris Liechtice621882015-08-06 19:29:31 +0200771 .. versionadded:: 3.0
cliechti4a567a02009-07-27 22:09:31 +0000772
Chris Liechtice621882015-08-06 19:29:31 +0200773 .. 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 +0000774
Chris Liechtice621882015-08-06 19:29:31 +0200775 :param bool rts_level_for_tx:
776 RTS level for transmission
cliechti4a567a02009-07-27 22:09:31 +0000777
Chris Liechtice621882015-08-06 19:29:31 +0200778 :param bool rts_level_for_rx:
779 RTS level for reception
cliechti4a567a02009-07-27 22:09:31 +0000780
Chris Liechtice621882015-08-06 19:29:31 +0200781 :param bool loopback:
782 When set to ``True`` transmitted data is also received.
cliechti4a567a02009-07-27 22:09:31 +0000783
Chris Liechtice621882015-08-06 19:29:31 +0200784 :param float delay_before_tx:
785 Delay after setting RTS but before transmission starts
786
787 :param float delay_before_rx:
788 Delay after transmission ends and resetting RTS
789
790 .. attribute:: rts_level_for_tx
791
792 RTS level for transmission.
793
794 .. attribute:: rts_level_for_rx
795
796 RTS level for reception.
797
798 .. attribute:: loopback
799
800 When set to ``True`` transmitted data is also received.
801
802 .. attribute:: delay_before_tx
803
804 Delay after setting RTS but before transmission starts (seconds as float).
805
806 .. attribute:: delay_before_rx
807
808 Delay after transmission ends and resetting RTS (seconds as float).
cliechti4a567a02009-07-27 22:09:31 +0000809
810
Chris Liechtice621882015-08-06 19:29:31 +0200811.. class:: rs485.RS485
cliechti4a567a02009-07-27 22:09:31 +0000812
Chris Liechtice621882015-08-06 19:29:31 +0200813 A subclass that replaces the :meth:`Serial.write` method with one that toggles RTS
814 according to the RS485 settings.
cliechti4a567a02009-07-27 22:09:31 +0000815
Chris Liechti518b0d32015-08-30 02:20:39 +0200816 Usage::
817
818 ser = serial.rs485.RS485(...)
819 ser.rs485_mode = serial.rs485.RS485Settings(...)
820 ser.write(b'hello')
821
Chris Liechtice621882015-08-06 19:29:31 +0200822 .. warning:: This may work unreliably on some serial ports (control signals not
823 synchronized or delayed compared to data). Using delays may be unreliable
824 (varying times, larger than expected) as the OS may not support very fine
825 grained delays (no smaller than in the order of tens of milliseconds).
cliechti4a567a02009-07-27 22:09:31 +0000826
Chris Liechtice621882015-08-06 19:29:31 +0200827 .. note:: Some implementations support this natively in the class
828 :class:`Serial`. Better performance can be expected when the native version
829 is used.
cliechti4a567a02009-07-27 22:09:31 +0000830
Chris Liechtice621882015-08-06 19:29:31 +0200831 .. note:: The loopback property is ignored by this implementation. The actual
832 behavior depends on the used hardware.
cliechti4a567a02009-07-27 22:09:31 +0000833
cliechti4a567a02009-07-27 22:09:31 +0000834
cliechtie214ff82010-07-21 15:48:47 +0000835
cliechti7aed8332009-08-05 14:19:31 +0000836:rfc:`2217` Network ports
837-------------------------
838
839.. warning:: This implementation is currently in an experimental state. Use
840 at your own risk.
cliechtiedcdbe42009-07-22 00:48:34 +0000841
cliechtiec4ac1b2009-08-02 00:47:21 +0000842.. class:: rfc2217.Serial
843
Chris Liechti2a1befc2015-10-21 17:37:08 +0200844 This implements a :rfc:`2217` compatible client. Port names are :ref:`URL
845 <URLs>` in the form: ``rfc2217://<host>:<port>[?<option>[&<option>]]``
cliechtiec4ac1b2009-08-02 00:47:21 +0000846
cliechtiec4ac1b2009-08-02 00:47:21 +0000847 This class API is compatible to :class:`Serial` with a few exceptions:
848
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100849 - ``write_timeout`` is not implemented
cliechtiec4ac1b2009-08-02 00:47:21 +0000850 - The current implementation starts a thread that keeps reading from the
851 (internal) socket. The thread is managed automatically by the
852 :class:`rfc2217.Serial` port object on :meth:`open`/:meth:`close`.
853 However it may be a problem for user applications that like to use select
854 instead of threads.
855
856 Due to the nature of the network and protocol involved there are a few
857 extra points to keep in mind:
858
859 - All operations have an additional latency time.
860 - Setting control lines (RTS/CTS) needs more time.
861 - Reading the status lines (DSR/DTR etc.) returns a cached value. When that
862 cache is updated depends entirely on the server. The server itself may
863 implement a polling at a certain rate and quick changes may be invisible.
864 - The network layer also has buffers. This means that :meth:`flush`,
Chris Liechti518b0d32015-08-30 02:20:39 +0200865 :meth:`reset_input_buffer` and :meth:`reset_output_buffer` may work with
866 additional delay. Likewise :attr:`in_waiting` returns the size of the
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100867 data arrived at the objects internal buffer and excludes any bytes in the
Chris Liechti518b0d32015-08-30 02:20:39 +0200868 network buffers or any server side buffer.
cliechtiec4ac1b2009-08-02 00:47:21 +0000869 - Closing and immediately reopening the same port may fail due to time
870 needed by the server to get ready again.
871
872 Not implemented yet / Possible problems with the implementation:
873
cliechti8611bf42009-08-03 00:34:03 +0000874 - :rfc:`2217` flow control between client and server (objects internal
875 buffer may eat all your memory when never read).
cliechtid7e7ce22009-08-03 02:01:07 +0000876 - No authentication support (servers may not prompt for a password etc.)
877 - No encryption.
878
879 Due to lack of authentication and encryption it is not suitable to use this
880 client for connections across the internet and should only be used in
881 controlled environments.
cliechtiec4ac1b2009-08-02 00:47:21 +0000882
cliechti7c640ed2009-08-02 00:54:51 +0000883 .. versionadded:: 2.5
cliechtiec4ac1b2009-08-02 00:47:21 +0000884
cliechti7aed8332009-08-05 14:19:31 +0000885
886.. class:: rfc2217.PortManager
887
888 This class provides helper functions for implementing :rfc:`2217`
889 compatible servers.
890
Chris Liechti518b0d32015-08-30 02:20:39 +0200891 Basically, it implements everything needed for the :rfc:`2217` protocol.
cliechti7aed8332009-08-05 14:19:31 +0000892 It just does not open sockets and read/write to serial ports (though it
893 changes other port settings). The user of this class must take care of the
894 data transmission itself. The reason for that is, that this way, this class
895 supports all programming models such as threads and select.
896
897 Usage examples can be found in the examples where two TCP/IP - serial
898 converters are shown, one using threads (the single port server) and an
899 other using select (the multi port server).
900
901 .. note:: Each new client connection must create a new instance as this
902 object (and the :rfc:`2217` protocol) has internal state.
903
904 .. method:: __init__(serial_port, connection, debug_output=False)
905
906 :param serial_port: a :class:`Serial` instance that is managed.
907 :param connection: an object implementing :meth:`write`, used to write
908 to the network.
cliechti86844e82009-08-12 00:05:33 +0000909 :param debug_output: enables debug messages: a :class:`logging.Logger`
910 instance or None.
cliechti7aed8332009-08-05 14:19:31 +0000911
912 Initializes the Manager and starts negotiating with client in Telnet
913 and :rfc:`2217` protocol. The negotiation starts immediately so that
914 the class should be instantiated in the moment the client connects.
915
916 The *serial_port* can be controlled by :rfc:`2217` commands. This
cliechti06281be2011-08-25 23:08:29 +0000917 object will modify the port settings (baud rate etc.) and control lines
cliechti7aed8332009-08-05 14:19:31 +0000918 (RTS/DTR) send BREAK etc. when the corresponding commands are found by
919 the :meth:`filter` method.
920
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100921 The *connection* object must implement a :meth:`write` function.
cliechti7aed8332009-08-05 14:19:31 +0000922 This function must ensure that *data* is written at once (no user data
923 mixed in, i.e. it must be thread-safe). All data must be sent in its
924 raw form (:meth:`escape` must not be used) as it is used to send Telnet
925 and :rfc:`2217` control commands.
926
cliechti86844e82009-08-12 00:05:33 +0000927 For diagnostics of the connection or the implementation, *debug_output*
928 can be set to an instance of a :class:`logging.Logger` (e.g.
929 ``logging.getLogger('rfc2217.server')``). The caller should configure
930 the logger using ``setLevel`` for the desired detail level of the logs.
931
cliechti7aed8332009-08-05 14:19:31 +0000932 .. method:: escape(data)
933
934 :param data: data to be sent over the network.
935 :return: data, escaped for Telnet/:rfc:`2217`
936
937 A generator that escapes all data to be compatible with :rfc:`2217`.
938 Implementors of servers should use this function to process all data
939 sent over the network.
940
941 The function returns a generator which can be used in ``for`` loops.
cliechtie214ff82010-07-21 15:48:47 +0000942 It can be converted to bytes using :func:`serial.to_bytes`.
cliechti7aed8332009-08-05 14:19:31 +0000943
944 .. method:: filter(data)
945
946 :param data: data read from the network, including Telnet and
947 :rfc:`2217` controls.
948 :return: data, free from Telnet and :rfc:`2217` controls.
949
950 A generator that filters and processes all data related to :rfc:`2217`.
951 Implementors of servers should use this function to process all data
952 received from the network.
953
954 The function returns a generator which can be used in ``for`` loops.
cliechtie214ff82010-07-21 15:48:47 +0000955 It can be converted to bytes using :func:`serial.to_bytes`.
cliechti7aed8332009-08-05 14:19:31 +0000956
cliechti7cb78e82009-08-05 15:47:57 +0000957 .. method:: check_modem_lines(force_notification=False)
958
959 :param force_notification: Set to false. Parameter is for internal use.
cliechti7aed8332009-08-05 14:19:31 +0000960
961 This function needs to be called periodically (e.g. every second) when
962 the server wants to send NOTIFY_MODEMSTATE messages. This is required
963 to support the client for reading CTS/DSR/RI/CD status lines.
964
965 The function reads the status line and issues the notifications
966 automatically.
967
968 .. versionadded:: 2.5
969
cliechtiec4ac1b2009-08-02 00:47:21 +0000970.. seealso::
971
972 :rfc:`2217` - Telnet Com Port Control Option
973
974
cliechtic1c37602009-07-21 01:34:57 +0000975Exceptions
976==========
977
978.. exception:: SerialException
979
980 Base class for serial port exceptions.
981
cliechti4a567a02009-07-27 22:09:31 +0000982 .. versionchanged:: 2.5
cliechti4cb94662013-10-17 03:17:50 +0000983 Now derives from :exc:`IOError` instead of :exc:`Exception`
cliechti4a567a02009-07-27 22:09:31 +0000984
cliechtic1c37602009-07-21 01:34:57 +0000985.. exception:: SerialTimeoutException
986
987 Exception that is raised on write timeouts.
988
989
990Constants
991=========
992
cliechti87686242009-08-18 00:58:31 +0000993*Parity*
994
cliechtic1c37602009-07-21 01:34:57 +0000995.. data:: PARITY_NONE
996.. data:: PARITY_EVEN
997.. data:: PARITY_ODD
998.. data:: PARITY_MARK
999.. data:: PARITY_SPACE
1000
cliechti87686242009-08-18 00:58:31 +00001001*Stop bits*
1002
cliechtic1c37602009-07-21 01:34:57 +00001003.. data:: STOPBITS_ONE
1004.. data:: STOPBITS_ONE_POINT_FIVE
1005.. data:: STOPBITS_TWO
1006
cliechti06281be2011-08-25 23:08:29 +00001007Note that 1.5 stop bits are not supported on POSIX. It will fall back to 2 stop
cliechti41be0392010-01-02 03:02:38 +00001008bits.
1009
cliechti87686242009-08-18 00:58:31 +00001010*Byte size*
1011
cliechtic1c37602009-07-21 01:34:57 +00001012.. data:: FIVEBITS
1013.. data:: SIXBITS
1014.. data:: SEVENBITS
1015.. data:: EIGHTBITS
cliechti5b7d16a2009-07-21 21:53:59 +00001016
cliechti87686242009-08-18 00:58:31 +00001017
1018*Others*
1019
cliechti8611bf42009-08-03 00:34:03 +00001020Default control characters (instances of :class:`bytes` for Python 3.0+) for
cliechtidaf47ba2009-07-28 01:28:16 +00001021software flow control:
cliechti6066f842009-07-24 00:05:45 +00001022
cliechti5b7d16a2009-07-21 21:53:59 +00001023.. data:: XON
1024.. data:: XOFF
cliechtif81362e2009-07-25 03:44:33 +00001025
cliechti4a567a02009-07-27 22:09:31 +00001026Module version:
cliechtif81362e2009-07-25 03:44:33 +00001027
1028.. data:: VERSION
1029
Chris Liechti518b0d32015-08-30 02:20:39 +02001030 A string indicating the pySerial version, such as ``3.0``.
cliechtif81362e2009-07-25 03:44:33 +00001031
cliechti87686242009-08-18 00:58:31 +00001032 .. versionadded:: 2.3
1033
cliechti44eb98f2011-03-21 21:41:10 +00001034
cliechtie542b362011-03-18 00:49:16 +00001035Module functions and attributes
1036===============================
cliechtif81362e2009-07-25 03:44:33 +00001037
1038.. function:: device(number)
1039
Chris Liechti518b0d32015-08-30 02:20:39 +02001040 .. versionchanged:: 3.0 removed, use ``serial.tools.list_ports`` instead
1041
cliechti7c640ed2009-08-02 00:54:51 +00001042
cliechtie3ab3532009-08-05 12:40:38 +00001043.. function:: serial_for_url(url, \*args, \*\*kwargs)
cliechti7c640ed2009-08-02 00:54:51 +00001044
cliechti86844e82009-08-12 00:05:33 +00001045 :param url: Device name, number or :ref:`URL <URLs>`
cliechti7c640ed2009-08-02 00:54:51 +00001046 :param do_not_open: When set to true, the serial port is not opened.
1047 :return: an instance of :class:`Serial` or a compatible object.
1048
1049 Get a native or a :rfc:`2217` implementation of the Serial class, depending
cliechtid7e7ce22009-08-03 02:01:07 +00001050 on port/url. This factory function is useful when an application wants
cliechti25375b52010-07-21 23:27:13 +00001051 to support both, local ports and remote ports. There is also support
Chris Liechti589c92a2015-09-04 23:04:34 +02001052 for other types, see :ref:`URL <URLs>` section.
cliechti7c640ed2009-08-02 00:54:51 +00001053
cliechtid7e7ce22009-08-03 02:01:07 +00001054 The port is not opened when a keyword parameter called *do_not_open* is
1055 given and true, by default it is opened.
cliechti7c640ed2009-08-02 00:54:51 +00001056
1057 .. versionadded:: 2.5
cliechtif4566342009-08-04 00:07:19 +00001058
cliechti87686242009-08-18 00:58:31 +00001059
cliechtie542b362011-03-18 00:49:16 +00001060.. attribute:: protocol_handler_packages
1061
1062 This attribute is a list of package names (strings) that is searched for
1063 protocol handlers.
1064
1065 e.g. we want to support a URL ``foobar://``. A module
1066 ``my_handlers.protocol_foobar`` is provided by the user::
1067
1068 serial.protocol_handler_packages.append("my_handlers")
1069 s = serial.serial_for_url("foobar://")
1070
1071 For an URL starting with ``XY://`` is the function :func:`serial_for_url`
1072 attempts to import ``PACKAGE.protocol_XY`` with each candidate for
1073 ``PACKAGE`` from this list.
1074
1075 .. versionadded:: 2.6
1076
1077
cliechti25375b52010-07-21 23:27:13 +00001078.. function:: to_bytes(sequence)
cliechtie214ff82010-07-21 15:48:47 +00001079
Chris Liechti32ccf2e2015-12-19 23:42:40 +01001080 :param sequence: bytes, bytearray or memoryview
cliechti25375b52010-07-21 23:27:13 +00001081 :returns: an instance of ``bytes``
cliechtie214ff82010-07-21 15:48:47 +00001082
cliechtie542b362011-03-18 00:49:16 +00001083 Convert a sequence to a ``bytes`` type. This is used to write code that is
cliechtie214ff82010-07-21 15:48:47 +00001084 compatible to Python 2.x and 3.x.
1085
cliechtie542b362011-03-18 00:49:16 +00001086 In Python versions prior 3.x, ``bytes`` is a subclass of str. They convert
cliechti25375b52010-07-21 23:27:13 +00001087 ``str([17])`` to ``'[17]'`` instead of ``'\x11'`` so a simple
cliechtie542b362011-03-18 00:49:16 +00001088 ``bytes(sequence)`` doesn't work for all versions of Python.
cliechtie214ff82010-07-21 15:48:47 +00001089
1090 This function is used internally and in the unit tests.
1091
cliechtie542b362011-03-18 00:49:16 +00001092 .. versionadded:: 2.5
1093
Chris Liechti32ccf2e2015-12-19 23:42:40 +01001094.. function:: iterbytes(sequence)
Chris Liechtid14b1ab2015-08-21 00:28:53 +02001095
Chris Liechti32ccf2e2015-12-19 23:42:40 +01001096 :param sequence: bytes, bytearray or memoryview
Chris Liechtid14b1ab2015-08-21 00:28:53 +02001097 :returns: a generator that yields bytes
1098
1099 Some versions of Python (3.x) would return integers instead of bytes when
Chris Liechti4f988d42017-03-20 23:59:40 +01001100 looping over an instance of ``bytes``. This helper function ensures that
Chris Liechtid14b1ab2015-08-21 00:28:53 +02001101 bytes are returned.
1102
1103 .. versionadded:: 3.0
1104
cliechtie214ff82010-07-21 15:48:47 +00001105
Chris Liechti811bf382015-10-10 00:54:47 +02001106Threading
1107=========
1108
1109.. module:: serial.threaded
1110.. versionadded:: 3.0
1111
1112.. warning:: This implementation is currently in an experimental state. Use
1113 at your own risk.
1114
1115This module provides classes to simplify working with threads and protocols.
1116
1117.. class:: Protocol
1118
Chris Liechti5665d572015-10-13 23:50:01 +02001119 Protocol as used by the :class:`ReaderThread`. This base class provides empty
Chris Liechti811bf382015-10-10 00:54:47 +02001120 implementations of all methods.
1121
1122
1123 .. method:: connection_made(transport)
1124
1125 :param transport: instance used to write to serial port.
1126
1127 Called when reader thread is started.
1128
1129 .. method:: data_received(data)
1130
Chris Liechtif8a09192015-12-20 23:36:38 +01001131 :param bytes data: received bytes
Chris Liechti811bf382015-10-10 00:54:47 +02001132
1133 Called with snippets received from the serial port.
1134
1135 .. method:: connection_lost(exc)
1136
1137 :param exc: Exception if connection was terminated by error else ``None``
1138
1139 Called when the serial port is closed or the reader loop terminated
1140 otherwise.
1141
1142.. class:: Packetizer(Protocol)
1143
1144 Read binary packets from serial port. Packets are expected to be terminated
1145 with a ``TERMINATOR`` byte (null byte by default).
1146
1147 The class also keeps track of the transport.
1148
1149 .. attribute:: TERMINATOR = b'\\0'
1150
1151 .. method:: __init__()
1152
1153 .. method:: connection_made(transport)
1154
Chris Liechtif8a09192015-12-20 23:36:38 +01001155 Stores transport.
Chris Liechti811bf382015-10-10 00:54:47 +02001156
1157 .. method:: connection_lost(exc)
1158
Chris Liechtif8a09192015-12-20 23:36:38 +01001159 Forgets transport.
Chris Liechti811bf382015-10-10 00:54:47 +02001160
1161 .. method:: data_received(data)
1162
Chris Liechtif8a09192015-12-20 23:36:38 +01001163 :param bytes data: partial received data
1164
1165 Buffer received data and search for :attr:`TERMINATOR`, when found,
Chris Liechti811bf382015-10-10 00:54:47 +02001166 call :meth:`handle_packet`.
1167
1168 .. method:: handle_packet(packet)
1169
Chris Liechti1c4c5992016-01-18 20:46:00 +01001170 :param bytes packet: a packet as defined by ``TERMINATOR``
1171
Chris Liechti811bf382015-10-10 00:54:47 +02001172 Process packets - to be overridden by subclassing.
1173
1174
1175.. class:: LineReader(Packetizer)
1176
1177 Read and write (Unicode) lines from/to serial port.
1178 The encoding is applied.
1179
1180
1181 .. attribute:: TERMINATOR = b'\\r\\n'
Chris Liechti1c4c5992016-01-18 20:46:00 +01001182
1183 Line ending.
1184
Chris Liechti811bf382015-10-10 00:54:47 +02001185 .. attribute:: ENCODING = 'utf-8'
Chris Liechti1c4c5992016-01-18 20:46:00 +01001186
1187 Encoding of the send and received data.
1188
Chris Liechti811bf382015-10-10 00:54:47 +02001189 .. attribute:: UNICODE_HANDLING = 'replace'
1190
Chris Liechti1c4c5992016-01-18 20:46:00 +01001191 Unicode error handly policy.
1192
Chris Liechti811bf382015-10-10 00:54:47 +02001193 .. method:: handle_packet(packet)
1194
Chris Liechti1c4c5992016-01-18 20:46:00 +01001195 :param bytes packet: a packet as defined by ``TERMINATOR``
1196
1197 In this case it will be a line, calls :meth:`handle_line` after applying
1198 the :attr:`ENCODING`.
1199
Chris Liechti811bf382015-10-10 00:54:47 +02001200 .. method:: handle_line(line)
1201
Chris Liechtif8a09192015-12-20 23:36:38 +01001202 :param str line: Unicode string with one line (excluding line terminator)
Chris Liechti811bf382015-10-10 00:54:47 +02001203
1204 Process one line - to be overridden by subclassing.
1205
1206 .. method:: write_line(text)
1207
Chris Liechtif8a09192015-12-20 23:36:38 +01001208 :param str text: Unicode string with one line (excluding line terminator)
Chris Liechti811bf382015-10-10 00:54:47 +02001209
Chris Liechtif8a09192015-12-20 23:36:38 +01001210 Write *text* to the transport. *text* is expected to be a Unicode
1211 string and the encoding is applied before sending and also the
1212 :attr:`TERMINATOR` (new line) is appended.
Chris Liechti811bf382015-10-10 00:54:47 +02001213
1214
Chris Liechti5665d572015-10-13 23:50:01 +02001215.. class:: ReaderThread(threading.Thread)
Chris Liechti811bf382015-10-10 00:54:47 +02001216
1217 Implement a serial port read loop and dispatch to a Protocol instance (like
1218 the :class:`asyncio.Protocol`) but do it with threads.
1219
Chris Liechtif8a09192015-12-20 23:36:38 +01001220 Calls to :meth:`close` will close the serial port but it is also possible
1221 to just :meth:`stop` this thread and continue to use the serial port
1222 instance otherwise.
Chris Liechti811bf382015-10-10 00:54:47 +02001223
1224 .. method:: __init__(serial_instance, protocol_factory)
1225
1226 :param serial_instance: serial port instance (opened) to be used.
1227 :param protocol_factory: a callable that returns a Protocol instance
1228
1229 Initialize thread.
1230
Chris Liechtif8a09192015-12-20 23:36:38 +01001231 Note that the ``serial_instance`` 's timeout is set to one second!
Chris Liechti811bf382015-10-10 00:54:47 +02001232 Other settings are not changed.
1233
1234 .. method:: stop()
1235
1236 Stop the reader thread.
1237
1238 .. method:: run()
1239
1240 The actual reader loop driven by the thread. It calls
1241 :meth:`Protocol.connection_made`, reads from the serial port calling
Chris Liechtif8a09192015-12-20 23:36:38 +01001242 :meth:`Protocol.data_received` and finally calls :meth:`Protocol.connection_lost`
Chris Liechti811bf382015-10-10 00:54:47 +02001243 when :meth:`close` is called or an error occurs.
1244
1245 .. method:: write(data)
1246
Chris Liechtif8a09192015-12-20 23:36:38 +01001247 :param bytes data: data to write
1248
Chris Liechti811bf382015-10-10 00:54:47 +02001249 Thread safe writing (uses lock).
1250
1251 .. method:: close()
1252
1253 Close the serial port and exit reader thread, calls :meth:`stop` (uses lock).
1254
1255 .. method:: connect()
1256
1257 Wait until connection is set up and return the transport and protocol
1258 instances.
1259
1260
1261 This class can be used as context manager, in this case it starts
1262 the thread and connects automatically. The serial port is closed
1263 when the context is left.
1264
1265 .. method:: __enter__()
1266
1267 :returns: protocol
1268
1269 Connect and return protocol instance.
1270
1271 .. method:: __exit__(exc_type, exc_val, exc_tb)
1272
1273 Closes serial port.
1274
Chris Liechtia1436b12015-10-12 23:19:04 +02001275Example::
1276
1277 class PrintLines(LineReader):
1278 def connection_made(self, transport):
1279 super(PrintLines, self).connection_made(transport)
1280 sys.stdout.write('port opened\n')
1281 self.write_line('hello world')
1282
1283 def handle_line(self, data):
1284 sys.stdout.write('line received: {}\n'.format(repr(data)))
1285
1286 def connection_lost(self, exc):
1287 if exc:
1288 traceback.print_exc(exc)
1289 sys.stdout.write('port closed\n')
1290
1291 ser = serial.serial_for_url('loop://', baudrate=115200, timeout=1)
Chris Liechti5665d572015-10-13 23:50:01 +02001292 with ReaderThread(ser, PrintLines) as protocol:
Chris Liechtia1436b12015-10-12 23:19:04 +02001293 protocol.write_line('hello')
1294 time.sleep(2)
1295
Chris Liechti811bf382015-10-10 00:54:47 +02001296
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001297asyncio
1298=======
1299
Chris Liechti2c5a31b2016-06-18 22:57:24 +02001300``asyncio`` was introduced with Python 3.4. Experimental support for pySerial
1301is provided via a separate distribution `pyserial-asyncio`_.
Chris Liechti589c92a2015-09-04 23:04:34 +02001302
Jakub Wilk772a6fa2016-12-20 21:59:27 +01001303It is currently under development, see:
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001304
Chris Liechti2c5a31b2016-06-18 22:57:24 +02001305- http://pyserial-asyncio.readthedocs.io/
1306- https://github.com/pyserial/pyserial-asyncio
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001307
Chris Liechti2c5a31b2016-06-18 22:57:24 +02001308.. _`pyserial-asyncio`: https://pypi.python.org/pypi/pyserial-asyncio
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001309