diff options
author | Chris Liechti <cliechti@gmx.net> | 2015-09-04 23:04:34 +0200 |
---|---|---|
committer | Chris Liechti <cliechti@gmx.net> | 2015-09-04 23:04:34 +0200 |
commit | 589c92a09d7e05e3e28f3415fbec410d4fe6282e (patch) | |
tree | cc8674a4947931662d15834b2340a03a53f072c1 | |
parent | 1f0c9b4173094ee65b7465a90f1d92aa668ebf30 (diff) | |
download | pyserial-git-589c92a09d7e05e3e28f3415fbec410d4fe6282e.tar.gz |
doc update: reorganize chapters/files
-rw-r--r-- | documentation/examples.rst | 100 | ||||
-rw-r--r-- | documentation/index.rst | 4 | ||||
-rw-r--r-- | documentation/pyserial_api.rst | 287 | ||||
-rw-r--r-- | documentation/tools.rst | 184 | ||||
-rw-r--r-- | documentation/url_handlers.rst | 200 |
5 files changed, 397 insertions, 378 deletions
diff --git a/documentation/examples.rst b/documentation/examples.rst index 5c51ef6..1114a18 100644 --- a/documentation/examples.rst +++ b/documentation/examples.rst @@ -4,107 +4,11 @@ Examples ========== -.. _miniterm: Miniterm ======== -This is a console application that provides a small terminal application. -Miniterm itself does not implement any terminal features such as VT102 -compatibility. However it may inherit these features from the terminal it is run. -For example on GNU/Linux running from an xterm it will support the escape -sequences of the xterm. On Windows the typical console window is dumb and does -not support any escapes. When ANSI.sys is loaded it supports some escapes. - -Miniterm:: - - --- Miniterm on /dev/ttyS0: 9600,8,N,1 --- - --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- - -Command line options can be given so that binary data including escapes for -terminals are escaped or output as hex. - -Miniterm supports :rfc:`2217` remote serial ports and raw sockets using :ref:`URLs` -such as ``rfc2217:://<host>:<port>`` respectively ``socket://<host>:<port>`` as -*port* argument when invoking. - -Command line options ``python -m serial.tools.miniterm -h``:: - - usage: miniterm.py [-h] [--parity {N,E,O,S,M}] [--rtscts] [--xonxoff] - [--rts RTS] [--dtr DTR] [-e] [--encoding CODEC] [-f NAME] - [--eol {CR,LF,CRLF}] [--raw] [--exit-char NUM] - [--menu-char NUM] [-q] [--develop] - [port] [baudrate] - - Miniterm - A simple terminal program for the serial port. - - positional arguments: - port serial port name - baudrate set baud rate, default: 9600 - - optional arguments: - -h, --help show this help message and exit - - port settings: - --parity {N,E,O,S,M} set parity, one of {N E O S M}, default: N - --rtscts enable RTS/CTS flow control (default off) - --xonxoff enable software flow control (default off) - --rts RTS set initial RTS line state (possible values: 0, 1) - --dtr DTR set initial DTR line state (possible values: 0, 1) - - data handling: - -e, --echo enable local echo (default off) - --encoding CODEC set the encoding for the serial port (e.g. hexlify, - Latin1, UTF-8), default: UTF-8 - -f NAME, --filter NAME - add text transformation - --eol {CR,LF,CRLF} end of line mode - --raw Do no apply any encodings/transformations - - hotkeys: - --exit-char NUM Unicode of special character that is used to exit the - application, default: 29 - --menu-char NUM Unicode code of special character that is used to - control miniterm (menu), default: 20 - - diagnostics: - -q, --quiet suppress non-error messages - --develop show Python traceback on error - - -Miniterm supports some control functions. Typing :kbd:`Ctrl+T Ctrl+H` when it is -running shows the help text:: - - --- pySerial (3.0a) - miniterm - help - --- - --- Ctrl+] Exit program - --- Ctrl+T Menu escape key, followed by: - --- Menu keys: - --- Ctrl+T Send the menu character itself to remote - --- Ctrl+] Send the exit character itself to remote - --- Ctrl+I Show info - --- Ctrl+U Upload file (prompt will be shown) - --- Ctrl+A encoding - --- Ctrl+F edit filters - --- Toggles: - --- Ctrl+R RTS Ctrl+D DTR Ctrl+B BREAK - --- Ctrl+E echo Ctrl+L EOL - --- - --- Port settings (Ctrl+T followed by the following): - --- p change port - --- 7 8 set data bits - --- N E O S M change parity (None, Even, Odd, Space, Mark) - --- 1 2 3 set stop bits (1, 2, 1.5) - --- b change baud rate - --- x X disable/enable software flow control - --- r R disable/enable hardware flow control - -.. versionchanged:: 2.5 - Added :kbd:`Ctrl+T` menu and added support for opening URLs. -.. versionchanged:: 2.6 - File moved from the examples to :mod:`serial.tools.miniterm`. -.. versionchanged:: 3.0 - Apply encoding on serial port, convert to Unicode for console. - Added new filters, default to stripping terminal control sequences. +Miniterm is now available as module instead of example. +see :ref:`miniterm` for details. miniterm.py_ The miniterm program. diff --git a/documentation/index.rst b/documentation/index.rst index 9a258fe..e1699f5 100644 --- a/documentation/index.rst +++ b/documentation/index.rst @@ -25,8 +25,10 @@ Contents: pyserial shortintro - examples pyserial_api + tools + url_handlers + examples appendix Indices and tables diff --git a/documentation/pyserial_api.rst b/documentation/pyserial_api.rst index 85dd53a..005eeda 100644 --- a/documentation/pyserial_api.rst +++ b/documentation/pyserial_api.rst @@ -47,10 +47,10 @@ Native ports :param bool dsrdtr: Enable hardware (DSR/DTR) flow control. - :param float write_timeout + :param float write_timeout: Set a write timeout value. - :param float inter_byte_timeout + :param float inter_byte_timeout: Inter-character timeout, :const:`None` to disable (default). :exception ValueError: @@ -890,17 +890,6 @@ Module functions and attributes .. function:: device(number) - :param number: Port number. - :return: String containing device name. - :deprecated: Use device names directly. - - Convert a port number to a platform dependent device name. Unfortunately - this does not work well for all platforms; e.g. some may miss USB-Serial - converters and enumerate only internal serial ports. - - The conversion may be made off-line, that is, there is no guarantee that - the returned device name really exists on the system. - .. versionchanged:: 3.0 removed, use ``serial.tools.list_ports`` instead @@ -913,7 +902,7 @@ Module functions and attributes Get a native or a :rfc:`2217` implementation of the Serial class, depending on port/url. This factory function is useful when an application wants to support both, local ports and remote ports. There is also support - for other types, see :ref:`URL <URLs>` section below. + for other types, see :ref:`URL <URLs>` section. The port is not opened when a keyword parameter called *do_not_open* is given and true, by default it is opened. @@ -967,190 +956,15 @@ Module functions and attributes .. versionadded:: 3.0 -.. _URLs: - -URLs ----- -The function :func:`serial_for_url` accepts the following types of URLs: - -- ``rfc2217://<host>:<port>[?<option>[&<option>...]]`` -- ``socket://<host>:<port>[?logging={debug|info|warning|error}]`` -- ``loop://[?logging={debug|info|warning|error}]`` -- ``hwgrep://<regexp>`` -- ``spy://port[?option[=value][&option[=value]]]`` - -.. versionchanged:: 3.0 Options are specified with ``?`` and ``&`` instead of ``/`` - -Device names are also supported, e.g.: - -- ``/dev/ttyUSB0`` (Linux) -- ``COM3`` (Windows) - -Future releases of pySerial might add more types. Since pySerial 2.6 it is also -possible for the user to add protocol handlers using -:attr:`protocol_handler_packages`. - -``rfc2217://`` - Used to connect to :rfc:`2217` compatible servers. All serial port - functions are supported. Implemented by :class:`rfc2217.Serial`. - - Supported options in the URL are: - - - ``ign_set_control`` does not wait for acknowledges to SET_CONTROL. This - option can be used for non compliant servers (i.e. when getting an - ``remote rejected value for option 'control'`` error when connecting). - - - ``poll_modem``: The client issues NOTIFY_MODEMSTATE requests when status - lines are read (CTS/DTR/RI/CD). Without this option it relies on the server - sending the notifications automatically (that's what the RFC suggests and - most servers do). Enable this option when :attr:`cts` does not work as - expected, i.e. for servers that do not send notifications. - - - ``timeout=<value>``: Change network timeout (default 3 seconds). This is - useful when the server takes a little more time to send its answers. The - timeout applies to the initial Telnet / :rfc:`2271` negotiation as well - as changing port settings or control line change commands. - - - ``logging={debug|info|warning|error}``: Prints diagnostic messages (not - useful for end users). It uses the logging module and a logger called - ``pySerial.rfc2217`` so that the application can setup up logging - handlers etc. It will call :meth:`logging.basicConfig` which initializes - for output on ``sys.stderr`` (if no logging was set up already). - -``socket://`` - The purpose of this connection type is that applications using pySerial can - connect to TCP/IP to serial port converters that do not support :rfc:`2217`. - - Uses a TCP/IP socket. All serial port settings, control and status lines - are ignored. Only data is transmitted and received. - - Supported options in the URL are: - - - ``logging={debug|info|warning|error}``: Prints diagnostic messages (not - useful for end users). It uses the logging module and a logger called - ``pySerial.socket`` so that the application can setup up logging handlers - etc. It will call :meth:`logging.basicConfig` which initializes for - output on ``sys.stderr`` (if no logging was set up already). - -``loop://`` - The least useful type. It simulates a loop back connection - (``RX<->TX`` ``RTS<->CTS`` ``DTR<->DSR``). It could be used to test - applications or run the unit tests. - - Supported options in the URL are: - - - ``logging={debug|info|warning|error}``: Prints diagnostic messages (not - useful for end users). It uses the logging module and a logger called - ``pySerial.loop`` so that the application can setup up logging handlers - etc. It will call :meth:`logging.basicConfig` which initializes for - output on ``sys.stderr`` (if no logging was set up already). - -``hwgrep://`` - This type uses :mod:`serial.tools.list_ports` to obtain a list of ports and - searches the list for matches by a regexp (see :py:mod:`re`) that follows - the slashes. - - Depending on the capabilities of the list_ports module on the system, it is - possible to search for the description or hardware ID of a device, e.g. USB - VID:PID or texts. - - Unfortunately, on some systems list_ports only lists a subset of the port - names with no additional information. Currently, on Windows and Linux and - OSX it should find additional information. - -``spy://`` - Wrapping the native serial port, this protocol makes it possible to - intercept the data received and transmitted as well as the access to the - control lines, break and flush commands. - - Supported options in the URL are: - - - ``file=FILENAME`` output to given file or device instead of stderr - - ``color`` enable ANSI escape sequences to colorize output - - ``raw`` output the read and written data directly (default is to create a - hex dump). In this mode, no control line and other commands are logged. - - ``all`` also show ``in_waiting`` and empty ``read()`` calls (hidden by - default because of high traffic). - - Example:: - - import serial - - with serial.serial_for_url('spy:///dev/ttyUSB0?file=test.txt', timeout=1) as s: - s.dtr = False - s.write('hello world') - s.read(20) - s.dtr = True - s.write(serial.to_bytes(range(256))) - s.read(400) - s.send_break() - - with open('test.txt') as f: - print(f.read()) - - Outputs:: - - 000000.002 Q-RX reset_input_buffer - 000000.002 DTR inactive - 000000.002 TX 0000 68 65 6C 6C 6F 20 77 6F 72 6C 64 hello world - 000001.015 RX 0000 68 65 6C 6C 6F 20 77 6F 72 6C 64 hello world - 000001.015 DTR active - 000001.015 TX 0000 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ................ - 000001.015 TX 0010 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................ - 000001.015 TX 0020 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./ - 000001.015 TX 0030 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>? - 000001.015 TX 0040 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F @ABCDEFGHIJKLMNO - 000001.016 TX 0050 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F PQRSTUVWXYZ[\]^_ - 000001.016 TX 0060 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F `abcdefghijklmno - 000001.016 TX 0070 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F pqrstuvwxyz{|}~. - 000001.016 TX 0080 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F ................ - 000001.016 TX 0090 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F ................ - 000001.016 TX 00A0 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF ................ - 000001.016 TX 00B0 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ................ - 000001.016 TX 00C0 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF ................ - 000001.016 TX 00D0 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF ................ - 000001.016 TX 00E0 E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF ................ - 000001.016 TX 00F0 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF ................ - 000002.284 RX 0000 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ................ - 000002.284 RX 0010 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................ - 000002.284 RX 0020 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./ - 000002.284 RX 0030 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>? - 000002.284 RX 0040 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F @ABCDEFGHIJKLMNO - 000002.284 RX 0050 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F PQRSTUVWXYZ[\]^_ - 000002.284 RX 0060 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F `abcdefghijklmno - 000002.284 RX 0070 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F pqrstuvwxyz{|}~. - 000002.284 RX 0080 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F ................ - 000002.284 RX 0090 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F ................ - 000002.284 RX 00A0 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF ................ - 000002.284 RX 00B0 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ................ - 000002.284 RX 00C0 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF ................ - 000002.284 RX 00D0 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF ................ - 000002.284 RX 00E0 E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF ................ - 000002.284 RX 00F0 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF ................ - 000002.284 BRK send_break 0.25 - - .. versionadded:: 3.0 - - - -Examples: - -- ``rfc2217://localhost:7000`` -- ``rfc2217://localhost:7000?poll_modem`` -- ``rfc2217://localhost:7000?ign_set_control&timeout=5.5`` -- ``socket://localhost:7777`` -- ``loop://?logging=debug`` -- ``hwgrep://0451:f432`` (USB VID:PID) -- ``spy://COM54?file=log.txt`` - - asyncio ======= +.. module:: serial.aio + .. warning:: This implementation is currently in an experimental state. Use at your own risk. -Experimental asyncio support is available for Python 3.4 and newer. The +Experimental asyncio support is available for Python 3.4 and newer. The module :mod:`serial.aio` provides a :class:`asyncio.Transport`: ``SerialTransport``. @@ -1173,7 +987,7 @@ Example:: def connection_made(self, transport): self.transport = transport print('port opened', transport) - transport.serial.setRTS(0) + transport.serial.rts = False transport.write(b'hello world\n') def data_received(self, data): @@ -1185,93 +999,8 @@ Example:: asyncio.get_event_loop().stop() loop = asyncio.get_event_loop() - coro = create_serial_connection(loop, Output, '/dev/ttyUSB0', baudrate=115200) + coro = serial.aio.create_serial_connection(loop, Output, '/dev/ttyUSB0', baudrate=115200) loop.run_until_complete(coro) loop.run_forever() loop.close() - -Tools -===== - -serial.tools.list_ports ------------------------ -.. module:: serial.tools.list_ports -.. versionadded:: 2.6 - -This module can be executed to get a list of ports (``python -m -serial.tools.list_ports``). It also contains the following functions. - - -.. function:: comports() - - :return: an iterable. - - The function returns an iterable that yields tuples of three strings: - - - port name as it can be passed to :class:`serial.Serial` or - :func:`serial.serial_for_url` - - description in human readable form - - sort of hardware ID. E.g. may contain VID:PID of USB-serial adapters. - - Items are returned in no particular order. It may make sense to sort the - items. Also note that the reported strings are different across platforms - and operating systems, even for the same device. - - .. note:: Support is limited to a number of operating systems. On some - systems description and hardware ID will not be available - (``None``). - - :platform: Posix (/dev files) - :platform: Linux (/dev files, sysfs and lsusb) - :platform: OSX (iokit) - :platform: Windows (setupapi, registry) - - -.. function:: grep(regexp) - - :param regexp: regular expression (see stdlib :mod:`re`) - :return: filtered sequence, see :func:`comports`. - - Search for ports using a regular expression. Port name, description and - hardware ID are searched (case insensitive). The function returns an - iterable that contains the same tuples that :func:`comport` generates but - only those that match the regexp. - - -Command line usage - -Help for ``python -m serial.tools.list_ports``:: - - usage: list_ports.py [-h] [-v] [-q] [-n N] [regexp] - - Serial port enumeration - - positional arguments: - regexp only show ports that match this regex - - optional arguments: - -h, --help show this help message and exit - -v, --verbose show more messages - -q, --quiet suppress all messages - -n N only output the N-th entry - -Examples: - -- List all ports with details:: - - python -m serial.tools.list_ports -v - -- List the 2nd port matching a USB VID:PID pattern:: - - python -m serial.tools.list_ports 1234:5678 -q -n 2 - - -serial.tools.miniterm ---------------------- -.. module:: serial.tools.miniterm -.. versionadded:: 2.6 - -Miniterm is now available as module instead of example. -see :ref:`miniterm` for details. - diff --git a/documentation/tools.rst b/documentation/tools.rst new file mode 100644 index 0000000..962c98b --- /dev/null +++ b/documentation/tools.rst @@ -0,0 +1,184 @@ +======= + Tools +======= + +.. module:: serial + +serial.tools.list_ports +======================= +.. module:: serial.tools.list_ports + +This module can be executed to get a list of ports (``python -m +serial.tools.list_ports``). It also contains the following functions. + + +.. function:: comports() + + :return: an iterable. + + The function returns an iterable that yields tuples of three strings: + + - port name as it can be passed to :class:`serial.Serial` or + :func:`serial.serial_for_url` + - description in human readable form + - sort of hardware ID. E.g. may contain VID:PID of USB-serial adapters. + + Items are returned in no particular order. It may make sense to sort the + items. Also note that the reported strings are different across platforms + and operating systems, even for the same device. + + .. note:: Support is limited to a number of operating systems. On some + systems description and hardware ID will not be available + (``None``). + + :platform: Posix (/dev files) + :platform: Linux (/dev files, sysfs and lsusb) + :platform: OSX (iokit) + :platform: Windows (setupapi, registry) + + +.. function:: grep(regexp) + + :param regexp: regular expression (see stdlib :mod:`re`) + :return: filtered sequence, see :func:`comports`. + + Search for ports using a regular expression. Port name, description and + hardware ID are searched (case insensitive). The function returns an + iterable that contains the same tuples that :func:`comport` generates but + only those that match the regexp. + + +Command line usage + +Help for ``python -m serial.tools.list_ports``:: + + usage: list_ports.py [-h] [-v] [-q] [-n N] [regexp] + + Serial port enumeration + + positional arguments: + regexp only show ports that match this regex + + optional arguments: + -h, --help show this help message and exit + -v, --verbose show more messages + -q, --quiet suppress all messages + -n N only output the N-th entry + +Examples: + +- List all ports with details:: + + python -m serial.tools.list_ports -v + +- List the 2nd port matching a USB VID:PID pattern:: + + python -m serial.tools.list_ports 1234:5678 -q -n 2 + +.. versionadded:: 2.6 + + +.. _miniterm: + +serial.tools.miniterm +===================== +.. module:: serial.tools.miniterm + +This is a console application that provides a small terminal application. +Miniterm itself does not implement any terminal features such as VT102 +compatibility. However it may inherit these features from the terminal it is run. +For example on GNU/Linux running from an xterm it will support the escape +sequences of the xterm. On Windows the typical console window is dumb and does +not support any escapes. When ANSI.sys is loaded it supports some escapes. + +Miniterm:: + + --- Miniterm on /dev/ttyS0: 9600,8,N,1 --- + --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + +Command line options can be given so that binary data including escapes for +terminals are escaped or output as hex. + +Miniterm supports :rfc:`2217` remote serial ports and raw sockets using :ref:`URLs` +such as ``rfc2217:://<host>:<port>`` respectively ``socket://<host>:<port>`` as +*port* argument when invoking. + +Command line options ``python -m serial.tools.miniterm -h``:: + + usage: miniterm.py [-h] [--parity {N,E,O,S,M}] [--rtscts] [--xonxoff] + [--rts RTS] [--dtr DTR] [-e] [--encoding CODEC] [-f NAME] + [--eol {CR,LF,CRLF}] [--raw] [--exit-char NUM] + [--menu-char NUM] [-q] [--develop] + [port] [baudrate] + + Miniterm - A simple terminal program for the serial port. + + positional arguments: + port serial port name + baudrate set baud rate, default: 9600 + + optional arguments: + -h, --help show this help message and exit + + port settings: + --parity {N,E,O,S,M} set parity, one of {N E O S M}, default: N + --rtscts enable RTS/CTS flow control (default off) + --xonxoff enable software flow control (default off) + --rts RTS set initial RTS line state (possible values: 0, 1) + --dtr DTR set initial DTR line state (possible values: 0, 1) + + data handling: + -e, --echo enable local echo (default off) + --encoding CODEC set the encoding for the serial port (e.g. hexlify, + Latin1, UTF-8), default: UTF-8 + -f NAME, --filter NAME + add text transformation + --eol {CR,LF,CRLF} end of line mode + --raw Do no apply any encodings/transformations + + hotkeys: + --exit-char NUM Unicode of special character that is used to exit the + application, default: 29 + --menu-char NUM Unicode code of special character that is used to + control miniterm (menu), default: 20 + + diagnostics: + -q, --quiet suppress non-error messages + --develop show Python traceback on error + + +Miniterm supports some control functions. Typing :kbd:`Ctrl+T Ctrl+H` when it is +running shows the help text:: + + --- pySerial (3.0a) - miniterm - help + --- + --- Ctrl+] Exit program + --- Ctrl+T Menu escape key, followed by: + --- Menu keys: + --- Ctrl+T Send the menu character itself to remote + --- Ctrl+] Send the exit character itself to remote + --- Ctrl+I Show info + --- Ctrl+U Upload file (prompt will be shown) + --- Ctrl+A encoding + --- Ctrl+F edit filters + --- Toggles: + --- Ctrl+R RTS Ctrl+D DTR Ctrl+B BREAK + --- Ctrl+E echo Ctrl+L EOL + --- + --- Port settings (Ctrl+T followed by the following): + --- p change port + --- 7 8 set data bits + --- N E O S M change parity (None, Even, Odd, Space, Mark) + --- 1 2 3 set stop bits (1, 2, 1.5) + --- b change baud rate + --- x X disable/enable software flow control + --- r R disable/enable hardware flow control + +.. versionchanged:: 2.5 + Added :kbd:`Ctrl+T` menu and added support for opening URLs. +.. versionchanged:: 2.6 + File moved from the examples to :mod:`serial.tools.miniterm`. +.. versionchanged:: 3.0 + Apply encoding on serial port, convert to Unicode for console. + Added new filters, default to stripping terminal control sequences. + diff --git a/documentation/url_handlers.rst b/documentation/url_handlers.rst new file mode 100644 index 0000000..9814f24 --- /dev/null +++ b/documentation/url_handlers.rst @@ -0,0 +1,200 @@ +============== + URL Handlers +============== + +.. module:: serial + +.. _URLs: + +Overview +======== +The function :func:`serial_for_url` accepts the following types of URLs: + +- ``rfc2217://<host>:<port>[?<option>[&<option>...]]`` +- ``socket://<host>:<port>[?logging={debug|info|warning|error}]`` +- ``loop://[?logging={debug|info|warning|error}]`` +- ``hwgrep://<regexp>`` +- ``spy://port[?option[=value][&option[=value]]]`` + +.. versionchanged:: 3.0 Options are specified with ``?`` and ``&`` instead of ``/`` + +Device names are also supported, e.g.: + +- ``/dev/ttyUSB0`` (Linux) +- ``COM3`` (Windows) + +Future releases of pySerial might add more types. Since pySerial 2.6 it is also +possible for the user to add protocol handlers using +:attr:`protocol_handler_packages`. + + +``rfc2217://`` +============== +Used to connect to :rfc:`2217` compatible servers. All serial port +functions are supported. Implemented by :class:`rfc2217.Serial`. + +Supported options in the URL are: + +- ``ign_set_control`` does not wait for acknowledges to SET_CONTROL. This + option can be used for non compliant servers (i.e. when getting an + ``remote rejected value for option 'control'`` error when connecting). + +- ``poll_modem``: The client issues NOTIFY_MODEMSTATE requests when status + lines are read (CTS/DTR/RI/CD). Without this option it relies on the server + sending the notifications automatically (that's what the RFC suggests and + most servers do). Enable this option when :attr:`cts` does not work as + expected, i.e. for servers that do not send notifications. + +- ``timeout=<value>``: Change network timeout (default 3 seconds). This is + useful when the server takes a little more time to send its answers. The + timeout applies to the initial Telnet / :rfc:`2271` negotiation as well + as changing port settings or control line change commands. + +- ``logging={debug|info|warning|error}``: Prints diagnostic messages (not + useful for end users). It uses the logging module and a logger called + ``pySerial.rfc2217`` so that the application can setup up logging + handlers etc. It will call :meth:`logging.basicConfig` which initializes + for output on ``sys.stderr`` (if no logging was set up already). + +.. warning:: The connection is not encrypted and no authentication is + supported! Only use it in trusted environments. + + +``socket://`` +============= +The purpose of this connection type is that applications using pySerial can +connect to TCP/IP to serial port converters that do not support :rfc:`2217`. + +Uses a TCP/IP socket. All serial port settings, control and status lines +are ignored. Only data is transmitted and received. + +Supported options in the URL are: + +- ``logging={debug|info|warning|error}``: Prints diagnostic messages (not + useful for end users). It uses the logging module and a logger called + ``pySerial.socket`` so that the application can setup up logging handlers + etc. It will call :meth:`logging.basicConfig` which initializes for + output on ``sys.stderr`` (if no logging was set up already). + +.. warning:: The connection is not encrypted and no authentication is + supported! Only use it in trusted environments. + + +``loop://`` +=========== +The least useful type. It simulates a loop back connection +(``RX<->TX`` ``RTS<->CTS`` ``DTR<->DSR``). It could be used to test +applications or run the unit tests. + +Supported options in the URL are: + +- ``logging={debug|info|warning|error}``: Prints diagnostic messages (not + useful for end users). It uses the logging module and a logger called + ``pySerial.loop`` so that the application can setup up logging handlers + etc. It will call :meth:`logging.basicConfig` which initializes for + output on ``sys.stderr`` (if no logging was set up already). + + +``hwgrep://`` +============= +This type uses :mod:`serial.tools.list_ports` to obtain a list of ports and +searches the list for matches by a regexp (see :py:mod:`re`) that follows +the slashes. + +Depending on the capabilities of the list_ports module on the system, it is +possible to search for the description or hardware ID of a device, e.g. USB +VID:PID or texts. + +Unfortunately, on some systems list_ports only lists a subset of the port +names with no additional information. Currently, on Windows and Linux and +OSX it should find additional information. + + +``spy://`` +========== +Wrapping the native serial port, this protocol makes it possible to +intercept the data received and transmitted as well as the access to the +control lines, break and flush commands. It is mainly used to debug +applications. + +Supported options in the URL are: + +- ``file=FILENAME`` output to given file or device instead of stderr +- ``color`` enable ANSI escape sequences to colorize output +- ``raw`` output the read and written data directly (default is to create a + hex dump). In this mode, no control line and other commands are logged. +- ``all`` also show ``in_waiting`` and empty ``read()`` calls (hidden by + default because of high traffic). + +Example:: + + import serial + + with serial.serial_for_url('spy:///dev/ttyUSB0?file=test.txt', timeout=1) as s: + s.dtr = False + s.write('hello world') + s.read(20) + s.dtr = True + s.write(serial.to_bytes(range(256))) + s.read(400) + s.send_break() + + with open('test.txt') as f: + print(f.read()) + +Outputs:: + + 000000.002 Q-RX reset_input_buffer + 000000.002 DTR inactive + 000000.002 TX 0000 68 65 6C 6C 6F 20 77 6F 72 6C 64 hello world + 000001.015 RX 0000 68 65 6C 6C 6F 20 77 6F 72 6C 64 hello world + 000001.015 DTR active + 000001.015 TX 0000 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ................ + 000001.015 TX 0010 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................ + 000001.015 TX 0020 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./ + 000001.015 TX 0030 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>? + 000001.015 TX 0040 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F @ABCDEFGHIJKLMNO + 000001.016 TX 0050 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F PQRSTUVWXYZ[\]^_ + 000001.016 TX 0060 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F `abcdefghijklmno + 000001.016 TX 0070 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F pqrstuvwxyz{|}~. + 000001.016 TX 0080 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F ................ + 000001.016 TX 0090 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F ................ + 000001.016 TX 00A0 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF ................ + 000001.016 TX 00B0 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ................ + 000001.016 TX 00C0 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF ................ + 000001.016 TX 00D0 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF ................ + 000001.016 TX 00E0 E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF ................ + 000001.016 TX 00F0 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF ................ + 000002.284 RX 0000 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ................ + 000002.284 RX 0010 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................ + 000002.284 RX 0020 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./ + 000002.284 RX 0030 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>? + 000002.284 RX 0040 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F @ABCDEFGHIJKLMNO + 000002.284 RX 0050 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F PQRSTUVWXYZ[\]^_ + 000002.284 RX 0060 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F `abcdefghijklmno + 000002.284 RX 0070 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F pqrstuvwxyz{|}~. + 000002.284 RX 0080 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F ................ + 000002.284 RX 0090 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F ................ + 000002.284 RX 00A0 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF ................ + 000002.284 RX 00B0 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ................ + 000002.284 RX 00C0 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF ................ + 000002.284 RX 00D0 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF ................ + 000002.284 RX 00E0 E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF ................ + 000002.284 RX 00F0 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF ................ + 000002.284 BRK send_break 0.25 + +.. versionadded:: 3.0 + + +Examples +======== + +- ``rfc2217://localhost:7000`` +- ``rfc2217://localhost:7000?poll_modem`` +- ``rfc2217://localhost:7000?ign_set_control&timeout=5.5`` +- ``socket://localhost:7777`` +- ``loop://?logging=debug`` +- ``hwgrep://0451:f432`` (USB VID:PID) +- ``spy://COM54?file=log.txt`` + + |