Example #1
0
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
Example #2
0
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
Example #3
0
    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
Example #4
0
     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