summaryrefslogtreecommitdiff
path: root/cts
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2017-06-26 08:27:14 -0700
committerchrome-bot <chrome-bot@chromium.org>2017-06-28 21:50:50 -0700
commitaf160d8201a2ea62d679a7d8a7878af8513ae880 (patch)
treea3a75cc059919813b7758abb1b6ba6a636f0762b /cts
parentde36e33ecf8d7e376d36b68c4be0229d306006ad (diff)
downloadchrome-ec-af160d8201a2ea62d679a7d8a7878af8513ae880.tar.gz
eCTS: Use pySerial to read from tty ports
In a different environment, returned characters are corrupted if baudrate isn't specified. This patch replaces tty_read method with the one using pySerial. BUG=chromium:736778 BRANCH=none TEST=Run run_ects.py and verify all tests pass. Change-Id: I8c14f6a04c900d2670ad86c1b91f3fe6625ba69c Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/550848 Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'cts')
-rw-r--r--cts/common/board.py49
1 files changed, 20 insertions, 29 deletions
diff --git a/cts/common/board.py b/cts/common/board.py
index e56ec47b2d..c301fac302 100644
--- a/cts/common/board.py
+++ b/cts/common/board.py
@@ -4,11 +4,10 @@
from abc import ABCMeta
from abc import abstractmethod
-import fcntl
import os
-import select
import shutil
import subprocess as sp
+import serial
OCD_SCRIPT_DIR = '/usr/share/openocd/scripts'
@@ -187,11 +186,11 @@ class Board(object):
tty = None
try:
- tty = self.open_tty()
- except (IOError, OSError):
- raise ValueError('Unable to read ' + self.board + '. If you are running '
- 'cat on a ttyACMx file, please kill that process and '
- 'try again')
+ tty = serial.Serial(self.tty_port, 115200, timeout=1)
+ except serial.SerialException:
+ raise ValueError('Failed to open ' + self.tty_port + ' of ' + self.board +
+ '. Please make sure the port is available and you have' +
+ ' permission to read it.')
self.tty = tty
def read_tty(self, max_boot_count=1):
@@ -208,9 +207,8 @@ class Board(object):
line = []
boot = 0
while True:
- if select.select([self.tty], [], [], 1)[0]:
- c = os.read(self.tty, 1)
- else:
+ c = self.tty.read()
+ if not c:
break
line.append(c)
if c == '\n':
@@ -246,16 +244,9 @@ class Board(object):
# If we get here without returning, something is wrong
raise RuntimeError('The device dev path could not be found')
- def open_tty(self):
- """Read available bytes from device dev path."""
- fd = os.open(self.tty_port, os.O_RDONLY)
- flag = fcntl.fcntl(fd, fcntl.F_GETFL)
- fcntl.fcntl(fd, fcntl.F_SETFL, flag | os.O_NONBLOCK)
- return fd
-
def close_tty(self):
- """Close tty"""
- os.close(self.tty)
+ """Close tty."""
+ self.tty.close()
class TestHarness(Board):
@@ -286,9 +277,9 @@ class TestHarness(Board):
if self.hla_serial:
return # serial was already loaded
try:
- with open(self.serial_path, mode='r') as ser_f:
- serial = ser_f.read()
- self.hla_serial = serial.strip()
+ with open(self.serial_path, mode='r') as f:
+ s = f.read()
+ self.hla_serial = s.strip()
return
except IOError:
msg = ('Your TH board has not been identified.\n'
@@ -303,19 +294,19 @@ class TestHarness(Board):
'\nConnect only the test harness and remove other boards.')
raise RuntimeError(msg)
if len(serials) < 1:
- msg = ('No test boards were found.'
- '\nTry to run the script outside chroot.')
+ msg = ('No test boards were found.\n'
+ 'Check boards are connected.')
raise RuntimeError(msg)
- serial = serials[0]
+ s = serials[0]
serial_dir = os.path.dirname(self.serial_path)
if not os.path.exists(serial_dir):
os.makedirs(serial_dir)
- with open(self.serial_path, mode='w') as ser_f:
- ser_f.write(serial)
- self.hla_serial = serial
+ with open(self.serial_path, mode='w') as f:
+ f.write(s)
+ self.hla_serial = s
- print 'Your TH serial', serial, 'has been saved as', self.serial_path
+ print 'Your TH serial', s, 'has been saved as', self.serial_path
return