예제 #1
0
    def __init__(self):
        global instance, cfgPath
        instance = self

        try:
            if os.path.exists("apps/python/acSLI.cfg"):
                shutil.move("apps/python/acSLI.cfg", "apps/python/acSLI/")

            self.config = Config(cfgPath)
            self.cfgPort = str(self.config.getOption("SETTINGS", "port", True, self.cfgPort)).upper()
            self.cfgRemoteVersion = str(self.config.getOption("SETTINGS", "remoteVersion", True, self.cfgRemoteVersion))
            self.cfgSpeedUnit = str(self.config.getOption("SETTINGS", "unitSpeed", True, self.cfgSpeedUnit)).upper()
            self.cfgFuelDisp = str(self.config.getOption("SETTINGS", "fuelDisplay", True, self.cfgFuelDisp)).upper()
            self.cfgStartPage = int(self.config.getOption("SETTINGS", "startupPage", True, self.cfgStartPage))
            self.cfgIntensity = int(self.config.getOption("SETTINGS", "intensity", True, self.cfgIntensity))

            self.cfgTickFreq = int(self.config.getOption("ADVANCED", "tickFrequency", True, self.cfgTickFreq))
            self.cfgEnableUpdater = int(self.config.getOption("ADVANCED", "enableUpdater", True, self.cfgEnableUpdater))
            self.cfgLapOffset = int(self.config.getOption("ADVANCED", "lapOffset", True, self.cfgLapOffset))

            self.cfgBrakeEnable = int(self.config.getOption("BRAKE-VIBE", "enable", True, self.cfgBrakeEnable))
            self.cfgBrakeTol = int(self.config.getOption("BRAKE-VIBE", "tolerance", True, self.cfgBrakeTol))
            self.cfgBrakeSens = int(self.config.getOption("BRAKE-VIBE", "sensitivity", True, self.cfgBrakeSens))

        except Exception as e:
            Log.error("Loading Config File: %s" % e)
예제 #2
0
def acShutdown(deltaT):  
    global acSLI

    try:
        if not Updater.instance.isOpen:
            acSLI.onClose()

    except Exception as e:
        Log.error("On Close: %s" % e)
예제 #3
0
    def __init__(self):
        global instance, progInstance
        progInstance = self

        try:
            self.appWindow = Window("acSLI Update Progress", 800, 100).setVisible(1).setPos(560, 350)\
                    .setBackgroundTexture("apps/python/acSLI/image/backError.png")
            self.lblMsg = Label(self.appWindow.app, "Downloading[0/0][0%]: ", 20, 32)\
                    .setSize(760, 10).setAlign("center").setFontSize(20).setColor(Utils.rgb(Utils.colours["green"]))
        except Exception as e:
                    Log.error("On Update: %s" % e)
예제 #4
0
    def __init__(self, currVersion):
        global instance
        instance = self
        self.currVersion = currVersion
        self.cV = "".join(self.currVersion.split("."))
        if len(self.cV) < 4:
            self.cV = self.cV[0] + self.cV[1] + "0" + self.cV[2]

        try:
            if Config.instance.cfgEnableUpdater == 1:
                conn = http.client.HTTPSConnection("raw.githubusercontent.com", 443)
                conn.request("GET", "/Turnermator13/ArduinoRacingDash/master/version.txt")
                versionStr = re.findall(r"\'(.+?)\'", str(conn.getresponse().read()))[0].split("|")
                self.remoteVersion = versionStr[0]
                self.reqArduinoUpdate = versionStr[1]
                self.changeLog = versionStr[2]
                self.statsURL = versionStr[3]
                conn.close()
        except Exception as e:
            Log.error("Couldn't get Version Information: %s" % e)
            self.updaterError = True
        logStats("Login")

        self.rV = "".join(self.remoteVersion.split("."))
        if len(self.rV) < 4:
            self.rV = self.rV[0] + self.rV[1] + "0" + self.rV[2]

        if (self.remoteVersion != 0) and (self.remoteVersion != Config.instance.cfgRemoteVersion)\
                and (int(self.rV) > int(self.cV)):
            self.isOpen = True
            if self.reqArduinoUpdate == "1":
                Log.info("New acSLI Version Available: v" + self.remoteVersion + ". Requires Arduino Sketch Update")
            else:
                Log.info("New acSLI Version Available: v" + self.remoteVersion)

            self.appWindow = Window("acSLI Updater", 400, 120).setVisible(1).setPos(760, 350)\
                .setBackgroundTexture("apps/python/acSLI/image/backUpdater.png")
            self.btnYes = Button(self.appWindow.app, bFunc_Yes, 110, 20, 20, 90, "Update")\
                .setAlign("center").hasCustomBackground().setBackgroundTexture("apps/python/acSLI/image/backBtnUpdater.png")
            self.btnNo = Button(self.appWindow.app, bFunc_No, 110, 20, 145, 90, "Not Now")\
                .setAlign("center").hasCustomBackground().setBackgroundTexture("apps/python/acSLI/image/backBtnUpdater.png")
            self.btnIgnore = Button(self.appWindow.app, bFunc_Ignore, 110, 20, 270, 90, "Ignore Version")\
                .setAlign("center").hasCustomBackground().setBackgroundTexture("apps/python/acSLI/image/backBtnUpdater.png")

            self.lblVersionTxt = Label(self.appWindow.app, "New acSLI Version Available: v" + self.remoteVersion, 20, 30)\
                .setSize(360, 10).setAlign("center").setFontSize(20).setColor(Utils.rgb(Utils.colours["red"]))
            self.lblLog = Label(self.appWindow.app, self.changeLog, 20, 60)\
                .setSize(360, 10).setAlign("center").setColor(Utils.rgb(Utils.colours["green"]))
        else:
            if self.updaterError:
                Log.info("Updater Encounter an Error. Version Check Incomplete")
            elif Config.instance.cfgEnableUpdater == 1:
                Log.info("Running Latest Version (v%s)" % self.remoteVersion)
