#!/usr/bin/python3 import serial import time class Apple410Common: def __init__(self): self.pos = (0,0) self.wd = self.vp = (0,0,2394,1759) def move_to(self, coords): self.send('MA{},{}'.format(coords[0],coords[1])) self.pos = coords def draw_to(self, coords): self.send('DA{:.2f},{:.2f}'.format(coords[0],coords[1])) self.pos = coords def pen_select(self, index): self.send('PS{}'.format(index)) class Apple410(Apple410Common): """A simple class for queing up commands for the Apple 410""" def __init__(self, portname, baud=9600, flow_control_safe=False, cts_hack=False): Apple410Common.__init__(self) self.serial = serial.Serial(portname, baud, rtscts=False, dsrdtr=True, timeout=0.1) self.flow_control_safe = flow_control_safe self.cts_hack = cts_hack def sendchar(self, c): if self.flow_control_safe: self.serial.write(c.encode('ascii')) elif self.cts_hack: self.serial.flush() while not self.serial.cts: time.sleep(0.2) self.serial.write(c.encode('ascii')) self.serial.flush() else: self.serial.flush() while not self.serial.cts: time.sleep(0.2) while not self.serial.dsr: time.sleep(0.2) self.serial.write(c.encode('ascii')) self.serial.flush() def send(self, command): for c in command: self.sendchar(c) self.sendchar('\x03') def close(self): self.serial.close() class MockApple410(Apple410Common): def __init__(self, path): Apple410Common.__init__(self) if type(path) == type(''): self.f = open(path,'w') else: self.f = path def send(self, command): self.f.write(command) self.f.write('\n') def close(self): self.f.close()