From 62109540752db1fc6aea5b37ec19f5eae1ce6cad Mon Sep 17 00:00:00 2001 From: Sam Gentle Date: Thu, 8 Mar 2018 22:14:36 +1100 Subject: [PATCH 1/3] more robust port finding logic --- axi/device.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/axi/device.py b/axi/device.py index f0b8a41..c018151 100644 --- a/axi/device.py +++ b/axi/device.py @@ -1,6 +1,7 @@ from __future__ import division, print_function import time +import re from math import modf from serial import Serial @@ -33,11 +34,23 @@ JOG_ACCELERATION = 16 JOG_MAX_VELOCITY = 8 -VID_PID = '04D8:FD92' +VID = 0x04D8 +PID = 0xFD92 + +def get_vid_pid(port): + if hasattr(port, 'vid'): + return (port.vid, port.pid) + + match = re.search(r'VID:PID=([0-9A-Fa-f]+):([0-9A-Fa-f]+)', port[2]) + if match: + return tuple(int(m, 16) for m in match.groups()) + + return (None, None) + def find_port(): for port in comports(): - if VID_PID in port[2]: + if (VID, PID) == get_vid_pid(port): return port[0] return None From e80c8c76c6085ccb9a0fa05f45cc41785cd9b062 Mon Sep 17 00:00:00 2001 From: Sam Gentle Date: Thu, 8 Mar 2018 22:15:28 +1100 Subject: [PATCH 2/3] encode strings before writing to serial --- axi/device.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/axi/device.py b/axi/device.py index c018151..91aeb61 100644 --- a/axi/device.py +++ b/axi/device.py @@ -110,8 +110,8 @@ def readline(self): return self.serial.readline().strip() def command(self, *args): - line = ','.join(map(str, args)) - self.serial.write(line + '\r') + line = ','.join(map(str, args)) + '\r' + self.serial.write(line.encode()) return self.readline() # higher level functions From cc4551e990713aa28fd6a3e10634b825041f6e3e Mon Sep 17 00:00:00 2001 From: Sam Gentle Date: Thu, 8 Mar 2018 22:30:37 +1100 Subject: [PATCH 3/3] make util always clean up after drawing --- axi/util.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/axi/util.py b/axi/util.py index c2575d8..d38b58a 100644 --- a/axi/util.py +++ b/axi/util.py @@ -9,5 +9,8 @@ def draw(drawing, progress=True): # TODO: support drawing, list of paths, or single path d = Device() d.enable_motors() - d.run_drawing(drawing, progress) - d.disable_motors() + try: + d.run_drawing(drawing, progress) + finally: + d.disable_motors() + d.pen_up()