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
#
# --------- Libraries Extension ------------
#
import features
from POULibrary import SimplePOULibraryFactory
from LPCArch import arch, PLC_MC9_modules, PLC_GOT_modules
# _lpcmanager_path, arch, etc are defined here because
# globals() of LPCManager.py are passed to extentions
features.libraries=[('Native', 'NativeLib.NativeLibrary', True)]
def _poulibpath(name):
return os.path.join(_lpcmanager_path, 'Pous', "pous"+name+".xml")
if arch in PLC_MC9_modules:
features.libraries += [('Python', 'py_ext.PythonLibrary', True),
('RTC', SimplePOULibraryFactory(_poulibpath("RTC")), True)]
elif arch in PLC_GOT_modules:
features.libraries += [('Python', 'py_ext.PythonLibrary', True),
('RTC', SimplePOULibraryFactory(_poulibpath("RTC")), True),
('GOT', SimplePOULibraryFactory(_poulibpath("GOT")), True)]
else:
features.libraries += [('LPC', SimplePOULibraryFactory(_poulibpath("LPC")), True)]
#
# --------- Configuration Tree Nodes (CTN) catalog extension ------------
#
_oldcatalog = features.catalog
catalog_index = dict(zip(zip(*_oldcatalog)[0],_oldcatalog))
wanted_beremiz_features = [catalog_index[feature]
for feature in ["c_ext", "py_ext", "wxglade_hmi"]]
features.catalog = wanted_beremiz_features + [
('bacnet', _('Bacnet support'), _('Map located variables over Bacnet'), 'LPCBACnet.RootClass'),
('modbus', _('Modbus'), _('Map located variables over Modbus'), 'LPCModbus.RootClass'),
('LPCBus', _('LPC bus'), _('Support for Smarteh modules'), 'LPCBus.LPCBus'),
('CanOpen', _('CANOpen'), _('Support for CANopen'), 'LPCCanFestival.LPCCanOpen')]
#
# --------- Connectors Extension ------------
#
import connectors
from functools import partial
# On demand monkey patching
def CustomWAMPFactory(*args, **kwargs):
from connectors import WAMP
from WampAuthentication import WampSession
return WAMP._WAMP_connector_factory(WampSession, *args, **kwargs)
connectors.connectors["WAMP"] = lambda:CustomWAMPFactory
# TODO
# from LPCconnector import LPC_connector_factory
# connectors.connectors["LPC"] = lambda: LPC_connector_factory
#
# --------- Targets/Toolchains Extension ------------
#
import targets
from LPCtarget import LPC_target
# targets.targets["LPC"] = {"xsd": os.path.join(_lpcmanager_path, "LPCtarget", "XSD"),
# "class": lambda: LPC_target,
# "code": {os.path.join(_lpcmanager_path, "LPCtarget", "plc_LPC_main.c")}}
# targets.toolchains["makefile"] = os.path.join(_lpcmanager_path, "LPCtarget", "XSD_toolchain_makefile")
# for arch in SOM28_modules:
targets.targets = {arch : {
"xsd": os.path.join(_lpcmanager_path, "SOM28target", "XSD"),
"class": targets.targets["Xenomai"]["class"],
"code": {"plc_SOM28_main.c": targets.targets["Xenomai"]["code"]["plc_Xenomai_main.c"],
"plc_SOM28_main_retain.c": os.path.join(_lpcmanager_path,
"SOM28target",
"plc_SOM28_main_retain.c")}}}
#
# --------- Custom columns function Extension ------------
#
from WampOptionsEditor import WampOptionsCellEditor
from py_ext.PythonEditor import PythonEditor
from wxglade_hmi import WxGladeHMI
from WxGladeEditor import WxGladeEditor
WxGladeHMI.EditorType = WxGladeEditor
PythonEditor.COLUMNS_TYPE = {'Options': WampOptionsCellEditor}