- added support for TCP connection through Ev3Server

git-svn-id: http://moon:8086/svn/software/trunk/projects/opencv@340 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2016-10-23 16:52:12 +00:00
parent 5ab9ce1447
commit ab063f1d74
2 changed files with 180 additions and 140 deletions
+53 -13
View File
@@ -42,7 +42,10 @@ Prerequisites:
"""
import sys
import serial
import socket
import array
import message
import system_command
@@ -66,22 +69,24 @@ class EV3Error(Exception):
pass
class EV3(object):
""""""
DEFAULT_RFCOMM_PORT = '/dev/rfcomm0'
class Port(object):
RFCOMM_BAUDRATE = 115200
def __init__(self, port_str=DEFAULT_RFCOMM_PORT):
"""Creates a new object but doesn't open the port."""
def __init__(self, port_str):
self._port_str = port_str
self._port = None
self.sock = None
self.mode = 'Unknown'
if (self.sock is None):
try:
addr = self._port_str.split(':')
_ = socket.inet_aton(addr[0])
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
self.sock.connect((addr[0], int(addr[1])))
self.mode = "TCP"
def open(self):
"""Opens the object's serial port."""
if (self._port is None):
self._port = serial.Serial(port=self._port_str,
except Exception as e:
self.sock = serial.Serial(port=self._port_str,
baudrate=self.RFCOMM_BAUDRATE,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
@@ -93,10 +98,45 @@ class EV3(object):
dsrdtr=False,
interCharTimeout=None)
self.mode = 'Serial'
def read(self, size, timeout=1.0):
if self.mode == 'Serial':
return self.sock.read(size)
elif self.mode == 'TCP':
return self.sock.recv(size)
def write(self, data):
if self.mode == 'Serial':
return self.sock.write(data)
elif self.mode == 'TCP':
byte = array.array('B', data).tostring()
return self.sock.send(byte)
def __del__(self):
if (self.sock is not None):
self.sock.close()
self.sock = None
class EV3(object):
""""""
DEFAULT_RFCOMM_PORT = '/dev/rfcomm0'
def __init__(self, port_str=DEFAULT_RFCOMM_PORT):
"""Creates a new object but doesn't open the port."""
self._port_str = port_str
self._port = None
def open(self):
"""Opens the object's serial port."""
if (self._port is None):
self._port = Port(self._port_str)
def close(self):
"""Closes the object's serial port."""
if (self._port is not None):
self._port.close()
del self._port
self._port = None
+1 -1
View File
@@ -159,7 +159,7 @@ def append_str(byte_list, str_value):
def _read_bytes(port, num_bytes):
return [ord(i) for i in port.read(num_bytes)]
return port.read(num_bytes)
def _write_bytes(port, byte_seq):