예제 #5
0
def acUpdate(deltaT):  
    global acSLI, hasInit

    try:
        if not Updater.instance.isOpen and not hasInit:
            hasInit = True
            acSLI = App.App()
            acSLI.onStart()

        if hasInit:
            acSLI.onUpdate()

    except Exception as e:
        Log.error("On Update: %s" % e)
예제 #6
0
    def __init__(self):
        global instance, cfgPath
        instance = self

        try:
            if os.path.exists("apps/python/acSLI.cfg"):
                shutil.move("apps/python/acSLI.cfg", "apps/python/acSLI/")

            self.config = Config(cfgPath)
            self.cfgPort = str(
                self.config.getOption("SETTINGS", "port", True,
                                      self.cfgPort)).upper()
            self.cfgRemoteVersion = str(
                self.config.getOption("SETTINGS", "remoteVersion", True,
                                      self.cfgRemoteVersion))
            self.cfgSpeedUnit = str(
                self.config.getOption("SETTINGS", "unitSpeed", True,
                                      self.cfgSpeedUnit)).upper()
            self.cfgFuelDisp = str(
                self.config.getOption("SETTINGS", "fuelDisplay", True,
                                      self.cfgFuelDisp)).upper()
            self.cfgStartPage = int(
                self.config.getOption("SETTINGS", "startupPage", True,
                                      self.cfgStartPage))
            self.cfgIntensity = int(
                self.config.getOption("SETTINGS", "intensity", True,
                                      self.cfgIntensity))

            self.cfgTickFreq = int(
                self.config.getOption("ADVANCED", "tickFrequency", True,
                                      self.cfgTickFreq))
            self.cfgEnableUpdater = int(
                self.config.getOption("ADVANCED", "enableUpdater", True,
                                      self.cfgEnableUpdater))
            self.cfgLapOffset = int(
                self.config.getOption("ADVANCED", "lapOffset", True,
                                      self.cfgLapOffset))

            self.cfgBrakeEnable = int(
                self.config.getOption("BRAKE-VIBE", "enable", True,
                                      self.cfgBrakeEnable))
            self.cfgBrakeTol = int(
                self.config.getOption("BRAKE-VIBE", "tolerance", True,
                                      self.cfgBrakeTol))
            self.cfgBrakeSens = int(
                self.config.getOption("BRAKE-VIBE", "sensitivity", True,
                                      self.cfgBrakeSens))

        except Exception as e:
            Log.error("Loading Config File: %s" % e)
예제 #7
0
def acMain(acVerison):
    global acSLI, hasInit, Log

    try:
        Log.info("Start Loading acSLI v" + App.Version)
        Loader.ConfigLoader()
        Updater.Updater(App.Version)
        cleanInstall()

        if not Updater.instance.isOpen:
            hasInit = True
            acSLI = App.App()
            acSLI.onStart()

        return "acSLI"
        
    except Exception as e:
        Log.error("On Start: %s" % e)
