goodfet.mcpcan client, code that nearly works for packet sniffing.
[goodfet] / client / goodfet.mcpcan
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;