def newEcu(self): filename_tuple = widgets.QFileDialog.getSaveFileName( self, _("Save ECU (keep '.json' extension)"), "./json/myecu.json", "*.json") filename = str(filename_tuple[0]) if filename == '': return basename = os.path.basename(utf8(filename)) filename = os.path.join("./json", basename) ecufile = ecu.Ecu_file(None) layout = open(filename + ".layout", "w") layout.write('{"screens": {}, "categories":{"Category":[]} }') layout.close() targets = open(filename + ".targets", "w") targets.write('[]') targets.close() layout = open(filename, "w") layout.write(ecufile.dumpJson()) layout.close() item = widgets.QListWidgetItem(basename) self.treeview_ecu.addItem(item)
def newEcu(self): filename = gui.QFileDialog.getSaveFileName( self, _("Save ECU (keep '.json' extension)"), "./json/myecu.json", "*.json") if not filename: return basename = os.path.basename( unicode(filename.toUtf8(), encoding="UTF-8")) filename = os.path.join("./json", basename) ecufile = ecu.Ecu_file(None) layout = open(filename + ".layout", "w") layout.write('{"screens": {}, "categories":{"Category":[]} }') layout.close() targets = open(filename + ".targets", "w") targets.write('[]') targets.close() layout = open(filename, "w") layout.write(ecufile.dumpJson()) layout.close() item = gui.QListWidgetItem(basename) self.treeview_ecu.addItem(item)
def __init__(self): super(Virginizer, self).__init__() self.megane_uch = ecu.Ecu_file("UCH_84_J84_03_60", True) layout = gui.QVBoxLayout() infos = gui.QLabel(_("MEGANE II UCH VIRGINIZER<br><font color='red'>THIS PLUGIN WILL ERASE YOUR UCH<br>GO AWAY IF YOU HAVE NO IDEA OF WHAT IT MEANS</font>")) infos.setAlignment(core.Qt.AlignHCenter) check_button = gui.QPushButton(_("Check UCH Virgin")) self.status_check = gui.QLabel(_("Waiting")) self.status_check.setAlignment(core.Qt.AlignHCenter) self.virginize_button = gui.QPushButton(_("Virginize UCH")) layout.addWidget(infos) layout.addWidget(check_button) layout.addWidget(self.status_check) layout.addWidget(self.virginize_button) self.setLayout(layout) self.virginize_button.setEnabled(False) self.virginize_button.clicked.connect(self.reset_ecu) check_button.clicked.connect(self.check_virgin_status) self.ecu_connect()
def __init__(self): super(Virginizer, self).__init__() self.laguna_uch = ecu.Ecu_file(ecufile, True) layout = gui.QVBoxLayout() infos = gui.QLabel("LAGUNA II UCH VIRGINIZER<br><font color='red'>THIS PLUGIN WILL ERASE YOUR UCH<br>GO AWAY IF YOU HAVE NO IDEA OF WHAT IT MEANS</font") infos.setAlignment(core.Qt.AlignHCenter) check_button = gui.QPushButton("Check UCH Virgin") self.status_check = gui.QLabel("Waiting") self.status_check.setAlignment(core.Qt.AlignHCenter) self.virginize_button = gui.QPushButton("Virginize UCH") layout.addWidget(infos) layout.addWidget(check_button) layout.addWidget(self.status_check) layout.addWidget(self.virginize_button) self.setLayout(layout) self.virginize_button.setEnabled(False) self.virginize_button.clicked.connect(self.reset_ecu) check_button.clicked.connect(self.check_virgin_status) self.ecu_connect() # Start comm immediately self.start_diag_session_study()
def init(self): self.ecurequests = ecu.Ecu_file(self.ecu_file, True) self.framecombo.clear() self.table.clear() self.table.setRowCount(0) self.currentrequest = None self.oktostart = False self.startbutton.setEnabled(False) if not (self.ecurequests.funcaddr == "00" or self.ecurequests.funcaddr == "FF"): self.ecu_file = None self.ecurequests = None return False for req in sorted(self.ecurequests.requests.keys()): if 'DTOOL' not in req.upper(): self.framecombo.addItem(req) self.oktostart = True self.startbutton.setEnabled(True) return True
def __init__(self): super(Virginizer, self).__init__() self.clio_eps = ecu.Ecu_file(ecufile, True) layout = gui.QVBoxLayout() infos = gui.QLabel( "Clio IV EPS VIRGINIZER<br><font color='red'>THIS PLUGIN WILL RESET EPS IMMO DATA<br>GO AWAY IF YOU HAVE NO IDEA OF WHAT IT MEANS</font" ) infos.setAlignment(core.Qt.AlignHCenter) check_button = gui.QPushButton("Check EPS Virgin") self.status_check = gui.QLabel("Waiting") self.status_check.setAlignment(core.Qt.AlignHCenter) self.virginize_button = gui.QPushButton("Virginize EPS") layout.addWidget(infos) layout.addWidget(check_button) layout.addWidget(self.status_check) layout.addWidget(self.virginize_button) self.setLayout(layout) self.virginize_button.setEnabled(False) self.virginize_button.clicked.connect(self.reset_ecu) check_button.clicked.connect(self.check_virgin_status) self.ecu_connect()
def __init__(self): super(Virginizer, self).__init__() self.clio_eps = ecu.Ecu_file(ecufile, True) layout = gui.QVBoxLayout() infos = gui.QLabel(_("Modus/Clio III EPS VIRGINIZER<br><font color='red'>THIS PLUGIN WILL RESET EPS IMMO DATA<br>GO AWAY IF YOU HAVE NO IDEA OF WHAT IT MEANS</font>")) infos.setAlignment(core.Qt.AlignHCenter) check_button = gui.QPushButton(_("BLANK STATUS & VIN READ")) self.status_check = gui.QLabel(_("Waiting")) self.status_check.setAlignment(core.Qt.AlignHCenter) self.virginize_button = gui.QPushButton(_("Virginize EPS")) self.setLayout(layout) self.virginize_button.setEnabled(False) self.virginize_button.clicked.connect(self.reset_ecu) check_button.clicked.connect(self.check_virgin_status) status_vin = gui.QLabel(_("VIN - READ")) status_vin.setAlignment(core.Qt.AlignHCenter) self.vin_input = gui.QLineEdit() self.vin_input.setReadOnly(True) status_vinout = gui.QLabel(_("VIN - WRITE")) status_vinout.setAlignment(core.Qt.AlignHCenter) self.vin_output = gui.QLineEdit() write_vin_button = gui.QPushButton(_("Write VIN")) write_vin_button.clicked.connect(self.write_vin) layout.addWidget(infos) layout.addWidget(check_button) layout.addWidget(self.status_check) layout.addWidget(self.virginize_button) layout.addWidget(self.virginize_button) layout.addWidget(status_vin) layout.addWidget(self.vin_input) layout.addWidget(status_vinout) layout.addWidget(self.vin_output) layout.addWidget(write_vin_button) self.ecu_connect()
def __init__(self): super(Virginizer, self).__init__() self.airbag_ecu = ecu.Ecu_file(ecufile, True) layout = gui.QVBoxLayout() infos = gui.QLabel( "TWINGO III/ZOE/DOKKER/DUSTER ph2/TRAFIC III/CAPTUR/LODGY ph1/2<br>" "AIRBAG VIRGINIZER<br><font color='red'>THIS PLUGIN WILL UNLOCK AIRBAG CRASH DATA<br>" "GO AWAY IF YOU HAVE NO IDEA OF WHAT IT MEANS</font") infos.setAlignment(core.Qt.AlignHCenter) check_button = gui.QPushButton("Check ACU Virgin") self.status_check = gui.QLabel("Waiting") self.status_check.setAlignment(core.Qt.AlignHCenter) self.virginize_button = gui.QPushButton("Virginize ACU") layout.addWidget(infos) layout.addWidget(check_button) layout.addWidget(self.status_check) layout.addWidget(self.virginize_button) self.setLayout(layout) self.virginize_button.setEnabled(True) self.virginize_button.clicked.connect(self.reset_ecu) check_button.clicked.connect(self.check_virgin_status) self.ecu_connect()
def __init__(self): super(Virginizer, self).__init__() self.megane_eps = ecu.Ecu_file("DAE_X95_X38_X10_v1.88_20120228T113904", True) layout = gui.QVBoxLayout() infos = gui.QLabel( _("ZOE/FLENCE/Megane III/Scenic III EPS VIRGINIZER<br><font color='red'>THIS PLUGIN WILL RESET EPS IMMO DATA<br>GO AWAY IF YOU HAVE NO IDEA OF WHAT IT MEANS</font>" )) infos.setAlignment(core.Qt.AlignHCenter) check_button = gui.QPushButton(_("Check EPS Virgin")) self.status_check = gui.QLabel(_("Waiting")) self.status_check.setAlignment(core.Qt.AlignHCenter) self.virginize_button = gui.QPushButton(_("Virginize EPS")) layout.addWidget(infos) layout.addWidget(check_button) layout.addWidget(self.status_check) layout.addWidget(self.virginize_button) self.setLayout(layout) self.virginize_button.setEnabled(False) self.virginize_button.clicked.connect(self.reset_ecu) check_button.clicked.connect(self.check_virgin_status) self.ecu_connect()
def plugin_entry(): megane_ecu = ecu.Ecu_file("../json/UCH_Megane.json", True) apv_data_name = u'Code APV' # Request gathering start_session_request = megane_ecu.requests[u'Start Diagnostic Session'] after_sale_request = megane_ecu.requests[u'ACCEDER AU MODE APRES-VENTE'] learn_key_request = megane_ecu.requests[u'APPRENDRE BADGE'] tester_present_request = megane_ecu.requests[u'Tester present'] # Data items gathering code_apv_data = after_sale_request.sendbyte_dataitems[apv_data_name] code_apv_ecu_data = megane_ecu.data[apv_data_name] # First generate a list of bytes representing the frame to be sent to the ELM # A template of it is available in the 'sentbytes' member of an 'Ecu_request' class elm_data_stream = after_sale_request.get_formatted_sentbytes() print code_apv_ecu_data.setValue("001122334455", elm_data_stream, code_apv_data, megane_ecu.endianness) print get_isk( megane_ecu, "61AB02FC0D08514C86555400000000000000008DE8EE1679D3C9A7A7CCF6AC0000000000002A" )
def __init__(self): super(CardProg, self).__init__() options.debug = True self.apvok = False self.megane_ecu = ecu.Ecu_file(ecufile, True) self.start_session_request = self.megane_ecu.requests[ u'Start Diagnostic Session'] self.after_sale_request = self.megane_ecu.requests[ u'ACCEDER AU MODE APRES-VENTE'] self.learn_key_request = self.megane_ecu.requests[u'APPRENDRE BADGE'] self.key_bits_status = self.megane_ecu.requests[ u'Status général des opérations badges Bits'] self.key_bytes_status = self.megane_ecu.requests[ u'Status général des opérations badges Octets'] self.reserved_frame_request = self.megane_ecu.requests[ u'Trame AB: Trame réservée'] self.learn_validate_request = self.megane_ecu.requests[ u'SORTIE DU MODE APV : VALIDATION'] self.learn_cancel_request = self.megane_ecu.requests[ u'SORTIE DU MODE APV : ABANDON'] self.ecu_connect() self.start_diag_session() self.apv_access_button = gui.QPushButton(_("ENTER AFTER SALE MODE")) self.apv_access_button.clicked.connect(self.set_apv_from_input) self.pininput = gui.QLineEdit() self.pininput.setText("0" * 12) self.pininput.setInputMask("H" * 12) self.iskoutput = gui.QLineEdit() self.iskoutput.setInputMask("H" * 12) self.numkeys_label = gui.QLabel("0") self.currentcardide = gui.QLineEdit() self.currentcardide.setReadOnly(True) self.apv_status = gui.QLabel("") self.apv_status.setAlignment(core.Qt.AlignHCenter) label = gui.QLabel( _("<font color='red'>MEGANE II CARD PROGRAMMING<br>EXPERIMENTAL : NOT TESTED YET</font>" )) label.setAlignment(core.Qt.AlignHCenter) self.learnbutton = gui.QPushButton(_("LEARN")) self.validatebutton = gui.QPushButton(_("VALIDATE")) self.cancelbutton = gui.QPushButton(_("CANCEL")) self.algocheck = gui.QCheckBox(_("Algo 2")) self.algocheck.setChecked(False) self.learnbutton.clicked.connect(self.learn_action) self.validatebutton.clicked.connect(self.validate_action) self.cancelbutton.clicked.connect(self.cancel_action) self.iskoutput.textChanged.connect(self.calculate_pin) self.algocheck.toggled.connect(self.calculate_pin) layout = gui.QGridLayout() layout.addWidget(label, 0, 0, 1, 0) layout.addWidget(gui.QLabel(_("ISK")), 1, 0) layout.addWidget(self.iskoutput, 1, 1) layout.addWidget(gui.QLabel(_("PIN")), 2, 0) layout.addWidget(self.pininput, 2, 1) layout.addWidget(self.algocheck, 3, 1) layout.addWidget(self.apv_access_button, 4, 0, 1, 0) layout.addWidget(self.apv_status, 5, 0, 1, 0) layout.addWidget(gui.QLabel(_("Num key learnt")), 6, 0) layout.addWidget(self.numkeys_label, 6, 1) layout.addWidget(gui.QLabel(_("CARD IDE")), 7, 0) layout.addWidget(self.currentcardide, 7, 1) layout.addWidget(self.learnbutton, 8, 0, 1, 0) layout.addWidget(self.validatebutton, 9, 0) layout.addWidget(self.cancelbutton, 9, 1) self.setLayout(layout) # I have to use a timer here to avoid ECU from escaping session mode # A shot every 1.5 seconds is enough, normally self.tester_timer = core.QTimer() self.tester_timer.setSingleShot(False) self.tester_timer.setInterval(1500) self.tester_timer.timeout.connect(self.check_all) isk = self.get_isk() self.iskoutput.setText(isk) self.tester_timer.start()
def initXML(self): self.categories = {} self.xmlscreen = {} xdom = xml.dom.minidom.parse(self.ddtfile) xdoc = xdom.documentElement if not xdoc: print("XML file not found : " + self.ddtfile) return self.ecurequestsparser = ecu.Ecu_file(xdoc) target = self.getChildNodesByName(xdoc, u"Target")[0] if not target: self.logview.append("Invalid DDT file") return can = self.getChildNodesByName(target, u"CAN") if can: can = can[0] self.protocol = "CAN" send_ids = self.getChildNodesByName(can, "SendId") if send_ids: send_id = send_ids[0] can_id = self.getChildNodesByName(send_id, "CANId") if can_id: self.can_send_id = hex(int( can_id[0].getAttribute("Value"))) rcv_ids = self.getChildNodesByName(can, "ReceiveId") if rcv_ids: rcv_id = rcv_ids[0] can_id = self.getChildNodesByName(rcv_id, "CANId") if can_id: self.can_rcv_id = hex(int(can_id[0].getAttribute("Value"))) k = self.getChildNodesByName(target, u"K") if k: kwp = self.getChildNodesByName(k[0], u"KWP") if kwp: kwp = kwp[0] self.protocol = "KWP2000" fastinit = self.getChildNodesByName(kwp, "FastInit") if fastinit: self.iso_fastinit = True self.iso_rcv_id = hex( int( self.getChildNodesByName( fastinit[0], "KW1")[0].getAttribute("Value")))[2:].upper() self.iso_send_id = hex( int( self.getChildNodesByName( fastinit[0], "KW2")[0].getAttribute("Value")))[2:].upper() else: self.logview.append( "Determination protocol KWP2000 impossible") categories = self.getChildNodesByName(target, u"Categories") for cats in categories: xml_cats = self.getChildNodesByName(cats, u"Category") for category in xml_cats: category_name = category.getAttribute(u"Name") self.categories[category_name] = [] screens_name = self.getChildNodesByName(category, u"Screen") for screen in screens_name: screen_name = screen.getAttribute(u"Name") self.xmlscreen[screen_name] = screen self.categories[category_name].append(screen_name)