예제 #8
0
def _findConnect():
    global instance
    portValid = False
    instance.handshake = False
    instance.dispSelect = False

    for sPort, desc, hwid in sorted(serial.tools.list_ports.comports()):
        Log.log("%s: %s [%s]" % (sPort, desc, hwid))

        if Config.instance.cfgPort == "AUTO":
            if "Arduino" in desc:
                instance.port = sPort
                portValid = True
        else:
            if Config.instance.cfgPort == sPort:
                instance.port = sPort
                portValid = True

        if portValid:
            break

    if portValid:
        try:
            instance.ser = serial.Serial(instance.port, 9600, timeout=5)
            time.sleep(2)
            instance.ser.write(bytes([1, 1]))
            arduinoVer = instance.ser.read(5)

            if str(arduinoVer) == "b''":
                instance.port = "----"
                Log.warning(
                    "No Response From Arduino. Please Ensure Arduino is running at least v"
                    + acSLI.App.ArduinoVersion)
                instance.dispSelect = True
                instance.dispSelectMsg = "No Response from Arduino"
                instance.ser.close()
            else:
                aV = re.findall(r"\'(.+?)\'", str(arduinoVer))[0].split('.')[1]
                if len(aV) < 4:
                    aV = aV[0] + aV[1] + "0" + aV[2]

                aLV = "".join(acSLI.App.ArduinoVersion.split("."))
                if len(aLV) < 4:
                    aLV = aLV[0] + aLV[1] + "0" + aLV[2]

                if aLV > aV:
                    instance.port = "----"
                    instance.ser.close()
                    Log.warning(
                        "Arduino Code Outdated(v%s). Please Update Arduino to at least v%s and then Restart AC"
                        % (arduinoVer, acSLI.App.ArduinoVersion))
                    Error.ErrorBox(
                        "Arduino Code Outdated. Please Update Arduino to at least v"
                        + acSLI.App.ArduinoVersion + " and then Restart AC")
                else:
                    instance.handshake = True
                    Log.info("Connected to Arduino running v" + aV[0] + '.' +
                             aV[1] + '.' + aV[2] + aV[3] + " on port " +
                             instance.port)
        except Exception as e:
            Log.error("On Open Port: %s" % e)
    else:
        instance.port = "----"
        if Config.instance.cfgPort == "AUTO":
            Log.warning("No Arduino Detected")
            instance.dispSelect = True
            instance.dispSelectMsg = "No Arduino Detected"
        else:
            Log.warning("Invalid COM Port Configured")
            instance.dispSelect = True
            instance.dispSelectMsg = "Invalid COM Port Configured"

    if instance.port != "----":
        acSLI.acSLI.lblPort.setText("Connected COM Port: {}".format(
            instance.port)).setColor(Utils.rgb(Utils.colours["green"]))
    else:
        acSLI.acSLI.lblPort.setText("Connected COM Port: {}".format(
            instance.port)).setColor(Utils.rgb(Utils.colours["red"]))
def _findConnect():
    global instance
    portValid = False
    instance.handshake = False
    instance.dispSelect = False

    for sPort, desc, hwid in sorted(serial.tools.list_ports.comports()):
        Log.log("%s: %s [%s]" % (sPort, desc, hwid))

        if Config.instance.cfgPort == "AUTO":
            if "Arduino" in desc:
                instance.port = sPort
                portValid = True
        else:
            if Config.instance.cfgPort == sPort:
                instance.port = sPort
                portValid = True

        if portValid:
            break

    if portValid:
        try:
            instance.ser = serial.Serial(instance.port, 9600, timeout=5)
            time.sleep(2)
            instance.ser.write(bytes([1, 1]))
            arduinoVer = instance.ser.read(5)

            if str(arduinoVer) == "b''":
                instance.port = "----"
                Log.warning("No Response From Arduino. Please Ensure Arduino is running at least v" +
                            acSLI.App.ArduinoVersion)
                instance.dispSelect = True
                instance.dispSelectMsg = "No Response from Arduino"
                instance.ser.close()
            else:
                aV = re.findall(r"\'(.+?)\'", str(arduinoVer))[0].split('.')[1]
                if len(aV) < 4:
                    aV = aV[0] + aV[1] + "0" + aV[2]

                aLV = "".join(acSLI.App.ArduinoVersion.split("."))
                if len(aLV) < 4:
                    aLV = aLV[0] + aLV[1] + "0" + aLV[2]

                if aLV > aV:
                    instance.port = "----"
                    instance.ser.close()
                    Log.warning("Arduino Code Outdated(v%s). Please Update Arduino to at least v%s and then Restart AC" % (arduinoVer, acSLI.App.ArduinoVersion))
                    Error.ErrorBox("Arduino Code Outdated. Please Update Arduino to at least v" +
                                   acSLI.App.ArduinoVersion + " and then Restart AC")
                else:
                    instance.handshake = True
                    Log.info("Connected to Arduino running v" + aV[0] + '.' + aV[1] + '.' + aV[2] + aV[3] + " on port " + instance.port)
        except Exception as e:
            Log.error("On Open Port: %s" % e)
    else:
        instance.port = "----"
        if Config.instance.cfgPort == "AUTO":
            Log.warning("No Arduino Detected")
            instance.dispSelect = True
            instance.dispSelectMsg = "No Arduino Detected"
        else:
            Log.warning("Invalid COM Port Configured")
            instance.dispSelect = True
            instance.dispSelectMsg = "Invalid COM Port Configured"

    if instance.port != "----":
        acSLI.acSLI.lblPort.setText("Connected COM Port: {}".format(instance.port)).setColor(Utils.rgb(Utils.colours["green"]))
    else:
        acSLI.acSLI.lblPort.setText("Connected COM Port: {}".format(instance.port)).setColor(Utils.rgb(Utils.colours["red"]))
