- 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 serial
|
||||||
|
import socket
|
||||||
|
import array
|
||||||
|
|
||||||
import message
|
import message
|
||||||
import system_command
|
import system_command
|
||||||
@@ -66,22 +69,24 @@ class EV3Error(Exception):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class EV3(object):
|
class Port(object):
|
||||||
""""""
|
|
||||||
DEFAULT_RFCOMM_PORT = '/dev/rfcomm0'
|
|
||||||
RFCOMM_BAUDRATE = 115200
|
RFCOMM_BAUDRATE = 115200
|
||||||
|
|
||||||
|
def __init__(self, port_str):
|
||||||
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_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"
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
def open(self):
|
self.sock = serial.Serial(port=self._port_str,
|
||||||
"""Opens the object's serial port."""
|
|
||||||
if (self._port is None):
|
|
||||||
self._port = serial.Serial(port=self._port_str,
|
|
||||||
baudrate=self.RFCOMM_BAUDRATE,
|
baudrate=self.RFCOMM_BAUDRATE,
|
||||||
bytesize=serial.EIGHTBITS,
|
bytesize=serial.EIGHTBITS,
|
||||||
parity=serial.PARITY_NONE,
|
parity=serial.PARITY_NONE,
|
||||||
@@ -93,10 +98,45 @@ class EV3(object):
|
|||||||
dsrdtr=False,
|
dsrdtr=False,
|
||||||
interCharTimeout=None)
|
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):
|
def close(self):
|
||||||
"""Closes the object's serial port."""
|
"""Closes the object's serial port."""
|
||||||
if (self._port is not None):
|
if (self._port is not None):
|
||||||
self._port.close()
|
del self._port
|
||||||
self._port = None
|
self._port = None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -159,7 +159,7 @@ def append_str(byte_list, str_value):
|
|||||||
|
|
||||||
|
|
||||||
def _read_bytes(port, num_bytes):
|
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):
|
def _write_bytes(port, byte_seq):
|
||||||
|
|||||||
Reference in New Issue
Block a user