added an experiment to test our knowledge of the arbID 1056 in the new file FordExper...
authorchrishoder <chrishoder@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Tue, 12 Feb 2013 00:14:27 +0000 (00:14 +0000)
committerchrishoder <chrishoder@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Tue, 12 Feb 2013 00:14:27 +0000 (00:14 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@1475 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

client/FordExperiments.py [new file with mode: 0644]
client/GoodFETMCPCAN.py

diff --git a/client/FordExperiments.py b/client/FordExperiments.py
new file mode 100644 (file)
index 0000000..df43f84
--- /dev/null
@@ -0,0 +1,66 @@
+import sys;
+import binascii;
+import array;
+import csv, time, argparse;
+import datetime
+import os
+from random import randrange
+from GoodFETMCPCAN import GoodFETMCPCAN;
+from GoodFETMCPCANCommunication import GoodFETMCPCANCommunication
+from intelhex import IntelHex;
+import Queue
+import math
+
+class FordExperiments(GoodFETMCPCANCommunication):
+    
+    def init(self):
+        super(FordExperimetns,self).__init__(self) #initialize chip
+    
+    def mimic1056(self,packetData,runTime):
+        #setup chip
+        self.client.serInit()
+        self.spitSetup()
+        #FIGURE out how to clear buffers
+        self.addFilter([1056, 1056, 1056, 1056,1056, 1056], verbose=False)
+        packet1 = self.client.rxpacket();
+        recieveTime = time.time()
+        packetParsed = self.client.packet2parsed(packet1)
+        if( packetParsed['sID'] != 1056):
+            print "Sniffed wrong packet"
+            return
+        countInitial = ord(packetParsed['db3'].get()) #initial count value
+        packet = []
+        #set data packet to match what was sniffed or at least what was input
+        for i in range(0,8):
+            idx = "db%d"%i
+            if(packetData.get(idx) == None):
+                packet.append(ord(packetParsed.get(idx)))
+        #### split SID into different regs
+        SIDlow = (1056 & 0x07) << 5;  # get SID bits 2:0, rotate them to bits 7:5
+        SIDhigh = (1056 >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0
+        packet = [SIDhigh, SIDlow, 0x00,0x00, # pad out EID regs
+                  0x08, # bit 6 must be set to 0 for data frame (1 for RTR) 
+                  # lower nibble is DLC                   
+                 packet[0],packet[1],packet[2],packet[3],packet[4],packet[5],packet[6],packet[7]]
+        self.client.txpacket(packet);
+        tpast = time.time()
+        while( (time.time()-recieveTime) < runTime):
+            #care about db3 or packet[8] that we want to count at the rate that it is
+            dT = time.time()-tpast
+            if( dT/0.2 >= 1):
+                db3 = (countInitial + math.floor((time.time()-recieveTime)/0.2))%255
+                packet[8] = db3
+            else:
+                self.client.MCPrts(TXB0=True):
+            tpast = time.time()  #update our transmit time on the one before   
+            
+                
+         
+
+
+if __name__ == "__main__":
+    fe = FordExperiments();
+    packetData = {}
+    packetData['db4'] = 4;
+    runTime = 10;
+    fe.mimic1056(packetData, runTime)
index dcb3da3..0232b28 100644 (file)
@@ -324,9 +324,23 @@ class GoodFETMCPCAN(GoodFETSPI):
             idx = 5 + i
             dbidx = 'db%d'%i
             packet[dbidx] = data[idx] 
-        
-        
+    
         return packet
+    
+    def packet2parsedstr(self,data):
+        packet = self.packet2parsed(data)
+        msg = "sID: %04d" %sId
+        if( packetParsed.get('eID')):
+            msg += " eID: %d" %packetParsed.get('eID')
+        msg += " rtr: %d"%packetParsed['rtr']
+        length = packetParsed['length']
+        msg += " length: %d"%length
+        msg += " data:"
+        for i in range(0,length):
+            dbidx = 'db%d'%i
+            msg +=" %03d"% ord(packetParsed[dbidx])
+        #msg = self.client.packet2parsedstr(packet)
+        print msg
         
         
     def peek8(self,adr):