blob: b038f91e3a00a997048f5d59095b7ebd70f3b023 [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
114 Open port.
115
116 .. method:: close()
117
118 Close port immediately.
119
cliechti25375b52010-07-21 23:27:13 +0000120 .. method:: __del__()
121
122 Destructor, close port when serial port instance is freed.
123
cliechtic1c37602009-07-21 01:34:57 +0000124
Chris Liechti256ea212015-08-29 23:57:00 +0200125 The following methods may raise :exc:`SerialException` when applied to a closed
cliechti4a567a02009-07-27 22:09:31 +0000126 port.
cliechtic1c37602009-07-21 01:34:57 +0000127
128 .. method:: read(size=1)
129
cliechtibb5c3c52009-07-23 02:29:27 +0000130 :param size: Number of bytes to read.
131 :return: Bytes read from the port.
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100132 :rtype: bytes
cliechtic1c37602009-07-21 01:34:57 +0000133
cliechti4a567a02009-07-27 22:09:31 +0000134 Read *size* bytes from the serial port. If a timeout is set it may
cliechtibb5c3c52009-07-23 02:29:27 +0000135 return less characters as requested. With no timeout it will block
136 until the requested number of bytes is read.
cliechtic1c37602009-07-21 01:34:57 +0000137
cliechti4a567a02009-07-27 22:09:31 +0000138 .. versionchanged:: 2.5
139 Returns an instance of :class:`bytes` when available (Python 2.6
cliechti8611bf42009-08-03 00:34:03 +0000140 and newer) and :class:`str` otherwise.
cliechti4a567a02009-07-27 22:09:31 +0000141
cliechtibb5c3c52009-07-23 02:29:27 +0000142 .. method:: write(data)
143
144 :param data: Data to send.
cliechti4a567a02009-07-27 22:09:31 +0000145 :return: Number of bytes written.
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100146 :rtype: int
cliechti6066f842009-07-24 00:05:45 +0000147 :exception SerialTimeoutException:
148 In case a write timeout is configured for the port and the time is
149 exceeded.
150
Chris Liechti9ad044a2015-12-17 19:43:59 +0100151 Write the bytes *data* to the port. This should be of type ``bytes``
152 (or compatible such as ``bytearray`` or ``memoryview``). Unicode
153 strings must be encoded (e.g. ``'hello'.encode('utf-8'``).
cliechtic1c37602009-07-21 01:34:57 +0000154
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100155 .. versionchanged:: 2.5
cliechtiddd78132009-07-28 01:13:28 +0000156 Accepts instances of :class:`bytes` and :class:`bytearray` when
cliechti8611bf42009-08-03 00:34:03 +0000157 available (Python 2.6 and newer) and :class:`str` otherwise.
cliechti4a567a02009-07-27 22:09:31 +0000158
cliechti9a1c6952009-10-20 22:18:28 +0000159 .. versionchanged:: 2.5
160 Write returned ``None`` in previous versions.
161
Chris Liechti518b0d32015-08-30 02:20:39 +0200162 .. method:: flush()
163
164 Flush of file like objects. In this case, wait until all data is
165 written.
166
Chris Liechti256ea212015-08-29 23:57:00 +0200167 .. attribute:: in_waiting
cliechti4a567a02009-07-27 22:09:31 +0000168
Chris Liechti256ea212015-08-29 23:57:00 +0200169 :getter: Get the number of bytes in the input buffer
170 :type: int
171
172 Return the number of bytes in the receive buffer.
cliechti4a567a02009-07-27 22:09:31 +0000173
Chris Liechti518b0d32015-08-30 02:20:39 +0200174 .. versionchanged:: 3.0 changed to property from ``inWaiting()``
cliechtic1c37602009-07-21 01:34:57 +0000175
Chris Liechti518b0d32015-08-30 02:20:39 +0200176 .. attribute:: out_waiting
177
178 :getter: Get the number of bytes in the output buffer
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100179 :type: int
Chris Liechti518b0d32015-08-30 02:20:39 +0200180 :platform: Posix
181 :platform: Windows
182
183 Return the number of bytes in the output buffer.
184
185 .. versionchanged:: 2.7 (Posix support added)
186 .. versionchanged:: 3.0 changed to property from ``outWaiting()``
cliechtic1c37602009-07-21 01:34:57 +0000187
Chris Liechti256ea212015-08-29 23:57:00 +0200188 .. method:: reset_input_buffer()
cliechtic1c37602009-07-21 01:34:57 +0000189
190 Flush input buffer, discarding all it's contents.
191
Chris Liechti518b0d32015-08-30 02:20:39 +0200192 .. versionchanged:: 3.0 renamed from ``flushInput()``
193
Chris Liechti256ea212015-08-29 23:57:00 +0200194 .. method:: reset_output_buffer()
cliechtic1c37602009-07-21 01:34:57 +0000195
196 Clear output buffer, aborting the current output and
197 discarding all that is in the buffer.
198
Chris Liechti518b0d32015-08-30 02:20:39 +0200199 .. versionchanged:: 3.0 renamed from ``flushOutput()``
200
Chris Liechti256ea212015-08-29 23:57:00 +0200201 .. method:: send_break(duration=0.25)
cliechtic1c37602009-07-21 01:34:57 +0000202
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100203 :param float duration: Time to activate the BREAK condition.
cliechtibb5c3c52009-07-23 02:29:27 +0000204
cliechtic1c37602009-07-21 01:34:57 +0000205 Send break condition. Timed, returns to idle state after given
206 duration.
207
cliechtic1c37602009-07-21 01:34:57 +0000208
Chris Liechti256ea212015-08-29 23:57:00 +0200209 .. attribute:: break_condition
cliechtibb5c3c52009-07-23 02:29:27 +0000210
Chris Liechti256ea212015-08-29 23:57:00 +0200211 :getter: Get the current BREAK state
212 :setter: Control the BREAK state
213 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000214
Chris Liechti256ea212015-08-29 23:57:00 +0200215 When set to ``True`` activate BREAK condition, else disable.
216 Controls TXD. When active, no transmitting is possible.
cliechtic1c37602009-07-21 01:34:57 +0000217
Chris Liechti256ea212015-08-29 23:57:00 +0200218 .. attribute:: rts
cliechtibb5c3c52009-07-23 02:29:27 +0000219
Chris Liechti256ea212015-08-29 23:57:00 +0200220 :setter: Set the state of the RTS line
221 :getter: Return the state of the RTS line
222 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000223
Chris Liechti256ea212015-08-29 23:57:00 +0200224 Set RTS line to specified logic level. It is possible to assign this
225 value before opening the serial port, then the value is applied uppon
226 :meth:`open`.
cliechtic1c37602009-07-21 01:34:57 +0000227
Chris Liechti256ea212015-08-29 23:57:00 +0200228 .. attribute:: dtr
cliechtibb5c3c52009-07-23 02:29:27 +0000229
Chris Liechti256ea212015-08-29 23:57:00 +0200230 :setter: Set the state of the DTR line
231 :getter: Return the state of the DTR line
232 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000233
Chris Liechti256ea212015-08-29 23:57:00 +0200234 Set DTR line to specified logic level. It is possible to assign this
235 value before opening the serial port, then the value is applied uppon
236 :meth:`open`.
cliechtic1c37602009-07-21 01:34:57 +0000237
Chris Liechti518b0d32015-08-30 02:20:39 +0200238 Read-only attributes:
239
240 .. attribute:: name
241
242 :getter: Device name.
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100243 :type: str
Chris Liechti518b0d32015-08-30 02:20:39 +0200244
245 .. versionadded:: 2.5
246
Chris Liechti256ea212015-08-29 23:57:00 +0200247 .. attribute:: cts
248
249 :getter: Get the state of the CTS line
250 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000251
cliechtic1c37602009-07-21 01:34:57 +0000252 Return the state of the CTS line.
253
Chris Liechti256ea212015-08-29 23:57:00 +0200254 .. attribute:: dsr
cliechtic1c37602009-07-21 01:34:57 +0000255
Chris Liechti256ea212015-08-29 23:57:00 +0200256 :getter: Get the state of the DSR line
257 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000258
cliechtic1c37602009-07-21 01:34:57 +0000259 Return the state of the DSR line.
260
Chris Liechti256ea212015-08-29 23:57:00 +0200261 .. attribute:: ri
cliechtic1c37602009-07-21 01:34:57 +0000262
Chris Liechti256ea212015-08-29 23:57:00 +0200263 :getter: Get the state of the RI line
264 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000265
cliechtic1c37602009-07-21 01:34:57 +0000266 Return the state of the RI line.
267
Chris Liechti256ea212015-08-29 23:57:00 +0200268 .. attribute:: cd
cliechtic1c37602009-07-21 01:34:57 +0000269
Chris Liechti256ea212015-08-29 23:57:00 +0200270 :getter: Get the state of the CD line
271 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000272
cliechtic1c37602009-07-21 01:34:57 +0000273 Return the state of the CD line
274
cliechtif81362e2009-07-25 03:44:33 +0000275
cliechti25375b52010-07-21 23:27:13 +0000276 New values can be assigned to the following attributes (properties), the
277 port will be reconfigured, even if it's opened at that time:
cliechtic1c37602009-07-21 01:34:57 +0000278
cliechtiedcdbe42009-07-22 00:48:34 +0000279
280 .. attribute:: port
281
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100282 :type: str
283
cliechtiedcdbe42009-07-22 00:48:34 +0000284 Read or write port. When the port is already open, it will be closed
285 and reopened with the new setting.
286
287 .. attribute:: baudrate
288
Chris Liechti518b0d32015-08-30 02:20:39 +0200289 :getter: Get current baud rate
290 :setter: Set new baud rate
291 :type: int
292
cliechti6066f842009-07-24 00:05:45 +0000293 Read or write current baud rate setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000294
295 .. attribute:: bytesize
296
Chris Liechti518b0d32015-08-30 02:20:39 +0200297 :getter: Get current byte size
298 :setter: Set new byte size. Possible values:
299 :const:`FIVEBITS`, :const:`SIXBITS`, :const:`SEVENBITS`,
300 :const:`EIGHTBITS`
301 :type: int
302
cliechti6066f842009-07-24 00:05:45 +0000303 Read or write current data byte size setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000304
305 .. attribute:: parity
306
Chris Liechti518b0d32015-08-30 02:20:39 +0200307 :getter: Get current parity setting
308 :setter: Set new parity mode. Possible values:
309 :const:`PARITY_NONE`, :const:`PARITY_EVEN`, :const:`PARITY_ODD`
310 :const:`PARITY_MARK`, :const:`PARITY_SPACE`
311
cliechti6066f842009-07-24 00:05:45 +0000312 Read or write current parity setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000313
314 .. attribute:: stopbits
315
Chris Liechti518b0d32015-08-30 02:20:39 +0200316 :getter: Get current stop bit setting
317 :setter: Set new stop bit setting. Possible values:
318 :const:`STOPBITS_ONE`, :const:`STOPBITS_ONE_POINT_FIVE`,
319 :const:`STOPBITS_TWO`
320
cliechti6066f842009-07-24 00:05:45 +0000321 Read or write current stop bit width setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000322
323 .. attribute:: timeout
324
Chris Liechti518b0d32015-08-30 02:20:39 +0200325 :getter: Get current read timeout setting
326 :setter: Set read timeout
327 :type: float (seconds)
328
cliechti6066f842009-07-24 00:05:45 +0000329 Read or write current read timeout setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000330
Chris Liechti518b0d32015-08-30 02:20:39 +0200331 .. attribute:: write_timeout
332
333 :getter: Get current write timeout setting
334 :setter: Set write timeout
335 :type: float (seconds)
cliechtiedcdbe42009-07-22 00:48:34 +0000336
cliechti6066f842009-07-24 00:05:45 +0000337 Read or write current write timeout setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000338
Chris Liechti518b0d32015-08-30 02:20:39 +0200339 .. versionchanged:: 3.0 renamed from ``writeTimeout``
340
341 .. attribute:: inter_byte_timeout
342
343 :getter: Get current inter byte timeout setting
344 :setter: Disable (``None``) or enable the inter byte timeout
345 :type: float or None
346
347 Read or write current inter byte timeout setting.
348
349 .. versionchanged:: 3.0 renamed from ``interCharTimeout``
350
cliechtiedcdbe42009-07-22 00:48:34 +0000351 .. attribute:: xonxoff
352
Chris Liechti518b0d32015-08-30 02:20:39 +0200353 :getter: Get current software flow control setting
354 :setter: Enable or disable software flow control
355 :type: bool
356
cliechti6066f842009-07-24 00:05:45 +0000357 Read or write current software flow control rate setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000358
359 .. attribute:: rtscts
360
Chris Liechti518b0d32015-08-30 02:20:39 +0200361 :getter: Get current hardware flow control setting
362 :setter: Enable or disable hardware flow control
363 :type: bool
364
cliechti6066f842009-07-24 00:05:45 +0000365 Read or write current hardware flow control setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000366
367 .. attribute:: dsrdtr
368
Chris Liechti518b0d32015-08-30 02:20:39 +0200369 :getter: Get current hardware flow control setting
370 :setter: Enable or disable hardware flow control
371 :type: bool
372
cliechti6066f842009-07-24 00:05:45 +0000373 Read or write current hardware flow control setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000374
Chris Liechtice621882015-08-06 19:29:31 +0200375 .. attribute:: rs485_mode
376
Chris Liechti518b0d32015-08-30 02:20:39 +0200377 :getter: Get the current RS485 settings
378 :setter: Disable (``None``) or enable the RS485 settings
379 :type: :class:`rs485.RS485Settings` or ``None``
380 :platform: Posix (Linux, limited set of hardware)
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100381 :platform: Windows (only RTS on TX possible)
Chris Liechtice621882015-08-06 19:29:31 +0200382
383 Attribute to configure RS485 support. When set to an instance of
384 :class:`rs485.RS485Settings` and supported by OS, RTS will be active
385 when data is sent and inactive otherwise (for reception). The
386 :class:`rs485.RS485Settings` class provides additional settings
387 supported on some platforms.
388
389 .. versionadded:: 3.0
390
391
cliechtiedcdbe42009-07-22 00:48:34 +0000392 The following constants are also provided:
393
394 .. attribute:: BAUDRATES
395
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100396 A list of valid baud rates. The list may be incomplete, such that higher
397 and/or intermediate baud rates may also be supported by the device
398 (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000399
400 .. attribute:: BYTESIZES
401
cliechti25375b52010-07-21 23:27:13 +0000402 A list of valid byte sizes for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000403
404 .. attribute:: PARITIES
405
cliechti25375b52010-07-21 23:27:13 +0000406 A list of valid parities for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000407
408 .. attribute:: STOPBITS
409
cliechti25375b52010-07-21 23:27:13 +0000410 A list of valid stop bit widths for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000411
cliechti4a567a02009-07-27 22:09:31 +0000412
cliechti25375b52010-07-21 23:27:13 +0000413 The following methods are for compatibility with the :mod:`io` library.
cliechti4a567a02009-07-27 22:09:31 +0000414
415 .. method:: readable()
416
417 :return: True
cliechtif4566342009-08-04 00:07:19 +0000418
cliechti4a567a02009-07-27 22:09:31 +0000419 .. versionadded:: 2.5
420
421 .. method:: writable()
422
423 :return: True
cliechtif4566342009-08-04 00:07:19 +0000424
cliechti4a567a02009-07-27 22:09:31 +0000425 .. versionadded:: 2.5
426
427 .. method:: seekable()
428
429 :return: False
cliechtif4566342009-08-04 00:07:19 +0000430
cliechti4a567a02009-07-27 22:09:31 +0000431 .. versionadded:: 2.5
432
433 .. method:: readinto(b)
434
cliechti8611bf42009-08-03 00:34:03 +0000435 :param b: bytearray or array instance
cliechti4a567a02009-07-27 22:09:31 +0000436 :return: Number of byte read
437
cliechtid7e7ce22009-08-03 02:01:07 +0000438 Read up to len(b) bytes into :class:`bytearray` *b* and return the
439 number of bytes read.
cliechti4a567a02009-07-27 22:09:31 +0000440
441 .. versionadded:: 2.5
442
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100443 The port settings can be read and written as dictionary. The following
444 keys are supported: ``write_timeout``, ``inter_byte_timeout``,
445 ``dsrdtr``, ``baudrate``, ``timeout``, ``parity``, ``bytesize``,
446 ``rtscts``, ``stopbits``, ``xonxoff``
cliechti25375b52010-07-21 23:27:13 +0000447
Chris Liechti256ea212015-08-29 23:57:00 +0200448 .. method:: get_settings()
cliechti4065dce2009-08-10 00:55:46 +0000449
450 :return: a dictionary with current port settings.
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100451 :rtype: dict
cliechti4065dce2009-08-10 00:55:46 +0000452
453 Get a dictionary with port settings. This is useful to backup the
454 current settings so that a later point in time they can be restored
Chris Liechti518b0d32015-08-30 02:20:39 +0200455 using :meth:`apply_settings`.
cliechti4065dce2009-08-10 00:55:46 +0000456
Chris Liechti19688bf2016-05-06 23:48:36 +0200457 Note that the state of control lines (RTS/DTR) are not part of the
458 settings.
cliechti4065dce2009-08-10 00:55:46 +0000459
460 .. versionadded:: 2.5
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100461 .. versionchanged:: 3.0 renamed from ``getSettingsDict``
cliechti4065dce2009-08-10 00:55:46 +0000462
Chris Liechti256ea212015-08-29 23:57:00 +0200463 .. method:: apply_settings(d)
cliechti4065dce2009-08-10 00:55:46 +0000464
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100465 :param dict d: a dictionary with port settings.
cliechti4065dce2009-08-10 00:55:46 +0000466
Chris Liechti518b0d32015-08-30 02:20:39 +0200467 Applies a dictionary that was created by :meth:`get_settings`. Only
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100468 changes are applied and when a key is missing, it means that the
469 setting stays unchanged.
cliechti4065dce2009-08-10 00:55:46 +0000470
471 Note that control lines (RTS/DTR) are not changed.
472
473 .. versionadded:: 2.5
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100474 .. versionchanged:: 3.0 renamed from ``applySettingsDict``
cliechti4065dce2009-08-10 00:55:46 +0000475
cliechti25375b52010-07-21 23:27:13 +0000476 Platform specific methods.
477
cliechtic648da92011-12-29 01:17:51 +0000478 .. warning:: Programs using the following methods and attributes are not
479 portable to other platforms!
cliechti25375b52010-07-21 23:27:13 +0000480
481 .. method:: nonblocking()
482
Chris Liechtice621882015-08-06 19:29:31 +0200483 :platform: Posix
cliechti25375b52010-07-21 23:27:13 +0000484
485 Configure the device for nonblocking operation. This can be useful if
Chris Liechti518b0d32015-08-30 02:20:39 +0200486 the port is used with :mod:`select`. Note that :attr:`timeout` must
487 also be set to ``0``
cliechti25375b52010-07-21 23:27:13 +0000488
489 .. method:: fileno()
490
Chris Liechtice621882015-08-06 19:29:31 +0200491 :platform: Posix
cliechti25375b52010-07-21 23:27:13 +0000492 :return: File descriptor.
493
494 Return file descriptor number for the port that is opened by this object.
495 It is useful when serial ports are used with :mod:`select`.
496
Chris Liechti518b0d32015-08-30 02:20:39 +0200497 .. method:: set_input_flow_control(enable)
cliechti25375b52010-07-21 23:27:13 +0000498
cliechti2f0f8a32011-12-28 22:10:00 +0000499 :platform: Posix
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100500 :param bool enable: Set flow control state.
cliechti25375b52010-07-21 23:27:13 +0000501
cliechti2f0f8a32011-12-28 22:10:00 +0000502 Manually control flow - when software flow control is enabled.
503
504 This will send XON (true) and XOFF (false) to the other device.
505
Chris Liechti518b0d32015-08-30 02:20:39 +0200506 .. versionadded:: 2.7 (Posix support added)
507 .. versionchanged:: 3.0 renamed from ``flowControlOut``
cliechti2f0f8a32011-12-28 22:10:00 +0000508
Chris Liechti518b0d32015-08-30 02:20:39 +0200509 .. method:: set_output_flow_control(enable)
cliechti2f0f8a32011-12-28 22:10:00 +0000510
Chris Liechti518b0d32015-08-30 02:20:39 +0200511 :platform: Posix (HW and SW flow control)
512 :platform: Windows (SW flow control only)
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100513 :param bool enable: Set flow control state.
cliechti2f0f8a32011-12-28 22:10:00 +0000514
515 Manually control flow of outgoing data - when hardware or software flow
516 control is enabled.
517
518 Sending will be suspended when called with ``False`` and enabled when
519 called with ``True``.
520
Chris Liechti518b0d32015-08-30 02:20:39 +0200521 .. versionchanged:: 2.7 (renamed on Posix, function was called ``flowControl``)
522 .. versionchanged:: 3.0 renamed from ``setXON``
Chris Liechti256ea212015-08-29 23:57:00 +0200523
Chris Liechti19688bf2016-05-06 23:48:36 +0200524 .. method:: cancel_read()
Chris Liechti256ea212015-08-29 23:57:00 +0200525
Chris Liechti9d893052016-05-18 22:03:29 +0200526 :platform: Posix
Chris Liechti19688bf2016-05-06 23:48:36 +0200527 :platform: Windows
528
Chris Liechti9d893052016-05-18 22:03:29 +0200529 Cancel a pending read operation from an other thread. A blocking
530 :meth:`read` call is aborted immediately. :meth:`read` will not report
531 any error but return all data received up to that point (similar to a
532 timeout).
533
534 On Posix a call to `cancel_read()` may cancel a future :meth:`read` call.
Chris Liechti19688bf2016-05-06 23:48:36 +0200535
536 .. versionadded:: 3.1
537
538 .. method:: cancel_write()
539
Chris Liechti9d893052016-05-18 22:03:29 +0200540 :platform: Posix
Chris Liechti19688bf2016-05-06 23:48:36 +0200541 :platform: Windows
542
Chris Liechti9d893052016-05-18 22:03:29 +0200543 Cancel a pending write operation from an other thread. The
544 :meth:`write` method will return immediately (no error indicated).
545 However the OS may still be sending from the buffer, a separate call to
546 :meth:`reset_output_buffer` may be needed.
547
548 On Posix a call to `cancel_write()` may cancel a future :meth:`write` call.
Chris Liechti19688bf2016-05-06 23:48:36 +0200549
550 .. versionadded:: 3.1
Chris Liechti518b0d32015-08-30 02:20:39 +0200551
Chris Liechti9a99cb22015-08-30 22:16:50 +0200552 .. note:: The following members are deprecated and will be removed in a
Chris Liechti518b0d32015-08-30 02:20:39 +0200553 future release.
Chris Liechti256ea212015-08-29 23:57:00 +0200554
555 .. attribute:: portstr
556
Chris Liechti518b0d32015-08-30 02:20:39 +0200557 .. deprecated:: 2.5 use :attr:`name` instead
Chris Liechti256ea212015-08-29 23:57:00 +0200558
559 .. method:: inWaiting()
560
Chris Liechti518b0d32015-08-30 02:20:39 +0200561 .. deprecated:: 3.0 see :attr:`in_waiting`
562
563 .. attribute:: writeTimeout
564
565 .. deprecated:: 3.0 see :attr:`write_timeout`
Chris Liechti256ea212015-08-29 23:57:00 +0200566
567 .. attribute:: interCharTimeout
568
Chris Liechti518b0d32015-08-30 02:20:39 +0200569 .. deprecated:: 3.0 see :attr:`inter_byte_timeout`
Chris Liechti256ea212015-08-29 23:57:00 +0200570
571 .. method:: sendBreak(duration=0.25)
572
Chris Liechti518b0d32015-08-30 02:20:39 +0200573 .. deprecated:: 3.0 see :meth:`send_break`
Chris Liechti256ea212015-08-29 23:57:00 +0200574
575 .. method:: flushInput()
576
Chris Liechti518b0d32015-08-30 02:20:39 +0200577 .. deprecated:: 3.0 see :meth:`reset_input_buffer`
Chris Liechti256ea212015-08-29 23:57:00 +0200578
579 .. method:: flushOutput()
580
Chris Liechti518b0d32015-08-30 02:20:39 +0200581 .. deprecated:: 3.0 see :meth:`reset_output_buffer`
Chris Liechti256ea212015-08-29 23:57:00 +0200582
583 .. method:: setBreak(level=True)
584
Chris Liechti518b0d32015-08-30 02:20:39 +0200585 .. deprecated:: 3.0 see :attr:`break_condition`
Chris Liechti256ea212015-08-29 23:57:00 +0200586
587 .. method:: setRTS(level=True)
588
Chris Liechti518b0d32015-08-30 02:20:39 +0200589 .. deprecated:: 3.0 see :attr:`rts`
Chris Liechti256ea212015-08-29 23:57:00 +0200590
591 .. method:: setDTR(level=True)
592
Chris Liechti518b0d32015-08-30 02:20:39 +0200593 .. deprecated:: 3.0 see :attr:`dtr`
Chris Liechti256ea212015-08-29 23:57:00 +0200594
595 .. method:: getCTS()
596
Chris Liechti518b0d32015-08-30 02:20:39 +0200597 .. deprecated:: 3.0 see :attr:`cts`
Chris Liechti256ea212015-08-29 23:57:00 +0200598
599 .. method:: getDSR()
600
Chris Liechti518b0d32015-08-30 02:20:39 +0200601 .. deprecated:: 3.0 see :attr:`dsr`
Chris Liechti256ea212015-08-29 23:57:00 +0200602
603 .. method:: getRI()
604
Chris Liechti518b0d32015-08-30 02:20:39 +0200605 .. deprecated:: 3.0 see :attr:`ri`
Chris Liechti256ea212015-08-29 23:57:00 +0200606
607 .. method:: getCD()
608
Chris Liechti518b0d32015-08-30 02:20:39 +0200609 .. deprecated:: 3.0 see :attr:`cd`
Chris Liechti256ea212015-08-29 23:57:00 +0200610
611 .. method:: getSettingsDict()
612
Chris Liechti518b0d32015-08-30 02:20:39 +0200613 .. deprecated:: 3.0 see :meth:`get_settings`
Chris Liechti256ea212015-08-29 23:57:00 +0200614
615 .. method:: applySettingsDict(d)
616
Chris Liechti518b0d32015-08-30 02:20:39 +0200617 .. deprecated:: 3.0 see :meth:`apply_settings`
Chris Liechti256ea212015-08-29 23:57:00 +0200618
619 .. method:: outWaiting()
620
Chris Liechti518b0d32015-08-30 02:20:39 +0200621 .. deprecated:: 3.0 see :attr:`out_waiting`
Chris Liechti256ea212015-08-29 23:57:00 +0200622
623 .. method:: setXON(level=True)
624
Chris Liechti518b0d32015-08-30 02:20:39 +0200625 .. deprecated:: 3.0 see :meth:`set_output_flow_control`
Chris Liechti256ea212015-08-29 23:57:00 +0200626
627 .. method:: flowControlOut(enable)
628
Chris Liechti518b0d32015-08-30 02:20:39 +0200629 .. deprecated:: 3.0 see :meth:`set_input_flow_control`
cliechtif4566342009-08-04 00:07:19 +0000630
cliechtic648da92011-12-29 01:17:51 +0000631 .. attribute:: rtsToggle
632
633 :platform: Windows
634
635 Attribute to configure RTS toggle control setting. When enabled and
636 supported by OS, RTS will be active when data is available and inactive
637 if no data is available.
638
639 .. versionadded:: 2.6
Chris Liechti518b0d32015-08-30 02:20:39 +0200640 .. versionchanged:: 3.0 (removed, see :attr:`rs485_mode` instead)
cliechtic648da92011-12-29 01:17:51 +0000641
642
cliechtic56e41d2011-08-25 22:06:38 +0000643Implementation detail: some attributes and functions are provided by the
644class :class:`SerialBase` and some by the platform specific class and
645others by the base class mentioned above.
cliechti25375b52010-07-21 23:27:13 +0000646
Chris Liechtice621882015-08-06 19:29:31 +0200647RS485 support
648-------------
649The :class:`Serial` class has a :attr:`Serial.rs485_mode` attribute which allows to
650enable RS485 specific support on some platforms. Currently Windows and Linux
651(only a small number of devices) are supported.
cliechti4a567a02009-07-27 22:09:31 +0000652
Chris Liechtice621882015-08-06 19:29:31 +0200653:attr:`Serial.rs485_mode` needs to be set to an instance of
654:class:`rs485.RS485Settings` to enable or to ``None`` to disable this feature.
cliechti4a567a02009-07-27 22:09:31 +0000655
Chris Liechtice621882015-08-06 19:29:31 +0200656Usage::
cliechti4a567a02009-07-27 22:09:31 +0000657
Chris Liechtice621882015-08-06 19:29:31 +0200658 ser = serial.Serial(...)
659 ser.rs485_mode = serial.rs485.RS485Settings(...)
660 ser.write(b'hello')
cliechti4a567a02009-07-27 22:09:31 +0000661
Chris Liechtice621882015-08-06 19:29:31 +0200662There is a subclass :class:`rs485.RS485` available to emulate the RS485 support
663on regular serial ports.
cliechti4a567a02009-07-27 22:09:31 +0000664
cliechti4a567a02009-07-27 22:09:31 +0000665
Chris Liechtice621882015-08-06 19:29:31 +0200666.. class:: rs485.RS485Settings
cliechti4a567a02009-07-27 22:09:31 +0000667
Chris Liechtice621882015-08-06 19:29:31 +0200668 A class that holds RS485 specific settings which are supported on
669 some platforms.
cliechti4a567a02009-07-27 22:09:31 +0000670
Chris Liechtice621882015-08-06 19:29:31 +0200671 .. versionadded:: 3.0
cliechti4a567a02009-07-27 22:09:31 +0000672
Chris Liechtice621882015-08-06 19:29:31 +0200673 .. 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 +0000674
Chris Liechtice621882015-08-06 19:29:31 +0200675 :param bool rts_level_for_tx:
676 RTS level for transmission
cliechti4a567a02009-07-27 22:09:31 +0000677
Chris Liechtice621882015-08-06 19:29:31 +0200678 :param bool rts_level_for_rx:
679 RTS level for reception
cliechti4a567a02009-07-27 22:09:31 +0000680
Chris Liechtice621882015-08-06 19:29:31 +0200681 :param bool loopback:
682 When set to ``True`` transmitted data is also received.
cliechti4a567a02009-07-27 22:09:31 +0000683
Chris Liechtice621882015-08-06 19:29:31 +0200684 :param float delay_before_tx:
685 Delay after setting RTS but before transmission starts
686
687 :param float delay_before_rx:
688 Delay after transmission ends and resetting RTS
689
690 .. attribute:: rts_level_for_tx
691
692 RTS level for transmission.
693
694 .. attribute:: rts_level_for_rx
695
696 RTS level for reception.
697
698 .. attribute:: loopback
699
700 When set to ``True`` transmitted data is also received.
701
702 .. attribute:: delay_before_tx
703
704 Delay after setting RTS but before transmission starts (seconds as float).
705
706 .. attribute:: delay_before_rx
707
708 Delay after transmission ends and resetting RTS (seconds as float).
cliechti4a567a02009-07-27 22:09:31 +0000709
710
Chris Liechtice621882015-08-06 19:29:31 +0200711.. class:: rs485.RS485
cliechti4a567a02009-07-27 22:09:31 +0000712
Chris Liechtice621882015-08-06 19:29:31 +0200713 A subclass that replaces the :meth:`Serial.write` method with one that toggles RTS
714 according to the RS485 settings.
cliechti4a567a02009-07-27 22:09:31 +0000715
Chris Liechti518b0d32015-08-30 02:20:39 +0200716 Usage::
717
718 ser = serial.rs485.RS485(...)
719 ser.rs485_mode = serial.rs485.RS485Settings(...)
720 ser.write(b'hello')
721
Chris Liechtice621882015-08-06 19:29:31 +0200722 .. warning:: This may work unreliably on some serial ports (control signals not
723 synchronized or delayed compared to data). Using delays may be unreliable
724 (varying times, larger than expected) as the OS may not support very fine
725 grained delays (no smaller than in the order of tens of milliseconds).
cliechti4a567a02009-07-27 22:09:31 +0000726
Chris Liechtice621882015-08-06 19:29:31 +0200727 .. note:: Some implementations support this natively in the class
728 :class:`Serial`. Better performance can be expected when the native version
729 is used.
cliechti4a567a02009-07-27 22:09:31 +0000730
Chris Liechtice621882015-08-06 19:29:31 +0200731 .. note:: The loopback property is ignored by this implementation. The actual
732 behavior depends on the used hardware.
cliechti4a567a02009-07-27 22:09:31 +0000733
cliechti4a567a02009-07-27 22:09:31 +0000734
cliechtie214ff82010-07-21 15:48:47 +0000735
cliechti25375b52010-07-21 23:27:13 +0000736
cliechti7aed8332009-08-05 14:19:31 +0000737:rfc:`2217` Network ports
738-------------------------
739
740.. warning:: This implementation is currently in an experimental state. Use
741 at your own risk.
cliechtiedcdbe42009-07-22 00:48:34 +0000742
cliechtiec4ac1b2009-08-02 00:47:21 +0000743.. class:: rfc2217.Serial
744
Chris Liechti2a1befc2015-10-21 17:37:08 +0200745 This implements a :rfc:`2217` compatible client. Port names are :ref:`URL
746 <URLs>` in the form: ``rfc2217://<host>:<port>[?<option>[&<option>]]``
cliechtiec4ac1b2009-08-02 00:47:21 +0000747
cliechtiec4ac1b2009-08-02 00:47:21 +0000748 This class API is compatible to :class:`Serial` with a few exceptions:
749
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100750 - ``write_timeout`` is not implemented
cliechtiec4ac1b2009-08-02 00:47:21 +0000751 - The current implementation starts a thread that keeps reading from the
752 (internal) socket. The thread is managed automatically by the
753 :class:`rfc2217.Serial` port object on :meth:`open`/:meth:`close`.
754 However it may be a problem for user applications that like to use select
755 instead of threads.
756
757 Due to the nature of the network and protocol involved there are a few
758 extra points to keep in mind:
759
760 - All operations have an additional latency time.
761 - Setting control lines (RTS/CTS) needs more time.
762 - Reading the status lines (DSR/DTR etc.) returns a cached value. When that
763 cache is updated depends entirely on the server. The server itself may
764 implement a polling at a certain rate and quick changes may be invisible.
765 - The network layer also has buffers. This means that :meth:`flush`,
Chris Liechti518b0d32015-08-30 02:20:39 +0200766 :meth:`reset_input_buffer` and :meth:`reset_output_buffer` may work with
767 additional delay. Likewise :attr:`in_waiting` returns the size of the
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100768 data arrived at the objects internal buffer and excludes any bytes in the
Chris Liechti518b0d32015-08-30 02:20:39 +0200769 network buffers or any server side buffer.
cliechtiec4ac1b2009-08-02 00:47:21 +0000770 - Closing and immediately reopening the same port may fail due to time
771 needed by the server to get ready again.
772
773 Not implemented yet / Possible problems with the implementation:
774
cliechti8611bf42009-08-03 00:34:03 +0000775 - :rfc:`2217` flow control between client and server (objects internal
776 buffer may eat all your memory when never read).
cliechtid7e7ce22009-08-03 02:01:07 +0000777 - No authentication support (servers may not prompt for a password etc.)
778 - No encryption.
779
780 Due to lack of authentication and encryption it is not suitable to use this
781 client for connections across the internet and should only be used in
782 controlled environments.
cliechtiec4ac1b2009-08-02 00:47:21 +0000783
cliechti7c640ed2009-08-02 00:54:51 +0000784 .. versionadded:: 2.5
cliechtiec4ac1b2009-08-02 00:47:21 +0000785
cliechti7aed8332009-08-05 14:19:31 +0000786
787.. class:: rfc2217.PortManager
788
789 This class provides helper functions for implementing :rfc:`2217`
790 compatible servers.
791
Chris Liechti518b0d32015-08-30 02:20:39 +0200792 Basically, it implements everything needed for the :rfc:`2217` protocol.
cliechti7aed8332009-08-05 14:19:31 +0000793 It just does not open sockets and read/write to serial ports (though it
794 changes other port settings). The user of this class must take care of the
795 data transmission itself. The reason for that is, that this way, this class
796 supports all programming models such as threads and select.
797
798 Usage examples can be found in the examples where two TCP/IP - serial
799 converters are shown, one using threads (the single port server) and an
800 other using select (the multi port server).
801
802 .. note:: Each new client connection must create a new instance as this
803 object (and the :rfc:`2217` protocol) has internal state.
804
805 .. method:: __init__(serial_port, connection, debug_output=False)
806
807 :param serial_port: a :class:`Serial` instance that is managed.
808 :param connection: an object implementing :meth:`write`, used to write
809 to the network.
cliechti86844e82009-08-12 00:05:33 +0000810 :param debug_output: enables debug messages: a :class:`logging.Logger`
811 instance or None.
cliechti7aed8332009-08-05 14:19:31 +0000812
813 Initializes the Manager and starts negotiating with client in Telnet
814 and :rfc:`2217` protocol. The negotiation starts immediately so that
815 the class should be instantiated in the moment the client connects.
816
817 The *serial_port* can be controlled by :rfc:`2217` commands. This
cliechti06281be2011-08-25 23:08:29 +0000818 object will modify the port settings (baud rate etc.) and control lines
cliechti7aed8332009-08-05 14:19:31 +0000819 (RTS/DTR) send BREAK etc. when the corresponding commands are found by
820 the :meth:`filter` method.
821
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100822 The *connection* object must implement a :meth:`write` function.
cliechti7aed8332009-08-05 14:19:31 +0000823 This function must ensure that *data* is written at once (no user data
824 mixed in, i.e. it must be thread-safe). All data must be sent in its
825 raw form (:meth:`escape` must not be used) as it is used to send Telnet
826 and :rfc:`2217` control commands.
827
cliechti86844e82009-08-12 00:05:33 +0000828 For diagnostics of the connection or the implementation, *debug_output*
829 can be set to an instance of a :class:`logging.Logger` (e.g.
830 ``logging.getLogger('rfc2217.server')``). The caller should configure
831 the logger using ``setLevel`` for the desired detail level of the logs.
832
cliechti7aed8332009-08-05 14:19:31 +0000833 .. method:: escape(data)
834
835 :param data: data to be sent over the network.
836 :return: data, escaped for Telnet/:rfc:`2217`
837
838 A generator that escapes all data to be compatible with :rfc:`2217`.
839 Implementors of servers should use this function to process all data
840 sent over the network.
841
842 The function returns a generator which can be used in ``for`` loops.
cliechtie214ff82010-07-21 15:48:47 +0000843 It can be converted to bytes using :func:`serial.to_bytes`.
cliechti7aed8332009-08-05 14:19:31 +0000844
845 .. method:: filter(data)
846
847 :param data: data read from the network, including Telnet and
848 :rfc:`2217` controls.
849 :return: data, free from Telnet and :rfc:`2217` controls.
850
851 A generator that filters and processes all data related to :rfc:`2217`.
852 Implementors of servers should use this function to process all data
853 received from the network.
854
855 The function returns a generator which can be used in ``for`` loops.
cliechtie214ff82010-07-21 15:48:47 +0000856 It can be converted to bytes using :func:`serial.to_bytes`.
cliechti7aed8332009-08-05 14:19:31 +0000857
cliechti7cb78e82009-08-05 15:47:57 +0000858 .. method:: check_modem_lines(force_notification=False)
859
860 :param force_notification: Set to false. Parameter is for internal use.
cliechti7aed8332009-08-05 14:19:31 +0000861
862 This function needs to be called periodically (e.g. every second) when
863 the server wants to send NOTIFY_MODEMSTATE messages. This is required
864 to support the client for reading CTS/DSR/RI/CD status lines.
865
866 The function reads the status line and issues the notifications
867 automatically.
868
869 .. versionadded:: 2.5
870
cliechtiec4ac1b2009-08-02 00:47:21 +0000871.. seealso::
872
873 :rfc:`2217` - Telnet Com Port Control Option
874
875
cliechtic1c37602009-07-21 01:34:57 +0000876Exceptions
877==========
878
879.. exception:: SerialException
880
881 Base class for serial port exceptions.
882
cliechti4a567a02009-07-27 22:09:31 +0000883 .. versionchanged:: 2.5
cliechti4cb94662013-10-17 03:17:50 +0000884 Now derives from :exc:`IOError` instead of :exc:`Exception`
cliechti4a567a02009-07-27 22:09:31 +0000885
cliechtic1c37602009-07-21 01:34:57 +0000886.. exception:: SerialTimeoutException
887
888 Exception that is raised on write timeouts.
889
890
891Constants
892=========
893
cliechti87686242009-08-18 00:58:31 +0000894*Parity*
895
cliechtic1c37602009-07-21 01:34:57 +0000896.. data:: PARITY_NONE
897.. data:: PARITY_EVEN
898.. data:: PARITY_ODD
899.. data:: PARITY_MARK
900.. data:: PARITY_SPACE
901
cliechti87686242009-08-18 00:58:31 +0000902*Stop bits*
903
cliechtic1c37602009-07-21 01:34:57 +0000904.. data:: STOPBITS_ONE
905.. data:: STOPBITS_ONE_POINT_FIVE
906.. data:: STOPBITS_TWO
907
cliechti06281be2011-08-25 23:08:29 +0000908Note that 1.5 stop bits are not supported on POSIX. It will fall back to 2 stop
cliechti41be0392010-01-02 03:02:38 +0000909bits.
910
cliechti87686242009-08-18 00:58:31 +0000911*Byte size*
912
cliechtic1c37602009-07-21 01:34:57 +0000913.. data:: FIVEBITS
914.. data:: SIXBITS
915.. data:: SEVENBITS
916.. data:: EIGHTBITS
cliechti5b7d16a2009-07-21 21:53:59 +0000917
cliechti87686242009-08-18 00:58:31 +0000918
919*Others*
920
cliechti8611bf42009-08-03 00:34:03 +0000921Default control characters (instances of :class:`bytes` for Python 3.0+) for
cliechtidaf47ba2009-07-28 01:28:16 +0000922software flow control:
cliechti6066f842009-07-24 00:05:45 +0000923
cliechti5b7d16a2009-07-21 21:53:59 +0000924.. data:: XON
925.. data:: XOFF
cliechtif81362e2009-07-25 03:44:33 +0000926
cliechti4a567a02009-07-27 22:09:31 +0000927Module version:
cliechtif81362e2009-07-25 03:44:33 +0000928
929.. data:: VERSION
930
Chris Liechti518b0d32015-08-30 02:20:39 +0200931 A string indicating the pySerial version, such as ``3.0``.
cliechtif81362e2009-07-25 03:44:33 +0000932
cliechti87686242009-08-18 00:58:31 +0000933 .. versionadded:: 2.3
934
cliechti44eb98f2011-03-21 21:41:10 +0000935
cliechtie542b362011-03-18 00:49:16 +0000936Module functions and attributes
937===============================
cliechtif81362e2009-07-25 03:44:33 +0000938
939.. function:: device(number)
940
Chris Liechti518b0d32015-08-30 02:20:39 +0200941 .. versionchanged:: 3.0 removed, use ``serial.tools.list_ports`` instead
942
cliechti7c640ed2009-08-02 00:54:51 +0000943
cliechtie3ab3532009-08-05 12:40:38 +0000944.. function:: serial_for_url(url, \*args, \*\*kwargs)
cliechti7c640ed2009-08-02 00:54:51 +0000945
cliechti86844e82009-08-12 00:05:33 +0000946 :param url: Device name, number or :ref:`URL <URLs>`
cliechti7c640ed2009-08-02 00:54:51 +0000947 :param do_not_open: When set to true, the serial port is not opened.
948 :return: an instance of :class:`Serial` or a compatible object.
949
950 Get a native or a :rfc:`2217` implementation of the Serial class, depending
cliechtid7e7ce22009-08-03 02:01:07 +0000951 on port/url. This factory function is useful when an application wants
cliechti25375b52010-07-21 23:27:13 +0000952 to support both, local ports and remote ports. There is also support
Chris Liechti589c92a2015-09-04 23:04:34 +0200953 for other types, see :ref:`URL <URLs>` section.
cliechti7c640ed2009-08-02 00:54:51 +0000954
cliechtid7e7ce22009-08-03 02:01:07 +0000955 The port is not opened when a keyword parameter called *do_not_open* is
956 given and true, by default it is opened.
cliechti7c640ed2009-08-02 00:54:51 +0000957
958 .. versionadded:: 2.5
cliechtif4566342009-08-04 00:07:19 +0000959
cliechti87686242009-08-18 00:58:31 +0000960
cliechtie542b362011-03-18 00:49:16 +0000961.. attribute:: protocol_handler_packages
962
963 This attribute is a list of package names (strings) that is searched for
964 protocol handlers.
965
966 e.g. we want to support a URL ``foobar://``. A module
967 ``my_handlers.protocol_foobar`` is provided by the user::
968
969 serial.protocol_handler_packages.append("my_handlers")
970 s = serial.serial_for_url("foobar://")
971
972 For an URL starting with ``XY://`` is the function :func:`serial_for_url`
973 attempts to import ``PACKAGE.protocol_XY`` with each candidate for
974 ``PACKAGE`` from this list.
975
976 .. versionadded:: 2.6
977
978
cliechti25375b52010-07-21 23:27:13 +0000979.. function:: to_bytes(sequence)
cliechtie214ff82010-07-21 15:48:47 +0000980
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100981 :param sequence: bytes, bytearray or memoryview
cliechti25375b52010-07-21 23:27:13 +0000982 :returns: an instance of ``bytes``
cliechtie214ff82010-07-21 15:48:47 +0000983
cliechtie542b362011-03-18 00:49:16 +0000984 Convert a sequence to a ``bytes`` type. This is used to write code that is
cliechtie214ff82010-07-21 15:48:47 +0000985 compatible to Python 2.x and 3.x.
986
cliechtie542b362011-03-18 00:49:16 +0000987 In Python versions prior 3.x, ``bytes`` is a subclass of str. They convert
cliechti25375b52010-07-21 23:27:13 +0000988 ``str([17])`` to ``'[17]'`` instead of ``'\x11'`` so a simple
cliechtie542b362011-03-18 00:49:16 +0000989 ``bytes(sequence)`` doesn't work for all versions of Python.
cliechtie214ff82010-07-21 15:48:47 +0000990
991 This function is used internally and in the unit tests.
992
cliechtie542b362011-03-18 00:49:16 +0000993 .. versionadded:: 2.5
994
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100995.. function:: iterbytes(sequence)
Chris Liechtid14b1ab2015-08-21 00:28:53 +0200996
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100997 :param sequence: bytes, bytearray or memoryview
Chris Liechtid14b1ab2015-08-21 00:28:53 +0200998 :returns: a generator that yields bytes
999
1000 Some versions of Python (3.x) would return integers instead of bytes when
1001 looping over an instance of ``bytes``. This helper function ensures that
1002 bytes are returned.
1003
1004 .. versionadded:: 3.0
1005
cliechtie214ff82010-07-21 15:48:47 +00001006
Chris Liechti811bf382015-10-10 00:54:47 +02001007Threading
1008=========
1009
1010.. module:: serial.threaded
1011.. versionadded:: 3.0
1012
1013.. warning:: This implementation is currently in an experimental state. Use
1014 at your own risk.
1015
1016This module provides classes to simplify working with threads and protocols.
1017
1018.. class:: Protocol
1019
Chris Liechti5665d572015-10-13 23:50:01 +02001020 Protocol as used by the :class:`ReaderThread`. This base class provides empty
Chris Liechti811bf382015-10-10 00:54:47 +02001021 implementations of all methods.
1022
1023
1024 .. method:: connection_made(transport)
1025
1026 :param transport: instance used to write to serial port.
1027
1028 Called when reader thread is started.
1029
1030 .. method:: data_received(data)
1031
Chris Liechtif8a09192015-12-20 23:36:38 +01001032 :param bytes data: received bytes
Chris Liechti811bf382015-10-10 00:54:47 +02001033
1034 Called with snippets received from the serial port.
1035
1036 .. method:: connection_lost(exc)
1037
1038 :param exc: Exception if connection was terminated by error else ``None``
1039
1040 Called when the serial port is closed or the reader loop terminated
1041 otherwise.
1042
1043.. class:: Packetizer(Protocol)
1044
1045 Read binary packets from serial port. Packets are expected to be terminated
1046 with a ``TERMINATOR`` byte (null byte by default).
1047
1048 The class also keeps track of the transport.
1049
1050 .. attribute:: TERMINATOR = b'\\0'
1051
1052 .. method:: __init__()
1053
1054 .. method:: connection_made(transport)
1055
Chris Liechtif8a09192015-12-20 23:36:38 +01001056 Stores transport.
Chris Liechti811bf382015-10-10 00:54:47 +02001057
1058 .. method:: connection_lost(exc)
1059
Chris Liechtif8a09192015-12-20 23:36:38 +01001060 Forgets transport.
Chris Liechti811bf382015-10-10 00:54:47 +02001061
1062 .. method:: data_received(data)
1063
Chris Liechtif8a09192015-12-20 23:36:38 +01001064 :param bytes data: partial received data
1065
1066 Buffer received data and search for :attr:`TERMINATOR`, when found,
Chris Liechti811bf382015-10-10 00:54:47 +02001067 call :meth:`handle_packet`.
1068
1069 .. method:: handle_packet(packet)
1070
Chris Liechti1c4c5992016-01-18 20:46:00 +01001071 :param bytes packet: a packet as defined by ``TERMINATOR``
1072
Chris Liechti811bf382015-10-10 00:54:47 +02001073 Process packets - to be overridden by subclassing.
1074
1075
1076.. class:: LineReader(Packetizer)
1077
1078 Read and write (Unicode) lines from/to serial port.
1079 The encoding is applied.
1080
1081
1082 .. attribute:: TERMINATOR = b'\\r\\n'
Chris Liechti1c4c5992016-01-18 20:46:00 +01001083
1084 Line ending.
1085
Chris Liechti811bf382015-10-10 00:54:47 +02001086 .. attribute:: ENCODING = 'utf-8'
Chris Liechti1c4c5992016-01-18 20:46:00 +01001087
1088 Encoding of the send and received data.
1089
Chris Liechti811bf382015-10-10 00:54:47 +02001090 .. attribute:: UNICODE_HANDLING = 'replace'
1091
Chris Liechti1c4c5992016-01-18 20:46:00 +01001092 Unicode error handly policy.
1093
Chris Liechti811bf382015-10-10 00:54:47 +02001094 .. method:: handle_packet(packet)
1095
Chris Liechti1c4c5992016-01-18 20:46:00 +01001096 :param bytes packet: a packet as defined by ``TERMINATOR``
1097
1098 In this case it will be a line, calls :meth:`handle_line` after applying
1099 the :attr:`ENCODING`.
1100
Chris Liechti811bf382015-10-10 00:54:47 +02001101 .. method:: handle_line(line)
1102
Chris Liechtif8a09192015-12-20 23:36:38 +01001103 :param str line: Unicode string with one line (excluding line terminator)
Chris Liechti811bf382015-10-10 00:54:47 +02001104
1105 Process one line - to be overridden by subclassing.
1106
1107 .. method:: write_line(text)
1108
Chris Liechtif8a09192015-12-20 23:36:38 +01001109 :param str text: Unicode string with one line (excluding line terminator)
Chris Liechti811bf382015-10-10 00:54:47 +02001110
Chris Liechtif8a09192015-12-20 23:36:38 +01001111 Write *text* to the transport. *text* is expected to be a Unicode
1112 string and the encoding is applied before sending and also the
1113 :attr:`TERMINATOR` (new line) is appended.
Chris Liechti811bf382015-10-10 00:54:47 +02001114
1115
Chris Liechti5665d572015-10-13 23:50:01 +02001116.. class:: ReaderThread(threading.Thread)
Chris Liechti811bf382015-10-10 00:54:47 +02001117
1118 Implement a serial port read loop and dispatch to a Protocol instance (like
1119 the :class:`asyncio.Protocol`) but do it with threads.
1120
Chris Liechtif8a09192015-12-20 23:36:38 +01001121 Calls to :meth:`close` will close the serial port but it is also possible
1122 to just :meth:`stop` this thread and continue to use the serial port
1123 instance otherwise.
Chris Liechti811bf382015-10-10 00:54:47 +02001124
1125 .. method:: __init__(serial_instance, protocol_factory)
1126
1127 :param serial_instance: serial port instance (opened) to be used.
1128 :param protocol_factory: a callable that returns a Protocol instance
1129
1130 Initialize thread.
1131
Chris Liechtif8a09192015-12-20 23:36:38 +01001132 Note that the ``serial_instance`` 's timeout is set to one second!
Chris Liechti811bf382015-10-10 00:54:47 +02001133 Other settings are not changed.
1134
1135 .. method:: stop()
1136
1137 Stop the reader thread.
1138
1139 .. method:: run()
1140
1141 The actual reader loop driven by the thread. It calls
1142 :meth:`Protocol.connection_made`, reads from the serial port calling
Chris Liechtif8a09192015-12-20 23:36:38 +01001143 :meth:`Protocol.data_received` and finally calls :meth:`Protocol.connection_lost`
Chris Liechti811bf382015-10-10 00:54:47 +02001144 when :meth:`close` is called or an error occurs.
1145
1146 .. method:: write(data)
1147
Chris Liechtif8a09192015-12-20 23:36:38 +01001148 :param bytes data: data to write
1149
Chris Liechti811bf382015-10-10 00:54:47 +02001150 Thread safe writing (uses lock).
1151
1152 .. method:: close()
1153
1154 Close the serial port and exit reader thread, calls :meth:`stop` (uses lock).
1155
1156 .. method:: connect()
1157
1158 Wait until connection is set up and return the transport and protocol
1159 instances.
1160
1161
1162 This class can be used as context manager, in this case it starts
1163 the thread and connects automatically. The serial port is closed
1164 when the context is left.
1165
1166 .. method:: __enter__()
1167
1168 :returns: protocol
1169
1170 Connect and return protocol instance.
1171
1172 .. method:: __exit__(exc_type, exc_val, exc_tb)
1173
1174 Closes serial port.
1175
Chris Liechtia1436b12015-10-12 23:19:04 +02001176Example::
1177
1178 class PrintLines(LineReader):
1179 def connection_made(self, transport):
1180 super(PrintLines, self).connection_made(transport)
1181 sys.stdout.write('port opened\n')
1182 self.write_line('hello world')
1183
1184 def handle_line(self, data):
1185 sys.stdout.write('line received: {}\n'.format(repr(data)))
1186
1187 def connection_lost(self, exc):
1188 if exc:
1189 traceback.print_exc(exc)
1190 sys.stdout.write('port closed\n')
1191
1192 ser = serial.serial_for_url('loop://', baudrate=115200, timeout=1)
Chris Liechti5665d572015-10-13 23:50:01 +02001193 with ReaderThread(ser, PrintLines) as protocol:
Chris Liechtia1436b12015-10-12 23:19:04 +02001194 protocol.write_line('hello')
1195 time.sleep(2)
1196
Chris Liechti811bf382015-10-10 00:54:47 +02001197
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001198asyncio
1199=======
1200
Chris Liechti589c92a2015-09-04 23:04:34 +02001201.. module:: serial.aio
1202
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001203.. warning:: This implementation is currently in an experimental state. Use
1204 at your own risk.
1205
Chris Liechti589c92a2015-09-04 23:04:34 +02001206Experimental asyncio support is available for Python 3.4 and newer. The module
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001207:mod:`serial.aio` provides a :class:`asyncio.Transport`:
1208``SerialTransport``.
1209
1210
1211A factory function (`asyncio.coroutine`) is provided:
1212
1213.. function:: create_serial_connection(loop, protocol_factory, \*args, \*\*kwargs)
1214
1215 :param loop: The event handler
1216 :param protocol_factory: Factory function for a :class:`asyncio.Protocol`
1217 :param args: Passed to the :class:`serial.Serial` init function
1218 :param kwargs: Passed to the :class:`serial.Serial` init function
1219 :platform: Posix
1220
1221 Get a connection making coroutine.
1222
1223Example::
1224
1225 class Output(asyncio.Protocol):
1226 def connection_made(self, transport):
1227 self.transport = transport
1228 print('port opened', transport)
Chris Liechti589c92a2015-09-04 23:04:34 +02001229 transport.serial.rts = False
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001230 transport.write(b'hello world\n')
1231
1232 def data_received(self, data):
1233 print('data received', repr(data))
1234 self.transport.close()
1235
1236 def connection_lost(self, exc):
1237 print('port closed')
1238 asyncio.get_event_loop().stop()
1239
1240 loop = asyncio.get_event_loop()
Chris Liechti589c92a2015-09-04 23:04:34 +02001241 coro = serial.aio.create_serial_connection(loop, Output, '/dev/ttyUSB0', baudrate=115200)
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001242 loop.run_until_complete(coro)
1243 loop.run_forever()
1244 loop.close()
1245