changes to the GUI to allow for better loading and writing as well as tested our...
[goodfet] / client / FordExperiments.py
1 import sys;
2 import binascii;
3 import array;
4 import csv, time, argparse;
5 import datetime
6 import os
7 from random import randrange
8 from GoodFETMCPCAN import GoodFETMCPCAN;
9 from GoodFETMCPCANCommunication import GoodFETMCPCANCommunication
10 from intelhex import IntelHex;
11 import Queue
12 import math
13
14 class FordExperiments(GoodFETMCPCANCommunication):
15     
16     def init(self):
17         super(FordExperimetns,self).__init__(self) #initialize chip
18         self.freq = 500;
19
20     def mimic1056(self,packetData,runTime):
21         #setup chip
22         self.client.serInit()
23         self.spitSetup(500)
24         #FIGURE out how to clear buffers
25         self.addFilter([1056, 1056, 1056, 1056,1056, 1056], verbose=False)
26         packet1 = self.client.rxpacket();
27         if(packet1 != None):
28             packetParsed = self.client.packet2parsed(packet1);
29         #keep sniffing till we read a packet
30         while( packet1 == None or packetParsed.get('sID') != 1056 ):
31             packet1 = self.client.rxpacket()
32             if(packet1 != None):
33                 packetParsed = self.client.packet2parsed(packet1)
34         recieveTime = time.time()
35         packetParsed = self.client.packet2parsed(packet1)
36         if( packetParsed['sID'] != 1056):
37             print "Sniffed wrong packet"
38             return
39         countInitial = ord(packetParsed['db3']) #initial count value
40         packet = []
41         #set data packet to match what was sniffed or at least what was input
42         for i in range(0,8):
43             idx = "db%d"%i
44             if(packetData.get(idx) == None):
45                 packet.append(ord(packetParsed.get(idx)))
46             else:
47                 packet.append(packetData.get(idx))
48         print packet
49         #### split SID into different regs
50         SIDlow = (1056 & 0x07) << 5;  # get SID bits 2:0, rotate them to bits 7:5
51         SIDhigh = (1056 >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0
52         packet = [SIDhigh, SIDlow, 0x00,0x00, # pad out EID regs
53                   0x08, # bit 6 must be set to 0 for data frame (1 for RTR) 
54                   # lower nibble is DLC                   
55                  packet[0],packet[1],packet[2],packet[3],packet[4],packet[5],packet[6],packet[7]]
56         packetCount = 1;
57         self.client.txpacket(packet);
58         tpast = time.time()
59         while( (time.time()-recieveTime) < runTime):
60             #care about db3 or packet[8] that we want to count at the rate that it is
61             dT = time.time()-tpast
62             if( dT/0.2 >= 1):
63                 db3 = (countInitial + math.floor((time.time()-recieveTime)/0.2))%255
64                 packet[8] = db3
65                 self.client.txpacket(packet)
66                 packetCount += 1
67             else:
68                 packetCount += 1
69                 self.client.MCPrts(TXB0=True)
70             tpast = time.time()  #update our transmit time on the one before   
71             
72                 
73          
74
75
76 if __name__ == "__main__":
77     fe = FordExperiments();
78     packetData = {}
79     packetData['db4'] = 4;
80     runTime = 10;
81     fe.mimic1056(packetData, runTime)