Beispiel #1
0
 def init_console(self):
     """Sets up connection to console."""
     try:
         win32console.AttachConsole(-1) # pythonw.exe from console
         atexit.register(lambda: ConsoleWriter.realwrite("\n"))
     except Exception:
         pass # Okay if fails: can be python.exe from console
     try:
         handle = win32console.GetStdHandle(
                               win32console.STD_OUTPUT_HANDLE)
         handle.WriteConsole("\n")
         ConsoleWriter.handle = handle
         ConsoleWriter.realwrite = handle.WriteConsole
     except Exception: # Fails if GUI program: make new console
         try: win32console.FreeConsole()
         except Exception: pass
         try:
             win32console.AllocConsole()
             handle = open("CONOUT$", "w")
             argv = [util.longpath(sys.argv[0])] + sys.argv[1:]
             handle.write(" ".join(argv) + "\n\n")
             handle.flush()
             ConsoleWriter.handle = handle
             ConsoleWriter.realwrite = handle.write
             sys.stdin = open("CONIN$", "r")
             atexit.register(self.on_exe_exit)
         except Exception:
             try: win32console.FreeConsole()
             except Exception: pass
             ConsoleWriter.realwrite = self.stream.write
     ConsoleWriter.is_loaded = True
Beispiel #2
0
 def write(self, text):
     """
     Prints text to console window. GUI application will need to attach to
     the calling console, or launch a new console if not available.
     """
     global window
     if not window and win32console:
         if not ConsoleWriter.is_loaded and not ConsoleWriter.handle:
             try:
                 win32console.AttachConsole(-1)  # pythonw.exe from console
                 atexit.register(lambda: ConsoleWriter.realwrite("\n"))
             except Exception:
                 pass  # Okay if fails: can be python.exe from console
             try:
                 handle = win32console.GetStdHandle(
                     win32console.STD_OUTPUT_HANDLE)
                 handle.WriteConsole("\n" + text)
                 ConsoleWriter.handle = handle
                 ConsoleWriter.realwrite = handle.WriteConsole
             except Exception:  # Fails if GUI program: make new console
                 try:
                     win32console.FreeConsole()
                 except Exception:
                     pass
                 try:
                     win32console.AllocConsole()
                     handle = open("CONOUT$", "w")
                     argv = [util.longpath(sys.argv[0])] + sys.argv[1:]
                     handle.write(" ".join(argv) + "\n\n" + text)
                     handle.flush()
                     ConsoleWriter.handle = handle
                     ConsoleWriter.realwrite = handle.write
                     sys.stdin = open("CONIN$", "r")
                     exitfunc = lambda s: (handle.write(s), handle.flush(),
                                           raw_input())
                     atexit.register(exitfunc, "\nPress ENTER to exit.")
                 except Exception:
                     try:
                         win32console.FreeConsole()
                     except Exception:
                         pass
                     ConsoleWriter.realwrite = self.stream.write
             ConsoleWriter.is_loaded = True
         else:
             try:
                 self.realwrite(text)
                 self.flush()
             except Exception:
                 self.stream.write(text)
     else:
         self.stream.write(text)
Beispiel #3
0
    def run(self):
        self.init_console_input()
        self.console_output.SetConsoleActiveScreenBuffer()
        try:
            # self.window_resize_listener.daemon = True
            self.window_resize_listener.start()
            self._event_loop()
        finally:
            self.window_resize_listener.stop()
            self.console_output.Close()
            self.console_input.SetConsoleMode(self.default_conin_mode)

        if self.free_console:
            win32console.FreeConsole()
Beispiel #4
0
 def __init__(self, parent_pid, lst_cmd_line):
     try:
         _ConsoleProcessBase.__init__(self, parent_pid)
         self.parent_pid = parent_pid
         self._start_parent_monitor()
         self.cmd_line = ' '.join(lst_cmd_line)
         self.echo = eval(os.environ.get('pyconsole_echo', 'True'))
         self.child_handle = None
         self.child_pid = None
         self.paused = False
         self.x_max = 0
         self.y_max = 0
         self.y_buffer_max = 0
         self.y_last = 0
         self.y_adjust = 0
         self.y_current = 0
         self.last_event_time = 0
         self._initialize()
         self._initialize_events()
         win32console.FreeConsole()
         # alloc 2000 lines ?
         win32console.AllocConsole()
         self.con_stdout = win32console.GetStdHandle(
             win32console.STD_OUTPUT_HANDLE)
         self.con_stdin = win32console.GetStdHandle(
             win32console.STD_INPUT_HANDLE)
         win32console.SetConsoleTitle('console process pid:%s ppid:%s' % (
             os.getpid(),
             parent_pid,
         ))
         # size = win32console.PyCOORDType (X=1000, Y=30)
         # self.con_stdout.SetConsoleScreenBufferSize (size)
         dct_info = self.con_stdout.GetConsoleScreenBufferInfo()
         self.y_buffer_max = dct_info['Size'].Y - 1
         self.con_window = win32console.GetConsoleWindow().handle
         self.set_console_event_hook()
         self._start_paused_monitor()
         self._child_create()
         self._start_remote_input()
         self.message_pump()
     except:
         logging.exception('fatal error')
Beispiel #5
0
    def SvcStop(self):
        self.running = False
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        try:
            pids = win32console.GetConsoleProcessList()
        except:
            pids = tuple()
        try:
            pid = self.process.pid

            if not pid in pids:
                win32console.AttachConsole(self.process.pid)

            win32console.GenerateConsoleCtrlEvent(win32console.CTRL_C_EVENT,
                                                  self.process.pid)

            if not pid in pids:
                win32console.FreeConsole()
        except:
            servicemanager.LogErrorMsg(traceback.format_exc())
