aboutsummaryrefslogtreecommitdiff
path: root/documentation/examples.rst
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/examples.rst')
-rw-r--r--documentation/examples.rst274
1 files changed, 274 insertions, 0 deletions
diff --git a/documentation/examples.rst b/documentation/examples.rst
new file mode 100644
index 0000000..197c015
--- /dev/null
+++ b/documentation/examples.rst
@@ -0,0 +1,274 @@
+.. _examples:
+
+==========
+ Examples
+==========
+
+
+Miniterm
+========
+Miniterm is now available as module instead of example.
+see :ref:`miniterm` for details.
+
+miniterm.py_
+ The miniterm program.
+
+setup-miniterm-py2exe.py_
+ This is a py2exe setup script for Windows. It can be used to create a
+ standalone ``miniterm.exe``.
+
+.. _miniterm.py: https://github.com/pyserial/pyserial/blob/master/serial/tools/miniterm.py
+.. _setup-miniterm-py2exe.py: https://github.com/pyserial/pyserial/blob/master/examples/setup-miniterm-py2exe.py
+
+
+TCP/IP - serial bridge
+======================
+This program opens a TCP/IP port. When a connection is made to that port (e.g.
+with telnet) it forwards all data to the serial port and vice versa.
+
+This example only exports a raw socket connection. The next example
+below gives the client much more control over the remote serial port.
+
+- The serial port settings are set on the command line when starting the
+ program.
+- There is no possibility to change settings from remote.
+- All data is passed through as-is.
+
+::
+
+ usage: tcp_serial_redirect.py [-h] [-q] [--parity {N,E,O,S,M}] [--rtscts]
+ [--xonxoff] [--rts RTS] [--dtr DTR]
+ [-P LOCALPORT]
+ SERIALPORT [BAUDRATE]
+
+ Simple Serial to Network (TCP/IP) redirector.
+
+ positional arguments:
+ SERIALPORT serial port name
+ BAUDRATE set baud rate, default: 9600
+
+ optional arguments:
+ -h, --help show this help message and exit
+ -q, --quiet suppress non error messages
+
+ serial port:
+ --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)
+
+ network settings:
+ -P LOCALPORT, --localport LOCALPORT
+ local TCP port
+
+ NOTE: no security measures are implemented. Anyone can remotely connect to
+ this service over the network. Only one connection at once is supported. When
+ the connection is terminated it waits for the next connect.
+
+
+tcp_serial_redirect.py_
+ Main program.
+
+.. _tcp_serial_redirect.py: https://github.com/pyserial/pyserial/blob/master/examples/tcp_serial_redirect.py
+
+
+Single-port TCP/IP - serial bridge (RFC 2217)
+=============================================
+Simple cross platform :rfc:`2217` serial port server. It uses threads and is
+portable (runs on POSIX, Windows, etc).
+
+- The port settings and control lines (RTS/DTR) can be changed at any time
+ using :rfc:`2217` requests. The status lines (DSR/CTS/RI/CD) are polled every
+ second and notifications are sent to the client.
+- Telnet character IAC (0xff) needs to be doubled in data stream. IAC followed
+ by another value is interpreted as Telnet command sequence.
+- Telnet negotiation commands are sent when connecting to the server.
+- RTS/DTR are activated on client connect and deactivated on disconnect.
+- Default port settings are set again when client disconnects.
+
+::
+
+ usage: rfc2217_server.py [-h] [-p TCPPORT] [-v] SERIALPORT
+
+ RFC 2217 Serial to Network (TCP/IP) redirector.
+
+ positional arguments:
+ SERIALPORT
+
+ optional arguments:
+ -h, --help show this help message and exit
+ -p TCPPORT, --localport TCPPORT
+ local TCP port, default: 2217
+ -v, --verbose print more diagnostic messages (option can be given
+ multiple times)
+
+ NOTE: no security measures are implemented. Anyone can remotely connect to
+ this service over the network. Only one connection at once is supported. When
+ the connection is terminated it waits for the next connect.
+
+.. versionadded:: 2.5
+
+rfc2217_server.py_
+ Main program.
+
+setup-rfc2217_server-py2exe.py_
+ This is a py2exe setup script for Windows. It can be used to create a
+ standalone ``rfc2217_server.exe``.
+
+.. _rfc2217_server.py: https://github.com/pyserial/pyserial/blob/master/examples/rfc2217_server.py
+.. _setup-rfc2217_server-py2exe.py: https://github.com/pyserial/pyserial/blob/master/examples/setup-rfc2217_server-py2exe.py
+
+
+Multi-port TCP/IP - serial bridge (RFC 2217)
+============================================
+This example implements a TCP/IP to serial port service that works with
+multiple ports at once. It uses select, no threads, for the serial ports and
+the network sockets and therefore runs on POSIX systems only.
+
+- Full control over the serial port with :rfc:`2217`.
+- Check existence of ``/tty/USB0...8``. This is done every 5 seconds using
+ ``os.path.exists``.
+- Send zeroconf announcements when port appears or disappears (uses
+ python-avahi and dbus). Service name: ``_serial_port._tcp``.
+- Each serial port becomes available as one TCP/IP server. e.g.
+ ``/dev/ttyUSB0`` is reachable at ``<host>:7000``.
+- Single process for all ports and sockets (not per port).
+- The script can be started as daemon.
+- Logging to stdout or when run as daemon to syslog.
+- Default port settings are set again when client disconnects.
+- modem status lines (CTS/DSR/RI/CD) are not polled periodically and the server
+ therefore does not send NOTIFY_MODEMSTATE on its own. However it responds to
+ request from the client (i.e. use the ``poll_modem`` option in the URL when
+ using a pySerial client.)
+
+::
+
+ usage: port_publisher.py [options]
+
+ Announce the existence of devices using zeroconf and provide
+ a TCP/IP <-> serial port gateway (implements RFC 2217).
+
+ If running as daemon, write to syslog. Otherwise write to stdout.
+
+ optional arguments:
+ -h, --help show this help message and exit
+
+ serial port settings:
+ --ports-regex REGEX specify a regex to search against the serial devices
+ and their descriptions (default: /dev/ttyUSB[0-9]+)
+
+ network settings:
+ --tcp-port PORT specify lowest TCP port number (default: 7000)
+
+ daemon:
+ -d, --daemon start as daemon
+ --pidfile FILE specify a name for the PID file
+
+ diagnostics:
+ -o FILE, --logfile FILE
+ write messages file instead of stdout
+ -q, --quiet suppress most diagnostic messages
+ -v, --verbose increase diagnostic messages
+
+ NOTE: no security measures are implemented. Anyone can remotely connect to
+ this service over the network. Only one connection at once, per port, is
+ supported. When the connection is terminated, it waits for the next connect.
+
+Requirements:
+
+- Python (>= 2.4)
+- python-avahi
+- python-dbus
+- python-serial (>= 2.5)
+
+Installation as daemon:
+
+- Copy the script ``port_publisher.py`` to ``/usr/local/bin``.
+- Copy the script ``port_publisher.sh`` to ``/etc/init.d``.
+- Add links to the runlevels using ``update-rc.d port_publisher.sh defaults 99``
+- That's it :-) the service will be started on next reboot. Alternatively run
+ ``invoke-rc.d port_publisher.sh start`` as root.
+
+.. versionadded:: 2.5 new example
+
+port_publisher.py_
+ Multi-port TCP/IP-serial converter (RFC 2217) for POSIX environments.
+
+port_publisher.sh_
+ Example init.d script.
+
+.. _port_publisher.py: https://github.com/pyserial/pyserial/blob/master/examples/port_publisher.py
+.. _port_publisher.sh: https://github.com/pyserial/pyserial/blob/master/examples/port_publisher.sh
+
+
+wxPython examples
+=================
+A simple terminal application for wxPython and a flexible serial port
+configuration dialog are shown here.
+
+wxTerminal.py_
+ A simple terminal application. Note that the length of the buffer is
+ limited by wx and it may suddenly stop displaying new input.
+
+wxTerminal.wxg_
+ A wxGlade design file for the terminal application.
+
+wxSerialConfigDialog.py_
+ A flexible serial port configuration dialog.
+
+wxSerialConfigDialog.wxg_
+ The wxGlade design file for the configuration dialog.
+
+setup-wxTerminal-py2exe.py_
+ A py2exe setup script to package the terminal application.
+
+.. _wxTerminal.py: https://github.com/pyserial/pyserial/blob/master/examples/wxTerminal.py
+.. _wxTerminal.wxg: https://github.com/pyserial/pyserial/blob/master/examples/wxTerminal.wxg
+.. _wxSerialConfigDialog.py: https://github.com/pyserial/pyserial/blob/master/examples/wxSerialConfigDialog.py
+.. _wxSerialConfigDialog.wxg: https://github.com/pyserial/pyserial/blob/master/examples/wxSerialConfigDialog.wxg
+.. _setup-wxTerminal-py2exe.py: https://github.com/pyserial/pyserial/blob/master/examples/setup-wxTerminal-py2exe.py
+
+
+
+Unit tests
+==========
+The project uses a number of unit test to verify the functionality. They all
+need a loop back connector. The scripts itself contain more information. All
+test scripts are contained in the directory ``test``.
+
+The unit tests are performed on port ``loop://`` unless a different device
+name or URL is given on the command line (``sys.argv[1]``). e.g. to run the
+test on an attached USB-serial converter ``hwgrep://USB`` could be used or
+the actual name such as ``/dev/ttyUSB0`` or ``COM1`` (depending on platform).
+
+run_all_tests.py_
+ Collect all tests from all ``test*`` files and run them. By default, the
+ ``loop://`` device is used.
+
+test.py_
+ Basic tests (binary capabilities, timeout, control lines).
+
+test_advanced.py_
+ Test more advanced features (properties).
+
+test_high_load.py_
+ Tests involving sending a lot of data.
+
+test_readline.py_
+ Tests involving ``readline``.
+
+test_iolib.py_
+ Tests involving the :mod:`io` library. Only available for Python 2.6 and
+ newer.
+
+test_url.py_
+ Tests involving the :ref:`URL <URLs>` feature.
+
+.. _run_all_tests.py: https://github.com/pyserial/pyserial/blob/master/test/run_all_tests.py
+.. _test.py: https://github.com/pyserial/pyserial/blob/master/test/test.py
+.. _test_advanced.py: https://github.com/pyserial/pyserial/blob/master/test/test_advanced.py
+.. _test_high_load.py: https://github.com/pyserial/pyserial/blob/master/test/test_high_load.py
+.. _test_readline.py: https://github.com/pyserial/pyserial/blob/master/test/test_readline.py
+.. _test_iolib.py: https://github.com/pyserial/pyserial/blob/master/test/test_iolib.py
+.. _test_url.py: https://github.com/pyserial/pyserial/blob/master/test/test_url.py