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
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)
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)
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
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
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)
def init(self, target): request_packet = PMPacket(self.get_destination(target), 0xF0, [0xBF]) return self.send_packet(request_packet)