4 import csv, time, argparse;
7 from random import randrange
8 from GoodFETMCPCAN import GoodFETMCPCAN;
9 from GoodFETMCPCANCommunication import GoodFETMCPCANCommunication
10 from intelhex import IntelHex;
14 class FordExperiments(GoodFETMCPCANCommunication):
17 super(FordExperimetns,self).__init__(self) #initialize chip
20 def mimic1056(self,packetData,runTime):
24 #FIGURE out how to clear buffers
25 self.addFilter([1056, 1056, 1056, 1056,1056, 1056], verbose=False)
26 packet1 = self.client.rxpacket();
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()
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"
39 countInitial = ord(packetParsed['db3']) #initial count value
41 #set data packet to match what was sniffed or at least what was input
44 if(packetData.get(idx) == None):
45 packet.append(ord(packetParsed.get(idx)))
47 packet.append(packetData.get(idx))
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)
55 packet[0],packet[1],packet[2],packet[3],packet[4],packet[5],packet[6],packet[7]]
57 self.client.txpacket(packet);
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
63 db3 = (countInitial + math.floor((time.time()-recieveTime)/0.2))%255
65 self.client.txpacket(packet)
69 self.client.MCPrts(TXB0=True)
70 tpast = time.time() #update our transmit time on the one before
74 def cycledb1_1056(self,runTime):
78 #FIGURE out how to clear buffers
79 self.addFilter([1056, 1056, 1056, 1056,1056, 1056], verbose=False)
80 packet1 = self.client.rxpacket();
82 packetParsed = self.client.packet2parsed(packet1);
83 #keep sniffing till we read a packet
84 while( packet1 == None or packetParsed.get('sID') != 1056 ):
86 packet1 = self.client.rxpacket()
88 packetParsed = self.client.packet2parsed(packet1)
89 recieveTime = time.time()
90 packetParsed = self.client.packet2parsed(packet1)
91 if( packetParsed['sID'] != 1056):
92 print "Sniffed wrong packet"
95 #set data packet to match what was sniffed or at least what was input
98 packet.append(ord(packetParsed.get(idx)))
100 packet[1] = packetValue;
103 #### split SID into different regs
104 SIDlow = (1056 & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5
105 SIDhigh = (1056 >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0
106 packet = [SIDhigh, SIDlow, 0x00,0x00, # pad out EID regs
107 0x08, # bit 6 must be set to 0 for data frame (1 for RTR)
108 # lower nibble is DLC
109 packet[0],packet[1],packet[2],packet[3],packet[4],packet[5],packet[6],packet[7]]
111 self.client.txpacket(packet);
113 while( (time.time()-recieveTime) < runTime):
114 #care about db3 or packet[8] that we want to count at the rate that it is
115 dT = time.time()-tpast
118 #temp = ((packetValue+1))%2
120 # pV = packetValue%255
126 self.client.txpacket(packet)
128 tpast = time.time() #update our transmit time on the one before
131 if __name__ == "__main__":
132 fe = FordExperiments();
134 packetData['db4'] = 4;
136 #fe.mimic1056(packetData, runTime)
137 fe.cycledb1_1056(runTime)