def decrypt_dtc_code(code): """Returns the 5-digit DTC code from hex encoding""" dtc = [] current = code for i in range(0,3): if len(current)<4: raise "Tried to decode bad DTC: %s" % code # type code tc = carberry_sensors.hex_to_int(current[0]) tc >>= 2 if tc == 0: type = "P" elif tc == 1: type = "C" elif tc == 2: type = "B" elif tc == 3: type = "U" else: raise tc dig1 = str(carberry_sensors.hex_to_int(current[0]) & 3) dig2 = str(carberry_sensors.hex_to_int(current[1])) dig3 = str(carberry_sensors.hex_to_int(current[2])) dig4 = str(carberry_sensors.hex_to_int(current[3])) dtc.append(type+dig1+dig2+dig3+dig4) current = current[4:] return dtc
def decrypt_dtc_code(code): """Returns the 5-digit DTC code from hex encoding""" dtc = [] current = code for i in range(0, 3): if len(current) < 4: raise "Tried to decode bad DTC: %s" % code # type code tc = carberry_sensors.hex_to_int(current[0]) tc >>= 2 if tc == 0: type = "P" elif tc == 1: type = "C" elif tc == 2: type = "B" elif tc == 3: type = "U" else: raise tc dig1 = str(carberry_sensors.hex_to_int(current[0]) & 3) dig2 = str(carberry_sensors.hex_to_int(current[1])) dig3 = str(carberry_sensors.hex_to_int(current[2])) dig4 = str(carberry_sensors.hex_to_int(current[3])) dtc.append(type + dig1 + dig2 + dig3 + dig4) current = current[4:] return dtc
def get_dtc(self): """Returns a list of all pending DTC codes. Each element consists of a 2-tuple: (DTC code (string), Code description (string) )""" dtcLetters = ["P", "C", "B", "U"] r = self.sensor(1)[1] #data dtcNumber = r[0] mil = r[1] DTCCodes = [] print "Number of stored DTC:" + str(dtcNumber) + " MIL: " + str(mil) # get all DTC, 3 per mesg response for i in range(0, ((dtcNumber + 2) / 3)): self.send_command(GET_DTC_COMMAND) res = self.get_result() print "DTC result:" + res for i in range(0, 3): val1 = hex_to_int(res[3 + i * 6:5 + i * 6]) val2 = hex_to_int( res[6 + i * 6:8 + i * 6]) #get DTC codes from response (3 DTC each 2 bytes) val = (val1 << 8) + val2 #DTC val as int if val == 0: #skip fill of last packet break DTCStr = dtcLetters[(val & 0xC000) > 14] + str( (val & 0x3000) >> 12) + str((val & 0x0f00) >> 8) + str( (val & 0x00f0) >> 4) + str(val & 0x000f) DTCCodes.append(["Active", DTCStr]) #read mode 7 self.send_command(GET_FREEZE_DTC_COMMAND) res = self.get_result() if res[:7] == "NODATA": #no freeze frame return DTCCodes print "DTC freeze result:" + res for i in range(0, 3): val1 = hex_to_int(res[3 + i * 6:5 + i * 6]) val2 = hex_to_int( res[6 + i * 6:8 + i * 6]) #get DTC codes from response (3 DTC each 2 bytes) val = (val1 << 8) + val2 #DTC val as int if val == 0: #skip fill of last packet break DTCStr = dtcLetters[(val & 0xC000) > 14] + str( (val & 0x3000) >> 12) + str((val & 0x0f00) >> 8) + str( (val & 0x00f0) >> 4) + str(val & 0x000f) DTCCodes.append(["Passive", DTCStr]) return DTCCodes
def get_dtc(self): """Returns a list of all pending DTC codes. Each element consists of a 2-tuple: (DTC code (string), Code description (string) )""" dtcLetters = ["P", "C", "B", "U"] r = self.sensor(1)[1] #data dtcNumber = r[0] mil = r[1] DTCCodes = [] print "Number of stored DTC:" + str(dtcNumber) + " MIL: " + str(mil) # get all DTC, 3 per mesg response for i in range(0, ((dtcNumber+2)/3)): self.send_command(GET_DTC_COMMAND) res = self.get_result() print "DTC result:" + res for i in range(0, 3): val1 = hex_to_int(res[3+i*6:5+i*6]) val2 = hex_to_int(res[6+i*6:8+i*6]) #get DTC codes from response (3 DTC each 2 bytes) val = (val1<<8)+val2 #DTC val as int if val==0: #skip fill of last packet break DTCStr=dtcLetters[(val&0xC000)>14]+str((val&0x3000)>>12)+str((val&0x0f00)>>8)+str((val&0x00f0)>>4)+str(val&0x000f) DTCCodes.append(["Active",DTCStr]) #read mode 7 self.send_command(GET_FREEZE_DTC_COMMAND) res = self.get_result() if res[:7] == "NODATA": #no freeze frame return DTCCodes print "DTC freeze result:" + res for i in range(0, 3): val1 = hex_to_int(res[3+i*6:5+i*6]) val2 = hex_to_int(res[6+i*6:8+i*6]) #get DTC codes from response (3 DTC each 2 bytes) val = (val1<<8)+val2 #DTC val as int if val==0: #skip fill of last packet break DTCStr=dtcLetters[(val&0xC000)>14]+str((val&0x3000)>>12)+str((val&0x0f00)>>8)+str((val&0x00f0)>>4)+str(val&0x000f) DTCCodes.append(["Passive",DTCStr]) return DTCCodes