summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorChris Liechti <cliechti@gmx.net>2015-09-07 23:38:37 +0200
committerChris Liechti <cliechti@gmx.net>2015-09-07 23:38:37 +0200
commit6948bd8f80bc7760ed70cb1bae9106bf59546a4f (patch)
tree558d74ba339f86ca1edb4598094a876f0ccecd37 /examples
parent4059dc609dbe846caeedb4515574e98612306c99 (diff)
downloadpyserial-git-6948bd8f80bc7760ed70cb1bae9106bf59546a4f.tar.gz
rfc2217_server: API update, cleanup
Diffstat (limited to 'examples')
-rwxr-xr-xexamples/rfc2217_server.py72
1 files changed, 35 insertions, 37 deletions
diff --git a/examples/rfc2217_server.py b/examples/rfc2217_server.py
index 53f11b4..10c47c5 100755
--- a/examples/rfc2217_server.py
+++ b/examples/rfc2217_server.py
@@ -8,7 +8,6 @@
# SPDX-License-Identifier: BSD-3-Clause
import logging
-import os
import socket
import sys
import time
@@ -16,6 +15,7 @@ import threading
import serial
import serial.rfc2217
+
class Redirector(object):
def __init__(self, serial_instance, socket, debug=False):
self.serial = serial_instance
@@ -24,7 +24,7 @@ class Redirector(object):
self.rfc2217 = serial.rfc2217.PortManager(
self.serial,
self,
- logger = logging.getLogger('rfc2217.server') if debug else None
+ logger=logging.getLogger('rfc2217.server') if debug else None
)
self.log = logging.getLogger('redirector')
@@ -40,12 +40,12 @@ class Redirector(object):
from one side to the other"""
self.alive = True
self.thread_read = threading.Thread(target=self.reader)
- self.thread_read.setDaemon(True)
- self.thread_read.setName('serial->socket')
+ self.thread_read.daemon = True
+ self.thread_read.name = 'serial->socket'
self.thread_read.start()
self.thread_poll = threading.Thread(target=self.statusline_poller)
- self.thread_poll.setDaemon(True)
- self.thread_poll.setName('status line poll')
+ self.thread_poll.daemon = True
+ self.thread_poll.name = 'status line poll'
self.thread_poll.start()
self.writer()
@@ -54,15 +54,10 @@ class Redirector(object):
self.log.debug('reader thread started')
while self.alive:
try:
- data = self.serial.read(1) # read one, blocking
- n = self.serial.inWaiting() # look if there is more
- if n:
- data = data + self.serial.read(n) # and get as much as possible
+ data = self.serial.read(self.serial.in_waiting or 1)
if data:
# escape outgoing data when needed (Telnet IAC (0xff) character)
- data = serial.to_bytes(self.rfc2217.escape(data))
- with self._write_lock:
- self.socket.sendall(data) # send it over TCP
+ self.write(serial.to_bytes(self.rfc2217.escape(data)))
except socket.error as msg:
self.log.error('%s' % (msg,))
# probably got disconnected
@@ -102,8 +97,8 @@ if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser(
- description = "RFC 2217 Serial to Network (TCP/IP) redirector.",
- epilog = """\
+ description="RFC 2217 Serial to Network (TCP/IP) redirector.",
+ epilog="""\
NOTE: no security measures are implemented. Anyone can remotely connect
to this service over the network.
@@ -113,14 +108,16 @@ it waits for the next connect.
parser.add_argument('SERIALPORT')
- parser.add_argument('-p', '--localport',
+ parser.add_argument(
+ '-p', '--localport',
type=int,
help='local TCP port, default: %(default)s',
metavar='TCPPORT',
default=2217
)
- parser.add_argument('-v', '--verbose',
+ parser.add_argument(
+ '-v', '--verbose',
dest='verbosity',
action='count',
help='print more diagnostic messages (option can be given multiple times)',
@@ -138,43 +135,43 @@ it waits for the next connect.
logging.NOTSET,
)[args.verbosity]
logging.basicConfig(level=logging.INFO)
- logging.getLogger('root').setLevel(logging.INFO)
+ #~ logging.getLogger('root').setLevel(logging.INFO)
logging.getLogger('rfc2217').setLevel(level)
# connect to serial port
ser = serial.serial_for_url(args.SERIALPORT, do_not_open=True)
- ser.timeout = 3 # required so that the reader thread can exit
+ ser.timeout = 3 # required so that the reader thread can exit
+ # reset control line as no _remote_ "terminal" has been connected yet
+ ser.dtr = False
+ ser.rts = False
logging.info("RFC 2217 TCP/IP to Serial redirector - type Ctrl-C / BREAK to quit")
try:
ser.open()
except serial.SerialException as e:
- logging.error("Could not open serial port %s: %s" % (ser.name, e))
+ logging.error("Could not open serial port {}: {}".format(ser.name, e))
sys.exit(1)
- logging.info("Serving serial port: %s" % (ser.name,))
- settings = ser.getSettingsDict()
- # reset control line as no _remote_ "terminal" has been connected yet
- ser.setDTR(False)
- ser.setRTS(False)
+ logging.info("Serving serial port: {}".format(ser.name))
+ settings = ser.get_settings()
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
srv.bind(('', args.localport))
srv.listen(1)
- logging.info("TCP/IP port: %s" % (args.localport,))
+ logging.info("TCP/IP port: {}".format(args.localport))
while True:
try:
- connection, addr = srv.accept()
- logging.info('Connected by %s:%s' % (addr[0], addr[1]))
- connection.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
- ser.setRTS(True)
- ser.setDTR(True)
+ client_socket, addr = srv.accept()
+ logging.info('Connected by {}:{}'.format(addr[0], addr[1]))
+ client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+ ser.rts = True
+ ser.dtr = True
# enter network <-> serial loop
r = Redirector(
ser,
- connection,
+ client_socket,
args.verbosity > 0
)
try:
@@ -182,15 +179,16 @@ it waits for the next connect.
finally:
logging.info('Disconnected')
r.stop()
- connection.close()
- ser.setDTR(False)
- ser.setRTS(False)
+ client_socket.close()
+ ser.dtr = False
+ ser.rts = False
# Restore port settings (may have been changed by RFC 2217
# capable client)
- ser.applySettingsDict(settings)
+ ser.apply_settings(settings)
except KeyboardInterrupt:
+ sys.stdout.write('\n')
break
except socket.error as msg:
- logging.error('%s' % (msg,))
+ logging.error(str(msg))
logging.info('--- exit ---')