#!/usr/bin/python # -*- coding: utf-8 -*- #qpy:2 #qpy:kivy ################################## # # # # # Version: 1.6 (30-Jul-2018) # # Author: Shr-Lnm # # # # # ################################## import os from os import listdir from os.path import isdir from os.path import isfile import sys try: import cPickle as pickle except: import pickle osname = os.name if osname == 'nt': import pip try: import serial except ImportError: pip.main(['install','pyserial']) try: import androidhelper as android osname = 'android' except: try: import android osname = 'android' except: pass jnius_mode = False if osname == 'android': try: from jnius import autoclass jnius_mode = True except ImportError: try: import pip except ImportError: pass #pip.main(['install', 'pyjnius-u4-qpython']) if jnius_mode: try: BluetoothAdapter = autoclass('android.bluetooth.BluetoothAdapter') BluetoothDevice = autoclass('android.bluetooth.BluetoothDevice') BluetoothSocket = autoclass('android.bluetooth.BluetoothSocket') UUID = autoclass('java.util.UUID') except: print "Error while using jnius" sys.exit() def getPathList(): return ['./'+f for f in listdir('.') if isdir('./'+f) \ and f.lower().startswith('pyren') \ and isfile('./'+f+'/pyren.py')] def getLangList(): return [f[10:-4] for f in listdir('./Location') if f.lower().startswith('diagoncan_')] def getPortList(): ret = [] if os.name != 'android': if jnius_mode: try: paired_devices = BluetoothAdapter.getDefaultAdapter().getBondedDevices().toArray() for device in paired_devices: desc = device.getName () de = unicode(desc.encode("ascii", "ignore")) ret.append(u'BT;' + de) except: ret.append(u'BT;') return ret iterator = sorted(list(list_ports.comports())) for port, desc, hwid in iterator: try: de = unicode(desc.encode("ascii", "ignore")) ret.append(port+u';'+de) except: ret.append(port+';') if '192.168.0.10:35000;WiFi' not in ret: ret.append('192.168.0.10:35000;WiFi') else: ret = ['BT','192.168.0.10:35000'] return ret class settings(): path = '' port = '' lang = 'RU' speed = '38400' logName = 'log.txt' log = False cfc = False n1c = False si = False dump = False can2 = False options = '' def __init__(self): self.load() def __del__(self): pass def load(self): if not os.path.isfile("./settings.p"): self.save() f = open('./settings.p', 'rb') tmp_dict = pickle.load(f) f.close() self.__dict__.update(tmp_dict) def save(self): f = open('./settings.p', 'wb') pickle.dump(self.__dict__, f) f.close() def run( s, cmd ): fullpath = os.path.dirname(os.path.realpath(sys.argv[0]))+s.path[1:] os.chdir(os.path.dirname(os.path.realpath(sys.argv[0]))) sys.path.insert( 0, fullpath ) #sys.path.insert( 0, fullpath+"/ply" ) #sys.path.insert( 0, fullpath+"/serial" ) if cmd=='pyren' or cmd=='scan' or cmd=='demo': cmdr = __import__( 'pyren' ) elif cmd=='check': cmdr = __import__( 'cmdr_chkelm' ) elif cmd=='mon': cmdr = __import__( 'bus_monitor' ) if s.port.lower()=='bt' or s.port=='' : s.port='bt' sys.argv.append('-p'+s.port) if cmd=='demo': sys.argv.append('--demo') if cmd=='scan': sys.argv.append('--scan') if s.log: sys.argv.append('--log='+s.logName) if s.speed!='38400': sys.argv.append('-r'+s.speed) if s.lang!='': sys.argv.append('-L'+s.lang) if s.cfc: sys.argv.append('--cfc') if s.n1c: sys.argv.append('--n1c') if s.si: sys.argv.append('--si') if s.dump: sys.argv.append('--dump') if s.can2: sys.argv.append('--can2') if s.options!='': sys.argv = sys.argv + s.options.split() os.chdir(s.path) cmdr.main() sys.exit() if osname != 'android': try: import serial from serial.tools import list_ports except ImportError: print "\n\n\n\tPleas install additional modules" print "\t\t>sudo easy_install pyserial" sys.exit() try: # Python2 import Tkinter as tk import ttk import tkFont import tkMessageBox import tkFileDialog import tkSimpleDialog except ImportError: # Python3 import tkinter as tk import tkinter.ttk as ttk import tkFont import tkMessageBox import tkFileDialog class desktopGUI(tk.Frame): save = None def guiDestroy(self): self.root.eval('::ttk::CancelRepeat') self.root.destroy() def cmd_Mon(self): self.saveSettings() self.guiDestroy() run( self.save, 'mon' ) def cmd_Check(self): self.saveSettings() self.guiDestroy() run( self.save, 'check' ) def cmd_Demo(self): self.saveSettings() self.guiDestroy() run( self.save, 'demo' ) def cmd_Scan(self): self.saveSettings() self.guiDestroy() run( self.save, 'scan' ) def cmd_Start(self): self.saveSettings() self.guiDestroy() run( self.save, 'pyren' ) def saveSettings(self): if len(self.var_entryPath.get())>0: self.save.path = self.var_entryPath.get() else: self.save.path = self.var_path.get() self.save.port = self.var_port.get().split(';')[0] self.save.lang = self.var_lang.get() self.save.speed = self.var_speed.get() self.save.log = self.var_log.get() self.save.logName = self.var_logName.get() self.save.cfc = self.var_cfc.get() self.save.n1c = self.var_n1c.get() self.save.si = self.var_si.get() self.save.dump = self.var_dump.get() self.save.can2 = self.var_can2.get() self.save.options = self.var_otherOptions.get() self.save.save() def loadSettings(self): self.var_si.set(self.save.si) self.var_cfc.set(self.save.cfc) self.var_n1c.set(self.save.n1c) self.var_can2.set(self.save.can2) self.var_dump.set(self.save.dump) self.var_lang.set(self.save.lang) self.var_path.set(self.save.path) self.var_port.set(self.save.port) self.var_speed.set(self.save.speed) self.var_entryPath.set('') self.var_otherOptions.set(self.save.options) self.var_log.set(self.save.log) self.var_logName.set(self.save.logName) self.var_speedList = ['38400','115200','230400','500000',] self.var_langList = getLangList() self.var_pathList = getPathList() self.var_portList = getPortList() if len(self.var_path.get())==0: self.var_path.set(self.var_pathList[0]) if len(self.var_lang.get())==0: ll = self.var_langList if 'RU' in ll: self.var_lang.set('RU') elif 'GB' in ll: self.var_lang.set('GB') else: self.var_lang.set(ll[0]) if len(self.var_port.get())==0: for p in self.var_portList: self.var_port.set(p) if 'OBD' in p : break def __init__(self): self.save = settings() self.root = tk.Tk() self.root.option_add('*Dialog.msg.font', 'Courier New 12') self.root.geometry("500x500") tk.Frame.__init__(self, self.root) self.var_can2 = tk.BooleanVar() self.var_dump = tk.BooleanVar() self.var_log = tk.BooleanVar() self.var_cfc = tk.BooleanVar() self.var_n1c = tk.BooleanVar() self.var_si = tk.BooleanVar() self.var_langList = [] self.var_pathList = [] self.var_portList = [] self.var_speedList = [] self.var_lang = tk.StringVar() self.var_path = tk.StringVar() self.var_port = tk.StringVar() self.var_speed = tk.StringVar() self.var_logName = tk.StringVar() self.var_entryPath = tk.StringVar() self.var_otherOptions = tk.StringVar() self.loadSettings() self.root.title("Pyren Launcher") self.style = ttk.Style() self.style.theme_use('classic') if sys.platform == "win32": self.style.theme_use('winnative') self.style.configure('.',background='#d9d9d9') self.style.configure('.',foreground='#000000') self.style.configure('.',font="TkDefaultFont") self.style.map('.',background=[('selected', '#d9d9d9'), ('active','#d9d9d9')]) self.root.geometry("500x420+0+28") self.root.title("Pyren launcher") self.root.configure(background="#d9d9d9") self.root.configure(highlightbackground="#d9d9d9") self.root.configure(highlightcolor="black") self.lPathSelector = tk.LabelFrame(self.root) self.lPathSelector.place(relx=0.02, rely=0.0, relheight=0.27, relwidth=0.46) self.lPathSelector.configure(relief=tk.GROOVE) self.lPathSelector.configure(foreground="black") self.lPathSelector.configure(text='''Version''') self.lPathSelector.configure(background="#d9d9d9") self.lPathSelector.configure(highlightbackground="#d9d9d9") self.lPathSelector.configure(highlightcolor="black") self.lPathSelector.configure(width=230) self.lPortSelector = tk.LabelFrame(self.root) self.lPortSelector.place(relx=0.5, rely=0.0, relheight=0.27, relwidth=0.48) self.lPortSelector.configure(relief=tk.GROOVE) self.lPortSelector.configure(foreground="black") self.lPortSelector.configure(text='''Port''') self.lPortSelector.configure(background="#d9d9d9") self.lPortSelector.configure(highlightbackground="#d9d9d9") self.lPortSelector.configure(highlightcolor="black") self.lPortSelector.configure(width=240) self.lPortSpeed = tk.LabelFrame(self.root) self.lPortSpeed.place(relx=0.52, rely=0.12, relheight=0.13, relwidth=0.44) self.lPortSpeed.configure(relief=tk.GROOVE) self.lPortSpeed.configure(foreground="black") self.lPortSpeed.configure(text='''Port Speed (only for USB-ELM)''') self.lPortSpeed.configure(background="#d9d9d9") self.lPortSpeed.configure(highlightbackground="#d9d9d9") self.lPortSpeed.configure(highlightcolor="black") self.lPortSpeed.configure(width=220) self.lOtherPath = tk.LabelFrame(self.root) self.lOtherPath.place(relx=0.04, rely=0.12, relheight=0.13, relwidth=0.42) self.lOtherPath.configure(relief=tk.GROOVE) self.lOtherPath.configure(foreground="black") self.lOtherPath.configure(text='''Other path to script''') self.lOtherPath.configure(background="#d9d9d9") self.lOtherPath.configure(highlightbackground="#d9d9d9") self.lOtherPath.configure(highlightcolor="black") self.lOtherPath.configure(width=210) self.lDBLanguage = tk.LabelFrame(self.root) self.lDBLanguage.place(relx=0.02, rely=0.29, relheight=0.13, relwidth=0.3) self.lDBLanguage.configure(relief=tk.GROOVE) self.lDBLanguage.configure(foreground="black") self.lDBLanguage.configure(text='''DB Language''') self.lDBLanguage.configure(background="#d9d9d9") self.lDBLanguage.configure(highlightbackground="#d9d9d9") self.lDBLanguage.configure(highlightcolor="black") self.lDBLanguage.configure(width=100) self.lOptions = tk.LabelFrame(self.root) self.lOptions.place(relx=0.02, rely=0.69, relheight=0.13, relwidth=0.96) self.lOptions.configure(relief=tk.GROOVE) self.lOptions.configure(foreground="black") self.lOptions.configure(text='''Other options''') self.lOptions.configure(background="#d9d9d9") self.lOptions.configure(highlightbackground="#d9d9d9") self.lOptions.configure(highlightcolor="black") self.lOptions.configure(width=480) self.lLog = tk.LabelFrame(self.root) self.lLog.place(relx=0.34, rely=0.29, relheight=0.13, relwidth=0.36) self.lLog.configure(relief=tk.GROOVE) self.lLog.configure(foreground="black") self.lLog.configure(text='''Log''') self.lLog.configure(background="#d9d9d9") self.lLog.configure(highlightbackground="#d9d9d9") self.lLog.configure(highlightcolor="black") self.lLog.configure(width=230) self.lCAN = tk.LabelFrame(self.root) self.lCAN.place(relx=0.02, rely=0.43, relheight=0.25, relwidth=0.46) self.lCAN.configure(relief=tk.GROOVE) self.lCAN.configure(foreground="black") self.lCAN.configure(text='''CAN''') self.lCAN.configure(background="#d9d9d9") self.lCAN.configure(highlightbackground="#d9d9d9") self.lCAN.configure(highlightcolor="black") self.lCAN.configure(width=230) self.lKWP = tk.LabelFrame(self.root) self.lKWP.place(relx=0.5, rely=0.43, relheight=0.25, relwidth=0.48) self.lKWP.configure(relief=tk.GROOVE) self.lKWP.configure(foreground="black") self.lKWP.configure(text='''K-Line''') self.lKWP.configure(background="#d9d9d9") self.lKWP.configure(highlightbackground="#d9d9d9") self.lKWP.configure(highlightcolor="black") self.lKWP.configure(width=240) self.mCFC = tk.Message(self.root) self.mCFC.place(relx=0.08, rely=0.5, relheight=0.06, relwidth=0.1) self.mCFC.configure(background="#d9d9d9") self.mCFC.configure(foreground="#000000") self.mCFC.configure(highlightbackground="#d9d9d9") self.mCFC.configure(highlightcolor="black") self.mCFC.configure(text='''--cfc''') self.mCFC.configure(width=40) self.mN1C = tk.Message(self.root) self.mN1C.place(relx=0.08, rely=0.57, relheight=0.06, relwidth=0.1) self.mN1C.configure(background="#d9d9d9") self.mN1C.configure(foreground="#000000") self.mN1C.configure(highlightbackground="#d9d9d9") self.mN1C.configure(highlightcolor="black") self.mN1C.configure(text='''--n1c''') self.mN1C.configure(width=40) self.mSI = tk.Message(self.root) self.mSI.place(relx=0.56, rely=0.50, relheight=0.07, relwidth=0.1) self.mSI.configure(background="#d9d9d9") self.mSI.configure(foreground="#000000") self.mSI.configure(highlightbackground="#d9d9d9") self.mSI.configure(highlightcolor="black") self.mSI.configure(text='''--si''') self.mSI.configure(width=40) self.mCAN = tk.Message(self.root) self.mCAN.place(relx=0.18, rely=0.48, relheight=0.18, relwidth=0.28) self.mCAN.configure(background="#d9d9d9") self.mCAN.configure(foreground="#000000") self.mCAN.configure(highlightbackground="#d9d9d9") self.mCAN.configure(highlightcolor="black") self.mCAN.configure(text='''These options should be enabled for some fake chinese ELM. Any of them decrease data rate.''') self.mCAN.configure(width=142) self.mKWP = tk.Message(self.root) self.mKWP.place(relx=0.64, rely=0.48, relheight=0.13, relwidth=0.3) self.mKWP.configure(background="#d9d9d9") self.mKWP.configure(foreground="#000000") self.mKWP.configure(highlightbackground="#d9d9d9") self.mKWP.configure(highlightcolor="black") self.mKWP.configure(text='''Try Slow Init before Fast Init. It may helps with old ECUs''') self.mKWP.configure(width=152) self.otherPath = tk.Entry(self.root) self.otherPath.place(relx=0.06, rely=0.17, relheight=0.06, relwidth=0.38) self.otherPath.configure(background="white") self.otherPath.configure(font="TkFixedFont") self.otherPath.configure(foreground="#000000") self.otherPath.configure(highlightbackground="#d9d9d9") self.otherPath.configure(highlightcolor="black") self.otherPath.configure(insertbackground="black") self.otherPath.configure(selectbackground="#c4c4c4") self.otherPath.configure(selectforeground="black") self.otherPath.configure(textvariable=self.var_entryPath) self.logName = tk.Entry(self.root) self.logName.place(relx=0.42, rely=0.33, relheight=0.06, relwidth=0.26) self.logName.configure(background="white") self.logName.configure(font="TkFixedFont") self.logName.configure(foreground="#000000") self.logName.configure(highlightbackground="#d9d9d9") self.logName.configure(highlightcolor="black") self.logName.configure(insertbackground="black") self.logName.configure(selectbackground="#c4c4c4") self.logName.configure(selectforeground="black") self.logName.configure(textvariable=self.var_logName) self.cbLog = tk.Checkbutton(self.root) self.cbLog.place(relx=0.36, rely=0.33, relheight=0.07, relwidth=0.06) self.cbLog.configure(activebackground="#d9d9d9") self.cbLog.configure(activeforeground="#000000") self.cbLog.configure(background="#d9d9d9") self.cbLog.configure(foreground="#000000") self.cbLog.configure(highlightbackground="#d9d9d9") self.cbLog.configure(highlightcolor="black") self.cbLog.configure(justify=tk.LEFT) self.cbLog.configure(variable=self.var_log) #self.cbLog.configure(variable=self.che40) self.cbCFC = tk.Checkbutton(self.lCAN) self.cbCFC.place(relx=0.04, rely=0.17, relheight=0.29, relwidth=0.13) self.cbCFC.configure(activebackground="#d9d9d9") self.cbCFC.configure(activeforeground="#000000") self.cbCFC.configure(background="#d9d9d9") self.cbCFC.configure(foreground="#000000") self.cbCFC.configure(highlightbackground="#d9d9d9") self.cbCFC.configure(highlightcolor="black") self.cbCFC.configure(justify=tk.LEFT) self.cbCFC.configure(variable=self.var_cfc) #self.cbCFC.configure(variable=self.che43) self.cbN1C = tk.Checkbutton(self.lCAN) self.cbN1C.place(relx=0.04, rely=0.48, relheight=0.29, relwidth=0.13) self.cbN1C.configure(activebackground="#d9d9d9") self.cbN1C.configure(activeforeground="#000000") self.cbN1C.configure(background="#d9d9d9") self.cbN1C.configure(foreground="#000000") self.cbN1C.configure(highlightbackground="#d9d9d9") self.cbN1C.configure(highlightcolor="black") self.cbN1C.configure(justify=tk.LEFT) self.cbN1C.configure(variable=self.var_n1c) #self.cbN1C.configure(variable=self.che44) self.cbSI = tk.Checkbutton(self.lKWP) self.cbSI.place(relx=0.04, rely=0.18, relheight=0.29, relwidth=0.13) self.cbSI.configure(activebackground="#d9d9d9") self.cbSI.configure(activeforeground="#000000") self.cbSI.configure(background="#d9d9d9") self.cbSI.configure(foreground="#000000") self.cbSI.configure(highlightbackground="#d9d9d9") self.cbSI.configure(highlightcolor="black") self.cbSI.configure(justify=tk.LEFT) self.cbSI.configure(variable=self.var_si) #self.cbSI.configure(variable=self.che45) self.lDump = tk.LabelFrame(self.root) self.lDump.place(relx=0.72, rely=0.29, relheight=0.13, relwidth=0.12) self.lDump.configure(relief=tk.GROOVE) self.lDump.configure(foreground="black") self.lDump.configure(text='''Dump''') self.lDump.configure(background="#d9d9d9") self.lDump.configure(highlightbackground="#d9d9d9") self.lDump.configure(highlightcolor="black") self.lDump.configure(width=60) self.lCAN2 = tk.LabelFrame(self.root) self.lCAN2.place(relx=0.86, rely=0.29, relheight=0.13, relwidth=0.12) self.lCAN2.configure(relief=tk.GROOVE) self.lCAN2.configure(foreground="black") self.lCAN2.configure(text='''CAN 2''') self.lCAN2.configure(background="#d9d9d9") self.lCAN2.configure(highlightbackground="#d9d9d9") self.lCAN2.configure(highlightcolor="black") self.lCAN2.configure(width=60) self.cbDump = tk.Checkbutton(self.lDump) self.cbDump.place(relx=0.17, rely=0.18, relheight=0.55, relwidth=0.5) self.cbDump.configure(activebackground="#d9d9d9") self.cbDump.configure(activeforeground="#000000") self.cbDump.configure(background="#d9d9d9") self.cbDump.configure(foreground="#000000") self.cbDump.configure(highlightbackground="#d9d9d9") self.cbDump.configure(highlightcolor="black") self.cbDump.configure(variable=self.var_dump) #self.cbDump.configure(variable=self.che41) self.cbDump.configure(width=34) self.cbCAN2 = tk.Checkbutton(self.lCAN2) self.cbCAN2.place(relx=0.17, rely=0.18, relheight=0.55, relwidth=0.5) self.cbCAN2.configure(activebackground="#d9d9d9") self.cbCAN2.configure(activeforeground="#000000") self.cbCAN2.configure(background="#d9d9d9") self.cbCAN2.configure(foreground="#000000") self.cbCAN2.configure(highlightbackground="#d9d9d9") self.cbCAN2.configure(highlightcolor="black") self.cbCAN2.configure(variable=self.var_can2) #self.cbCAN2.configure(variable=self.che42) self.cbCAN2.configure(width=34) self.Options = tk.Entry(self.root) self.Options.place(relx=0.04, rely=0.74, relheight=0.06, relwidth=0.92) self.Options.configure(background="white") self.Options.configure(font="TkFixedFont") self.Options.configure(foreground="#000000") self.Options.configure(highlightbackground="#d9d9d9") self.Options.configure(highlightcolor="black") self.Options.configure(insertbackground="black") self.Options.configure(selectbackground="#c4c4c4") self.Options.configure(selectforeground="black") self.Options.configure(textvariable=self.var_otherOptions) self.btnStart = tk.Button(self.root) self.btnStart.place(relx=0.01, rely=0.88, height=22, width=100) self.btnStart.configure(activebackground="#d9d9d9") self.btnStart.configure(activeforeground="#000000") self.btnStart.configure(background="#d9d9d9") self.btnStart.configure(command=self.cmd_Start) self.btnStart.configure(foreground="#000000") self.btnStart.configure(highlightbackground="#d9d9d9") self.btnStart.configure(highlightcolor="black") self.btnStart.configure(text='''Start''') self.btnStart.configure(width=70) self.btnScan = tk.Button(self.root) self.btnScan.place(relx=0.21, rely=0.88, height=22, width=100) self.btnScan.configure(activebackground="#d9d9d9") self.btnScan.configure(activeforeground="#000000") self.btnScan.configure(background="#d9d9d9") self.btnScan.configure(command=self.cmd_Scan) self.btnScan.configure(foreground="#000000") self.btnScan.configure(highlightbackground="#d9d9d9") self.btnScan.configure(highlightcolor="black") self.btnScan.configure(text='''Scan''') self.btnScan.configure(width=70) self.btnDemo = tk.Button(self.root) self.btnDemo.place(relx=0.41, rely=0.88, height=22, width=100) self.btnDemo.configure(activebackground="#d9d9d9") self.btnDemo.configure(activeforeground="#000000") self.btnDemo.configure(background="#d9d9d9") self.btnDemo.configure(command=self.cmd_Demo) self.btnDemo.configure(foreground="#000000") self.btnDemo.configure(highlightbackground="#d9d9d9") self.btnDemo.configure(highlightcolor="black") self.btnDemo.configure(text='''Demo''') self.btnDemo.configure(width=82) self.btnCheck = tk.Button(self.root) self.btnCheck.place(relx=0.61, rely=0.88, height=22, width=100) self.btnCheck.configure(activebackground="#d9d9d9") self.btnCheck.configure(activeforeground="#000000") self.btnCheck.configure(background="#d9d9d9") self.btnCheck.configure(command=self.cmd_Check) self.btnCheck.configure(foreground="#000000") self.btnCheck.configure(highlightbackground="#d9d9d9") self.btnCheck.configure(highlightcolor="black") self.btnCheck.configure(text='''Check ELM''') self.btnMon = tk.Button(self.root) self.btnMon.place(relx=0.81, rely=0.88, height=22, width=90) self.btnMon.configure(activebackground="#d9d9d9") self.btnMon.configure(activeforeground="#000000") self.btnMon.configure(background="#d9d9d9") self.btnMon.configure(command=self.cmd_Mon) self.btnMon.configure(foreground="#000000") self.btnMon.configure(highlightbackground="#d9d9d9") self.btnMon.configure(highlightcolor="black") self.btnMon.configure(text='''Monitor''') self.pathList = ttk.Combobox(self.root) self.pathList.place(relx=0.04, rely=0.05, relheight=0.06, relwidth=0.41) self.pathList.configure(values=['./pyren09a','./pyren09a']) self.pathList.configure(values=self.var_pathList) self.pathList.configure(textvariable=self.var_path) self.pathList.configure(takefocus="") self.portList = ttk.Combobox(self.root) self.portList.place(relx=0.52, rely=0.05, relheight=0.06, relwidth=0.43) self.portList.configure(values=self.var_portList) self.portList.configure(textvariable=self.var_port) self.portList.configure(takefocus="") self.speedList = ttk.Combobox(self.root) self.speedList.place(relx=0.54, rely=0.17, relheight=0.06, relwidth=0.41) self.speedList.configure(values=self.var_speedList) self.speedList.configure(textvariable=self.var_speed) self.speedList.configure(takefocus="") self.langList = ttk.Combobox(self.root) self.langList.place(relx=0.04, rely=0.33, relheight=0.06, relwidth=0.25) self.langList.configure(values=self.var_langList) self.langList.configure(textvariable=self.var_lang) self.langList.configure(takefocus="") self.root.focus_force() self.root.mainloop() def __del__(self): pass def main(): gui = desktopGUI() if __name__ == '__main__': os.chdir(os.path.dirname(os.path.realpath(sys.argv[0]))) main() else: class androidGUI(): save = None pl = [] ll = [] def cmd_Mon(self): self.saveSettings() self.droid.fullDismiss() run( self.save, 'mon' ) def cmd_Check(self): self.saveSettings() self.droid.fullDismiss() run( self.save, 'check' ) def cmd_Demo(self): self.saveSettings() self.droid.fullDismiss() run( self.save, 'demo' ) def cmd_Scan(self): self.saveSettings() self.droid.fullDismiss() run( self.save, 'scan' ) def cmd_Start(self): self.saveSettings() self.droid.fullDismiss() run( self.save, 'pyren' ) def saveSettings(self): self.save.path = self.pl[int(self.droid.fullQueryDetail("sp_version").result['selectedItemPosition'])] self.save.lang = self.ll[int(self.droid.fullQueryDetail("sp_language").result['selectedItemPosition'])] if self.droid.fullQueryDetail("rb_bt").result['checked']=='false': self.save.port = self.droid.fullQueryDetail("in_wifi").result['text'] else: self.save.port = 'BT' self.save.speed = '38400' self.save.logName = self.droid.fullQueryDetail("in_logname").result['text'] if self.droid.fullQueryDetail("cb_log").result['checked']=='false': self.save.log = False else: self.save.log = True if self.droid.fullQueryDetail("cb_cfc").result['checked']=='false': self.save.cfc = False else: self.save.cfc = True if self.droid.fullQueryDetail("cb_n1c").result['checked']=='false': self.save.n1c = False else: self.save.n1c = True if self.droid.fullQueryDetail("cb_si").result['checked']=='false': self.save.si = False else: self.save.si = True if self.droid.fullQueryDetail("cb_dump").result['checked']=='false': self.save.dump = False else: self.save.dump = True if self.droid.fullQueryDetail("cb_can2").result['checked']=='false': self.save.can2 = False else: self.save.can2 = True self.save.options = self.droid.fullQueryDetail("in_options").result['text'] self.save.save() def loadSettings(self): pl = getPathList() if self.save.path in pl: pl.insert(0, pl.pop(pl.index(self.save.path))) self.droid.fullSetList("sp_version",pl) self.pl = pl ll = getLangList() if self.save.lang in ll: ll.insert(0, ll.pop(ll.index(self.save.lang))) self.droid.fullSetList("sp_language",ll) self.ll = ll if self.save.port=='': self.save.port = "192.168.0.10:35000" if self.save.port.lower()=='bt': self.droid.fullSetProperty("rb_bt","checked","true") self.droid.fullSetProperty("rb_wifi","checked","false") self.droid.fullSetProperty("in_wifi","text","192.168.0.10:35000") else: self.droid.fullSetProperty("rb_bt","checked","false") self.droid.fullSetProperty("rb_wifi","checked","true") self.droid.fullSetProperty("in_wifi","text",self.save.port) self.droid.fullSetProperty("in_logname","text",self.save.logName) if self.save.log: self.droid.fullSetProperty("cb_log","checked","true") else: self.droid.fullSetProperty("cb_log","checked","false") if self.save.cfc: self.droid.fullSetProperty("cb_cfc","checked","true") else: self.droid.fullSetProperty("cb_cfc","checked","false") if self.save.n1c: self.droid.fullSetProperty("cb_n1c","checked","true") else: self.droid.fullSetProperty("cb_n1c","checked","false") if self.save.si: self.droid.fullSetProperty("cb_si","checked","true") else: self.droid.fullSetProperty("cb_si","checked","false") if self.save.dump: self.droid.fullSetProperty("cb_dump","checked","true") else: self.droid.fullSetProperty("cb_dump","checked","false") if self.save.can2: self.droid.fullSetProperty("cb_can2","checked","true") else: self.droid.fullSetProperty("cb_can2","checked","false") self.droid.fullSetProperty("in_options","text",self.save.options) lay = '''