class GoodFETMAXUSB(GoodFET):
MAXUSBAPP=0x40;
+ usbverbose=True;
def service_irqs(self):
"""Handle USB interrupt events."""
"""Overload this."""
def do_OUT1(self):
"""Overload this."""
- print "Ignoring an OUT1 interrupt.";
+ if self.usbverbose: print "Ignoring an OUT1 interrupt.";
def setup2str(self,SUD):
"""Converts the header of a setup packet to a string."""
return "bmRequestType=0x%02x, bRequest=0x%02x, wValue=0x%04x, wIndex=0x%04x, wLength=0x%04x" % (
ashex="";
for foo in toret:
ashex=ashex+(" %02x"%ord(foo));
- print "GET %02x==%s" % (reg,ashex);
+ if self.usbverbose: print "GET %02x==%s" % (reg,ashex);
return toret;
def readbytesAS(self,reg,length):
"""Peek some bytes from a register, acking prior transfer."""
ashex="";
for foo in toret:
ashex=ashex+(" %02x"%ord(foo));
- print "GETAS %02x==%s" % (reg,ashex);
+ if self.usbverbose: print "GETAS %02x==%s" % (reg,ashex);
return toret;
+ def fifo_ep3in_tx(self,data):
+ """Sends the data out of EP3 in 64-byte chunks."""
+ #Wait for the buffer to be free before starting.
+ while not(self.rreg(rEPIRQ)&bmIN3BAVIRQ): pass;
+
+ count=len(data);
+ pos=0;
+ while count>0:
+ #Send 64-byte chunks or the remainder.
+ c=min(count,64);
+ self.writebytes(rEP3INFIFO,
+ data[pos:pos+c]);
+ self.wregAS(rEP3INBC,c);
+ count=count-c;
+ pos=pos+c;
+
+ #Wait for the buffer to be free before continuing.
+ while not(self.rreg(rEPIRQ)&bmIN3BAVIRQ): pass;
+
+ return;
+
def ctl_write_nd(self,request):
"""Control Write with no data stage. Assumes PERADDR is set
and the SUDFIFO contains the 8 setup bytes. Returns with
data="";
if type(tosend)==str:
data=chr((reg<<3)|3)+tosend;
- print "PUT %02x:=%s (0x%02x bytes)" % (reg,tosend,len(data))
+ if self.usbverbose: print "PUT %02x:=%s (0x%02x bytes)" % (reg,tosend,len(data))
else:
data=[(reg<<3)|3]+tosend;
ashex="";
for foo in tosend:
ashex=ashex+(" %02x"%foo);
- print "PUT %02x:=%s (0x%02x bytes)" % (reg,ashex,len(data))
+ if self.usbverbose: print "PUT %02x:=%s (0x%02x bytes)" % (reg,ashex,len(data))
self.writecmd(self.MAXUSBAPP,0x00,len(data),data);
def usb_connect(self):
"""Connect the USB port."""