I2C master app and client. Impressively ugly. Might work occasionally.
[goodfet] / client / goodfet.i2ceeprom
diff --git a/client/goodfet.i2ceeprom b/client/goodfet.i2ceeprom
new file mode 100755 (executable)
index 0000000..10f0326
--- /dev/null
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+
+#GoodFET I2C eeprom Client
+
+import re
+import sys
+import binascii
+import array
+from GoodFETI2C import GoodFETI2C
+#from intelhex import IntelHex
+
+if(len(sys.argv)==1):
+    print "Usage: %s verb [objects]\n" % sys.argv[0]
+    print "%s dump 0x$target $filename.bin [0x$start [0x$length]]" % sys.argv[0]
+    print "%s read 0x$target [0x$start [0x$length]]" % sys.argv[0]
+    print "%s write 0x$target 0x$adr 0x$val [0x...]" % sys.argv[0]
+    sys.exit()
+
+#Initialize FET and set baud rate
+client=GoodFETI2C()
+#client.verbose=True
+client.serInit()
+client.I2Csetup()
+
+control_chars = ''.join(map(chr, range(0,32) + range(127,256)))
+control_char_re = re.compile('[%s]' % re.escape(control_chars))
+
+def dotnpc(s):
+    """Replace non-printing-characters with dots"""
+    return control_char_re.sub('.', s)
+
+def xxd(data):
+    for offset in range(0, len(data), 16):
+       line = data[offset:offset+16]
+       hex = binascii.hexlify(line)
+       print "%07x: %4s %4s %4s %4s %4s %4s %4s %4s  %s" %tuple([offset] + [hex[s:s+4] for s in range(0,32,4)] + [dotnpc(line)])
+
+if(sys.argv[1]=="dump"):
+    devadr = int(sys.argv[2],16)
+    f = sys.argv[3]
+    start=0x00
+    count=0x100
+    if(len(sys.argv)>4):
+        start=int(sys.argv[4],16)
+    if(len(sys.argv)>5):
+        count=int(sys.argv[5],16)
+    
+    print "Dumping %i bytes from device 0x%02x starting at 0x%02x to file: %s." % (count,devadr,start,f)
+    file = open(f, mode='wb')
+    data=client.I2Ctrans(count, [devadr, start])
+    print "Dumped %i bytes."%len(data)
+    file.write(data)
+    file.close()
+
+if(sys.argv[1]=="read"):
+    devadr = int(sys.argv[2],16)
+    start=0x00
+    if(len(sys.argv)>3):
+        start=int(sys.argv[3],16)
+    count=1
+    if(len(sys.argv)>4):
+        count=int(sys.argv[4],16)
+    print "Reading %i bytes from device 0x%02x starting at 0x%02x." % (count,devadr,start)
+    data=client.I2Ctrans(count, [devadr, start])
+    if(data):
+       xxd(data)
+    else:
+       print "No data received"
+
+if(sys.argv[1]=="write"):
+    if(len(sys.argv)>2):
+        data=[int(x,16) for x in sys.argv[2:]]
+    for i,byte in enumerate(data):
+        print "0x%02x: 0x%02x" % (i,byte)
+    client.I2Cwritebytes(data)