예제 #10
0
    def run(self):
        global instance, progInstance

        try:
            Log.info("Updating Files. Please Wait.")
            UpdateProg()
            logStats("Update")
            Log.info("Creating Backup")
            progInstance.setMsg("Creating Backup")
            shutil.copytree('apps/python/acSLI', 'apps/python/acSLI-BACKUP', ignore=shutil.ignore_patterns("stdlib", "stdlib64", ".idea", "acSLI.txt", "acSLI.ini"))

            conn = http.client.HTTPSConnection("raw.githubusercontent.com", 443)
            conn.request("GET", "/Turnermator13/ArduinoRacingDash/v" + instance.remoteVersion + "/fileList.txt")
            Files = re.findall(r"\'(.+?)\'", str(conn.getresponse().read()))[0].split('\\n')
            Files.append("ArduinoDash.ino")
            lenFiles = len(Files) + 1
            i = 0
            error = "N"

            for filename in Files:
                if filename == "ArduinoDash.ino":
                    conn.request("GET", "/Turnermator13/ArduinoRacingDash/v" + instance.remoteVersion + "/ArduinoDash/" + filename)
                else:
                    conn.request("GET", "/Turnermator13/ArduinoRacingDash/v" + instance.remoteVersion + "/acSLI/" + filename)
                i += 1
                Log.info("Downloading: " + filename)
                progInstance.setMsg("Downloading[%s/%s][%s]: '%s'" % (str(i), str(lenFiles), str(round((i/lenFiles)*100)) + "%", filename))
                if (filename.split('/')[0] == "stdlib" or filename.split('/')[0] == "stdlib64") and os.path.isfile("apps/python/acSLI/" + filename):
                    Log.info("DLL Exists, Skipping")
                    conn.getresponse().read()
                else:
                    res = conn.getresponse().read()
                    if re.findall(r"\'(.+?)\'", str(res))[0] == "Not Found":
                        error = "Couldn't Find File '%s'?? Please report this to the App Author" % filename
                        Log.info("Couldn't Find File '%s'?? Please report this to the App Author" % filename)
                        break
                    else:
                        try:
                            localfile = open("apps/python/acSLI/" + filename,'wb')
                            localfile.write(res)
                            localfile.close()
                        except FileNotFoundError:
                            os.makedirs(filename.split('/')[0])
                            localfile = open("apps/python/acSLI/" + filename,'wb')
                            localfile.write(res)
                            localfile.close()
                        except Exception as e:
                            Log.error("On Update: %s" % e)

            conn.close()

            if error == "N":
                shutil.rmtree("apps/python/acSLI-BACKUP")
                Log.info("Successfully Updated to " + instance.remoteVersion + " , please restart AC Session")
                progInstance.setMsg("Update Successful. Please Restart Session")
                if instance.reqArduinoUpdate == "1":
                    progInstance.setMsg("Success, Please Update Arduino (latest sketch in apps/python/acsli) and Restart Session")
            else:
                progInstance.setColour(Utils.rgb(Utils.colours["red"]))
                progInstance.setMsg("Error Updating. Restoring from Backup")
                Log.info("Error Updating, Restoring from Backup")

                for obj in os.listdir("apps/python/acSLI/"):
                    if not (str(obj) == "stdlib" or str(obj) == "stdlib64" or str(obj) == ".idea" or str(obj) == "acSLI.txt" or str(obj) == "acSLI.ini"):
                        if not "." in str(obj):
                            shutil.rmtree("apps/python/acSLI/" + obj)
                        else:
                            os.remove("apps/python/acSLI/" + obj)

                for obj in os.listdir("apps/python/acSLI-BACKUP/"):
                    if not "." in str(obj):
                        shutil.copytree("apps/python/acSLI-BACKUP/" + obj, "apps/python/acSLI/" + obj)
                    else:
                        shutil.copy("apps/python/acSLI-BACKUP/" + obj, "apps/python/acSLI/" + obj)

                shutil.rmtree("apps/python/acSLI-BACKUP")
                progInstance.setMsg(error)
            progInstance.dispButton()
        except Exception as e:
                    Log.error("On Update: %s" % e)