parity = serial.PARITY_NONE
)
- #Explicitly set RTS
+ #This might cause problems, but it makes failure graceful.
+ #self.serialport._timeout = 5;
+
+ #Explicitly set RTS and DTR to halt board.
self.serialport.setRTS(1);
+ self.serialport.setDTR(1);
#Drop DTR, which is !RST, low to begin the app.
self.serialport.setDTR(0);
self.serialport.flushInput()
#if data!=None:
# count=len(data); #Initial count ignored.
- #print "TX %02x %02x" % (app,verb);
+ #print "TX %02x %02x %04x" % (app,verb,count);
#little endian 16-bit length
self.serialport.write(chr(count&0xFF));
#print "count=%02x, len(data)=%04x" % (count,len(data));
if count!=0:
- for i in range(0,count):
+ if(isinstance(data,list)):
+ for i in range(0,count):
#print "Converting %02x at %i" % (data[i],i)
- data[i]=chr(data[i]);
+ data[i]=chr(data[i]);
+ #print type(data);
outstr=''.join(data);
- #outstr=data;
self.serialport.write(outstr);
if not self.besilent:
self.readcmd();
#Debugging string; print, but wait.
if self.app==0xFF and self.verb==0xFF:
- print "DEBUG %s" % self.serialport.read(self.count);
+ print "# DEBUG %s" % self.serialport.read(self.count);
else:
self.data=self.serialport.read(self.count);
return self.data;
def dir(self,byte):
"""Write a byte to P5DIR."""
self.writecmd(0,0xA0,1,[byte]);
+ def call(self,adr):
+ """Call to an address."""
+ self.writecmd(0,0x30,2,
+ [adr&0xFF,(adr>>8)&0xFF]);
+ def execute(self,code):
+ """Execute supplied code."""
+ self.writecmd(0,0x31,2,#len(code),
+ code);
def peekbyte(self,address):
"""Read a byte of memory from the monitor."""
self.data=[address&0xff,address>>8];