1 from __future__ import absolute_import
4 import os, glob, sys, time
6 from serial import Serial
8 from avr_isp import stk500v2
9 from avr_isp import ispBase
10 from avr_isp import intelHex
12 from util import profile
23 key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM")
26 baselist+=[_winreg.EnumValue(key,i)[1]]
30 return baselist+glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') +glob.glob("/dev/tty.usb*")+glob.glob("/dev/cu.*")+glob.glob("/dev/rfcomm*")
33 return [250000, 115200, 57600, 38400, 19200, 9600]
35 class VirtualPrinter():
37 self.readList = ['start\n']
41 self.bedTargetTemp = 1.0
43 def write(self, data):
44 if self.readList == None:
46 print "Send: %s" % (data.rstrip())
47 if 'M104' in data or 'M109' in data:
49 self.targetTemp = float(data[data.find('S')+1:])
52 if 'M140' in data or 'M190' in data:
54 self.bedTargetTemp = float(data[data.find('S')+1:])
58 self.readList.append("ok T:%f /%f B:%f /%f @:64\n" % (self.temp, self.targetTemp, self.bedTemp, self.bedTargetTemp))
60 self.readList.append("ok\n")
63 if self.readList == None:
66 self.temp = (self.temp + self.targetTemp) / 2
67 self.bedTemp = (self.bedTemp + self.bedTargetTemp) / 2
68 while len(self.readList) < 1:
73 if self.readList == None:
76 print "Recv: %s" % (self.readList[0].rstrip())
77 return self.readList.pop(0)
83 def __init__(self, port = None, baudrate = None):
85 port = profile.getPreference('serial_port')
87 if profile.getPreference('serial_baud') == 'AUTO':
90 baudrate = int(profile.getPreference('serial_baud'))
93 programmer = stk500v2.Stk500v2()
94 for port in serialList():
96 print "Connecting to: %s" % (port)
97 programmer.connect(port)
100 self.serial = self._openPortWithBaudrate(port, baudrate)
102 except ispBase.IspError as (e):
103 print "Error while connecting to %s" % (port)
107 print "Unexpected error while connecting to serial port:" + port, sys.exc_info()[0]
109 elif port == 'VIRTUAL':
110 self.serial = VirtualPrinter()
113 self.serial = self._openPortWithBaudrate(port, baudrate)
115 print "Unexpected error while connecting to serial port:" + port, sys.exc_info()[0]
118 def _openPortWithBaudrate(self, port, baudrate):
120 return Serial(port, baudrate, timeout=2)
121 for baudrate in baudrateList():
123 ser = Serial(port, baudrate, timeout=2)
125 print "Unexpected error while connecting to serial port:" + port, sys.exc_info()[0]
127 starttime = time.time()
129 if line.startswith('start'):
131 return Serial(port, baudrate, timeout=2)
132 if starttime - time.time() > 10:
138 if self.serial == None:
140 ret = self.serial.readline()
142 # print "Recv: " + ret.rstrip()
146 if self.serial != None:
154 return self.serial != None
156 def sendCommand(self, cmd):
157 if self.serial == None:
159 #print 'Send: ' + cmd
160 self.serial.write(cmd + '\n')