Beispiel #6
0
        elif input_record.EventType==win32console.MOUSE_EVENT:
            if input_record.EventFlags==0:  ## 0 indicates a button event
                if input_record.ButtonState!=0:   ## exclude button releases
                    pos=input_record.MousePosition
                    # switch the foreground and background colors of the character that was clicked
                    attr=newbuffer.ReadConsoleOutputAttribute(Length=1, ReadCoord=pos)[0]
                    new_attr=attr
                    if attr&win32console.FOREGROUND_BLUE:
                        new_attr=(new_attr&~win32console.FOREGROUND_BLUE)|win32console.BACKGROUND_BLUE
                    if attr&win32console.FOREGROUND_RED:
                        new_attr=(new_attr&~win32console.FOREGROUND_RED)|win32console.BACKGROUND_RED
                    if attr&win32console.FOREGROUND_GREEN:
                        new_attr=(new_attr&~win32console.FOREGROUND_GREEN)|win32console.BACKGROUND_GREEN

                    if attr&win32console.BACKGROUND_BLUE:
                        new_attr=(new_attr&~win32console.BACKGROUND_BLUE)|win32console.FOREGROUND_BLUE
                    if attr&win32console.BACKGROUND_RED:
                        new_attr=(new_attr&~win32console.BACKGROUND_RED)|win32console.FOREGROUND_RED
                    if attr&win32console.BACKGROUND_GREEN:
                        new_attr=(new_attr&~win32console.BACKGROUND_GREEN)|win32console.FOREGROUND_GREEN
                    newbuffer.WriteConsoleOutputAttribute((new_attr,),pos)
        else:
            newbuffer.WriteConsole(str(input_record))
    time.sleep(0.1)

stdout.SetConsoleActiveScreenBuffer()
newbuffer.Close()
if free_console:
     win32console.FreeConsole()

	def closeCMD(self): WCS.FreeConsole()
	
	def displaySwitch(self, tipo=0):
Beispiel #8
0
def Main():
	default_checksum = '0x3fff8'
	default_romsize = 256

	parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
	subparsers = parser.add_subparsers(metavar='mode',dest='mode')

	parser_read = subparsers.add_parser('read', help='read ecu to binfile')
	parser_read.add_argument('binfile', help="name of output binfile")
	parser_read.add_argument('--rom-size', default=-1, type=int, help="size of ecu rom in kilobytes")
	parser_read.add_argument('--offset', help="read offset", type=Hex())

	parser_write = subparsers.add_parser('write', help='write ecu from binfile')
	parser_write.add_argument('binfile', help="name of input binfile")
	parser_write.add_argument('--rom-size', default=default_romsize, type=int, help="size of ecu rom in kilobytes")
	parser_write.add_argument('--fix-checksum', type=Hex(), help="hex location to fix binfile checksum")
	parser_write.add_argument('--offset', help="write offset", type=Hex())

	parser_recover = subparsers.add_parser('recover', help='recover ecu from binfile')
	parser_recover.add_argument('binfile', help="name of input binfile")
	parser_recover.add_argument('--rom-size', default=default_romsize, type=int, help="size of ecu rom in kilobytes")
	parser_recover.add_argument('--fix-checksum', type=Hex(), help="hex location to fix binfile checksum")
	parser_recover.add_argument('--offset', help="write offset", type=Hex())

	parser_checksum = subparsers.add_parser('checksum', help='validate binfile checksum')
	parser_checksum.add_argument('binfile', help="name of input binfile")
	parser_checksum.add_argument('--fix-checksum', type=Hex(), help="hex location to fix binfile checksum")

	parser_scan = subparsers.add_parser('scan', help='scan engine data')

	parser_upload = subparsers.add_parser('upload', help='upload unknown binfile')
	parser_upload.add_argument('binfile', help="name of input binfile")

	parser_faults = subparsers.add_parser('faults', help='read fault codes')
	parser_faults.add_argument('--clear', action='store_true', help="clear fault codes")

	parser_log = subparsers.add_parser('log', help='log engine data')
	parser_log.add_argument('--output', default=None, help="log output file")

	parser_recover = subparsers.add_parser('kline', help='kline tests')
	parser_recover.add_argument('--type', default=0, type=int, choices=[0,1,2,3], help="kline test type")

	db_grp = parser.add_argument_group('debugging options')
	db_grp.add_argument('--debug', action='store_true', help="turn on debugging output")
	db_grp.add_argument('--verbose', action='store_true', help="turn on verbose output")
	db_grp.add_argument('--noredirect', action='store_true', help="dont redirect stdout/stderr")
	db_grp.add_argument('--latency', type=int, help="latency timer")
	db_grp.add_argument('--baudrate', type=int, default=10400, help="baudrate")
	db_grp.add_argument('--skip-power-check', action='store_true', help="skip power check")
	args = parser.parse_args()

	known_bins = {}
	try:
		r = urllib.request.urlopen(binsdb_url)
		for l in r.readlines():
			md5, file = l.decode("ascii").split()
			known_bins[md5] = os.path.split(file)[-1]
	except:
		pass

	if args.mode == None:
		import wx
		from gui import HondaECU_GUI
		if getattr(sys, 'frozen', False) and not (args.debug or args.verbose):
			sys.__stdout__.close()
			sys.__stderr__.close()
			sys.__stdin__.close()
			os.close(0)
			os.close(1)
			os.close(2)
			import win32console as con
			con.FreeConsole()
		app = wx.App()
		gui = HondaECU_GUI(args, __VERSION__, known_bins)
		app.MainLoop()
	else:
		from cmd import HondaECU_CmdLine
		HondaECU_CmdLine(args, __VERSION__, known_bins)