- 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:
+53
-13
@@ -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
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user