goodfet.mcpcan client, code that nearly works for packet sniffing.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Wed, 15 Aug 2012 22:20:13 +0000 (22:20 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Wed, 15 Aug 2012 22:20:13 +0000 (22:20 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@1229 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

client/GoodFETMCPCAN.py
client/goodfet.mcpcan [new file with mode: 0755]

index c00af14..0cbc090 100644 (file)
@@ -59,6 +59,24 @@ class GoodFETMCPCAN(GoodFETSPI):
                        0x00, 0x00, 0x00, 0x00
                        ]);
         return data[1:len(data)];
                        0x00, 0x00, 0x00, 0x00
                        ]);
         return data[1:len(data)];
+    def rxpacket(self):
+        """Reads the next incoming packet from either buffer.
+        Returns None immediately if no packet is waiting."""
+        status=self.MCPrxstatus()&0xC0;
+        if status&0x40:
+            #Buffer 0 has higher priority.
+            return self.rxbuffer(0);
+        elif status&0x80:
+            #Buffer 1 has lower priority.
+            return self.rxbuffer(1);
+        else:
+            return None;
+    def packet2str(self,packet):
+        """Converts a packet from the internal format to a string."""
+        toprint="";
+        for bar in packet:
+            toprint=toprint+("%02x "%ord(bar))
+        return toprint;
     def peek8(self,adr):
         """Read a byte from the given address.  Untested."""
         data=self.SPItrans([0x03,adr&0xFF,00]);
     def peek8(self,adr):
         """Read a byte from the given address.  Untested."""
         data=self.SPItrans([0x03,adr&0xFF,00]);
diff --git a/client/goodfet.mcpcan b/client/goodfet.mcpcan
new file mode 100755 (executable)
index 0000000..35fc1d4
--- /dev/null
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+# GoodFET SPI Flash Client
+#
+# (C) 2012 Travis Goodspeed <travis at radiantmachines.com>
+#
+# This code is being rewritten and refactored.  You've been warned!
+
+import sys;
+import binascii;
+import array;
+
+from GoodFETMCPCAN import GoodFETMCPCAN;
+from intelhex import IntelHex;
+
+if(len(sys.argv)==1):
+    print "Usage: %s verb [objects]\n" % sys.argv[0];
+    print "%s info" % sys.argv[0];
+    print "%s test" % sys.argv[0];
+    print "%s peek 0x$start [0x$stop]" % sys.argv[0];
+    #print "%s poke 0x$adr 0x$val" % sys.argv[0];
+
+    print "\n%s sniff" % sys.argv[0];
+    sys.exit();
+
+#Initialize FET and set baud rate
+client=GoodFETMCPCAN();
+client.serInit()
+
+
+client.MCPsetup();
+
+#Dummy read.
+#Might read as all ones if chip has a startup delay.
+
+if(sys.argv[1]=="info"):
+    print "MCP2515 Info:";
+    print "Read Status: %02x" % client.MCPreadstatus();
+    print "Rx Status:   %02x" % client.MCPrxstatus();
+    print "Tx Errors:  %3d" % client.peek8(0x1c);
+    print "Rx Errors:  %3d" % client.peek8(0x1d);
+    print "RX Buffers:"
+    packet0=client.readrxbuffer(0);
+    packet1=client.readrxbuffer(1);
+    for foo in [packet0, packet1]:
+        print client.packet2str(foo);
+if(sys.argv[1]=="sniff"):
+    while 1:
+        packet=client.rxpacket();
+        if packet!=None:
+            print client.packet2str(packet);
+if(sys.argv[1]=="test"):
+    print "MCP2515 Self Test:";
+    
+    client.poke8(0x00,0xde);
+    if client.peek8(0x00)!=0xde:
+        print "ERROR: Poke to TEC failed.";
+    else:
+        print "SUCCESS: Register read/write.";
+
+if(sys.argv[1]=="peek"):
+    start=0x0000;
+    if(len(sys.argv)>2):
+        start=int(sys.argv[2],16);
+    stop=start;
+    if(len(sys.argv)>3):
+        stop=int(sys.argv[3],16);
+    print "Peeking from %04x to %04x." % (start,stop);
+    while start<=stop:
+        print "%04x: %02x" % (start,client.peek8(start));
+        start=start+1;