X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FFordExperiments.py;h=4461acd7257ab15a53930ff6ff225eaa5cf1e528;hp=2987fde99bb96f9c4e40b970402e079b31288789;hb=3764132d5d91eee37ba2e773c459cf78d0bd89a8;hpb=a2462ba46f41bf6437ea05695f0c41b7d0b117e1 diff --git a/client/FordExperiments.py b/client/FordExperiments.py index 2987fde..4461acd 100644 --- a/client/FordExperiments.py +++ b/client/FordExperiments.py @@ -12,6 +12,7 @@ from GoodFETMCPCANCommunication import GoodFETMCPCANCommunication from intelhex import IntelHex; import Queue import math +import wave tT = time class FordExperiments(experiments): @@ -141,16 +142,22 @@ class FordExperiments(experiments): is a simple "background" retriever in that it returns the packet that is of the given id that was sniffed off the bus. """ + self.client.serInit() + self.spitSetup(500) + self.addFilter([sId,sId,sId,sId,sId,sId]) packet1 = self.client.rxpacket(); if(packet1 != None): packetParsed = self.client.packet2parsed(packet1); #keep sniffing till we read a packet startTime = time.time() - while( packet1 == None or packetParsed.get('sID') != sId and (time.time() - startTime) < 20): + while( (packet1 == None or packetParsed.get('sID') != sId) and (time.time() - startTime) < 5): packet1 = self.client.rxpacket() + print packet1 if(packet1 != None): packetParsed = self.client.packet2parsed(packet1) - + if( packet1 == None or packetParsed.get('sID') != sId): + print "exiting without packet" + #print "returning", packetParsed #recieveTime = time.time() return packetParsed @@ -349,7 +356,45 @@ class FordExperiments(experiments): # spit new value for 1 second while (time.time()-starttime < 10): self.multiPacketSpit(packet0rts=True) + + def setEngineTemp(self,temp): + self.client.serInit() + self.spitSetup(500) + + self.addFilter([1056, 1056, 1056,1056,1056,1056]) + self.client.rxpacket() + self.client.rxpacket() + self.client.rxpacket() + 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 + + startTime = time.time() + #while((time.time() - startTime) < 10): + packet = None; + + # catch a packet and check its db4 value + while (packet == None): + packet=self.client.rxpacket(); + + + newTemp = int(math.ceil(level/1.8 + 22)) + #print "Fake MPH = 1.617(%d)-63.5 = %d" %(newSpeed, mph) + + + 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 + newTemp,ord(packet[6]),ord(packet[7]),ord(packet[8]),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) + starttime = time.time() + + # spit new value for 1 second + while (time.time()-starttime < 10): + self.multiPacketSpit(packet0rts=True) + def overHeatEngine(self): self.client.serInit() self.spitSetup(500) @@ -376,7 +421,7 @@ class FordExperiments(experiments): packet = self.getBackground(1056) 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) + odomFuzz = random.randint(1,254) 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) @@ -386,7 +431,7 @@ class FordExperiments(experiments): startTime = time.time() packet[6] = odomFuzz; while( time.time()- startTime < 10): - odomFuzz = random.randint(0,255) + odomFuzz = random.randint(1,254) newPacket[6] = odomFuzz self.client.txpacket(newPacket) @@ -429,16 +474,18 @@ class FordExperiments(experiments): self.multiPacketSpit(packet0rts=True) - def warningLightsOn(self,checkEngine, checkTransmission, transmissionOverheated, engineLight, battery, fuelCap, checkBreakSystem,ABSLight): - self.addFilter([1056, 1056, 530, 530, 1056]) + def warningLightsOn(self,checkEngine, checkTransmission, transmissionOverheated, engineLight, battery, fuelCap, checkBreakSystem,ABSLight, dashB): + if( checkBreakSystem == 1 or ABSLight == 1): SIDlow = (530 & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5 SIDhigh = (530 >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0 + print "looking for 530" packet = self.getBackground(530) + print "found" packet2 = [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])] + packet['db0'],packet['db1'],packet['db2'],packet['db3'],packet['db4'],packet['db5'],packet['db6'],packet['db7']] if( checkBreakSystem == 1 and ABSLight == 1): packet2[9] = 97 elif( checkBreakSystem == 0 and ABSLight == 1): @@ -452,11 +499,13 @@ class FordExperiments(experiments): 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 + print "looking for 1056" packet = self.getBackground(1056) + print "found" packet1 = [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])] + packet['db0'],packet['db1'],packet['db2'],packet['db3'],packet['db4'],packet['db5'],packet['db6'],packet['db7']] if( checkEngine == 1): packet1[9] += 2; print packet1 @@ -472,13 +521,18 @@ class FordExperiments(experiments): if( fuelCap == 1): packet1[10] = 255 print packet1 - if( batter == 1): - packet1[6] = 33 + if( battery == 1): + packet1[7] = 33 print packet1 + if( dashB == 1): + packet1[6] = 255 + print "hello" + self.client.serInit() + self.spitSetup(500) # load new packet into TXB0 and check time self.multiPacketSpit(packet0=packet1,packet1=packet2, packet0rts=True,packet1rts=packet2rts ) starttime = time.time() - + print "starting" # spit new value for 1 second while ((time.time()-starttime) < 10): self.multiPacketSpit(packet0rts=True,packet1rts = packet2rts) @@ -613,7 +667,11 @@ class FordExperiments(experiments): 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 - + + SID2 = (1056 & 0x07) << 5; + SID2high = (1056 >>3) & 0xFF; + packet_odometer = [SID2high, SID2, 0 ,0,8, 65, 0, 32, 120, 0, 0, 1, 247] + startTime = time.time() #while((time.time() - startTime) < 10): @@ -646,8 +704,10 @@ class FordExperiments(experiments): # spit new value for 1 second while (time.time()-starttime < 10): - self.multiPacketSpit(packet0rts=True) - + #self.multiPacketSpit(packet0rts=True) + odomFuzz = random.randint(1,254) + packet_odometer[6] = odomFuzz + self.multiPacketSpit(packet0=newPacket, packet1 =packet_odometer,packet0rts = True, packet1rts=True) def speedometerHack(self, inputs): @@ -690,6 +750,7 @@ class FordExperiments(experiments): # spit new value for 1 second while (time.time()-starttime < 1): + self.multiPacketSpit(packet0rts=True) def rpmToByteValue(self, rpm): @@ -833,58 +894,48 @@ class FordExperiments(experiments): 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 + numFramesToRead = music.getframerate()*.05 # grab .1s of audio + sampNum = 0 + avgprev = 0 + avg = 0 + while(1): + avgprev = avg + runningSum = 0 - pos = music.tell() - sample = music.readframes(8820) #approximately .2 seconds of audio --> 7133184/44100/.1 - #print "NEXT FRAME" + sample = music.readframes(int(numFramesToRead)) # grab .1s of audio 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 - + runningSum += ord(sample[i]) #average the dual-channel + runningSum += ord(sample[i+2]) - #print avg-165 - val = (40 + 3*(avg-165)) + avg = math.fabs(runningSum/(length /2) -127) # we used 2 of every 4 frames, so divide length by 2 + if( sampNum > 0): + avg = (avg+avgprev)/2 + sampNum = 1 + + val = int(avg*15 + 40) # normalize to speedometer range of values print "speedometerVal = %f " %val; - print "speed = %f" %(1.617*val-63.5) + print "speed = %f" %(1.617*val-63.5) # speed we're trying to display - if (val > 255): + if (val > 255): # ensure we don't run off acceptable range val = 255 elif (val < 0): val = 0 - newPacket[9] = int(val) + newPacket[9] = int(val) # write it to the packet # 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): + while (time.time()-starttime < .1): self.multiPacketSpit(packet0rts=True) -#for foo in byte: -# print "%d" %ord(foo) - -#39.27 -#113 - - - - - # read in 26 frames # average them # normalize to our range of values (conversion 1.6167*x-63.5 @@ -896,6 +947,25 @@ class FordExperiments(experiments): #sample width: 2 --> 2 bytes per sample #framerate: 44100 + def engineDiagnostic(self, data): + self.client.serInit() + self.spitSetup(500) + self.addFilter([513, 513, 513,513,513,513]) + + startTime = tT.time() + while((tT.time() - startTime ) < 15): + packet = None; + + #catch a packet to decode + while (packet == None): + packet=self.client.rxpacket(); + + rpm = 64.5 * ord(packet[5]) - 61.88 + mph = 1.617 * ord(packet[9]) - 63.5 + print "putting data in" + data.put("Engine RPM: %d Current Speed: %d mph\n"%(rpm, mph)) + time.sleep(.5) +