X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FFordExperiments.py;h=2987fde99bb96f9c4e40b970402e079b31288789;hp=0c5b9e4cdb90399e4e23a984db77ff894e115995;hb=a2462ba46f41bf6437ea05695f0c41b7d0b117e1;hpb=2ad1041a5d4524b9aef80afb55edc7098645d8e3 diff --git a/client/FordExperiments.py b/client/FordExperiments.py index 0c5b9e4..2987fde 100644 --- a/client/FordExperiments.py +++ b/client/FordExperiments.py @@ -4,6 +4,7 @@ import array; import csv, time, argparse; import datetime import os +import random from random import randrange from GoodFETMCPCAN import GoodFETMCPCAN; from experiments import experiments @@ -144,7 +145,8 @@ class FordExperiments(experiments): if(packet1 != None): packetParsed = self.client.packet2parsed(packet1); #keep sniffing till we read a packet - while( packet1 == None or packetParsed.get('sID') != sId ): + startTime = time.time() + while( packet1 == None or packetParsed.get('sID') != sId and (time.time() - startTime) < 20): packet1 = self.client.rxpacket() if(packet1 != None): packetParsed = self.client.packet2parsed(packet1) @@ -171,8 +173,46 @@ class FordExperiments(experiments): # print the packet we are transmitting print packetParsed + def oscillateMPH(self,runTime): + self.client.serInit() + self.spitSetup(500) + #FIGURE out how to clear buffers + self.addFilter([513, 513, 513, 513,513, 513], verbose=False) + packetParsed = self.getBackground(513) + 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 + packet.append(packetParsed.get(idx)) + packetValue = 0 + packet[1] = packetValue; - def oscillateTemperature(self,time): + print packet + #### split SID into different regs + SIDlow = (513 & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5 + SIDhigh = (513 >> 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]] + packetCount = 1; + self.client.txpacket(packet); + startTime = tT.time() + while( (tT.time()-startTime) < runTime): + dt = tT.time()-startTime + inputValue = ((2.0*math.pi)/20.0)*dt + value = 35*math.sin(inputValue)+70 + print value + #if( value%4 == 0): + # packet[5] = 95 + #else: + # packet[5] = 0 + #packet[9] = int(value) + packet[5] = int(value) + print packet + self.client.txpacket(packet) + packetCount += 1 + def oscillateTemperature(self,runTime): """ @@ -187,7 +227,7 @@ class FordExperiments(experiments): #set data packet to match what was sniffed or at least what was input for i in range(0,8): idx = "db%d"%i - packet.append(ord(packetParsed.get(idx))) + packet.append(packetParsed.get(idx)) packetValue = 0 packet[1] = packetValue; @@ -280,8 +320,8 @@ class FordExperiments(experiments): self.client.rxpacket() self.client.rxpacket() self.client.rxpacket() - SIDlow = (513 & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5 - SIDhigh = (513 >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0 + SIDlow = (2024 & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5 + SIDhigh = (2024 >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0 startTime = time.time() #while((time.time() - startTime) < 10): @@ -322,7 +362,7 @@ class FordExperiments(experiments): newPacket = [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 - 255,ord(packet[6]),ord(packet[7]),ord(packet[8]),ord(packet[9]),ord(packet[10]),ord(packet[11]),ord(packet[12])] + 0xfa,packet['db1'],packet['db2'],packet['db3'],packet['db4'],packet['db5'],packet['db6'],packet['db7']] startTime = time.time() self.multiPacketSpit(packet0=newPacket, packet0rts=True) while( time.time()- startTime < 10): @@ -337,15 +377,17 @@ class FordExperiments(experiments): 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 odomFuzz = random.randint(0,255) + print packet newPacket = [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 - ord(packet[5]),odomFuzz,ord(packet[7]),ord(packet[8]),ord(packet[9]),ord(packet[10]),ord(packet[11]),ord(packet[12])] - startTime = time.time() + packet['db0'],packet['db1'],packet['db2'],packet['db3'],packet['db4'],packet['db5'],packet['db6'],packet['db7']] + startTime = time.time() + packet[6] = odomFuzz; while( time.time()- startTime < 10): odomFuzz = random.randint(0,255) - newPacket[5] = odomFuzz + newPacket[6] = odomFuzz self.client.txpacket(newPacket) def setDashboardTemp(self, temp): @@ -407,7 +449,7 @@ class FordExperiments(experiments): else: packet2rts = False packet2 = None - + print packet2 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 = self.getBackground(1056) @@ -417,27 +459,28 @@ class FordExperiments(experiments): ord(packet[5]),ord(packet[6]),ord(packet[7]),ord(packet[8]),ord(packet[9]),ord(packet[10]),ord(packet[11]),ord(packet[12])] if( checkEngine == 1): packet1[9] += 2; - + print packet1 if( checkTransmission == 1): packet1[9] += 3; - + print packet1 if( transmissionOverheated == 1): packet1[9] += 4 - + print packet1 if( engineLight == 1): packet1[9] += 64 - + print packet1 if( fuelCap == 1): packet1[10] = 255 + print packet1 if( batter == 1): packet1[6] = 33 - + print packet1 # load new packet into TXB0 and check time self.multiPacketSpit(packet0=packet1,packet1=packet2, packet0rts=True,packet1rts=packet2rts ) starttime = time.time() # spit new value for 1 second - while (time.time()-starttime < 10): + while ((time.time()-starttime) < 10): self.multiPacketSpit(packet0rts=True,packet1rts = packet2rts) def fakeScanToolFuelLevel(self,level): @@ -467,7 +510,7 @@ class FordExperiments(experiments): newPacket = [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 - ord(packet[5]),ord(packet[6]),ord(packet[7]),level,ord(packet[9]),ord(packet[10]),ord(packet[11]),ord(packet[12])] + 3,65,47,level,ord(packet[9]),ord(packet[10]),ord(packet[11]),ord(packet[12])] # load new packet into TXB0 and check time self.multiPacketSpit(packet0=newPacket, packet0rts=True) @@ -481,12 +524,12 @@ class FordExperiments(experiments): self.client.serInit() self.spitSetup(500) - self.addFilter([2024, 2024, 2024]) + self.addFilter([2024, 2024, 2024,2024,2024,2024]) self.client.rxpacket() self.client.rxpacket() self.client.rxpacket() - SIDlow = (513 & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5 - SIDhigh = (513 >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0 + SIDlow = (2024 & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5 + SIDhigh = (2024 >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0 startTime = time.time() #while((time.time() - startTime) < 10): @@ -497,19 +540,19 @@ class FordExperiments(experiments): while (packet == None): packet=self.client.rxpacket(); - newTemp = math.ceil(level/1.8 + 22) + newTemp = int(math.ceil(level/1.8 + 22)) #print "Fake MPH = 1.617(%d)-63.5 = %d" %(newSpeed, mph) - - + print newTemp + newPacket = [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 - ord(packet[5]),ord(packet[6]),ord(packet[7]),newTemp,ord(packet[9]),ord(packet[10]),ord(packet[11]),ord(packet[12])] + 03,65,70,newTemp,0,0,0,0] # load new packet into TXB0 and check time self.multiPacketSpit(packet0=newPacket, packet0rts=True) starttime = time.time() - + print newPacket # spit new value for 1 second while (time.time()-starttime < 10): self.multiPacketSpit(packet0rts=True) @@ -523,8 +566,8 @@ class FordExperiments(experiments): self.client.rxpacket() self.client.rxpacket() self.client.rxpacket() - SIDlow = (513 & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5 - SIDhigh = (513 >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0 + SIDlow = (2024 & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5 + SIDhigh = (2024 >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0 startTime = time.time() #while((time.time() - startTime) < 10): @@ -754,9 +797,108 @@ class FordExperiments(experiments): while (time.time()-starttime < 1): self.multiPacketSpit(packet0rts=True) + def imbeethovenbitch(self): + + + ### USUAL SETUP STUFF ###### + self.client.serInit() + self.spitSetup(500) + self.addFilter([513, 513, 513,513]) + SIDlow = (513 & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5 + SIDhigh = (513 >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0 + + #clear buffers + self.client.rxpacket() + self.client.rxpacket() + self.client.rxpacket() + + + packet = None; + + #catch a packet to mutate + while (packet == None): + packet=self.client.rxpacket(); + newPacket = [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 + ord(packet[5]),ord(packet[6]),ord(packet[7]),ord(packet[8]),ord(packet[9]),ord(packet[10]),ord(packet[11]),ord(packet[12])] + + + # NOW THE FUN STUFF!!!!! + + music = wave.open("../../contrib/ted/beethovensfifth.wav", 'r'); + print "number of frames: %d " %music.getnframes() + print "number of channels: %d " %music.getnchannels() + print "sample width: %d " %music.getsampwidth() + print "framerate: %d " %music.getframerate() + print "compression: %s " %music.getcompname() + + length = music.getnframes() + pos = music.tell() + print " NOW NOW NOW NOW NOW NOW NOW NOW NOW" + + while(pos < music.getnframes()): + runningaverage = 0 + + pos = music.tell() + sample = music.readframes(8820) #approximately .2 seconds of audio --> 7133184/44100/.1 + #print "NEXT FRAME" + + length = len(sample) + #print length + + for i in range(0, length,4): + runningaverage += max(ord(sample[i]), ord(sample[i+2]))#ord(sample[i]) + + avg = runningaverage/(length / 4) + #print avg + + + #print avg-165 + val = (40 + 3*(avg-165)) + + print "speedometerVal = %f " %val; + print "speed = %f" %(1.617*val-63.5) + + if (val > 255): + val = 255 + elif (val < 0): + val = 0 + + newPacket[9] = int(val) + + # load new packet into TXB0 and check time + self.multiPacketSpit(packet0=newPacket, packet0rts=True) + starttime = time.time() + + # spit new value for 1 second + while (time.time()-starttime < .2): + self.multiPacketSpit(packet0rts=True) + +#for foo in byte: +# print "%d" %ord(foo) - def runOdometer(self): - pass +#39.27 +#113 + + + + + +# read in 26 frames +# average them +# normalize to our range of values (conversion 1.6167*x-63.5 +# x --> 0 to 120 + +#sample width = 2?? +#number of frames: 7133184 +#number of channels: 2 +#sample width: 2 --> 2 bytes per sample +#framerate: 44100 + + + + if __name__ == "__main__": @@ -768,7 +910,7 @@ if __name__ == "__main__": fakeVIN rpmHack ''') - parser.add_argument('verb', choices=['speedometerHack', 'rpmHack']); + parser.add_argument('verb', choices=['speedometerHack', 'rpmHack', 'thefifth']); parser.add_argument('-v', '--variable', type=int, action='append', help='Input values to the method of choice', default=None); @@ -782,5 +924,7 @@ if __name__ == "__main__": fe.rpmHack(inputs=inputs) elif( args.verb == 'fakeVIN'): fe.fakeVIN() + elif( args.verb == 'thefifth'): + fe.imbeethovenbitch()