Beispiel #1
0
    def read_parameters(self, parameters):
        data = []
        target = parameters[0].get_target()

        data.append(0xA8)
        data.append(0x00)
        for parameter in parameters:
            # TODO:
            if target != parameter.get_target() and target & 0x01 != parameter.get_target() & 0x01 and target & 0x02 != parameter.get_target() & 0x02:
                raise Exception('connection', "targets differ: " + str(target) + " vs " + str(parameter.get_target()))

            address = parameter.get_address().get_address()
            address_len = parameter.get_address().get_length()
            for i in range(0, address_len):
                target_address = address + i
                data.append((target_address & 0xffffff) >> 16)
                data.append((target_address & 0xffff) >> 8)
                data.append(target_address & 0xff)

        request_packet = PMPacket(self.get_destination(target), 0xf0, data)
        out_packet = self.send_packet(request_packet)

        out_data = out_packet.get_data()
        out_packets = []
        data_offset = 1  # skip E8

        for parameter in parameters:
            address_len = parameter.get_address().get_length()
            single_out_data = [0xE8]
            single_out_data.extend(out_data[data_offset:address_len + data_offset])
            single_out_packet = PMPacket(out_packet.get_destination(), out_packet.get_source(), single_out_data)
            out_packets.append(single_out_packet)
            data_offset += address_len

        return out_packets
Beispiel #2
0
    def read_parameter(self, parameter):
        time.sleep(0.05)
        address_len = parameter.get_address_length()

        data = [0x80, 0xF0]  # [0x80, 0xF0, 0x18, 0x02, 0xE8, 0x60, 0xD2]

        if parameter.get_target() == 1 or parameter.get_target() == 3:
            data.append(0x10)
        if parameter.get_target() == 2:
            data.append(0x18)

        data.append(address_len + 1)
        data.append(0xE8)

        for i in range(0, address_len):
            self._byteval[i] = (self._byteval[i] + 1) % 0xFF
            data.append(self._byteval[i])

        checksum = 0
        for b in data:
            checksum = (checksum + b) & 0xFF

        data.append(checksum)

        return PMPacket.from_array(data)
Beispiel #3
0
    def init(self, target):
        PM.log('Initializing CU for target: ' + str(target), self._log_id)
        if target == 1 or target == 3:
            response = [
                0x80, 0xF0, 0x10, 0x69, 0xFF, 0xA2, 0x10, 0x02, 0x4D, 0x12,
                0x04, 0x40, 0x06, 0xF3, 0xFA, 0xC9, 0x8E, 0x22, 0x04, 0x02,
                0xAC, 0x00, 0x00, 0x00, 0x60, 0xCE, 0x54, 0xF8, 0xB9, 0x84,
                0x00, 0x6C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x00,
                0x00, 0x45, 0x1F, 0x30, 0x80, 0xF0, 0x20, 0x1F, 0x02, 0x43,
                0xFB, 0x00, 0xF1, 0xC1, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00,
                0xF1, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26
            ]
        if target == 2:
            response = [
                0x80, 0xF0, 0x18, 0x39, 0xFF, 0xA2, 0x10, 0x21, 0xD0, 0xF3,
                0x70, 0x31, 0x00, 0x01, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00,
                0x00, 0xBD, 0xC3, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x49, 0x3E, 0x00, 0x0B, 0x21, 0xC0, 0x00,
                0x00, 0x01, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x51
            ]

        return PMPacket.from_array(response)
Beispiel #4
0
    def send_packet(self, packet):
        self._ser.write(packet.to_string())
        time.sleep(0.05)

        out_packet = None
        data = []

        while self._ser.inWaiting() > 0:

            # read header
            tmp = self._ser.read(3)
            data.extend(tmp)

            # read size
            sizebytes = self._ser.read()
            data.append(sizebytes[0])
            size = ord(sizebytes[0])

            # read data
            tmp = self._ser.read(size)
            data.extend(tmp)

            # read checksum
            data.extend(self._ser.read())
            data = map(ord, data)

            out_packet = PMPacket.from_array(data)
            data = []

            if packet.is_equal(out_packet):
                continue

        return out_packet
    def read_parameter(self, parameter):
        time.sleep(0.05)
        address_len = parameter.get_address_length()

        data = [0x80, 0xF0]  # [0x80, 0xF0, 0x18, 0x02, 0xE8, 0x60, 0xD2]

        if parameter.get_target() == 1 or parameter.get_target() == 3:
            data.append(0x10) 
        if parameter.get_target() == 2:
            data.append(0x18) 
 
        data.append(address_len+1)
        data.append(0xE8)
        
        for i in range(0, address_len):
            self._byteval[i] = (self._byteval[i] + 1) % 0xFF
            data.append(self._byteval[i])
        
        checksum = 0
        for b in data:
            checksum = (checksum + b) & 0xFF

        data.append(checksum)

        return PMPacket.from_array(data)
 def init(self, target):
     PM.log('Initializing CU for target: ' + str(target), self._log_id)
     if target == 1 or target == 3:
         response = [0x80, 0xF0, 0x10, 0x69, 0xFF, 0xA2, 0x10, 0x02, 0x4D, 0x12, 0x04, 0x40, 0x06, 0xF3, 0xFA, 0xC9, 0x8E, 0x22, 0x04, 0x02, 0xAC, 0x00, 0x00, 0x00, 0x60, 0xCE, 0x54, 0xF8, 0xB9, 0x84, 0x00, 0x6C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x45, 0x1F, 0x30, 0x80, 0xF0, 0x20, 0x1F, 0x02, 0x43, 0xFB, 0x00, 0xF1, 0xC1, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26]
     if target == 2:
         response = [0x80, 0xF0, 0x18, 0x39, 0xFF, 0xA2, 0x10, 0x21, 0xD0, 0xF3, 0x70, 0x31, 0x00, 0x01, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0xBD, 0xC3, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x3E, 0x00, 0x0B, 0x21, 0xC0, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51]
         
     return PMPacket.from_array(response)
Beispiel #7
0
 def is_supported(self, data):
     if self._byte_index != "none" and self._bit_index != "none" and len(data) - 1 > self._byte_index:
         cubyte = data[1 + self._byte_index]
         bitmask = 1 << self._bit_index
         return cubyte & bitmask == bitmask
     elif self._ecu_ids is not None:
         return PMPacket.extract_rom_id(data) in self._ecu_ids
     else:
         return False
Beispiel #8
0
 def is_supported(self, data):
     if self._byte_index != "none" and self._bit_index != "none" and len(
             data) - 1 > self._byte_index:
         cubyte = data[1 + self._byte_index]
         bitmask = 1 << self._bit_index
         return cubyte & bitmask == bitmask
     elif self._ecu_ids is not None:
         return PMPacket.extract_rom_id(data) in self._ecu_ids
     else:
         return False
Beispiel #9
0
    def read_parameter(self, parameter):
        address = parameter.get_address().get_address()
        address_len = parameter.get_address().get_length()

        data = [0xA8, 0x00]

        for i in range(0, address_len):
            target_address = address + i
            data.append((target_address & 0xffffff) >> 16)
            data.append((target_address & 0xffff) >> 8)
            data.append(target_address & 0xff)

        request_packet = PMPacket(self.get_destination(parameter.get_target()), 0xf0, data)
        return self.send_packet(request_packet)
Beispiel #10
0
 def init(self, target):
     request_packet = PMPacket(self.get_destination(target), 0xF0, [0xBF])
     return self.send_packet(request_packet)