def run(self, mode=ROUTER_MODE_INTERACTIVE):
        if self.loop and self.routerMode == ROUTER_MODE_DISABLED:
            self.shell.updateInteractive(self.getInteractiveFromMode(mode))
            self.startPlacServer(mode)
            return
        self.routerMode = mode
        time.sleep(0.1)  # Truncated logs
        self.loggingApdu.info("============")
        self.loggingApdu.info("== simLAB ==")
        self.loggingApdu.info("== ver %s==" %_version_)
        self.loggingApdu.info("============")
        self.command(CMD_SET_ATR, self.getATR())
        self.setPowerSkip(skip=1)
        self.powerHalt()
        self.loop = MainLoopThread(self)
        self.loop.setDaemon(True)
        # Start handling incoming phone C-APDUs.
        self.loop.start()
        # Default card control interface.
        if self.simType == types.TYPE_SIM:
            self.simCtrl = sim_ctrl_2g.SimCtrl(self)
        else:
            self.simCtrl = sim_ctrl_3g.SimCtrl(self)
        self.simCtrl.init()
        interactive = self.getInteractiveFromMode(mode)
        # Plac telnet server works without interactive mode
        self.shell = sim_shell.SimShell(self.simCtrl, interactive)
        self.startPlacServer(mode)