projects
/
goodfet
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Allowing a rate of 83.3
[goodfet]
/
client
/
GoodFETMAXUSB.py
diff --git
a/client/GoodFETMAXUSB.py
b/client/GoodFETMAXUSB.py
index
00c2e0f
..
b35ba51
100644
(file)
--- a/
client/GoodFETMAXUSB.py
+++ b/
client/GoodFETMAXUSB.py
@@
-203,6
+203,7
@@
bmHXFRDNIRQ =0x80
class GoodFETMAXUSB(GoodFET):
MAXUSBAPP=0x40;
class GoodFETMAXUSB(GoodFET):
MAXUSBAPP=0x40;
+ usbverbose=True;
def service_irqs(self):
"""Handle USB interrupt events."""
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,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();
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):
#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."""
"""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" % (
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));
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."""
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));
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
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;
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);
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."""
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_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:
#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;
self.wregAS(rEP0BC,desclen);
else:
print "Stalling in send_descriptor() for lack of handler for %02x." % desctype;