lpcmanager

LPCCommand : switch to wx.Timer instead of regular python timer for the rapidfire protection. With regular python timers, some refresh order could pile eventloop when interacting with the GUI while doing initial loading of signals.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import absolute_import
import sys
import os
import getopt
import __builtin__
import time
from threading import Thread
# On Windows install schema, we compute path to beremiz
# relative to path to python folder (sys.path[0] in that case)
# note: beware that wx import messes up sys.path[0]
_dist_folder = os.path.split(sys.path[0])[0]
_beremiz_folder = os.path.join(_dist_folder, "beremiz")
# Then we add it to sys.path, to make "import Beremiz" possible
sys.path.append(_beremiz_folder)
import wx
from util.BitmapLibrary import AddBitmapFolder
# Path of directory containing current python file
_lpcmanager_path = os.path.split(__file__)[0]
from LPCArch import SetLPCArch
from Beremiz import BeremizIDELauncher
class LPCManagerLauncher(BeremizIDELauncher):
def __init__(self):
BeremizIDELauncher.__init__(self)
self.arch = None
self.port = None
self.extensions = [os.path.join(_lpcmanager_path, "LPCExtension.py")]
self.modules.extend([
"LPCBeremiz",
"StdoutPseudoFile",
"LPCProjectController",
"LPCCommand"])
def Usage(self):
print("\nUsage of LPCManager.py :")
print("\n %s Projectpath Buildpath port arch\n" % sys.argv[0])
def ProcessCommandLineArgs(self):
# Command line arguments parsing
try:
opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
except getopt.GetoptError:
# print help information and exit:
self.Usage()
sys.exit(2)
# asking for help causes exit
for o, a in opts:
if o in ("-h", "--help"):
self.Usage()
sys.exit()
if len(args) != 4 :
self.Usage()
sys.exit()
else:
self.projectOpen = args[0]
self.buildpath = args[1]
try:
self.port = int(args[2])
except:
self.Usage()
sys.exit()
self.arch = args[3]
SetLPCArch(self.arch)
# overload with exacltly same code, but this is intended.
# we want extensions to use globals of this module, not Beremiz.py
def globals(self):
return globals()
def CreateUI(self):
CMDpipe = self.StdoutPseudoFile.StdoutPseudoFile(self.port, self.debug)
if self.projectOpen is not None:
self.projectOpen = self.BeremizIDE.DecodeFileSystemPath(self.projectOpen, False)
CTR = self.LPCProjectController.LPCProjectController(
None, CMDpipe, self.buildpath, self.arch)
if self.projectOpen is not None and os.path.isdir(self.projectOpen):
result = CTR.LoadProject(self.projectOpen)
if result:
CMDpipe.write("Error: Invalid project directory", result)
else:
CMDpipe.write("Error: No such file or directory")
lpcberemiz_cmd = self.LPCCommand.LPCCommand(self, CTR, CMDpipe)
cmd_thread = Thread(target=lpcberemiz_cmd.cmdloop)
cmd_thread.start()
# TODO: join() when exiting
self.frame = self.LPCBeremiz.LPCBeremiz(None, ctr=CTR, pipe=CMDpipe)
def CreateApplication(self):
# Create app usual way
BeremizIDELauncher.CreateApplication(self)
# Add LPCmanager's image folder to searched ones.
AddBitmapFolder(os.path.join(_lpcmanager_path, "images"))
if __name__ == '__main__':
lpcmanager = LPCManagerLauncher()
lpcmanager.Start()