+ usbverbose=True;
+
+ def service_irqs(self):
+ """Handle USB interrupt events."""
+ epirq=self.rreg(rEPIRQ);
+ usbirq=self.rreg(rUSBIRQ);
+
+
+ #Are we being asked for setup data?
+ if(epirq&bmSUDAVIRQ): #Setup Data Requested
+ self.wreg(rEPIRQ,bmSUDAVIRQ); #Clear the bit
+ self.do_SETUP();
+ if(epirq&bmOUT1DAVIRQ): #OUT1-OUT packet
+ self.do_OUT1();
+ 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
+ if(epirq&bmIN2BAVIRQ): #IN2 packet
+ self.do_IN2();
+ #self.wreg(rEPIRQ,bmIN2BAVIRQ); #Clear the bit
+ #else:
+ # print "No idea how to service this IRQ: %02x" % epirq;
+ def do_IN2(self):
+ """Overload this."""
+ def do_IN3(self):
+ """Overload this."""
+ def do_OUT1(self):
+ """Overload this."""
+ 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" % (
+ ord(SUD[0]), ord(SUD[1]),
+ ord(SUD[2])+(ord(SUD[3])<<8),
+ ord(SUD[4])+(ord(SUD[5])<<8),
+ ord(SUD[6])+(ord(SUD[7])<<8)
+ );
+