def _remove_crtdaemon(self): if self._check_crtdaemon_files: show_info('CLEANING CRT DAEMON...') os.system('sudo systemctl disable %s > /dev/null 2>&1' \ % SERVICE_FILE_NAME) os.system('sudo systemctl stop %s > /dev/null 2>&1' \ % SERVICE_FILE_NAME) os.system('sudo rm /etc/systemd/system/%s > /dev/null 2>&1' \ % SERVICE_FILE_NAME)
def _restart_es(self): if check_process("emulationstatio"): commandline = "touch /tmp/es-restart " commandline += "&& pkill -f \"/opt/retropie" commandline += "/supplementary/.*/emulationstation([^.]|$)\"" show_info("RESTARTING EMULATIONSTATION") os.system(commandline) time.sleep(2) sys.exit(1)
def configure(self): if self.m_sSystem == "daphne": self.m_lBinaryMasks = ["daphne"] self.m_lBinaryUntouchable = ["daphne"] FixDaphneControls(self.m_sSystem).fix() p_sSelectFreq = FrequencySelector(self.m_sFileName).get_frequency() self.m_sSystemFreq = self.m_sSystem if p_sSelectFreq == "50": self.m_sSystemFreq = self.m_sSystem + "50" show_info(self.m_lDaphneInfo)
def configure(self): if self.m_sSystem == "scummvm": self.m_lBinaryMasks = ["scummvm"] self._scummvm_change_gfxmode() if not "+Start " in self.m_sGameName: self._scummvm_change_aspect() elif self.m_sSystem == "pc": self.m_lBinaryMasks = ["dosbox"] super(abandonware, self).configure() show_info("Better with keyboard and mouse")
def _show_remap(self): m_lInfoRemap = [] for remap in self.m_lDaphneBTN: if int(remap[1]) != 0: try: option = remap[0] + " -> " + remap[3] m_lInfoRemap.append((option, "OK")) except: pass show_info(m_lInfoRemap, self.m_sJoyName + " [js0]", 6000)
def _install_crtdaemon(self): if self._check_crtdaemon_files: show_info('REINSTALLING CRT DAEMON...') os.system('sudo cp %s /etc/systemd/system/%s > /dev/null 2>&1' \ % (SERVICE_FILE, SERVICE_FILE_NAME)) os.system('sudo chmod +x /etc/systemd/system/%s > /dev/null 2>&1' \ % SERVICE_FILE_NAME) os.system('sudo systemctl enable %s > /dev/null 2>&1' \ % SERVICE_FILE_NAME) os.system('sudo systemctl start %s > /dev/null 2>&1' \ % SERVICE_FILE_NAME)
def _restart_ES(self): """ Restart ES if it's running """ sOutput = commands.getoutput('ps -A') if 'emulationstatio' in sOutput: show_info('RESTARTING EMULATIONSTATION') commandline = "touch /tmp/es-restart " commandline += "&& pkill -f \"/opt/retropie" commandline += "/supplementary/.*/emulationstation([^.]|$)\"" os.system(commandline) os.system('clear') time.sleep(1.5)
def direct_start(self): """ launch_core: run emulator without runcommand!""" if "+Start " in self.m_sGameName and self.m_bFastBoot: show_info("LAUNCHING %s CONFIGURATOR!" % self.m_sSystem.upper()) self.m_sCleanLaunch = "bash \"%s\"" % self.m_sFilePath self.m_sCleanLaunch += " >> %s 2>&1" % LOG_PATH commandline = self.m_sCleanLaunch if not os.path.exists("/tmp/retroarch"): os.system("mkdir /tmp/retroarch") self.m_oRunProcess = subprocess.Popen(commandline, shell=True, executable='/bin/bash') logging.info("INFO: Subprocess running: %s", commandline) else: super(abandonware, self).direct_start()
def _install_service(self): if self._check_service_files: show_info('STARTING SERVICE...') show_info('EMULATIONSTATION MAY REBOOT...') os.system('sudo cp %s /etc/systemd/system/%s > /dev/null 2>&1' % (SERVICE_FILE, SERVICE_FILE_NAME)) os.system('sudo chmod +x /etc/systemd/system/%s > /dev/null 2>&1' % SERVICE_FILE_NAME) os.system('sudo systemctl enable %s > /dev/null 2>&1' % SERVICE_FILE_NAME) os.system('sudo systemctl start %s > /dev/null 2>&1' % SERVICE_FILE_NAME)
def quit_manager(): clean() save_configuration() # save resolution change parameters if bChangeRes: oChangeRes = resolution_change(opt[0][2]) oChangeRes.change() elif bChangeMode: show_info("APPLYING MODE") oApplyMode = center() oApplyMode.launch("force") sys.exit(0)
def _frontend_rotation(self): show_info("WAIT, PREPARING ROTATION...") # remove first all trigger files self.__clean() p_sFileTail = "_" + str(self.RES_Y) + "p" p_sTheme = None p_sIntro = None if self.iToMode == 0: p_sFileTail += "_0" p_sIntro = INTRO_VID0_FILE touch_file(ROTMODES_YOKO_FILE) os.system('sudo rm %s >> /dev/null 2>&1' % ESSYSTEMS_TEMP_FILE) os.system('sudo mv %s %s >> /dev/null 2>&1' % (ESTHEMES_DIS_PATH, ES_THEMES_PRI_PATH)) for theme in THEME_LIST: VTHEME270_DST_PATH = os.path.join(ES_CFG_PATH, theme) os.system('sudo rm -R %s >> /dev/null 2>&1' % VTHEME270_DST_PATH) else: if not os.path.exists(ES_THEMES_SEC_PATH): os.system('mkdir %s >> /dev/null 2>&1' % ES_THEMES_SEC_PATH) os.system('cp %s %s >> /dev/null 2>&1' % (ESSYSTEMS_VERT_FILE, ESSYSTEMS_TEMP_FILE)) os.system('sudo mv %s %s >> /dev/null 2>&1' % (ES_THEMES_PRI_PATH, ESTHEMES_DIS_PATH)) for theme in THEME_LIST: VTHEME270_SRC_PATH = os.path.join(CRT_ES_RES_PATH, theme) os.system('cp -R %s %s >> /dev/null 2>&1' % (VTHEME270_SRC_PATH, ES_THEMES_SEC_PATH)) if self.iToMode == 90: p_sFileTail += "_1" p_sIntro = INTRO_VID1_FILE touch_file(ROTMODES_TATE1_FILE) elif self.iToMode == -90: p_sFileTail += "_3" p_sIntro = INTRO_VID3_FILE touch_file(ROTMODES_TATE3_FILE) modify_line(CRT_UTILITY_FILE, 'frontend_rotation', 'frontend_rotation %s' % self.iToMode) os.system('sudo cp %s %s >> /dev/null 2>&1' % (p_sIntro, INTRO_VID_DEF_FILE)) self._fix_aspect_ratio_images(p_sFileTail) self._fix_icons_image()
def _remove_service(self): if self._check_service_files and self.m_bServiceRun: show_info('STOPPING SERVICE...') os.system('sudo systemctl disable %s > /dev/null 2>&1' % SERVICE_FILE_NAME) os.system('sudo systemctl stop %s > /dev/null 2>&1' % SERVICE_FILE_NAME) os.system('sudo rm /etc/systemd/system/%s > /dev/null 2>&1' % SERVICE_FILE_NAME) os.system('sudo umount -l /home/pi/RetroPie/roms > /dev/null 2>&1') os.system('sudo umount -l /home/pi/RetroPie/BIOS > /dev/null 2>&1') os.system( 'sudo umount -l /opt/retropie/configs/all/emulationstation/gamelists > /dev/null 2>&1' ) self.__clean() # clean trigger files if self.m_bUSBMounted: self._restart_ES()
def get_frequency(self): # first i try to find an allowed freq self.m_sSelectFreq = ini_get(CRT_UTILITY_FILE, "freq_selector") if self.m_sSelectFreq in ALLOWED_FREQS: logging.info("Frequency selector always %sHz" % self.m_sSelectFreq) if self.m_sSelectFreq == "50": AutoSelection = "FORCED TO 50Hz / PAL" elif self.m_sSelectFreq == "60": AutoSelection = "FORCED TO 60Hz / NTSC" show_info(AutoSelection) elif self.m_sSelectFreq == "100": logging.info("Frequency selector mode auto") self.m_sSelectFreq = self.frecuency_auto() else: logging.info("Frequency selector mode manual") self.m_sSelectFreq = self.frequency_manual() return self.m_sSelectFreq
def frecuency_auto(self): bFreqFound = False sFrequency = self.m_oFreqDB.find(self.m_sCompactedName) if sFrequency: bFreqFound = True else: sFrequency = self.frequency_by_name() if not sFrequency: sFrequency = self.frequency_manual() else: bFreqFound = True if bFreqFound: if sFrequency == "50": AutoSelection = "AUTO: 50Hz / PAL" elif sFrequency == "60": AutoSelection = "AUTO: 60Hz / NTSC" show_info(AutoSelection) return sFrequency
def frecuency_auto(self): bFreqFound = False sFrequency = self.m_oFreqDB.find(self.m_sCompactedName) if sFrequency: bFreqFound = True else: sFrequency = self.frequency_by_name() if not sFrequency: sFrequency = self.frequency_manual() else: bFreqFound = True if bFreqFound: if sFrequency == "50": AutoSelection = "AUTO: 50Hz / PAL" elif sFrequency == "60": AutoSelection = "AUTO: 60Hz / NTSC" if ini_get(CRT_UTILITY_FILE, "autosel_info").lower() != "false": if not self.m_bFastBoot: show_info(AutoSelection) return sFrequency
def fix(self): if self._initialize_pygame() and self._remap_option_menu(): self.m_sCfgFile = os.path.join(JOYCONFIG_PATH, self.m_sJoyName + '.cfg') if os.path.exists(self.m_sCfgFile) and \ os.path.exists(self.DAPHNE_CFG_FILE): logging.info("INFO: Found configuration file for " \ "joystick 0: \"%s\"" % self.m_sCfgFile) logging.info("INFO: Found daphne configuration file: " \ "\"%s\"" % self.DAPHNE_CFG_FILE) self._get_joy_cfg() self._fix_daphne_cfg() self.__clean() self._show_remap() return True if not os.path.exists(self.m_sCfgFile): logging.info("WARNING: NOT found configuration file for " \ "joystick 0: \"%s\"" % self.m_sCfgFile) show_info("ES CONFIG FOR JOYSTICK NOT FOUND", "WARNING") else: logging.info("WARNING: NOT found daphne configuration file: " \ "\"%s\"" % self.DAPHNE_CFG_FILE) show_info("DAPHNE CONFIG FILE NOT FOUND", "WARNING") return False
def _restart(self): """ Restart system or reboot ES if needed """ commandline = "" if not self.m_bUploadCFG: logging.info('INFO: NO changes in /boot/config.txt; ' + \ 'no reboot needed') # check if ES must reboot if self.m_bRebootES and check_process("emulationstatio"): show_info('CLEANING KEYBOARD CONFIG', 2000) show_info('EMULATIONSTATION WILL RESTART NOW') commandline = "touch /tmp/es-restart " commandline += "&& pkill -f \"/opt/retropie" commandline += "/supplementary/.*/emulationstation([^.]|$)\"" os.system(commandline) time.sleep(1) else: commandline = 'sudo reboot now' show_info(self.m_lInfoReboot) os.system(commandline) sys.exit(0)
def hash_check(p_sFile): """ Compare saved hash of last es_system.cfg changes and compare with current. """ sHashLast = LAST_HASH sHashFile = md5_file(p_sFile) if sHashLast != sHashFile: return False return True def update_last_hash(p_sFile): """ Update last hash if any change """ sHashFile = md5_file(p_sFile) modify_line(CRT_ES_SYSTEMDB_FILE, "LAST_HASH", "LAST_HASH = \"%s\"" % sHashFile) """ main program """ # only analize or change file if hash is different if not hash_check(ES_SYSTEMS_PRI_FILE): check_xml_file(ES_SYSTEMS_PRI_FILE) check_miss_systems(ES_SYSTEMS_PRI_FILE) update_last_hash(ES_SYSTEMS_PRI_FILE) # force a reboot if any change is detected if bReboot: show_info(lSysInfo, lSysTit, 13000) os.system('reboot')
def runcommand_start(self): """ launch_core: run emulator!""" if "+Start " in self.m_sGameName: show_info("Launching %s Configurator!" % self.m_sSystem.upper()) super(abandonware, self).runcommand_start()
def run(self): show_info('PLEASE WAIT...') sChoice = menu_options(self.m_lOptAuto, self.m_sTitAuto) self._automount_act(sChoice) sys.exit(0)
def runcommand_start(self): """ launch_core: run emulator!""" if "+Start " in self.m_sGameName: show_info("LAUNCHING %s CONFIGURATOR!" % self.m_sSystem.upper()) super(abandonware, self).runcommand_start()
def eject_usb(self): show_info('EJECTING USB STORAGE...') show_info('RESTARTING EMULATIONSTATION') os.system('sudo umount %s > /dev/null 2>&1' % self.m_sMountedPath[0]) while not os.path.exists(TRG_UMNT_FILE): pass
def run(self): show_info('PLEASE WAIT...') self._check_if_first_boot() self._loop()
def _restart(self): """ Restart system """ show_info('SYSTEM WILL REBOOT NOW') os.system('sudo reboot now')
def change(self): show_info("WAIT, PREPARING RESOLUTION CHANGE") self._prepare_save_configuration() self._change_resolution() self._apply_resolution()
import os, sys, traceback from launcher_module.core_paths import TMP_LAUNCHER_PATH from launcher_module.utils import something_is_bad, plugin_list, plugin_load, show_info BASE_DIR = os.path.dirname(os.path.abspath(__file__)) MODULES_PATH = os.path.join(BASE_DIR, "launcher_module/plugins") EXCEPTION_LOG = os.path.join(TMP_LAUNCHER_PATH, "backtrace.log") if __name__ == '__main__': try: sSystem = sys.argv[2] bSystemFound = False for pl in plugin_list(MODULES_PATH): # print("Loading plugin " + pl["name"]) launcher = plugin_load(pl) if sSystem in launcher.get_system_list(): bSystemFound = True launcher(sys.argv[1], sys.argv[2], sys.argv[3]) if not bSystemFound: #something_is_bad("ERROR - System not supported!", sSystem) show_info("SYSTEM [%s] NOT SUPPORTED!" % sSystem, "", 7000) # TODO: kill emulator ? except (IndexError): show_info("NO GAME TO LAUNCH OR NO EMULATOR!", "", 7000) #something_is_bad("ERROR - No game to launch or no emulator!", "") except Exception as e: with open(EXCEPTION_LOG, 'a') as f: f.write(str(e)) f.write(traceback.format_exc())