def main(): # Logging logging.basicConfig(level=logging.DEBUG) logging.debug("Application starting...") # Read config config = ConfigParser() config.read("app.ini", encoding="UTF-8") mainConfig = MainConfig(config) logicConfig = LogicConfig(config) # Create components app = QApplication([]) engineCom = EngineCom() cabinCom = CabinCom() dashboard = Dashboard(mainConfig.initDriveMode) logic = Logic(logicConfig, mainConfig.initDriveMode) workerManager = WorkerManager( [engineCom.worker, cabinCom.worker, logic.worker]) tuning = Tuning(onExit=lambda: (workerManager.stopAll(), app.quit())) # Connect components engineCom.signals.outEngineTachometer.connect(logic.inEngineTachometer) engineCom.signals.outGearboxInTachometer.connect( logic.inGearboxInTachometer) engineCom.signals.outGearboxOutTachometer.connect( logic.inGearboxOutTachometer) engineCom.signals.outGearNumber.connect(logic.inGearNumber) engineCom.signals.outOilPressure.connect(logic.inOilPressure) engineCom.signals.outOilTemperature.connect(logic.inOilTemperature) engineCom.signals.outWatterTemperature.connect(logic.inWatterTemperature) cabinCom.signals.outRaceModeIsOn.connect(logic.inRaceModeIsOn) cabinCom.signals.outStopwatchButtonIsOn.connect( logic.inStopwatchButtonIsOn) cabinCom.signals.outOdometerButtonIsOn.connect(logic.inOdometerButtonIsOn) cabinCom.signals.outTurnLeftSignalIsOn.connect(logic.inTurnLeftSignalIsOn) cabinCom.signals.outTurnRightSignalIsOn.connect( logic.inTurnRightSignalIsOn) cabinCom.signals.outSteeringWhilePosition.connect( logic.inSteeringWhilePosition) cabinCom.signals.outAccelerometer.connect(logic.inAccelerometer) logic.signals.outMode.connect(dashboard.inMode) logic.signals.outTachometerEngine.connect(dashboard.inTachometerEngine) logic.signals.outTachometerGearbox.connect(dashboard.inTachometerGearbox) logic.signals.outTachometerGears.connect(dashboard.inTachometerGears) logic.signals.outAccelerometer.connect(dashboard.inAccelerometer) logic.signals.outSteeringWheelEncoder.connect( dashboard.inSteeringWheelEncoder) logic.signals.outTurnLeftIndicator.connect(dashboard.inTurnLeftIndicator) logic.signals.outTurnRightIndicator.connect(dashboard.inTurnRightIndicator) logic.signals.outSpeedometer.connect(dashboard.inSpeedometer) logic.signals.outGearNumber.connect(dashboard.inGearNumber) logic.signals.outOilWarningIndicator.connect( dashboard.inOilWarningIndicator) logic.signals.outWatterWarningIndicator.connect( dashboard.inWatterWarningIndicator) logic.signals.outSpeedometer.connect(dashboard.inSpeedometer) logic.signals.outStopwatch.connect(dashboard.inStopwatch) logic.signals.outOilManometer.connect(dashboard.inOilManometer) logic.signals.outOilThermometer.connect(dashboard.inOilThermometer) logic.signals.outWatterThermometer.connect(dashboard.inWatterThermometer) logic.signals.outOdometer.connect(dashboard.inOdometer) # Show UI if mainConfig.dashboardFullScreen: dashboard.showFullScreen() else: dashboard.show() if mainConfig.showTuningUi: tuning.show() # Run processing workerManager.startAll() # Start events loop sys.exit(app.exec_())