From 17022d65913af952c0f6ebe367fa3f52fe129da2 Mon Sep 17 00:00:00 2001 From: chrishoder Date: Tue, 12 Feb 2013 00:14:27 +0000 Subject: [PATCH 1/1] added an experiment to test our knowledge of the arbID 1056 in the new file FordExperiments.py git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@1475 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- client/FordExperiments.py | 66 +++++++++++++++++++++++++++++++++++++++ client/GoodFETMCPCAN.py | 18 +++++++++-- 2 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 client/FordExperiments.py diff --git a/client/FordExperiments.py b/client/FordExperiments.py new file mode 100644 index 0000000..df43f84 --- /dev/null +++ b/client/FordExperiments.py @@ -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) diff --git a/client/GoodFETMCPCAN.py b/client/GoodFETMCPCAN.py index dcb3da3..0232b28 100644 --- a/client/GoodFETMCPCAN.py +++ b/client/GoodFETMCPCAN.py @@ -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): -- 2.20.1