blob: f7216e44e9b64562aca5cead8cda87658b9de009 [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 Liechti48e40e92016-05-24 00:09:12 +0200199 Note, for some USB serial adapters, this may only flush the buffer of
200 the OS and not all the data that may be present in the USB part.
201
Chris Liechti518b0d32015-08-30 02:20:39 +0200202 .. versionchanged:: 3.0 renamed from ``flushOutput()``
203
Chris Liechti256ea212015-08-29 23:57:00 +0200204 .. method:: send_break(duration=0.25)
cliechtic1c37602009-07-21 01:34:57 +0000205
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100206 :param float duration: Time to activate the BREAK condition.
cliechtibb5c3c52009-07-23 02:29:27 +0000207
cliechtic1c37602009-07-21 01:34:57 +0000208 Send break condition. Timed, returns to idle state after given
209 duration.
210
cliechtic1c37602009-07-21 01:34:57 +0000211
Chris Liechti256ea212015-08-29 23:57:00 +0200212 .. attribute:: break_condition
cliechtibb5c3c52009-07-23 02:29:27 +0000213
Chris Liechti256ea212015-08-29 23:57:00 +0200214 :getter: Get the current BREAK state
215 :setter: Control the BREAK state
216 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000217
Chris Liechti256ea212015-08-29 23:57:00 +0200218 When set to ``True`` activate BREAK condition, else disable.
219 Controls TXD. When active, no transmitting is possible.
cliechtic1c37602009-07-21 01:34:57 +0000220
Chris Liechti256ea212015-08-29 23:57:00 +0200221 .. attribute:: rts
cliechtibb5c3c52009-07-23 02:29:27 +0000222
Chris Liechti256ea212015-08-29 23:57:00 +0200223 :setter: Set the state of the RTS line
224 :getter: Return the state of the RTS line
225 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000226
Chris Liechti256ea212015-08-29 23:57:00 +0200227 Set RTS line to specified logic level. It is possible to assign this
228 value before opening the serial port, then the value is applied uppon
229 :meth:`open`.
cliechtic1c37602009-07-21 01:34:57 +0000230
Chris Liechti256ea212015-08-29 23:57:00 +0200231 .. attribute:: dtr
cliechtibb5c3c52009-07-23 02:29:27 +0000232
Chris Liechti256ea212015-08-29 23:57:00 +0200233 :setter: Set the state of the DTR line
234 :getter: Return the state of the DTR line
235 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000236
Chris Liechti256ea212015-08-29 23:57:00 +0200237 Set DTR line to specified logic level. It is possible to assign this
238 value before opening the serial port, then the value is applied uppon
239 :meth:`open`.
cliechtic1c37602009-07-21 01:34:57 +0000240
Chris Liechti518b0d32015-08-30 02:20:39 +0200241 Read-only attributes:
242
243 .. attribute:: name
244
245 :getter: Device name.
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100246 :type: str
Chris Liechti518b0d32015-08-30 02:20:39 +0200247
248 .. versionadded:: 2.5
249
Chris Liechti256ea212015-08-29 23:57:00 +0200250 .. attribute:: cts
251
252 :getter: Get the state of the CTS line
253 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000254
cliechtic1c37602009-07-21 01:34:57 +0000255 Return the state of the CTS line.
256
Chris Liechti256ea212015-08-29 23:57:00 +0200257 .. attribute:: dsr
cliechtic1c37602009-07-21 01:34:57 +0000258
Chris Liechti256ea212015-08-29 23:57:00 +0200259 :getter: Get the state of the DSR line
260 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000261
cliechtic1c37602009-07-21 01:34:57 +0000262 Return the state of the DSR line.
263
Chris Liechti256ea212015-08-29 23:57:00 +0200264 .. attribute:: ri
cliechtic1c37602009-07-21 01:34:57 +0000265
Chris Liechti256ea212015-08-29 23:57:00 +0200266 :getter: Get the state of the RI line
267 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000268
cliechtic1c37602009-07-21 01:34:57 +0000269 Return the state of the RI line.
270
Chris Liechti256ea212015-08-29 23:57:00 +0200271 .. attribute:: cd
cliechtic1c37602009-07-21 01:34:57 +0000272
Chris Liechti256ea212015-08-29 23:57:00 +0200273 :getter: Get the state of the CD line
274 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000275
cliechtic1c37602009-07-21 01:34:57 +0000276 Return the state of the CD line
277
Matthew Westfa58a972016-07-08 14:27:04 -0700278 .. attribute:: is_open
279 :getter: Get the state of the serial port, whether it's open.
280 :type: bool
cliechtif81362e2009-07-25 03:44:33 +0000281
cliechti25375b52010-07-21 23:27:13 +0000282 New values can be assigned to the following attributes (properties), the
283 port will be reconfigured, even if it's opened at that time:
cliechtic1c37602009-07-21 01:34:57 +0000284
cliechtiedcdbe42009-07-22 00:48:34 +0000285
286 .. attribute:: port
287
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100288 :type: str
289
cliechtiedcdbe42009-07-22 00:48:34 +0000290 Read or write port. When the port is already open, it will be closed
291 and reopened with the new setting.
292
293 .. attribute:: baudrate
294
Chris Liechti518b0d32015-08-30 02:20:39 +0200295 :getter: Get current baud rate
296 :setter: Set new baud rate
297 :type: int
298
cliechti6066f842009-07-24 00:05:45 +0000299 Read or write current baud rate setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000300
301 .. attribute:: bytesize
302
Chris Liechti518b0d32015-08-30 02:20:39 +0200303 :getter: Get current byte size
304 :setter: Set new byte size. Possible values:
305 :const:`FIVEBITS`, :const:`SIXBITS`, :const:`SEVENBITS`,
306 :const:`EIGHTBITS`
307 :type: int
308
cliechti6066f842009-07-24 00:05:45 +0000309 Read or write current data byte size setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000310
311 .. attribute:: parity
312
Chris Liechti518b0d32015-08-30 02:20:39 +0200313 :getter: Get current parity setting
314 :setter: Set new parity mode. Possible values:
315 :const:`PARITY_NONE`, :const:`PARITY_EVEN`, :const:`PARITY_ODD`
316 :const:`PARITY_MARK`, :const:`PARITY_SPACE`
317
cliechti6066f842009-07-24 00:05:45 +0000318 Read or write current parity setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000319
320 .. attribute:: stopbits
321
Chris Liechti518b0d32015-08-30 02:20:39 +0200322 :getter: Get current stop bit setting
323 :setter: Set new stop bit setting. Possible values:
324 :const:`STOPBITS_ONE`, :const:`STOPBITS_ONE_POINT_FIVE`,
325 :const:`STOPBITS_TWO`
326
cliechti6066f842009-07-24 00:05:45 +0000327 Read or write current stop bit width setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000328
329 .. attribute:: timeout
330
Chris Liechti518b0d32015-08-30 02:20:39 +0200331 :getter: Get current read timeout setting
332 :setter: Set read timeout
333 :type: float (seconds)
334
cliechti6066f842009-07-24 00:05:45 +0000335 Read or write current read timeout setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000336
Chris Liechti518b0d32015-08-30 02:20:39 +0200337 .. attribute:: write_timeout
338
339 :getter: Get current write timeout setting
340 :setter: Set write timeout
341 :type: float (seconds)
cliechtiedcdbe42009-07-22 00:48:34 +0000342
cliechti6066f842009-07-24 00:05:45 +0000343 Read or write current write timeout setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000344
Chris Liechti518b0d32015-08-30 02:20:39 +0200345 .. versionchanged:: 3.0 renamed from ``writeTimeout``
346
347 .. attribute:: inter_byte_timeout
348
349 :getter: Get current inter byte timeout setting
350 :setter: Disable (``None``) or enable the inter byte timeout
351 :type: float or None
352
353 Read or write current inter byte timeout setting.
354
355 .. versionchanged:: 3.0 renamed from ``interCharTimeout``
356
cliechtiedcdbe42009-07-22 00:48:34 +0000357 .. attribute:: xonxoff
358
Chris Liechti518b0d32015-08-30 02:20:39 +0200359 :getter: Get current software flow control setting
360 :setter: Enable or disable software flow control
361 :type: bool
362
cliechti6066f842009-07-24 00:05:45 +0000363 Read or write current software flow control rate setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000364
365 .. attribute:: rtscts
366
Chris Liechti518b0d32015-08-30 02:20:39 +0200367 :getter: Get current hardware flow control setting
368 :setter: Enable or disable hardware flow control
369 :type: bool
370
cliechti6066f842009-07-24 00:05:45 +0000371 Read or write current hardware flow control setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000372
373 .. attribute:: dsrdtr
374
Chris Liechti518b0d32015-08-30 02:20:39 +0200375 :getter: Get current hardware flow control setting
376 :setter: Enable or disable hardware flow control
377 :type: bool
378
cliechti6066f842009-07-24 00:05:45 +0000379 Read or write current hardware flow control setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000380
Chris Liechtice621882015-08-06 19:29:31 +0200381 .. attribute:: rs485_mode
382
Chris Liechti518b0d32015-08-30 02:20:39 +0200383 :getter: Get the current RS485 settings
384 :setter: Disable (``None``) or enable the RS485 settings
385 :type: :class:`rs485.RS485Settings` or ``None``
386 :platform: Posix (Linux, limited set of hardware)
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100387 :platform: Windows (only RTS on TX possible)
Chris Liechtice621882015-08-06 19:29:31 +0200388
389 Attribute to configure RS485 support. When set to an instance of
390 :class:`rs485.RS485Settings` and supported by OS, RTS will be active
391 when data is sent and inactive otherwise (for reception). The
392 :class:`rs485.RS485Settings` class provides additional settings
393 supported on some platforms.
394
395 .. versionadded:: 3.0
396
397
cliechtiedcdbe42009-07-22 00:48:34 +0000398 The following constants are also provided:
399
400 .. attribute:: BAUDRATES
401
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100402 A list of valid baud rates. The list may be incomplete, such that higher
403 and/or intermediate baud rates may also be supported by the device
404 (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000405
406 .. attribute:: BYTESIZES
407
cliechti25375b52010-07-21 23:27:13 +0000408 A list of valid byte sizes for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000409
410 .. attribute:: PARITIES
411
cliechti25375b52010-07-21 23:27:13 +0000412 A list of valid parities for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000413
414 .. attribute:: STOPBITS
415
cliechti25375b52010-07-21 23:27:13 +0000416 A list of valid stop bit widths for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000417
cliechti4a567a02009-07-27 22:09:31 +0000418
cliechti25375b52010-07-21 23:27:13 +0000419 The following methods are for compatibility with the :mod:`io` library.
cliechti4a567a02009-07-27 22:09:31 +0000420
421 .. method:: readable()
422
423 :return: True
cliechtif4566342009-08-04 00:07:19 +0000424
cliechti4a567a02009-07-27 22:09:31 +0000425 .. versionadded:: 2.5
426
427 .. method:: writable()
428
429 :return: True
cliechtif4566342009-08-04 00:07:19 +0000430
cliechti4a567a02009-07-27 22:09:31 +0000431 .. versionadded:: 2.5
432
433 .. method:: seekable()
434
435 :return: False
cliechtif4566342009-08-04 00:07:19 +0000436
cliechti4a567a02009-07-27 22:09:31 +0000437 .. versionadded:: 2.5
438
439 .. method:: readinto(b)
440
cliechti8611bf42009-08-03 00:34:03 +0000441 :param b: bytearray or array instance
cliechti4a567a02009-07-27 22:09:31 +0000442 :return: Number of byte read
443
cliechtid7e7ce22009-08-03 02:01:07 +0000444 Read up to len(b) bytes into :class:`bytearray` *b* and return the
445 number of bytes read.
cliechti4a567a02009-07-27 22:09:31 +0000446
447 .. versionadded:: 2.5
448
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100449 The port settings can be read and written as dictionary. The following
450 keys are supported: ``write_timeout``, ``inter_byte_timeout``,
451 ``dsrdtr``, ``baudrate``, ``timeout``, ``parity``, ``bytesize``,
452 ``rtscts``, ``stopbits``, ``xonxoff``
cliechti25375b52010-07-21 23:27:13 +0000453
Chris Liechti256ea212015-08-29 23:57:00 +0200454 .. method:: get_settings()
cliechti4065dce2009-08-10 00:55:46 +0000455
456 :return: a dictionary with current port settings.
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100457 :rtype: dict
cliechti4065dce2009-08-10 00:55:46 +0000458
459 Get a dictionary with port settings. This is useful to backup the
460 current settings so that a later point in time they can be restored
Chris Liechti518b0d32015-08-30 02:20:39 +0200461 using :meth:`apply_settings`.
cliechti4065dce2009-08-10 00:55:46 +0000462
Chris Liechti19688bf2016-05-06 23:48:36 +0200463 Note that the state of control lines (RTS/DTR) are not part of the
464 settings.
cliechti4065dce2009-08-10 00:55:46 +0000465
466 .. versionadded:: 2.5
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100467 .. versionchanged:: 3.0 renamed from ``getSettingsDict``
cliechti4065dce2009-08-10 00:55:46 +0000468
Chris Liechti256ea212015-08-29 23:57:00 +0200469 .. method:: apply_settings(d)
cliechti4065dce2009-08-10 00:55:46 +0000470
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100471 :param dict d: a dictionary with port settings.
cliechti4065dce2009-08-10 00:55:46 +0000472
Chris Liechti518b0d32015-08-30 02:20:39 +0200473 Applies a dictionary that was created by :meth:`get_settings`. Only
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100474 changes are applied and when a key is missing, it means that the
475 setting stays unchanged.
cliechti4065dce2009-08-10 00:55:46 +0000476
477 Note that control lines (RTS/DTR) are not changed.
478
479 .. versionadded:: 2.5
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100480 .. versionchanged:: 3.0 renamed from ``applySettingsDict``
cliechti4065dce2009-08-10 00:55:46 +0000481
Chris Liechtic9f89962016-08-12 21:04:37 +0200482
483 This class can be used as context manager. The serial port is closed when
484 the context is left.
485
486 .. method:: __enter__()
487
488 :returns: Serial instance
489
490 Returns the instance that was used in the ``with`` statement.
491
492 Example:
493
494 >>> with serial.serial_for_url(port) as s:
495 ... s.write(b'hello')
496
497 Here no port argument is given, so it is not opened automatically:
498
499 >>> with serial.Serial() as s:
500 ... s.port = ...
501 ... s.open()
502 ... s.write(b'hello')
503
504
505 .. method:: __exit__(exc_type, exc_val, exc_tb)
506
507 Closes serial port.
508
509
cliechti25375b52010-07-21 23:27:13 +0000510 Platform specific methods.
511
cliechtic648da92011-12-29 01:17:51 +0000512 .. warning:: Programs using the following methods and attributes are not
513 portable to other platforms!
cliechti25375b52010-07-21 23:27:13 +0000514
515 .. method:: nonblocking()
516
Chris Liechtice621882015-08-06 19:29:31 +0200517 :platform: Posix
cliechti25375b52010-07-21 23:27:13 +0000518
Chris Liechti59848422016-06-04 22:28:14 +0200519 .. deprecated:: 3.2
520 The serial port is already opened in this mode. This method is not
521 needed and going away.
522
cliechti25375b52010-07-21 23:27:13 +0000523
524 .. method:: fileno()
525
Chris Liechtice621882015-08-06 19:29:31 +0200526 :platform: Posix
cliechti25375b52010-07-21 23:27:13 +0000527 :return: File descriptor.
528
529 Return file descriptor number for the port that is opened by this object.
530 It is useful when serial ports are used with :mod:`select`.
531
Chris Liechti518b0d32015-08-30 02:20:39 +0200532 .. method:: set_input_flow_control(enable)
cliechti25375b52010-07-21 23:27:13 +0000533
cliechti2f0f8a32011-12-28 22:10:00 +0000534 :platform: Posix
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100535 :param bool enable: Set flow control state.
cliechti25375b52010-07-21 23:27:13 +0000536
cliechti2f0f8a32011-12-28 22:10:00 +0000537 Manually control flow - when software flow control is enabled.
538
539 This will send XON (true) and XOFF (false) to the other device.
540
Chris Liechti518b0d32015-08-30 02:20:39 +0200541 .. versionadded:: 2.7 (Posix support added)
542 .. versionchanged:: 3.0 renamed from ``flowControlOut``
cliechti2f0f8a32011-12-28 22:10:00 +0000543
Chris Liechti518b0d32015-08-30 02:20:39 +0200544 .. method:: set_output_flow_control(enable)
cliechti2f0f8a32011-12-28 22:10:00 +0000545
Chris Liechti518b0d32015-08-30 02:20:39 +0200546 :platform: Posix (HW and SW flow control)
547 :platform: Windows (SW flow control only)
Chris Liechti3e0dcc72015-12-18 23:23:26 +0100548 :param bool enable: Set flow control state.
cliechti2f0f8a32011-12-28 22:10:00 +0000549
550 Manually control flow of outgoing data - when hardware or software flow
551 control is enabled.
552
553 Sending will be suspended when called with ``False`` and enabled when
554 called with ``True``.
555
Chris Liechti518b0d32015-08-30 02:20:39 +0200556 .. versionchanged:: 2.7 (renamed on Posix, function was called ``flowControl``)
557 .. versionchanged:: 3.0 renamed from ``setXON``
Chris Liechti256ea212015-08-29 23:57:00 +0200558
Chris Liechti19688bf2016-05-06 23:48:36 +0200559 .. method:: cancel_read()
Chris Liechti256ea212015-08-29 23:57:00 +0200560
Chris Liechti9d893052016-05-18 22:03:29 +0200561 :platform: Posix
Chris Liechti19688bf2016-05-06 23:48:36 +0200562 :platform: Windows
563
Chris Liechti9d893052016-05-18 22:03:29 +0200564 Cancel a pending read operation from an other thread. A blocking
565 :meth:`read` call is aborted immediately. :meth:`read` will not report
566 any error but return all data received up to that point (similar to a
567 timeout).
568
569 On Posix a call to `cancel_read()` may cancel a future :meth:`read` call.
Chris Liechti19688bf2016-05-06 23:48:36 +0200570
571 .. versionadded:: 3.1
572
573 .. method:: cancel_write()
574
Chris Liechti9d893052016-05-18 22:03:29 +0200575 :platform: Posix
Chris Liechti19688bf2016-05-06 23:48:36 +0200576 :platform: Windows
577
Chris Liechti9d893052016-05-18 22:03:29 +0200578 Cancel a pending write operation from an other thread. The
579 :meth:`write` method will return immediately (no error indicated).
580 However the OS may still be sending from the buffer, a separate call to
581 :meth:`reset_output_buffer` may be needed.
582
583 On Posix a call to `cancel_write()` may cancel a future :meth:`write` call.
Chris Liechti19688bf2016-05-06 23:48:36 +0200584
585 .. versionadded:: 3.1
Chris Liechti518b0d32015-08-30 02:20:39 +0200586
Chris Liechti9a99cb22015-08-30 22:16:50 +0200587 .. note:: The following members are deprecated and will be removed in a
Chris Liechti518b0d32015-08-30 02:20:39 +0200588 future release.
Chris Liechti256ea212015-08-29 23:57:00 +0200589
590 .. attribute:: portstr
591
Chris Liechti518b0d32015-08-30 02:20:39 +0200592 .. deprecated:: 2.5 use :attr:`name` instead
Chris Liechti256ea212015-08-29 23:57:00 +0200593
594 .. method:: inWaiting()
595
Chris Liechti518b0d32015-08-30 02:20:39 +0200596 .. deprecated:: 3.0 see :attr:`in_waiting`
597
Matthew Westfa58a972016-07-08 14:27:04 -0700598 .. method:: isOpen()
599
600 .. deprecated:: 3.0 see :attr:`is_open`
601
Chris Liechti518b0d32015-08-30 02:20:39 +0200602 .. attribute:: writeTimeout
603
604 .. deprecated:: 3.0 see :attr:`write_timeout`
Chris Liechti256ea212015-08-29 23:57:00 +0200605
606 .. attribute:: interCharTimeout
607
Chris Liechti518b0d32015-08-30 02:20:39 +0200608 .. deprecated:: 3.0 see :attr:`inter_byte_timeout`
Chris Liechti256ea212015-08-29 23:57:00 +0200609
610 .. method:: sendBreak(duration=0.25)
611
Chris Liechti518b0d32015-08-30 02:20:39 +0200612 .. deprecated:: 3.0 see :meth:`send_break`
Chris Liechti256ea212015-08-29 23:57:00 +0200613
614 .. method:: flushInput()
615
Chris Liechti518b0d32015-08-30 02:20:39 +0200616 .. deprecated:: 3.0 see :meth:`reset_input_buffer`
Chris Liechti256ea212015-08-29 23:57:00 +0200617
618 .. method:: flushOutput()
619
Chris Liechti518b0d32015-08-30 02:20:39 +0200620 .. deprecated:: 3.0 see :meth:`reset_output_buffer`
Chris Liechti256ea212015-08-29 23:57:00 +0200621
622 .. method:: setBreak(level=True)
623
Chris Liechti518b0d32015-08-30 02:20:39 +0200624 .. deprecated:: 3.0 see :attr:`break_condition`
Chris Liechti256ea212015-08-29 23:57:00 +0200625
626 .. method:: setRTS(level=True)
627
Chris Liechti518b0d32015-08-30 02:20:39 +0200628 .. deprecated:: 3.0 see :attr:`rts`
Chris Liechti256ea212015-08-29 23:57:00 +0200629
630 .. method:: setDTR(level=True)
631
Chris Liechti518b0d32015-08-30 02:20:39 +0200632 .. deprecated:: 3.0 see :attr:`dtr`
Chris Liechti256ea212015-08-29 23:57:00 +0200633
634 .. method:: getCTS()
635
Chris Liechti518b0d32015-08-30 02:20:39 +0200636 .. deprecated:: 3.0 see :attr:`cts`
Chris Liechti256ea212015-08-29 23:57:00 +0200637
638 .. method:: getDSR()
639
Chris Liechti518b0d32015-08-30 02:20:39 +0200640 .. deprecated:: 3.0 see :attr:`dsr`
Chris Liechti256ea212015-08-29 23:57:00 +0200641
642 .. method:: getRI()
643
Chris Liechti518b0d32015-08-30 02:20:39 +0200644 .. deprecated:: 3.0 see :attr:`ri`
Chris Liechti256ea212015-08-29 23:57:00 +0200645
646 .. method:: getCD()
647
Chris Liechti518b0d32015-08-30 02:20:39 +0200648 .. deprecated:: 3.0 see :attr:`cd`
Chris Liechti256ea212015-08-29 23:57:00 +0200649
650 .. method:: getSettingsDict()
651
Chris Liechti518b0d32015-08-30 02:20:39 +0200652 .. deprecated:: 3.0 see :meth:`get_settings`
Chris Liechti256ea212015-08-29 23:57:00 +0200653
654 .. method:: applySettingsDict(d)
655
Chris Liechti518b0d32015-08-30 02:20:39 +0200656 .. deprecated:: 3.0 see :meth:`apply_settings`
Chris Liechti256ea212015-08-29 23:57:00 +0200657
658 .. method:: outWaiting()
659
Chris Liechti518b0d32015-08-30 02:20:39 +0200660 .. deprecated:: 3.0 see :attr:`out_waiting`
Chris Liechti256ea212015-08-29 23:57:00 +0200661
662 .. method:: setXON(level=True)
663
Chris Liechti518b0d32015-08-30 02:20:39 +0200664 .. deprecated:: 3.0 see :meth:`set_output_flow_control`
Chris Liechti256ea212015-08-29 23:57:00 +0200665
666 .. method:: flowControlOut(enable)
667
Chris Liechti518b0d32015-08-30 02:20:39 +0200668 .. deprecated:: 3.0 see :meth:`set_input_flow_control`
cliechtif4566342009-08-04 00:07:19 +0000669
cliechtic648da92011-12-29 01:17:51 +0000670 .. attribute:: rtsToggle
671
672 :platform: Windows
673
674 Attribute to configure RTS toggle control setting. When enabled and
675 supported by OS, RTS will be active when data is available and inactive
676 if no data is available.
677
678 .. versionadded:: 2.6
Chris Liechti518b0d32015-08-30 02:20:39 +0200679 .. versionchanged:: 3.0 (removed, see :attr:`rs485_mode` instead)
cliechtic648da92011-12-29 01:17:51 +0000680
681
cliechtic56e41d2011-08-25 22:06:38 +0000682Implementation detail: some attributes and functions are provided by the
683class :class:`SerialBase` and some by the platform specific class and
684others by the base class mentioned above.
cliechti25375b52010-07-21 23:27:13 +0000685
Chris Liechtice621882015-08-06 19:29:31 +0200686RS485 support
687-------------
688The :class:`Serial` class has a :attr:`Serial.rs485_mode` attribute which allows to
689enable RS485 specific support on some platforms. Currently Windows and Linux
690(only a small number of devices) are supported.
cliechti4a567a02009-07-27 22:09:31 +0000691
Chris Liechtice621882015-08-06 19:29:31 +0200692:attr:`Serial.rs485_mode` needs to be set to an instance of
693:class:`rs485.RS485Settings` to enable or to ``None`` to disable this feature.
cliechti4a567a02009-07-27 22:09:31 +0000694
Chris Liechtice621882015-08-06 19:29:31 +0200695Usage::
cliechti4a567a02009-07-27 22:09:31 +0000696
Chris Liechtice621882015-08-06 19:29:31 +0200697 ser = serial.Serial(...)
698 ser.rs485_mode = serial.rs485.RS485Settings(...)
699 ser.write(b'hello')
cliechti4a567a02009-07-27 22:09:31 +0000700
Chris Liechtice621882015-08-06 19:29:31 +0200701There is a subclass :class:`rs485.RS485` available to emulate the RS485 support
702on regular serial ports.
cliechti4a567a02009-07-27 22:09:31 +0000703
cliechti4a567a02009-07-27 22:09:31 +0000704
Chris Liechtice621882015-08-06 19:29:31 +0200705.. class:: rs485.RS485Settings
cliechti4a567a02009-07-27 22:09:31 +0000706
Chris Liechtice621882015-08-06 19:29:31 +0200707 A class that holds RS485 specific settings which are supported on
708 some platforms.
cliechti4a567a02009-07-27 22:09:31 +0000709
Chris Liechtice621882015-08-06 19:29:31 +0200710 .. versionadded:: 3.0
cliechti4a567a02009-07-27 22:09:31 +0000711
Chris Liechtice621882015-08-06 19:29:31 +0200712 .. 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 +0000713
Chris Liechtice621882015-08-06 19:29:31 +0200714 :param bool rts_level_for_tx:
715 RTS level for transmission
cliechti4a567a02009-07-27 22:09:31 +0000716
Chris Liechtice621882015-08-06 19:29:31 +0200717 :param bool rts_level_for_rx:
718 RTS level for reception
cliechti4a567a02009-07-27 22:09:31 +0000719
Chris Liechtice621882015-08-06 19:29:31 +0200720 :param bool loopback:
721 When set to ``True`` transmitted data is also received.
cliechti4a567a02009-07-27 22:09:31 +0000722
Chris Liechtice621882015-08-06 19:29:31 +0200723 :param float delay_before_tx:
724 Delay after setting RTS but before transmission starts
725
726 :param float delay_before_rx:
727 Delay after transmission ends and resetting RTS
728
729 .. attribute:: rts_level_for_tx
730
731 RTS level for transmission.
732
733 .. attribute:: rts_level_for_rx
734
735 RTS level for reception.
736
737 .. attribute:: loopback
738
739 When set to ``True`` transmitted data is also received.
740
741 .. attribute:: delay_before_tx
742
743 Delay after setting RTS but before transmission starts (seconds as float).
744
745 .. attribute:: delay_before_rx
746
747 Delay after transmission ends and resetting RTS (seconds as float).
cliechti4a567a02009-07-27 22:09:31 +0000748
749
Chris Liechtice621882015-08-06 19:29:31 +0200750.. class:: rs485.RS485
cliechti4a567a02009-07-27 22:09:31 +0000751
Chris Liechtice621882015-08-06 19:29:31 +0200752 A subclass that replaces the :meth:`Serial.write` method with one that toggles RTS
753 according to the RS485 settings.
cliechti4a567a02009-07-27 22:09:31 +0000754
Chris Liechti518b0d32015-08-30 02:20:39 +0200755 Usage::
756
757 ser = serial.rs485.RS485(...)
758 ser.rs485_mode = serial.rs485.RS485Settings(...)
759 ser.write(b'hello')
760
Chris Liechtice621882015-08-06 19:29:31 +0200761 .. warning:: This may work unreliably on some serial ports (control signals not
762 synchronized or delayed compared to data). Using delays may be unreliable
763 (varying times, larger than expected) as the OS may not support very fine
764 grained delays (no smaller than in the order of tens of milliseconds).
cliechti4a567a02009-07-27 22:09:31 +0000765
Chris Liechtice621882015-08-06 19:29:31 +0200766 .. note:: Some implementations support this natively in the class
767 :class:`Serial`. Better performance can be expected when the native version
768 is used.
cliechti4a567a02009-07-27 22:09:31 +0000769
Chris Liechtice621882015-08-06 19:29:31 +0200770 .. note:: The loopback property is ignored by this implementation. The actual
771 behavior depends on the used hardware.
cliechti4a567a02009-07-27 22:09:31 +0000772
cliechti4a567a02009-07-27 22:09:31 +0000773
cliechtie214ff82010-07-21 15:48:47 +0000774
cliechti25375b52010-07-21 23:27:13 +0000775
cliechti7aed8332009-08-05 14:19:31 +0000776:rfc:`2217` Network ports
777-------------------------
778
779.. warning:: This implementation is currently in an experimental state. Use
780 at your own risk.
cliechtiedcdbe42009-07-22 00:48:34 +0000781
cliechtiec4ac1b2009-08-02 00:47:21 +0000782.. class:: rfc2217.Serial
783
Chris Liechti2a1befc2015-10-21 17:37:08 +0200784 This implements a :rfc:`2217` compatible client. Port names are :ref:`URL
785 <URLs>` in the form: ``rfc2217://<host>:<port>[?<option>[&<option>]]``
cliechtiec4ac1b2009-08-02 00:47:21 +0000786
cliechtiec4ac1b2009-08-02 00:47:21 +0000787 This class API is compatible to :class:`Serial` with a few exceptions:
788
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100789 - ``write_timeout`` is not implemented
cliechtiec4ac1b2009-08-02 00:47:21 +0000790 - The current implementation starts a thread that keeps reading from the
791 (internal) socket. The thread is managed automatically by the
792 :class:`rfc2217.Serial` port object on :meth:`open`/:meth:`close`.
793 However it may be a problem for user applications that like to use select
794 instead of threads.
795
796 Due to the nature of the network and protocol involved there are a few
797 extra points to keep in mind:
798
799 - All operations have an additional latency time.
800 - Setting control lines (RTS/CTS) needs more time.
801 - Reading the status lines (DSR/DTR etc.) returns a cached value. When that
802 cache is updated depends entirely on the server. The server itself may
803 implement a polling at a certain rate and quick changes may be invisible.
804 - The network layer also has buffers. This means that :meth:`flush`,
Chris Liechti518b0d32015-08-30 02:20:39 +0200805 :meth:`reset_input_buffer` and :meth:`reset_output_buffer` may work with
806 additional delay. Likewise :attr:`in_waiting` returns the size of the
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100807 data arrived at the objects internal buffer and excludes any bytes in the
Chris Liechti518b0d32015-08-30 02:20:39 +0200808 network buffers or any server side buffer.
cliechtiec4ac1b2009-08-02 00:47:21 +0000809 - Closing and immediately reopening the same port may fail due to time
810 needed by the server to get ready again.
811
812 Not implemented yet / Possible problems with the implementation:
813
cliechti8611bf42009-08-03 00:34:03 +0000814 - :rfc:`2217` flow control between client and server (objects internal
815 buffer may eat all your memory when never read).
cliechtid7e7ce22009-08-03 02:01:07 +0000816 - No authentication support (servers may not prompt for a password etc.)
817 - No encryption.
818
819 Due to lack of authentication and encryption it is not suitable to use this
820 client for connections across the internet and should only be used in
821 controlled environments.
cliechtiec4ac1b2009-08-02 00:47:21 +0000822
cliechti7c640ed2009-08-02 00:54:51 +0000823 .. versionadded:: 2.5
cliechtiec4ac1b2009-08-02 00:47:21 +0000824
cliechti7aed8332009-08-05 14:19:31 +0000825
826.. class:: rfc2217.PortManager
827
828 This class provides helper functions for implementing :rfc:`2217`
829 compatible servers.
830
Chris Liechti518b0d32015-08-30 02:20:39 +0200831 Basically, it implements everything needed for the :rfc:`2217` protocol.
cliechti7aed8332009-08-05 14:19:31 +0000832 It just does not open sockets and read/write to serial ports (though it
833 changes other port settings). The user of this class must take care of the
834 data transmission itself. The reason for that is, that this way, this class
835 supports all programming models such as threads and select.
836
837 Usage examples can be found in the examples where two TCP/IP - serial
838 converters are shown, one using threads (the single port server) and an
839 other using select (the multi port server).
840
841 .. note:: Each new client connection must create a new instance as this
842 object (and the :rfc:`2217` protocol) has internal state.
843
844 .. method:: __init__(serial_port, connection, debug_output=False)
845
846 :param serial_port: a :class:`Serial` instance that is managed.
847 :param connection: an object implementing :meth:`write`, used to write
848 to the network.
cliechti86844e82009-08-12 00:05:33 +0000849 :param debug_output: enables debug messages: a :class:`logging.Logger`
850 instance or None.
cliechti7aed8332009-08-05 14:19:31 +0000851
852 Initializes the Manager and starts negotiating with client in Telnet
853 and :rfc:`2217` protocol. The negotiation starts immediately so that
854 the class should be instantiated in the moment the client connects.
855
856 The *serial_port* can be controlled by :rfc:`2217` commands. This
cliechti06281be2011-08-25 23:08:29 +0000857 object will modify the port settings (baud rate etc.) and control lines
cliechti7aed8332009-08-05 14:19:31 +0000858 (RTS/DTR) send BREAK etc. when the corresponding commands are found by
859 the :meth:`filter` method.
860
Chris Liechti32ccf2e2015-12-19 23:42:40 +0100861 The *connection* object must implement a :meth:`write` function.
cliechti7aed8332009-08-05 14:19:31 +0000862 This function must ensure that *data* is written at once (no user data
863 mixed in, i.e. it must be thread-safe). All data must be sent in its
864 raw form (:meth:`escape` must not be used) as it is used to send Telnet
865 and :rfc:`2217` control commands.
866
cliechti86844e82009-08-12 00:05:33 +0000867 For diagnostics of the connection or the implementation, *debug_output*
868 can be set to an instance of a :class:`logging.Logger` (e.g.
869 ``logging.getLogger('rfc2217.server')``). The caller should configure
870 the logger using ``setLevel`` for the desired detail level of the logs.
871
cliechti7aed8332009-08-05 14:19:31 +0000872 .. method:: escape(data)
873
874 :param data: data to be sent over the network.
875 :return: data, escaped for Telnet/:rfc:`2217`
876
877 A generator that escapes all data to be compatible with :rfc:`2217`.
878 Implementors of servers should use this function to process all data
879 sent over the network.
880
881 The function returns a generator which can be used in ``for`` loops.
cliechtie214ff82010-07-21 15:48:47 +0000882 It can be converted to bytes using :func:`serial.to_bytes`.
cliechti7aed8332009-08-05 14:19:31 +0000883
884 .. method:: filter(data)
885
886 :param data: data read from the network, including Telnet and
887 :rfc:`2217` controls.
888 :return: data, free from Telnet and :rfc:`2217` controls.
889
890 A generator that filters and processes all data related to :rfc:`2217`.
891 Implementors of servers should use this function to process all data
892 received from the network.
893
894 The function returns a generator which can be used in ``for`` loops.
cliechtie214ff82010-07-21 15:48:47 +0000895 It can be converted to bytes using :func:`serial.to_bytes`.
cliechti7aed8332009-08-05 14:19:31 +0000896
cliechti7cb78e82009-08-05 15:47:57 +0000897 .. method:: check_modem_lines(force_notification=False)
898
899 :param force_notification: Set to false. Parameter is for internal use.
cliechti7aed8332009-08-05 14:19:31 +0000900
901 This function needs to be called periodically (e.g. every second) when
902 the server wants to send NOTIFY_MODEMSTATE messages. This is required
903 to support the client for reading CTS/DSR/RI/CD status lines.
904
905 The function reads the status line and issues the notifications
906 automatically.
907
908 .. versionadded:: 2.5
909
cliechtiec4ac1b2009-08-02 00:47:21 +0000910.. seealso::
911
912 :rfc:`2217` - Telnet Com Port Control Option
913
914
cliechtic1c37602009-07-21 01:34:57 +0000915Exceptions
916==========
917
918.. exception:: SerialException
919
920 Base class for serial port exceptions.
921
cliechti4a567a02009-07-27 22:09:31 +0000922 .. versionchanged:: 2.5
cliechti4cb94662013-10-17 03:17:50 +0000923 Now derives from :exc:`IOError` instead of :exc:`Exception`
cliechti4a567a02009-07-27 22:09:31 +0000924
cliechtic1c37602009-07-21 01:34:57 +0000925.. exception:: SerialTimeoutException
926
927 Exception that is raised on write timeouts.
928
929
930Constants
931=========
932
cliechti87686242009-08-18 00:58:31 +0000933*Parity*
934
cliechtic1c37602009-07-21 01:34:57 +0000935.. data:: PARITY_NONE
936.. data:: PARITY_EVEN
937.. data:: PARITY_ODD
938.. data:: PARITY_MARK
939.. data:: PARITY_SPACE
940
cliechti87686242009-08-18 00:58:31 +0000941*Stop bits*
942
cliechtic1c37602009-07-21 01:34:57 +0000943.. data:: STOPBITS_ONE
944.. data:: STOPBITS_ONE_POINT_FIVE
945.. data:: STOPBITS_TWO
946
cliechti06281be2011-08-25 23:08:29 +0000947Note that 1.5 stop bits are not supported on POSIX. It will fall back to 2 stop
cliechti41be0392010-01-02 03:02:38 +0000948bits.
949
cliechti87686242009-08-18 00:58:31 +0000950*Byte size*
951
cliechtic1c37602009-07-21 01:34:57 +0000952.. data:: FIVEBITS
953.. data:: SIXBITS
954.. data:: SEVENBITS
955.. data:: EIGHTBITS
cliechti5b7d16a2009-07-21 21:53:59 +0000956
cliechti87686242009-08-18 00:58:31 +0000957
958*Others*
959
cliechti8611bf42009-08-03 00:34:03 +0000960Default control characters (instances of :class:`bytes` for Python 3.0+) for
cliechtidaf47ba2009-07-28 01:28:16 +0000961software flow control:
cliechti6066f842009-07-24 00:05:45 +0000962
cliechti5b7d16a2009-07-21 21:53:59 +0000963.. data:: XON
964.. data:: XOFF
cliechtif81362e2009-07-25 03:44:33 +0000965
cliechti4a567a02009-07-27 22:09:31 +0000966Module version:
cliechtif81362e2009-07-25 03:44:33 +0000967
968.. data:: VERSION
969
Chris Liechti518b0d32015-08-30 02:20:39 +0200970 A string indicating the pySerial version, such as ``3.0``.
cliechtif81362e2009-07-25 03:44:33 +0000971
cliechti87686242009-08-18 00:58:31 +0000972 .. versionadded:: 2.3
973
cliechti44eb98f2011-03-21 21:41:10 +0000974
cliechtie542b362011-03-18 00:49:16 +0000975Module functions and attributes
976===============================
cliechtif81362e2009-07-25 03:44:33 +0000977
978.. function:: device(number)
979
Chris Liechti518b0d32015-08-30 02:20:39 +0200980 .. versionchanged:: 3.0 removed, use ``serial.tools.list_ports`` instead
981
cliechti7c640ed2009-08-02 00:54:51 +0000982
cliechtie3ab3532009-08-05 12:40:38 +0000983.. function:: serial_for_url(url, \*args, \*\*kwargs)
cliechti7c640ed2009-08-02 00:54:51 +0000984
cliechti86844e82009-08-12 00:05:33 +0000985 :param url: Device name, number or :ref:`URL <URLs>`
cliechti7c640ed2009-08-02 00:54:51 +0000986 :param do_not_open: When set to true, the serial port is not opened.
987 :return: an instance of :class:`Serial` or a compatible object.
988
989 Get a native or a :rfc:`2217` implementation of the Serial class, depending
cliechtid7e7ce22009-08-03 02:01:07 +0000990 on port/url. This factory function is useful when an application wants
cliechti25375b52010-07-21 23:27:13 +0000991 to support both, local ports and remote ports. There is also support
Chris Liechti589c92a2015-09-04 23:04:34 +0200992 for other types, see :ref:`URL <URLs>` section.
cliechti7c640ed2009-08-02 00:54:51 +0000993
cliechtid7e7ce22009-08-03 02:01:07 +0000994 The port is not opened when a keyword parameter called *do_not_open* is
995 given and true, by default it is opened.
cliechti7c640ed2009-08-02 00:54:51 +0000996
997 .. versionadded:: 2.5
cliechtif4566342009-08-04 00:07:19 +0000998
cliechti87686242009-08-18 00:58:31 +0000999
cliechtie542b362011-03-18 00:49:16 +00001000.. attribute:: protocol_handler_packages
1001
1002 This attribute is a list of package names (strings) that is searched for
1003 protocol handlers.
1004
1005 e.g. we want to support a URL ``foobar://``. A module
1006 ``my_handlers.protocol_foobar`` is provided by the user::
1007
1008 serial.protocol_handler_packages.append("my_handlers")
1009 s = serial.serial_for_url("foobar://")
1010
1011 For an URL starting with ``XY://`` is the function :func:`serial_for_url`
1012 attempts to import ``PACKAGE.protocol_XY`` with each candidate for
1013 ``PACKAGE`` from this list.
1014
1015 .. versionadded:: 2.6
1016
1017
cliechti25375b52010-07-21 23:27:13 +00001018.. function:: to_bytes(sequence)
cliechtie214ff82010-07-21 15:48:47 +00001019
Chris Liechti32ccf2e2015-12-19 23:42:40 +01001020 :param sequence: bytes, bytearray or memoryview
cliechti25375b52010-07-21 23:27:13 +00001021 :returns: an instance of ``bytes``
cliechtie214ff82010-07-21 15:48:47 +00001022
cliechtie542b362011-03-18 00:49:16 +00001023 Convert a sequence to a ``bytes`` type. This is used to write code that is
cliechtie214ff82010-07-21 15:48:47 +00001024 compatible to Python 2.x and 3.x.
1025
cliechtie542b362011-03-18 00:49:16 +00001026 In Python versions prior 3.x, ``bytes`` is a subclass of str. They convert
cliechti25375b52010-07-21 23:27:13 +00001027 ``str([17])`` to ``'[17]'`` instead of ``'\x11'`` so a simple
cliechtie542b362011-03-18 00:49:16 +00001028 ``bytes(sequence)`` doesn't work for all versions of Python.
cliechtie214ff82010-07-21 15:48:47 +00001029
1030 This function is used internally and in the unit tests.
1031
cliechtie542b362011-03-18 00:49:16 +00001032 .. versionadded:: 2.5
1033
Chris Liechti32ccf2e2015-12-19 23:42:40 +01001034.. function:: iterbytes(sequence)
Chris Liechtid14b1ab2015-08-21 00:28:53 +02001035
Chris Liechti32ccf2e2015-12-19 23:42:40 +01001036 :param sequence: bytes, bytearray or memoryview
Chris Liechtid14b1ab2015-08-21 00:28:53 +02001037 :returns: a generator that yields bytes
1038
1039 Some versions of Python (3.x) would return integers instead of bytes when
1040 looping over an instance of ``bytes``. This helper function ensures that
1041 bytes are returned.
1042
1043 .. versionadded:: 3.0
1044
cliechtie214ff82010-07-21 15:48:47 +00001045
Chris Liechti811bf382015-10-10 00:54:47 +02001046Threading
1047=========
1048
1049.. module:: serial.threaded
1050.. versionadded:: 3.0
1051
1052.. warning:: This implementation is currently in an experimental state. Use
1053 at your own risk.
1054
1055This module provides classes to simplify working with threads and protocols.
1056
1057.. class:: Protocol
1058
Chris Liechti5665d572015-10-13 23:50:01 +02001059 Protocol as used by the :class:`ReaderThread`. This base class provides empty
Chris Liechti811bf382015-10-10 00:54:47 +02001060 implementations of all methods.
1061
1062
1063 .. method:: connection_made(transport)
1064
1065 :param transport: instance used to write to serial port.
1066
1067 Called when reader thread is started.
1068
1069 .. method:: data_received(data)
1070
Chris Liechtif8a09192015-12-20 23:36:38 +01001071 :param bytes data: received bytes
Chris Liechti811bf382015-10-10 00:54:47 +02001072
1073 Called with snippets received from the serial port.
1074
1075 .. method:: connection_lost(exc)
1076
1077 :param exc: Exception if connection was terminated by error else ``None``
1078
1079 Called when the serial port is closed or the reader loop terminated
1080 otherwise.
1081
1082.. class:: Packetizer(Protocol)
1083
1084 Read binary packets from serial port. Packets are expected to be terminated
1085 with a ``TERMINATOR`` byte (null byte by default).
1086
1087 The class also keeps track of the transport.
1088
1089 .. attribute:: TERMINATOR = b'\\0'
1090
1091 .. method:: __init__()
1092
1093 .. method:: connection_made(transport)
1094
Chris Liechtif8a09192015-12-20 23:36:38 +01001095 Stores transport.
Chris Liechti811bf382015-10-10 00:54:47 +02001096
1097 .. method:: connection_lost(exc)
1098
Chris Liechtif8a09192015-12-20 23:36:38 +01001099 Forgets transport.
Chris Liechti811bf382015-10-10 00:54:47 +02001100
1101 .. method:: data_received(data)
1102
Chris Liechtif8a09192015-12-20 23:36:38 +01001103 :param bytes data: partial received data
1104
1105 Buffer received data and search for :attr:`TERMINATOR`, when found,
Chris Liechti811bf382015-10-10 00:54:47 +02001106 call :meth:`handle_packet`.
1107
1108 .. method:: handle_packet(packet)
1109
Chris Liechti1c4c5992016-01-18 20:46:00 +01001110 :param bytes packet: a packet as defined by ``TERMINATOR``
1111
Chris Liechti811bf382015-10-10 00:54:47 +02001112 Process packets - to be overridden by subclassing.
1113
1114
1115.. class:: LineReader(Packetizer)
1116
1117 Read and write (Unicode) lines from/to serial port.
1118 The encoding is applied.
1119
1120
1121 .. attribute:: TERMINATOR = b'\\r\\n'
Chris Liechti1c4c5992016-01-18 20:46:00 +01001122
1123 Line ending.
1124
Chris Liechti811bf382015-10-10 00:54:47 +02001125 .. attribute:: ENCODING = 'utf-8'
Chris Liechti1c4c5992016-01-18 20:46:00 +01001126
1127 Encoding of the send and received data.
1128
Chris Liechti811bf382015-10-10 00:54:47 +02001129 .. attribute:: UNICODE_HANDLING = 'replace'
1130
Chris Liechti1c4c5992016-01-18 20:46:00 +01001131 Unicode error handly policy.
1132
Chris Liechti811bf382015-10-10 00:54:47 +02001133 .. method:: handle_packet(packet)
1134
Chris Liechti1c4c5992016-01-18 20:46:00 +01001135 :param bytes packet: a packet as defined by ``TERMINATOR``
1136
1137 In this case it will be a line, calls :meth:`handle_line` after applying
1138 the :attr:`ENCODING`.
1139
Chris Liechti811bf382015-10-10 00:54:47 +02001140 .. method:: handle_line(line)
1141
Chris Liechtif8a09192015-12-20 23:36:38 +01001142 :param str line: Unicode string with one line (excluding line terminator)
Chris Liechti811bf382015-10-10 00:54:47 +02001143
1144 Process one line - to be overridden by subclassing.
1145
1146 .. method:: write_line(text)
1147
Chris Liechtif8a09192015-12-20 23:36:38 +01001148 :param str text: Unicode string with one line (excluding line terminator)
Chris Liechti811bf382015-10-10 00:54:47 +02001149
Chris Liechtif8a09192015-12-20 23:36:38 +01001150 Write *text* to the transport. *text* is expected to be a Unicode
1151 string and the encoding is applied before sending and also the
1152 :attr:`TERMINATOR` (new line) is appended.
Chris Liechti811bf382015-10-10 00:54:47 +02001153
1154
Chris Liechti5665d572015-10-13 23:50:01 +02001155.. class:: ReaderThread(threading.Thread)
Chris Liechti811bf382015-10-10 00:54:47 +02001156
1157 Implement a serial port read loop and dispatch to a Protocol instance (like
1158 the :class:`asyncio.Protocol`) but do it with threads.
1159
Chris Liechtif8a09192015-12-20 23:36:38 +01001160 Calls to :meth:`close` will close the serial port but it is also possible
1161 to just :meth:`stop` this thread and continue to use the serial port
1162 instance otherwise.
Chris Liechti811bf382015-10-10 00:54:47 +02001163
1164 .. method:: __init__(serial_instance, protocol_factory)
1165
1166 :param serial_instance: serial port instance (opened) to be used.
1167 :param protocol_factory: a callable that returns a Protocol instance
1168
1169 Initialize thread.
1170
Chris Liechtif8a09192015-12-20 23:36:38 +01001171 Note that the ``serial_instance`` 's timeout is set to one second!
Chris Liechti811bf382015-10-10 00:54:47 +02001172 Other settings are not changed.
1173
1174 .. method:: stop()
1175
1176 Stop the reader thread.
1177
1178 .. method:: run()
1179
1180 The actual reader loop driven by the thread. It calls
1181 :meth:`Protocol.connection_made`, reads from the serial port calling
Chris Liechtif8a09192015-12-20 23:36:38 +01001182 :meth:`Protocol.data_received` and finally calls :meth:`Protocol.connection_lost`
Chris Liechti811bf382015-10-10 00:54:47 +02001183 when :meth:`close` is called or an error occurs.
1184
1185 .. method:: write(data)
1186
Chris Liechtif8a09192015-12-20 23:36:38 +01001187 :param bytes data: data to write
1188
Chris Liechti811bf382015-10-10 00:54:47 +02001189 Thread safe writing (uses lock).
1190
1191 .. method:: close()
1192
1193 Close the serial port and exit reader thread, calls :meth:`stop` (uses lock).
1194
1195 .. method:: connect()
1196
1197 Wait until connection is set up and return the transport and protocol
1198 instances.
1199
1200
1201 This class can be used as context manager, in this case it starts
1202 the thread and connects automatically. The serial port is closed
1203 when the context is left.
1204
1205 .. method:: __enter__()
1206
1207 :returns: protocol
1208
1209 Connect and return protocol instance.
1210
1211 .. method:: __exit__(exc_type, exc_val, exc_tb)
1212
1213 Closes serial port.
1214
Chris Liechtia1436b12015-10-12 23:19:04 +02001215Example::
1216
1217 class PrintLines(LineReader):
1218 def connection_made(self, transport):
1219 super(PrintLines, self).connection_made(transport)
1220 sys.stdout.write('port opened\n')
1221 self.write_line('hello world')
1222
1223 def handle_line(self, data):
1224 sys.stdout.write('line received: {}\n'.format(repr(data)))
1225
1226 def connection_lost(self, exc):
1227 if exc:
1228 traceback.print_exc(exc)
1229 sys.stdout.write('port closed\n')
1230
1231 ser = serial.serial_for_url('loop://', baudrate=115200, timeout=1)
Chris Liechti5665d572015-10-13 23:50:01 +02001232 with ReaderThread(ser, PrintLines) as protocol:
Chris Liechtia1436b12015-10-12 23:19:04 +02001233 protocol.write_line('hello')
1234 time.sleep(2)
1235
Chris Liechti811bf382015-10-10 00:54:47 +02001236
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001237asyncio
1238=======
1239
Chris Liechti2c5a31b2016-06-18 22:57:24 +02001240``asyncio`` was introduced with Python 3.4. Experimental support for pySerial
1241is provided via a separate distribution `pyserial-asyncio`_.
Chris Liechti589c92a2015-09-04 23:04:34 +02001242
Chris Liechti2c5a31b2016-06-18 22:57:24 +02001243It is currently under developement, see:
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001244
Chris Liechti2c5a31b2016-06-18 22:57:24 +02001245- http://pyserial-asyncio.readthedocs.io/
1246- https://github.com/pyserial/pyserial-asyncio
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001247
Chris Liechti2c5a31b2016-06-18 22:57:24 +02001248.. _`pyserial-asyncio`: https://pypi.python.org/pypi/pyserial-asyncio
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001249