62 lines
1.5 KiB
Python
62 lines
1.5 KiB
Python
from __future__ import absolute_import
|
|
import __init__
|
|
|
|
import os, glob, wx
|
|
|
|
from serial import Serial
|
|
|
|
from avr_isp import stk500v2
|
|
from avr_isp import ispBase
|
|
from avr_isp import intelHex
|
|
|
|
try:
|
|
import _winreg
|
|
except:
|
|
pass
|
|
|
|
def serialList():
|
|
baselist=[]
|
|
if os.name=="nt":
|
|
try:
|
|
key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM")
|
|
i=0
|
|
while(1):
|
|
baselist+=[_winreg.EnumValue(key,i)[1]]
|
|
i+=1
|
|
except:
|
|
pass
|
|
return baselist+glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') +glob.glob("/dev/tty.*")+glob.glob("/dev/cu.*")+glob.glob("/dev/rfcomm*")
|
|
|
|
def installFirmware(filename, port = 'AUTO'):
|
|
hexFile = intelHex.readHex(filename)
|
|
programmer = stk500v2.Stk500v2()
|
|
if port == 'AUTO':
|
|
for port in serialList():
|
|
try:
|
|
programmer.connect(port)
|
|
except ispBase.IspError:
|
|
pass
|
|
else:
|
|
programmer.connect(port)
|
|
if programmer.isConnected():
|
|
programmer.programChip(hexFile)
|
|
programmer.close()
|
|
return True
|
|
wx.MessageBox('Failed to find machine for firmware upgrade\nIs your machine connected to the PC?', 'Firmware update', wx.OK | wx.ICON_ERROR)
|
|
return False
|
|
|
|
def serialOpen(port = 'AUTO', baudrate = 115200):
|
|
if port == 'AUTO':
|
|
programmer = stk500v2.Stk500v2()
|
|
for port in serialList():
|
|
try:
|
|
programmer.connect(port)
|
|
programmer.close()
|
|
return Serial(port, baudrate, timeout=5)
|
|
except ispBase.IspError:
|
|
pass
|
|
programmer.close()
|
|
else:
|
|
return Serial(port, baudrate, timeout=5)
|
|
return False
|
|
|