예제 #1
0
    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)
예제 #2
0
    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()
예제 #4
0
 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()
예제 #5
0
파일: sniffer.py 프로젝트: xerqus/ddt4all
    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
예제 #6
0
 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()
예제 #7
0
    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()
예제 #8
0
 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()
예제 #9
0
 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()
예제 #10
0
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"
    )
예제 #11
0
    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()
예제 #12
0
    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)