blob: a3f2ae87b383a00551fd125a317a4d86354084fd [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
65 to :meth:`open` will be needed.
66
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
cliechti4a567a02009-07-27 22:09:31 +000083 Possible values for the parameter *timeout*:
cliechti5134aab2009-07-21 19:47:59 +000084
cliechtibb5c3c52009-07-23 02:29:27 +000085 - ``timeout = None``: wait forever
86 - ``timeout = 0``: non-blocking mode (return immediately on read)
cliechtif81362e2009-07-25 03:44:33 +000087 - ``timeout = x``: set timeout to ``x`` seconds (float allowed)
cliechtic1c37602009-07-21 01:34:57 +000088
Amy Wa891d352015-10-21 11:04:20 -070089 Writes are blocking by default, unless *write_timeout* is set. For
cliechti25375b52010-07-21 23:27:13 +000090 possible values refer to the list for *timeout* above.
cliechti07709e42010-05-21 00:30:09 +000091
cliechti8611bf42009-08-03 00:34:03 +000092 Note that enabling both flow control methods (*xonxoff* and *rtscts*)
93 together may not be supported. It is common to use one of the methods
94 at once, not both.
cliechtic1c37602009-07-21 01:34:57 +000095
cliechti07709e42010-05-21 00:30:09 +000096 *dsrdtr* is not supported by all platforms (silently ignored). Setting
97 it to ``None`` has the effect that its state follows *rtscts*.
98
cliechti25375b52010-07-21 23:27:13 +000099 Also consider using the function :func:`serial_for_url` instead of
100 creating Serial instances directly.
101
cliechti5c72e4d2010-07-21 14:04:54 +0000102 .. versionchanged:: 2.5
cliechti06281be2011-08-25 23:08:29 +0000103 *dsrdtr* now defaults to ``False`` (instead of *None*)
cliechti5c72e4d2010-07-21 14:04:54 +0000104
cliechtic1c37602009-07-21 01:34:57 +0000105 .. method:: open()
106
107 Open port.
108
109 .. method:: close()
110
111 Close port immediately.
112
cliechti25375b52010-07-21 23:27:13 +0000113 .. method:: __del__()
114
115 Destructor, close port when serial port instance is freed.
116
cliechtic1c37602009-07-21 01:34:57 +0000117
Chris Liechti256ea212015-08-29 23:57:00 +0200118 The following methods may raise :exc:`SerialException` when applied to a closed
cliechti4a567a02009-07-27 22:09:31 +0000119 port.
cliechtic1c37602009-07-21 01:34:57 +0000120
121 .. method:: read(size=1)
122
cliechtibb5c3c52009-07-23 02:29:27 +0000123 :param size: Number of bytes to read.
124 :return: Bytes read from the port.
cliechtic1c37602009-07-21 01:34:57 +0000125
cliechti4a567a02009-07-27 22:09:31 +0000126 Read *size* bytes from the serial port. If a timeout is set it may
cliechtibb5c3c52009-07-23 02:29:27 +0000127 return less characters as requested. With no timeout it will block
128 until the requested number of bytes is read.
cliechtic1c37602009-07-21 01:34:57 +0000129
cliechti4a567a02009-07-27 22:09:31 +0000130 .. versionchanged:: 2.5
131 Returns an instance of :class:`bytes` when available (Python 2.6
cliechti8611bf42009-08-03 00:34:03 +0000132 and newer) and :class:`str` otherwise.
cliechti4a567a02009-07-27 22:09:31 +0000133
cliechtibb5c3c52009-07-23 02:29:27 +0000134 .. method:: write(data)
135
136 :param data: Data to send.
cliechti4a567a02009-07-27 22:09:31 +0000137 :return: Number of bytes written.
cliechti6066f842009-07-24 00:05:45 +0000138 :exception SerialTimeoutException:
139 In case a write timeout is configured for the port and the time is
140 exceeded.
141
Chris Liechti9ad044a2015-12-17 19:43:59 +0100142 Write the bytes *data* to the port. This should be of type ``bytes``
143 (or compatible such as ``bytearray`` or ``memoryview``). Unicode
144 strings must be encoded (e.g. ``'hello'.encode('utf-8'``).
cliechtic1c37602009-07-21 01:34:57 +0000145
cliechti4a567a02009-07-27 22:09:31 +0000146 .. versionchanged:: 2.5
cliechtiddd78132009-07-28 01:13:28 +0000147 Accepts instances of :class:`bytes` and :class:`bytearray` when
cliechti8611bf42009-08-03 00:34:03 +0000148 available (Python 2.6 and newer) and :class:`str` otherwise.
cliechti4a567a02009-07-27 22:09:31 +0000149
cliechti9a1c6952009-10-20 22:18:28 +0000150 .. versionchanged:: 2.5
151 Write returned ``None`` in previous versions.
152
Chris Liechti518b0d32015-08-30 02:20:39 +0200153 .. method:: flush()
154
155 Flush of file like objects. In this case, wait until all data is
156 written.
157
Chris Liechti256ea212015-08-29 23:57:00 +0200158 .. attribute:: in_waiting
cliechti4a567a02009-07-27 22:09:31 +0000159
Chris Liechti256ea212015-08-29 23:57:00 +0200160 :getter: Get the number of bytes in the input buffer
161 :type: int
162
163 Return the number of bytes in the receive buffer.
cliechti4a567a02009-07-27 22:09:31 +0000164
Chris Liechti518b0d32015-08-30 02:20:39 +0200165 .. versionchanged:: 3.0 changed to property from ``inWaiting()``
cliechtic1c37602009-07-21 01:34:57 +0000166
Chris Liechti518b0d32015-08-30 02:20:39 +0200167 .. attribute:: out_waiting
168
169 :getter: Get the number of bytes in the output buffer
170 :platform: Posix
171 :platform: Windows
172
173 Return the number of bytes in the output buffer.
174
175 .. versionchanged:: 2.7 (Posix support added)
176 .. versionchanged:: 3.0 changed to property from ``outWaiting()``
cliechtic1c37602009-07-21 01:34:57 +0000177
Chris Liechti256ea212015-08-29 23:57:00 +0200178 .. method:: reset_input_buffer()
cliechtic1c37602009-07-21 01:34:57 +0000179
180 Flush input buffer, discarding all it's contents.
181
Chris Liechti518b0d32015-08-30 02:20:39 +0200182 .. versionchanged:: 3.0 renamed from ``flushInput()``
183
Chris Liechti256ea212015-08-29 23:57:00 +0200184 .. method:: reset_output_buffer()
cliechtic1c37602009-07-21 01:34:57 +0000185
186 Clear output buffer, aborting the current output and
187 discarding all that is in the buffer.
188
Chris Liechti518b0d32015-08-30 02:20:39 +0200189 .. versionchanged:: 3.0 renamed from ``flushOutput()``
190
Chris Liechti256ea212015-08-29 23:57:00 +0200191 .. method:: send_break(duration=0.25)
cliechtic1c37602009-07-21 01:34:57 +0000192
cliechtibb5c3c52009-07-23 02:29:27 +0000193 :param duration: Time (float) to activate the BREAK condition.
194
cliechtic1c37602009-07-21 01:34:57 +0000195 Send break condition. Timed, returns to idle state after given
196 duration.
197
cliechtic1c37602009-07-21 01:34:57 +0000198
Chris Liechti256ea212015-08-29 23:57:00 +0200199 .. attribute:: break_condition
cliechtibb5c3c52009-07-23 02:29:27 +0000200
Chris Liechti256ea212015-08-29 23:57:00 +0200201 :getter: Get the current BREAK state
202 :setter: Control the BREAK state
203 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000204
Chris Liechti256ea212015-08-29 23:57:00 +0200205 When set to ``True`` activate BREAK condition, else disable.
206 Controls TXD. When active, no transmitting is possible.
cliechtic1c37602009-07-21 01:34:57 +0000207
Chris Liechti256ea212015-08-29 23:57:00 +0200208 .. attribute:: rts
cliechtibb5c3c52009-07-23 02:29:27 +0000209
Chris Liechti256ea212015-08-29 23:57:00 +0200210 :setter: Set the state of the RTS line
211 :getter: Return the state of the RTS line
212 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000213
Chris Liechti256ea212015-08-29 23:57:00 +0200214 Set RTS line to specified logic level. It is possible to assign this
215 value before opening the serial port, then the value is applied uppon
216 :meth:`open`.
cliechtic1c37602009-07-21 01:34:57 +0000217
Chris Liechti256ea212015-08-29 23:57:00 +0200218 .. attribute:: dtr
cliechtibb5c3c52009-07-23 02:29:27 +0000219
Chris Liechti256ea212015-08-29 23:57:00 +0200220 :setter: Set the state of the DTR line
221 :getter: Return the state of the DTR line
222 :type: bool
cliechtic1c37602009-07-21 01:34:57 +0000223
Chris Liechti256ea212015-08-29 23:57:00 +0200224 Set DTR 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 Liechti518b0d32015-08-30 02:20:39 +0200228 Read-only attributes:
229
230 .. attribute:: name
231
232 :getter: Device name.
233
234 .. versionadded:: 2.5
235
Chris Liechti256ea212015-08-29 23:57:00 +0200236 .. attribute:: cts
237
238 :getter: Get the state of the CTS line
239 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000240
cliechtic1c37602009-07-21 01:34:57 +0000241 Return the state of the CTS line.
242
Chris Liechti256ea212015-08-29 23:57:00 +0200243 .. attribute:: dsr
cliechtic1c37602009-07-21 01:34:57 +0000244
Chris Liechti256ea212015-08-29 23:57:00 +0200245 :getter: Get the state of the DSR line
246 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000247
cliechtic1c37602009-07-21 01:34:57 +0000248 Return the state of the DSR line.
249
Chris Liechti256ea212015-08-29 23:57:00 +0200250 .. attribute:: ri
cliechtic1c37602009-07-21 01:34:57 +0000251
Chris Liechti256ea212015-08-29 23:57:00 +0200252 :getter: Get the state of the RI line
253 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000254
cliechtic1c37602009-07-21 01:34:57 +0000255 Return the state of the RI line.
256
Chris Liechti256ea212015-08-29 23:57:00 +0200257 .. attribute:: cd
cliechtic1c37602009-07-21 01:34:57 +0000258
Chris Liechti256ea212015-08-29 23:57:00 +0200259 :getter: Get the state of the CD line
260 :type: bool
cliechtibb5c3c52009-07-23 02:29:27 +0000261
cliechtic1c37602009-07-21 01:34:57 +0000262 Return the state of the CD line
263
cliechtif81362e2009-07-25 03:44:33 +0000264
cliechti25375b52010-07-21 23:27:13 +0000265 New values can be assigned to the following attributes (properties), the
266 port will be reconfigured, even if it's opened at that time:
cliechtic1c37602009-07-21 01:34:57 +0000267
cliechtiedcdbe42009-07-22 00:48:34 +0000268
269 .. attribute:: port
270
271 Read or write port. When the port is already open, it will be closed
272 and reopened with the new setting.
273
274 .. attribute:: baudrate
275
Chris Liechti518b0d32015-08-30 02:20:39 +0200276 :getter: Get current baud rate
277 :setter: Set new baud rate
278 :type: int
279
cliechti6066f842009-07-24 00:05:45 +0000280 Read or write current baud rate setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000281
282 .. attribute:: bytesize
283
Chris Liechti518b0d32015-08-30 02:20:39 +0200284 :getter: Get current byte size
285 :setter: Set new byte size. Possible values:
286 :const:`FIVEBITS`, :const:`SIXBITS`, :const:`SEVENBITS`,
287 :const:`EIGHTBITS`
288 :type: int
289
cliechti6066f842009-07-24 00:05:45 +0000290 Read or write current data byte size setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000291
292 .. attribute:: parity
293
Chris Liechti518b0d32015-08-30 02:20:39 +0200294 :getter: Get current parity setting
295 :setter: Set new parity mode. Possible values:
296 :const:`PARITY_NONE`, :const:`PARITY_EVEN`, :const:`PARITY_ODD`
297 :const:`PARITY_MARK`, :const:`PARITY_SPACE`
298
cliechti6066f842009-07-24 00:05:45 +0000299 Read or write current parity setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000300
301 .. attribute:: stopbits
302
Chris Liechti518b0d32015-08-30 02:20:39 +0200303 :getter: Get current stop bit setting
304 :setter: Set new stop bit setting. Possible values:
305 :const:`STOPBITS_ONE`, :const:`STOPBITS_ONE_POINT_FIVE`,
306 :const:`STOPBITS_TWO`
307
cliechti6066f842009-07-24 00:05:45 +0000308 Read or write current stop bit width setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000309
310 .. attribute:: timeout
311
Chris Liechti518b0d32015-08-30 02:20:39 +0200312 :getter: Get current read timeout setting
313 :setter: Set read timeout
314 :type: float (seconds)
315
cliechti6066f842009-07-24 00:05:45 +0000316 Read or write current read timeout setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000317
Chris Liechti518b0d32015-08-30 02:20:39 +0200318 .. attribute:: write_timeout
319
320 :getter: Get current write timeout setting
321 :setter: Set write timeout
322 :type: float (seconds)
cliechtiedcdbe42009-07-22 00:48:34 +0000323
cliechti6066f842009-07-24 00:05:45 +0000324 Read or write current write timeout setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000325
Chris Liechti518b0d32015-08-30 02:20:39 +0200326 .. versionchanged:: 3.0 renamed from ``writeTimeout``
327
328 .. attribute:: inter_byte_timeout
329
330 :getter: Get current inter byte timeout setting
331 :setter: Disable (``None``) or enable the inter byte timeout
332 :type: float or None
333
334 Read or write current inter byte timeout setting.
335
336 .. versionchanged:: 3.0 renamed from ``interCharTimeout``
337
cliechtiedcdbe42009-07-22 00:48:34 +0000338 .. attribute:: xonxoff
339
Chris Liechti518b0d32015-08-30 02:20:39 +0200340 :getter: Get current software flow control setting
341 :setter: Enable or disable software flow control
342 :type: bool
343
cliechti6066f842009-07-24 00:05:45 +0000344 Read or write current software flow control rate setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000345
346 .. attribute:: rtscts
347
Chris Liechti518b0d32015-08-30 02:20:39 +0200348 :getter: Get current hardware flow control setting
349 :setter: Enable or disable hardware flow control
350 :type: bool
351
cliechti6066f842009-07-24 00:05:45 +0000352 Read or write current hardware flow control setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000353
354 .. attribute:: dsrdtr
355
Chris Liechti518b0d32015-08-30 02:20:39 +0200356 :getter: Get current hardware flow control setting
357 :setter: Enable or disable hardware flow control
358 :type: bool
359
cliechti6066f842009-07-24 00:05:45 +0000360 Read or write current hardware flow control setting.
cliechtiedcdbe42009-07-22 00:48:34 +0000361
Chris Liechtice621882015-08-06 19:29:31 +0200362 .. attribute:: rs485_mode
363
Chris Liechti518b0d32015-08-30 02:20:39 +0200364 :getter: Get the current RS485 settings
365 :setter: Disable (``None``) or enable the RS485 settings
366 :type: :class:`rs485.RS485Settings` or ``None``
367 :platform: Posix (Linux, limited set of hardware)
368 :platform: Windows (RTS on TX only possible)
Chris Liechtice621882015-08-06 19:29:31 +0200369
370 Attribute to configure RS485 support. When set to an instance of
371 :class:`rs485.RS485Settings` and supported by OS, RTS will be active
372 when data is sent and inactive otherwise (for reception). The
373 :class:`rs485.RS485Settings` class provides additional settings
374 supported on some platforms.
375
376 .. versionadded:: 3.0
377
378
cliechtiedcdbe42009-07-22 00:48:34 +0000379 The following constants are also provided:
380
381 .. attribute:: BAUDRATES
382
cliechti25375b52010-07-21 23:27:13 +0000383 A list of valid baud rates. The list may be incomplete such that higher
384 baud rates may be supported by the device and that values in between the
385 standard baud rates are supported. (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000386
387 .. attribute:: BYTESIZES
388
cliechti25375b52010-07-21 23:27:13 +0000389 A list of valid byte sizes for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000390
391 .. attribute:: PARITIES
392
cliechti25375b52010-07-21 23:27:13 +0000393 A list of valid parities for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000394
395 .. attribute:: STOPBITS
396
cliechti25375b52010-07-21 23:27:13 +0000397 A list of valid stop bit widths for the device (Read Only).
cliechtiedcdbe42009-07-22 00:48:34 +0000398
cliechti4a567a02009-07-27 22:09:31 +0000399
cliechti25375b52010-07-21 23:27:13 +0000400 The following methods are for compatibility with the :mod:`io` library.
cliechti4a567a02009-07-27 22:09:31 +0000401
402 .. method:: readable()
403
404 :return: True
cliechtif4566342009-08-04 00:07:19 +0000405
cliechti4a567a02009-07-27 22:09:31 +0000406 .. versionadded:: 2.5
407
408 .. method:: writable()
409
410 :return: True
cliechtif4566342009-08-04 00:07:19 +0000411
cliechti4a567a02009-07-27 22:09:31 +0000412 .. versionadded:: 2.5
413
414 .. method:: seekable()
415
416 :return: False
cliechtif4566342009-08-04 00:07:19 +0000417
cliechti4a567a02009-07-27 22:09:31 +0000418 .. versionadded:: 2.5
419
420 .. method:: readinto(b)
421
cliechti8611bf42009-08-03 00:34:03 +0000422 :param b: bytearray or array instance
cliechti4a567a02009-07-27 22:09:31 +0000423 :return: Number of byte read
424
cliechtid7e7ce22009-08-03 02:01:07 +0000425 Read up to len(b) bytes into :class:`bytearray` *b* and return the
426 number of bytes read.
cliechti4a567a02009-07-27 22:09:31 +0000427
428 .. versionadded:: 2.5
429
cliechti25375b52010-07-21 23:27:13 +0000430 The port settings can be read and written as dictionary.
431
Chris Liechti256ea212015-08-29 23:57:00 +0200432 .. method:: get_settings()
cliechti4065dce2009-08-10 00:55:46 +0000433
434 :return: a dictionary with current port settings.
435
436 Get a dictionary with port settings. This is useful to backup the
437 current settings so that a later point in time they can be restored
Chris Liechti518b0d32015-08-30 02:20:39 +0200438 using :meth:`apply_settings`.
cliechti4065dce2009-08-10 00:55:46 +0000439
440 Note that control lines (RTS/DTR) are part of the settings.
441
442 .. versionadded:: 2.5
443
Chris Liechti256ea212015-08-29 23:57:00 +0200444 .. method:: apply_settings(d)
cliechti4065dce2009-08-10 00:55:46 +0000445
446 :param d: a dictionary with port settings.
447
Chris Liechti518b0d32015-08-30 02:20:39 +0200448 Applies a dictionary that was created by :meth:`get_settings`. Only
cliechti4065dce2009-08-10 00:55:46 +0000449 changes are applied and when a key is missing it means that the setting
450 stays unchanged.
451
452 Note that control lines (RTS/DTR) are not changed.
453
454 .. versionadded:: 2.5
455
cliechti25375b52010-07-21 23:27:13 +0000456 Platform specific methods.
457
cliechtic648da92011-12-29 01:17:51 +0000458 .. warning:: Programs using the following methods and attributes are not
459 portable to other platforms!
cliechti25375b52010-07-21 23:27:13 +0000460
461 .. method:: nonblocking()
462
Chris Liechtice621882015-08-06 19:29:31 +0200463 :platform: Posix
cliechti25375b52010-07-21 23:27:13 +0000464
465 Configure the device for nonblocking operation. This can be useful if
Chris Liechti518b0d32015-08-30 02:20:39 +0200466 the port is used with :mod:`select`. Note that :attr:`timeout` must
467 also be set to ``0``
cliechti25375b52010-07-21 23:27:13 +0000468
469 .. method:: fileno()
470
Chris Liechtice621882015-08-06 19:29:31 +0200471 :platform: Posix
cliechti25375b52010-07-21 23:27:13 +0000472 :return: File descriptor.
473
474 Return file descriptor number for the port that is opened by this object.
475 It is useful when serial ports are used with :mod:`select`.
476
Chris Liechti518b0d32015-08-30 02:20:39 +0200477 .. method:: set_input_flow_control(enable)
cliechti25375b52010-07-21 23:27:13 +0000478
cliechti2f0f8a32011-12-28 22:10:00 +0000479 :platform: Posix
Chris Liechti518b0d32015-08-30 02:20:39 +0200480 :param enable: Set flow control state.
cliechti25375b52010-07-21 23:27:13 +0000481
cliechti2f0f8a32011-12-28 22:10:00 +0000482 Manually control flow - when software flow control is enabled.
483
484 This will send XON (true) and XOFF (false) to the other device.
485
Chris Liechti518b0d32015-08-30 02:20:39 +0200486 .. versionadded:: 2.7 (Posix support added)
487 .. versionchanged:: 3.0 renamed from ``flowControlOut``
cliechti2f0f8a32011-12-28 22:10:00 +0000488
Chris Liechti518b0d32015-08-30 02:20:39 +0200489 .. method:: set_output_flow_control(enable)
cliechti2f0f8a32011-12-28 22:10:00 +0000490
Chris Liechti518b0d32015-08-30 02:20:39 +0200491 :platform: Posix (HW and SW flow control)
492 :platform: Windows (SW flow control only)
cliechti2f0f8a32011-12-28 22:10:00 +0000493 :param enable: Set flow control state.
494
495 Manually control flow of outgoing data - when hardware or software flow
496 control is enabled.
497
498 Sending will be suspended when called with ``False`` and enabled when
499 called with ``True``.
500
Chris Liechti518b0d32015-08-30 02:20:39 +0200501 .. versionchanged:: 2.7 (renamed on Posix, function was called ``flowControl``)
502 .. versionchanged:: 3.0 renamed from ``setXON``
Chris Liechti256ea212015-08-29 23:57:00 +0200503
504
Chris Liechti518b0d32015-08-30 02:20:39 +0200505
Chris Liechti9a99cb22015-08-30 22:16:50 +0200506 .. note:: The following members are deprecated and will be removed in a
Chris Liechti518b0d32015-08-30 02:20:39 +0200507 future release.
Chris Liechti256ea212015-08-29 23:57:00 +0200508
509 .. attribute:: portstr
510
Chris Liechti518b0d32015-08-30 02:20:39 +0200511 .. deprecated:: 2.5 use :attr:`name` instead
Chris Liechti256ea212015-08-29 23:57:00 +0200512
513 .. method:: inWaiting()
514
Chris Liechti518b0d32015-08-30 02:20:39 +0200515 .. deprecated:: 3.0 see :attr:`in_waiting`
516
517 .. attribute:: writeTimeout
518
519 .. deprecated:: 3.0 see :attr:`write_timeout`
Chris Liechti256ea212015-08-29 23:57:00 +0200520
521 .. attribute:: interCharTimeout
522
Chris Liechti518b0d32015-08-30 02:20:39 +0200523 .. deprecated:: 3.0 see :attr:`inter_byte_timeout`
Chris Liechti256ea212015-08-29 23:57:00 +0200524
525 .. method:: sendBreak(duration=0.25)
526
Chris Liechti518b0d32015-08-30 02:20:39 +0200527 .. deprecated:: 3.0 see :meth:`send_break`
Chris Liechti256ea212015-08-29 23:57:00 +0200528
529 .. method:: flushInput()
530
Chris Liechti518b0d32015-08-30 02:20:39 +0200531 .. deprecated:: 3.0 see :meth:`reset_input_buffer`
Chris Liechti256ea212015-08-29 23:57:00 +0200532
533 .. method:: flushOutput()
534
Chris Liechti518b0d32015-08-30 02:20:39 +0200535 .. deprecated:: 3.0 see :meth:`reset_output_buffer`
Chris Liechti256ea212015-08-29 23:57:00 +0200536
537 .. method:: setBreak(level=True)
538
Chris Liechti518b0d32015-08-30 02:20:39 +0200539 .. deprecated:: 3.0 see :attr:`break_condition`
Chris Liechti256ea212015-08-29 23:57:00 +0200540
541 .. method:: setRTS(level=True)
542
Chris Liechti518b0d32015-08-30 02:20:39 +0200543 .. deprecated:: 3.0 see :attr:`rts`
Chris Liechti256ea212015-08-29 23:57:00 +0200544
545 .. method:: setDTR(level=True)
546
Chris Liechti518b0d32015-08-30 02:20:39 +0200547 .. deprecated:: 3.0 see :attr:`dtr`
Chris Liechti256ea212015-08-29 23:57:00 +0200548
549 .. method:: getCTS()
550
Chris Liechti518b0d32015-08-30 02:20:39 +0200551 .. deprecated:: 3.0 see :attr:`cts`
Chris Liechti256ea212015-08-29 23:57:00 +0200552
553 .. method:: getDSR()
554
Chris Liechti518b0d32015-08-30 02:20:39 +0200555 .. deprecated:: 3.0 see :attr:`dsr`
Chris Liechti256ea212015-08-29 23:57:00 +0200556
557 .. method:: getRI()
558
Chris Liechti518b0d32015-08-30 02:20:39 +0200559 .. deprecated:: 3.0 see :attr:`ri`
Chris Liechti256ea212015-08-29 23:57:00 +0200560
561 .. method:: getCD()
562
Chris Liechti518b0d32015-08-30 02:20:39 +0200563 .. deprecated:: 3.0 see :attr:`cd`
Chris Liechti256ea212015-08-29 23:57:00 +0200564
565 .. method:: getSettingsDict()
566
Chris Liechti518b0d32015-08-30 02:20:39 +0200567 .. deprecated:: 3.0 see :meth:`get_settings`
Chris Liechti256ea212015-08-29 23:57:00 +0200568
569 .. method:: applySettingsDict(d)
570
Chris Liechti518b0d32015-08-30 02:20:39 +0200571 .. deprecated:: 3.0 see :meth:`apply_settings`
Chris Liechti256ea212015-08-29 23:57:00 +0200572
573 .. method:: outWaiting()
574
Chris Liechti518b0d32015-08-30 02:20:39 +0200575 .. deprecated:: 3.0 see :attr:`out_waiting`
Chris Liechti256ea212015-08-29 23:57:00 +0200576
577 .. method:: setXON(level=True)
578
Chris Liechti518b0d32015-08-30 02:20:39 +0200579 .. deprecated:: 3.0 see :meth:`set_output_flow_control`
Chris Liechti256ea212015-08-29 23:57:00 +0200580
581 .. method:: flowControlOut(enable)
582
Chris Liechti518b0d32015-08-30 02:20:39 +0200583 .. deprecated:: 3.0 see :meth:`set_input_flow_control`
cliechtif4566342009-08-04 00:07:19 +0000584
cliechtic648da92011-12-29 01:17:51 +0000585 .. attribute:: rtsToggle
586
587 :platform: Windows
588
589 Attribute to configure RTS toggle control setting. When enabled and
590 supported by OS, RTS will be active when data is available and inactive
591 if no data is available.
592
593 .. versionadded:: 2.6
Chris Liechti518b0d32015-08-30 02:20:39 +0200594 .. versionchanged:: 3.0 (removed, see :attr:`rs485_mode` instead)
cliechtic648da92011-12-29 01:17:51 +0000595
596
cliechtic56e41d2011-08-25 22:06:38 +0000597Implementation detail: some attributes and functions are provided by the
598class :class:`SerialBase` and some by the platform specific class and
599others by the base class mentioned above.
cliechti25375b52010-07-21 23:27:13 +0000600
Chris Liechtice621882015-08-06 19:29:31 +0200601RS485 support
602-------------
603The :class:`Serial` class has a :attr:`Serial.rs485_mode` attribute which allows to
604enable RS485 specific support on some platforms. Currently Windows and Linux
605(only a small number of devices) are supported.
cliechti4a567a02009-07-27 22:09:31 +0000606
Chris Liechtice621882015-08-06 19:29:31 +0200607:attr:`Serial.rs485_mode` needs to be set to an instance of
608:class:`rs485.RS485Settings` to enable or to ``None`` to disable this feature.
cliechti4a567a02009-07-27 22:09:31 +0000609
Chris Liechtice621882015-08-06 19:29:31 +0200610Usage::
cliechti4a567a02009-07-27 22:09:31 +0000611
Chris Liechtice621882015-08-06 19:29:31 +0200612 ser = serial.Serial(...)
613 ser.rs485_mode = serial.rs485.RS485Settings(...)
614 ser.write(b'hello')
cliechti4a567a02009-07-27 22:09:31 +0000615
Chris Liechtice621882015-08-06 19:29:31 +0200616There is a subclass :class:`rs485.RS485` available to emulate the RS485 support
617on regular serial ports.
cliechti4a567a02009-07-27 22:09:31 +0000618
cliechti4a567a02009-07-27 22:09:31 +0000619
Chris Liechtice621882015-08-06 19:29:31 +0200620.. class:: rs485.RS485Settings
cliechti4a567a02009-07-27 22:09:31 +0000621
Chris Liechtice621882015-08-06 19:29:31 +0200622 A class that holds RS485 specific settings which are supported on
623 some platforms.
cliechti4a567a02009-07-27 22:09:31 +0000624
Chris Liechtice621882015-08-06 19:29:31 +0200625 .. versionadded:: 3.0
cliechti4a567a02009-07-27 22:09:31 +0000626
Chris Liechtice621882015-08-06 19:29:31 +0200627 .. 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 +0000628
Chris Liechtice621882015-08-06 19:29:31 +0200629 :param bool rts_level_for_tx:
630 RTS level for transmission
cliechti4a567a02009-07-27 22:09:31 +0000631
Chris Liechtice621882015-08-06 19:29:31 +0200632 :param bool rts_level_for_rx:
633 RTS level for reception
cliechti4a567a02009-07-27 22:09:31 +0000634
Chris Liechtice621882015-08-06 19:29:31 +0200635 :param bool loopback:
636 When set to ``True`` transmitted data is also received.
cliechti4a567a02009-07-27 22:09:31 +0000637
Chris Liechtice621882015-08-06 19:29:31 +0200638 :param float delay_before_tx:
639 Delay after setting RTS but before transmission starts
640
641 :param float delay_before_rx:
642 Delay after transmission ends and resetting RTS
643
644 .. attribute:: rts_level_for_tx
645
646 RTS level for transmission.
647
648 .. attribute:: rts_level_for_rx
649
650 RTS level for reception.
651
652 .. attribute:: loopback
653
654 When set to ``True`` transmitted data is also received.
655
656 .. attribute:: delay_before_tx
657
658 Delay after setting RTS but before transmission starts (seconds as float).
659
660 .. attribute:: delay_before_rx
661
662 Delay after transmission ends and resetting RTS (seconds as float).
cliechti4a567a02009-07-27 22:09:31 +0000663
664
Chris Liechtice621882015-08-06 19:29:31 +0200665.. class:: rs485.RS485
cliechti4a567a02009-07-27 22:09:31 +0000666
Chris Liechtice621882015-08-06 19:29:31 +0200667 A subclass that replaces the :meth:`Serial.write` method with one that toggles RTS
668 according to the RS485 settings.
cliechti4a567a02009-07-27 22:09:31 +0000669
Chris Liechti518b0d32015-08-30 02:20:39 +0200670 Usage::
671
672 ser = serial.rs485.RS485(...)
673 ser.rs485_mode = serial.rs485.RS485Settings(...)
674 ser.write(b'hello')
675
Chris Liechtice621882015-08-06 19:29:31 +0200676 .. warning:: This may work unreliably on some serial ports (control signals not
677 synchronized or delayed compared to data). Using delays may be unreliable
678 (varying times, larger than expected) as the OS may not support very fine
679 grained delays (no smaller than in the order of tens of milliseconds).
cliechti4a567a02009-07-27 22:09:31 +0000680
Chris Liechtice621882015-08-06 19:29:31 +0200681 .. note:: Some implementations support this natively in the class
682 :class:`Serial`. Better performance can be expected when the native version
683 is used.
cliechti4a567a02009-07-27 22:09:31 +0000684
Chris Liechtice621882015-08-06 19:29:31 +0200685 .. note:: The loopback property is ignored by this implementation. The actual
686 behavior depends on the used hardware.
cliechti4a567a02009-07-27 22:09:31 +0000687
cliechti4a567a02009-07-27 22:09:31 +0000688
cliechtie214ff82010-07-21 15:48:47 +0000689
cliechti25375b52010-07-21 23:27:13 +0000690
cliechti7aed8332009-08-05 14:19:31 +0000691:rfc:`2217` Network ports
692-------------------------
693
694.. warning:: This implementation is currently in an experimental state. Use
695 at your own risk.
cliechtiedcdbe42009-07-22 00:48:34 +0000696
cliechtiec4ac1b2009-08-02 00:47:21 +0000697.. class:: rfc2217.Serial
698
Chris Liechti2a1befc2015-10-21 17:37:08 +0200699 This implements a :rfc:`2217` compatible client. Port names are :ref:`URL
700 <URLs>` in the form: ``rfc2217://<host>:<port>[?<option>[&<option>]]``
cliechtiec4ac1b2009-08-02 00:47:21 +0000701
cliechtiec4ac1b2009-08-02 00:47:21 +0000702 This class API is compatible to :class:`Serial` with a few exceptions:
703
Chris Liechti518b0d32015-08-30 02:20:39 +0200704 - write_timeout is not implemented
cliechtiec4ac1b2009-08-02 00:47:21 +0000705 - The current implementation starts a thread that keeps reading from the
706 (internal) socket. The thread is managed automatically by the
707 :class:`rfc2217.Serial` port object on :meth:`open`/:meth:`close`.
708 However it may be a problem for user applications that like to use select
709 instead of threads.
710
711 Due to the nature of the network and protocol involved there are a few
712 extra points to keep in mind:
713
714 - All operations have an additional latency time.
715 - Setting control lines (RTS/CTS) needs more time.
716 - Reading the status lines (DSR/DTR etc.) returns a cached value. When that
717 cache is updated depends entirely on the server. The server itself may
718 implement a polling at a certain rate and quick changes may be invisible.
719 - The network layer also has buffers. This means that :meth:`flush`,
Chris Liechti518b0d32015-08-30 02:20:39 +0200720 :meth:`reset_input_buffer` and :meth:`reset_output_buffer` may work with
721 additional delay. Likewise :attr:`in_waiting` returns the size of the
722 data arrived at the object internal buffer and excludes any bytes in the
723 network buffers or any server side buffer.
cliechtiec4ac1b2009-08-02 00:47:21 +0000724 - Closing and immediately reopening the same port may fail due to time
725 needed by the server to get ready again.
726
727 Not implemented yet / Possible problems with the implementation:
728
cliechti8611bf42009-08-03 00:34:03 +0000729 - :rfc:`2217` flow control between client and server (objects internal
730 buffer may eat all your memory when never read).
cliechtid7e7ce22009-08-03 02:01:07 +0000731 - No authentication support (servers may not prompt for a password etc.)
732 - No encryption.
733
734 Due to lack of authentication and encryption it is not suitable to use this
735 client for connections across the internet and should only be used in
736 controlled environments.
cliechtiec4ac1b2009-08-02 00:47:21 +0000737
cliechti7c640ed2009-08-02 00:54:51 +0000738 .. versionadded:: 2.5
cliechtiec4ac1b2009-08-02 00:47:21 +0000739
cliechti7aed8332009-08-05 14:19:31 +0000740
741.. class:: rfc2217.PortManager
742
743 This class provides helper functions for implementing :rfc:`2217`
744 compatible servers.
745
Chris Liechti518b0d32015-08-30 02:20:39 +0200746 Basically, it implements everything needed for the :rfc:`2217` protocol.
cliechti7aed8332009-08-05 14:19:31 +0000747 It just does not open sockets and read/write to serial ports (though it
748 changes other port settings). The user of this class must take care of the
749 data transmission itself. The reason for that is, that this way, this class
750 supports all programming models such as threads and select.
751
752 Usage examples can be found in the examples where two TCP/IP - serial
753 converters are shown, one using threads (the single port server) and an
754 other using select (the multi port server).
755
756 .. note:: Each new client connection must create a new instance as this
757 object (and the :rfc:`2217` protocol) has internal state.
758
759 .. method:: __init__(serial_port, connection, debug_output=False)
760
761 :param serial_port: a :class:`Serial` instance that is managed.
762 :param connection: an object implementing :meth:`write`, used to write
763 to the network.
cliechti86844e82009-08-12 00:05:33 +0000764 :param debug_output: enables debug messages: a :class:`logging.Logger`
765 instance or None.
cliechti7aed8332009-08-05 14:19:31 +0000766
767 Initializes the Manager and starts negotiating with client in Telnet
768 and :rfc:`2217` protocol. The negotiation starts immediately so that
769 the class should be instantiated in the moment the client connects.
770
771 The *serial_port* can be controlled by :rfc:`2217` commands. This
cliechti06281be2011-08-25 23:08:29 +0000772 object will modify the port settings (baud rate etc.) and control lines
cliechti7aed8332009-08-05 14:19:31 +0000773 (RTS/DTR) send BREAK etc. when the corresponding commands are found by
774 the :meth:`filter` method.
775
776 The *connection* object must implement a :meth:`write(data)` function.
777 This function must ensure that *data* is written at once (no user data
778 mixed in, i.e. it must be thread-safe). All data must be sent in its
779 raw form (:meth:`escape` must not be used) as it is used to send Telnet
780 and :rfc:`2217` control commands.
781
cliechti86844e82009-08-12 00:05:33 +0000782 For diagnostics of the connection or the implementation, *debug_output*
783 can be set to an instance of a :class:`logging.Logger` (e.g.
784 ``logging.getLogger('rfc2217.server')``). The caller should configure
785 the logger using ``setLevel`` for the desired detail level of the logs.
786
cliechti7aed8332009-08-05 14:19:31 +0000787 .. method:: escape(data)
788
789 :param data: data to be sent over the network.
790 :return: data, escaped for Telnet/:rfc:`2217`
791
792 A generator that escapes all data to be compatible with :rfc:`2217`.
793 Implementors of servers should use this function to process all data
794 sent over the network.
795
796 The function returns a generator which can be used in ``for`` loops.
cliechtie214ff82010-07-21 15:48:47 +0000797 It can be converted to bytes using :func:`serial.to_bytes`.
cliechti7aed8332009-08-05 14:19:31 +0000798
799 .. method:: filter(data)
800
801 :param data: data read from the network, including Telnet and
802 :rfc:`2217` controls.
803 :return: data, free from Telnet and :rfc:`2217` controls.
804
805 A generator that filters and processes all data related to :rfc:`2217`.
806 Implementors of servers should use this function to process all data
807 received from the network.
808
809 The function returns a generator which can be used in ``for`` loops.
cliechtie214ff82010-07-21 15:48:47 +0000810 It can be converted to bytes using :func:`serial.to_bytes`.
cliechti7aed8332009-08-05 14:19:31 +0000811
cliechti7cb78e82009-08-05 15:47:57 +0000812 .. method:: check_modem_lines(force_notification=False)
813
814 :param force_notification: Set to false. Parameter is for internal use.
cliechti7aed8332009-08-05 14:19:31 +0000815
816 This function needs to be called periodically (e.g. every second) when
817 the server wants to send NOTIFY_MODEMSTATE messages. This is required
818 to support the client for reading CTS/DSR/RI/CD status lines.
819
820 The function reads the status line and issues the notifications
821 automatically.
822
823 .. versionadded:: 2.5
824
cliechtiec4ac1b2009-08-02 00:47:21 +0000825.. seealso::
826
827 :rfc:`2217` - Telnet Com Port Control Option
828
829
cliechtic1c37602009-07-21 01:34:57 +0000830Exceptions
831==========
832
833.. exception:: SerialException
834
835 Base class for serial port exceptions.
836
cliechti4a567a02009-07-27 22:09:31 +0000837 .. versionchanged:: 2.5
cliechti4cb94662013-10-17 03:17:50 +0000838 Now derives from :exc:`IOError` instead of :exc:`Exception`
cliechti4a567a02009-07-27 22:09:31 +0000839
cliechtic1c37602009-07-21 01:34:57 +0000840.. exception:: SerialTimeoutException
841
842 Exception that is raised on write timeouts.
843
844
845Constants
846=========
847
cliechti87686242009-08-18 00:58:31 +0000848*Parity*
849
cliechtic1c37602009-07-21 01:34:57 +0000850.. data:: PARITY_NONE
851.. data:: PARITY_EVEN
852.. data:: PARITY_ODD
853.. data:: PARITY_MARK
854.. data:: PARITY_SPACE
855
cliechti87686242009-08-18 00:58:31 +0000856*Stop bits*
857
cliechtic1c37602009-07-21 01:34:57 +0000858.. data:: STOPBITS_ONE
859.. data:: STOPBITS_ONE_POINT_FIVE
860.. data:: STOPBITS_TWO
861
cliechti06281be2011-08-25 23:08:29 +0000862Note that 1.5 stop bits are not supported on POSIX. It will fall back to 2 stop
cliechti41be0392010-01-02 03:02:38 +0000863bits.
864
cliechti87686242009-08-18 00:58:31 +0000865*Byte size*
866
cliechtic1c37602009-07-21 01:34:57 +0000867.. data:: FIVEBITS
868.. data:: SIXBITS
869.. data:: SEVENBITS
870.. data:: EIGHTBITS
cliechti5b7d16a2009-07-21 21:53:59 +0000871
cliechti87686242009-08-18 00:58:31 +0000872
873*Others*
874
cliechti8611bf42009-08-03 00:34:03 +0000875Default control characters (instances of :class:`bytes` for Python 3.0+) for
cliechtidaf47ba2009-07-28 01:28:16 +0000876software flow control:
cliechti6066f842009-07-24 00:05:45 +0000877
cliechti5b7d16a2009-07-21 21:53:59 +0000878.. data:: XON
879.. data:: XOFF
cliechtif81362e2009-07-25 03:44:33 +0000880
cliechti4a567a02009-07-27 22:09:31 +0000881Module version:
cliechtif81362e2009-07-25 03:44:33 +0000882
883.. data:: VERSION
884
Chris Liechti518b0d32015-08-30 02:20:39 +0200885 A string indicating the pySerial version, such as ``3.0``.
cliechtif81362e2009-07-25 03:44:33 +0000886
cliechti87686242009-08-18 00:58:31 +0000887 .. versionadded:: 2.3
888
cliechti44eb98f2011-03-21 21:41:10 +0000889
cliechtie542b362011-03-18 00:49:16 +0000890Module functions and attributes
891===============================
cliechtif81362e2009-07-25 03:44:33 +0000892
893.. function:: device(number)
894
Chris Liechti518b0d32015-08-30 02:20:39 +0200895 .. versionchanged:: 3.0 removed, use ``serial.tools.list_ports`` instead
896
cliechti7c640ed2009-08-02 00:54:51 +0000897
cliechtie3ab3532009-08-05 12:40:38 +0000898.. function:: serial_for_url(url, \*args, \*\*kwargs)
cliechti7c640ed2009-08-02 00:54:51 +0000899
cliechti86844e82009-08-12 00:05:33 +0000900 :param url: Device name, number or :ref:`URL <URLs>`
cliechti7c640ed2009-08-02 00:54:51 +0000901 :param do_not_open: When set to true, the serial port is not opened.
902 :return: an instance of :class:`Serial` or a compatible object.
903
904 Get a native or a :rfc:`2217` implementation of the Serial class, depending
cliechtid7e7ce22009-08-03 02:01:07 +0000905 on port/url. This factory function is useful when an application wants
cliechti25375b52010-07-21 23:27:13 +0000906 to support both, local ports and remote ports. There is also support
Chris Liechti589c92a2015-09-04 23:04:34 +0200907 for other types, see :ref:`URL <URLs>` section.
cliechti7c640ed2009-08-02 00:54:51 +0000908
cliechtid7e7ce22009-08-03 02:01:07 +0000909 The port is not opened when a keyword parameter called *do_not_open* is
910 given and true, by default it is opened.
cliechti7c640ed2009-08-02 00:54:51 +0000911
912 .. versionadded:: 2.5
cliechtif4566342009-08-04 00:07:19 +0000913
cliechti87686242009-08-18 00:58:31 +0000914
cliechtie542b362011-03-18 00:49:16 +0000915.. attribute:: protocol_handler_packages
916
917 This attribute is a list of package names (strings) that is searched for
918 protocol handlers.
919
920 e.g. we want to support a URL ``foobar://``. A module
921 ``my_handlers.protocol_foobar`` is provided by the user::
922
923 serial.protocol_handler_packages.append("my_handlers")
924 s = serial.serial_for_url("foobar://")
925
926 For an URL starting with ``XY://`` is the function :func:`serial_for_url`
927 attempts to import ``PACKAGE.protocol_XY`` with each candidate for
928 ``PACKAGE`` from this list.
929
930 .. versionadded:: 2.6
931
932
cliechti25375b52010-07-21 23:27:13 +0000933.. function:: to_bytes(sequence)
cliechtie214ff82010-07-21 15:48:47 +0000934
935 :param sequence: String or list of integers
cliechti25375b52010-07-21 23:27:13 +0000936 :returns: an instance of ``bytes``
cliechtie214ff82010-07-21 15:48:47 +0000937
cliechtie542b362011-03-18 00:49:16 +0000938 Convert a sequence to a ``bytes`` type. This is used to write code that is
cliechtie214ff82010-07-21 15:48:47 +0000939 compatible to Python 2.x and 3.x.
940
cliechtie542b362011-03-18 00:49:16 +0000941 In Python versions prior 3.x, ``bytes`` is a subclass of str. They convert
cliechti25375b52010-07-21 23:27:13 +0000942 ``str([17])`` to ``'[17]'`` instead of ``'\x11'`` so a simple
cliechtie542b362011-03-18 00:49:16 +0000943 ``bytes(sequence)`` doesn't work for all versions of Python.
cliechtie214ff82010-07-21 15:48:47 +0000944
945 This function is used internally and in the unit tests.
946
cliechtie542b362011-03-18 00:49:16 +0000947 .. versionadded:: 2.5
948
Chris Liechtid14b1ab2015-08-21 00:28:53 +0200949.. function:: iterbytes(b)
950
951 :param b: bytes, bytearray or memoryview
952 :returns: a generator that yields bytes
953
954 Some versions of Python (3.x) would return integers instead of bytes when
955 looping over an instance of ``bytes``. This helper function ensures that
956 bytes are returned.
957
958 .. versionadded:: 3.0
959
cliechtie214ff82010-07-21 15:48:47 +0000960
Chris Liechti811bf382015-10-10 00:54:47 +0200961Threading
962=========
963
964.. module:: serial.threaded
965.. versionadded:: 3.0
966
967.. warning:: This implementation is currently in an experimental state. Use
968 at your own risk.
969
970This module provides classes to simplify working with threads and protocols.
971
972.. class:: Protocol
973
Chris Liechti5665d572015-10-13 23:50:01 +0200974 Protocol as used by the :class:`ReaderThread`. This base class provides empty
Chris Liechti811bf382015-10-10 00:54:47 +0200975 implementations of all methods.
976
977
978 .. method:: connection_made(transport)
979
980 :param transport: instance used to write to serial port.
981
982 Called when reader thread is started.
983
984 .. method:: data_received(data)
985
986 :param data: received bytes
987
988 Called with snippets received from the serial port.
989
990 .. method:: connection_lost(exc)
991
992 :param exc: Exception if connection was terminated by error else ``None``
993
994 Called when the serial port is closed or the reader loop terminated
995 otherwise.
996
997.. class:: Packetizer(Protocol)
998
999 Read binary packets from serial port. Packets are expected to be terminated
1000 with a ``TERMINATOR`` byte (null byte by default).
1001
1002 The class also keeps track of the transport.
1003
1004 .. attribute:: TERMINATOR = b'\\0'
1005
1006 .. method:: __init__()
1007
1008 .. method:: connection_made(transport)
1009
1010 Store transport
1011
1012 .. method:: connection_lost(exc)
1013
1014 Forget transport
1015
1016 .. method:: data_received(data)
1017
1018 Buffer received data and search for ``TERMINATOR``, when found,
1019 call :meth:`handle_packet`.
1020
1021 .. method:: handle_packet(packet)
1022
1023 Process packets - to be overridden by subclassing.
1024
1025
1026.. class:: LineReader(Packetizer)
1027
1028 Read and write (Unicode) lines from/to serial port.
1029 The encoding is applied.
1030
1031
1032 .. attribute:: TERMINATOR = b'\\r\\n'
1033 .. attribute:: ENCODING = 'utf-8'
1034 .. attribute:: UNICODE_HANDLING = 'replace'
1035
1036 .. method:: handle_packet(packet)
1037
1038 .. method:: handle_line(line)
1039
1040 :param line: Unicode string with one line (excluding line terminator)
1041
1042 Process one line - to be overridden by subclassing.
1043
1044 .. method:: write_line(text)
1045
1046 :param text: Unicode string with one line (excluding line terminator)
1047
1048 Write text to the transport. ``text`` is a Unicode string and the encoding
1049 is applied before sending ans also the newline is append.
1050
1051
Chris Liechti5665d572015-10-13 23:50:01 +02001052.. class:: ReaderThread(threading.Thread)
Chris Liechti811bf382015-10-10 00:54:47 +02001053
1054 Implement a serial port read loop and dispatch to a Protocol instance (like
1055 the :class:`asyncio.Protocol`) but do it with threads.
1056
1057 Calls to :meth:`close` will close the serial port but it is also possible to just
1058 :meth:`stop` this thread and continue the serial port instance otherwise.
1059
1060 .. method:: __init__(serial_instance, protocol_factory)
1061
1062 :param serial_instance: serial port instance (opened) to be used.
1063 :param protocol_factory: a callable that returns a Protocol instance
1064
1065 Initialize thread.
1066
1067 Note that the ``serial_instance`` timeout is set to one second!
1068 Other settings are not changed.
1069
1070 .. method:: stop()
1071
1072 Stop the reader thread.
1073
1074 .. method:: run()
1075
1076 The actual reader loop driven by the thread. It calls
1077 :meth:`Protocol.connection_made`, reads from the serial port calling
1078 :meth:`Protocol.data_received` and finally calling :meth:`Protocol.connection_lost`
1079 when :meth:`close` is called or an error occurs.
1080
1081 .. method:: write(data)
1082
1083 Thread safe writing (uses lock).
1084
1085 .. method:: close()
1086
1087 Close the serial port and exit reader thread, calls :meth:`stop` (uses lock).
1088
1089 .. method:: connect()
1090
1091 Wait until connection is set up and return the transport and protocol
1092 instances.
1093
1094
1095 This class can be used as context manager, in this case it starts
1096 the thread and connects automatically. The serial port is closed
1097 when the context is left.
1098
1099 .. method:: __enter__()
1100
1101 :returns: protocol
1102
1103 Connect and return protocol instance.
1104
1105 .. method:: __exit__(exc_type, exc_val, exc_tb)
1106
1107 Closes serial port.
1108
Chris Liechtia1436b12015-10-12 23:19:04 +02001109Example::
1110
1111 class PrintLines(LineReader):
1112 def connection_made(self, transport):
1113 super(PrintLines, self).connection_made(transport)
1114 sys.stdout.write('port opened\n')
1115 self.write_line('hello world')
1116
1117 def handle_line(self, data):
1118 sys.stdout.write('line received: {}\n'.format(repr(data)))
1119
1120 def connection_lost(self, exc):
1121 if exc:
1122 traceback.print_exc(exc)
1123 sys.stdout.write('port closed\n')
1124
1125 ser = serial.serial_for_url('loop://', baudrate=115200, timeout=1)
Chris Liechti5665d572015-10-13 23:50:01 +02001126 with ReaderThread(ser, PrintLines) as protocol:
Chris Liechtia1436b12015-10-12 23:19:04 +02001127 protocol.write_line('hello')
1128 time.sleep(2)
1129
Chris Liechti811bf382015-10-10 00:54:47 +02001130
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001131asyncio
1132=======
1133
Chris Liechti589c92a2015-09-04 23:04:34 +02001134.. module:: serial.aio
1135
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001136.. warning:: This implementation is currently in an experimental state. Use
1137 at your own risk.
1138
Chris Liechti589c92a2015-09-04 23:04:34 +02001139Experimental asyncio support is available for Python 3.4 and newer. The module
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001140:mod:`serial.aio` provides a :class:`asyncio.Transport`:
1141``SerialTransport``.
1142
1143
1144A factory function (`asyncio.coroutine`) is provided:
1145
1146.. function:: create_serial_connection(loop, protocol_factory, \*args, \*\*kwargs)
1147
1148 :param loop: The event handler
1149 :param protocol_factory: Factory function for a :class:`asyncio.Protocol`
1150 :param args: Passed to the :class:`serial.Serial` init function
1151 :param kwargs: Passed to the :class:`serial.Serial` init function
1152 :platform: Posix
1153
1154 Get a connection making coroutine.
1155
1156Example::
1157
1158 class Output(asyncio.Protocol):
1159 def connection_made(self, transport):
1160 self.transport = transport
1161 print('port opened', transport)
Chris Liechti589c92a2015-09-04 23:04:34 +02001162 transport.serial.rts = False
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001163 transport.write(b'hello world\n')
1164
1165 def data_received(self, data):
1166 print('data received', repr(data))
1167 self.transport.close()
1168
1169 def connection_lost(self, exc):
1170 print('port closed')
1171 asyncio.get_event_loop().stop()
1172
1173 loop = asyncio.get_event_loop()
Chris Liechti589c92a2015-09-04 23:04:34 +02001174 coro = serial.aio.create_serial_connection(loop, Output, '/dev/ttyUSB0', baudrate=115200)
Chris Liechti1f0c9b42015-09-03 23:49:48 +02001175 loop.run_until_complete(coro)
1176 loop.run_forever()
1177 loop.close()
1178