X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFETMAXUSB.py;h=b35ba51288a9d31eb6894ec7a810ac063cd23378;hp=00c2e0f9efd45085c83fdbfee5fddde75bb0c56c;hb=24d088eef312fd62fdbe15f08affba24ce498edb;hpb=cc2ed6da9ddae5b127406643a7b86306a735ddfa diff --git a/client/GoodFETMAXUSB.py b/client/GoodFETMAXUSB.py index 00c2e0f..b35ba51 100644 --- a/client/GoodFETMAXUSB.py +++ b/client/GoodFETMAXUSB.py @@ -203,6 +203,7 @@ bmHXFRDNIRQ =0x80 class GoodFETMAXUSB(GoodFET): MAXUSBAPP=0x40; + usbverbose=True; def service_irqs(self): """Handle USB interrupt events.""" @@ -219,10 +220,10 @@ class GoodFETMAXUSB(GoodFET): self.wreg(rEPIRQ,bmOUT1DAVIRQ); #Clear the bit *AFTER* servicing. if(epirq&bmIN3BAVIRQ): #IN3-IN packet self.do_IN3(); - self.wreg(rEPIRQ,bmIN3BAVIRQ); #Clear the bit + #self.wreg(rEPIRQ,bmIN3BAVIRQ); #Clear the bit if(epirq&bmIN2BAVIRQ): #IN2 packet self.do_IN2(); - self.wreg(rEPIRQ,bmIN2BAVIRQ); #Clear the bit + #self.wreg(rEPIRQ,bmIN2BAVIRQ); #Clear the bit #else: # print "No idea how to service this IRQ: %02x" % epirq; def do_IN2(self): @@ -231,7 +232,7 @@ class GoodFETMAXUSB(GoodFET): """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" % ( @@ -286,7 +287,7 @@ class GoodFETMAXUSB(GoodFET): 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.""" @@ -296,7 +297,7 @@ class GoodFETMAXUSB(GoodFET): 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 ctl_write_nd(self,request): """Control Write with no data stage. Assumes PERADDR is set @@ -413,13 +414,13 @@ class GoodFETMAXUSB(GoodFET): 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.""" @@ -611,13 +612,19 @@ class GoodFETMAXUSBDevice(GoodFETMAXUSB): elif desctype==GD_STRING: desclen=ord(self.strDesc[ord(SUD[wValueL])][0]); ddata=self.strDesc[ord(SUD[wValueL])]; - + elif desctype==GD_HID: + #Don't know how to do this yet. + pass; + elif desctype==GD_REPORT: + desclen=self.CD[25]; + ddata=self.RepD; #TODO Configuration, String, Hid, and Report if desclen>0: - sendlen=min(reqlen,desclen); - self.writebytes(rEP0FIFO,ddata); - #self.wregAS(rEP0BC,sendlen); + #Reduce desclen if asked for fewer bytes. + desclen=min(reqlen,desclen); + #Send those bytes. + self.writebytes(rEP0FIFO,ddata[0:desclen]); self.wregAS(rEP0BC,desclen); else: print "Stalling in send_descriptor() for lack of handler for %02x." % desctype;