# HG changeset patch # User Edouard Tisserant # Date 1516023833 -3600 # Node ID 2b7e2db31d817e66397a094a44c184dd5ad49c54 # Parent e8cf68d69447840e7c90865fbbccd3cacf53f858 Clarify licensing, and packaging of runtime only files : - moved and split targets/typemapping.py into runtime/typemapping.py and runtime/loglevels.py - added runtime_files.list pointing to files necessary for runtime, and referring to runtime license diff -r e8cf68d69447 -r 2b7e2db31d81 ProjectController.py --- a/ProjectController.py Thu Jan 11 15:41:20 2018 +0100 +++ b/ProjectController.py Mon Jan 15 14:43:53 2018 +0100 @@ -59,7 +59,7 @@ from PLCControler import PLCControler from plcopen.structures import IEC_KEYWORDS import targets -from targets.typemapping import DebugTypesSize, UnpackDebugBuffer +from runtime.typemapping import DebugTypesSize, UnpackDebugBuffer from ConfigTreeNode import ConfigTreeNode, XSDSchemaErrorMessage base_folder = paths.AbsParentDir(__file__) diff -r e8cf68d69447 -r 2b7e2db31d81 controls/LogViewer.py --- a/controls/LogViewer.py Thu Jan 11 15:41:20 2018 +0100 +++ b/controls/LogViewer.py Mon Jan 15 14:43:53 2018 +0100 @@ -33,7 +33,7 @@ from controls.CustomToolTip import CustomToolTip, TOOLTIP_WAIT_PERIOD from editors.DebugViewer import DebugViewer, REFRESH_PERIOD -from targets.typemapping import LogLevelsCount, LogLevels +from runtime.loglevels import LogLevelsCount, LogLevels from util.BitmapLibrary import GetBitmap diff -r e8cf68d69447 -r 2b7e2db31d81 py_ext/PythonFileCTNMixin.py --- a/py_ext/PythonFileCTNMixin.py Thu Jan 11 15:41:20 2018 +0100 +++ b/py_ext/PythonFileCTNMixin.py Mon Jan 15 14:43:53 2018 +0100 @@ -171,7 +171,7 @@ ## ## Code for PLC global variable access -from targets.typemapping import TypeTranslator +from runtime.typemapping import TypeTranslator import ctypes _%(pyextname)sGlobalsDesc = [] __ext_name__ = "%(pyextname)s" diff -r e8cf68d69447 -r 2b7e2db31d81 runtime/PLCObject.py --- a/runtime/PLCObject.py Thu Jan 11 15:41:20 2018 +0100 +++ b/runtime/PLCObject.py Mon Jan 15 14:43:53 2018 +0100 @@ -32,7 +32,8 @@ import Pyro.core as pyro -from targets.typemapping import LogLevelsDefault, LogLevelsCount, TypeTranslator +from runtime.typemapping import TypeTranslator +from runtime.loglevels import LogLevelsDefault, LogLevelsCount if os.name in ("nt", "ce"): diff -r e8cf68d69447 -r 2b7e2db31d81 runtime/loglevels.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/loglevels.py Mon Jan 15 14:43:53 2018 +0100 @@ -0,0 +1,9 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# See COPYING.Runtime file for copyrights details. + +LogLevels = ["CRITICAL", "WARNING", "INFO", "DEBUG"] +LogLevelsCount = len(LogLevels) +LogLevelsDict = dict(zip(LogLevels, range(LogLevelsCount))) +LogLevelsDefault = LogLevelsDict["DEBUG"] diff -r e8cf68d69447 -r 2b7e2db31d81 runtime/typemapping.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/typemapping.py Mon Jan 15 14:43:53 2018 +0100 @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# See COPYING.Runtime file for copyrights details. +# + +from __future__ import absolute_import +import ctypes +from ctypes import * +from datetime import timedelta as td + +ctypes.pythonapi.PyString_AsString.argtypes = (ctypes.c_void_p,) +ctypes.pythonapi.PyString_AsString.restype = ctypes.POINTER(ctypes.c_char) + + +class IEC_STRING(Structure): + """ + Must be changed according to changes in iec_types.h + """ + _fields_ = [("len", c_uint8), + ("body", c_char * 126)] + + +class IEC_TIME(Structure): + """ + Must be changed according to changes in iec_types.h + """ + _fields_ = [("s", c_long), # tv_sec + ("ns", c_long)] # tv_nsec + + +def _t(t, u=lambda x: x.value, p=lambda t, x: t(x)): + return (t, u, p) + + +def _ttime(): + return (IEC_TIME, + lambda x: td(0, x.s, x.ns/1000), + lambda t, x: t(x.days * 24 * 3600 + x.seconds, x.microseconds*1000)) + + +SameEndianessTypeTranslator = { + "BOOL": _t(c_uint8, lambda x: x.value != 0), + "STEP": _t(c_uint8), + "TRANSITION": _t(c_uint8), + "ACTION": _t(c_uint8), + "SINT": _t(c_int8), + "USINT": _t(c_uint8), + "BYTE": _t(c_uint8), + "STRING": (IEC_STRING, + lambda x: x.body[:x.len], + lambda t, x: t(len(x), x)), + "INT": _t(c_int16), + "UINT": _t(c_uint16), + "WORD": _t(c_uint16), + "DINT": _t(c_int32), + "UDINT": _t(c_uint32), + "DWORD": _t(c_uint32), + "LINT": _t(c_int64), + "ULINT": _t(c_uint64), + "LWORD": _t(c_uint64), + "REAL": _t(c_float), + "LREAL": _t(c_double), + "TIME": _ttime(), + "TOD": _ttime(), + "DATE": _ttime(), + "DT": _ttime(), + } + +SwapedEndianessTypeTranslator = { + # TODO + } + +TypeTranslator = SameEndianessTypeTranslator + +# Construct debugger natively supported types +DebugTypesSize = dict([(key, sizeof(t)) for key, (t, p, u) in SameEndianessTypeTranslator.iteritems() if t is not None]) + + +def UnpackDebugBuffer(buff, indexes): + res = [] + buffoffset = 0 + buffsize = len(buff) + buffptr = cast(ctypes.pythonapi.PyString_AsString(id(buff)), c_void_p).value + for iectype in indexes: + c_type, unpack_func, _pack_func = \ + TypeTranslator.get(iectype, (None, None, None)) + if c_type is not None and buffoffset < buffsize: + cursor = c_void_p(buffptr + buffoffset) + value = unpack_func(cast(cursor, + POINTER(c_type)).contents) + buffoffset += sizeof(c_type) if iectype != "STRING" else len(value)+1 + res.append(value) + else: + break + if buffoffset and buffoffset == buffsize: + return res + return None diff -r e8cf68d69447 -r 2b7e2db31d81 runtime_files.list --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime_files.list Mon Jan 15 14:43:53 2018 +0100 @@ -0,0 +1,17 @@ +# those files are used in runtime +# licensed according to LGPL, see COPYING.runtime + +images/icostop24.png +images/icoplay24.png +images/brz.png +util/__init__.py +util/paths.py +runtime/WampClient.py +runtime/PLCObject.py +runtime/NevowServer.py +runtime/webinterface.js +runtime/__init__.py +runtime/ServicePublisher.py +runtime/typemapping.py +runtime/loglevels.py +Beremiz_service.py diff -r e8cf68d69447 -r 2b7e2db31d81 targets/typemapping.py --- a/targets/typemapping.py Thu Jan 11 15:41:20 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# This file is part of Beremiz, runtime and an Integrated Development Environment for -# programming IEC 61131-3 automates supporting plcopen standard and CanFestival. -# -# Copyright (C) 2011: Edouard TISSERANT and Laurent BESSARD -# -# See COPYING.Runtime file for copyrights details. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - -from __future__ import absolute_import -import ctypes -from ctypes import * -from datetime import timedelta as td - -ctypes.pythonapi.PyString_AsString.argtypes = (ctypes.c_void_p,) -ctypes.pythonapi.PyString_AsString.restype = ctypes.POINTER(ctypes.c_char) - - -class IEC_STRING(Structure): - """ - Must be changed according to changes in iec_types.h - """ - _fields_ = [("len", c_uint8), - ("body", c_char * 126)] - - -class IEC_TIME(Structure): - """ - Must be changed according to changes in iec_types.h - """ - _fields_ = [("s", c_long), # tv_sec - ("ns", c_long)] # tv_nsec - - -def _t(t, u=lambda x: x.value, p=lambda t, x: t(x)): - return (t, u, p) - - -def _ttime(): - return (IEC_TIME, - lambda x: td(0, x.s, x.ns/1000), - lambda t, x: t(x.days * 24 * 3600 + x.seconds, x.microseconds*1000)) - - -SameEndianessTypeTranslator = { - "BOOL": _t(c_uint8, lambda x: x.value != 0), - "STEP": _t(c_uint8), - "TRANSITION": _t(c_uint8), - "ACTION": _t(c_uint8), - "SINT": _t(c_int8), - "USINT": _t(c_uint8), - "BYTE": _t(c_uint8), - "STRING": (IEC_STRING, - lambda x: x.body[:x.len], - lambda t, x: t(len(x), x)), - "INT": _t(c_int16), - "UINT": _t(c_uint16), - "WORD": _t(c_uint16), - "DINT": _t(c_int32), - "UDINT": _t(c_uint32), - "DWORD": _t(c_uint32), - "LINT": _t(c_int64), - "ULINT": _t(c_uint64), - "LWORD": _t(c_uint64), - "REAL": _t(c_float), - "LREAL": _t(c_double), - "TIME": _ttime(), - "TOD": _ttime(), - "DATE": _ttime(), - "DT": _ttime(), - } - -SwapedEndianessTypeTranslator = { - # TODO - } - -TypeTranslator = SameEndianessTypeTranslator - -# Construct debugger natively supported types -DebugTypesSize = dict([(key, sizeof(t)) for key, (t, p, u) in SameEndianessTypeTranslator.iteritems() if t is not None]) - - -def UnpackDebugBuffer(buff, indexes): - res = [] - buffoffset = 0 - buffsize = len(buff) - buffptr = cast(ctypes.pythonapi.PyString_AsString(id(buff)), c_void_p).value - for iectype in indexes: - c_type, unpack_func, _pack_func = \ - TypeTranslator.get(iectype, (None, None, None)) - if c_type is not None and buffoffset < buffsize: - cursor = c_void_p(buffptr + buffoffset) - value = unpack_func(cast(cursor, - POINTER(c_type)).contents) - buffoffset += sizeof(c_type) if iectype != "STRING" else len(value)+1 - res.append(value) - else: - break - if buffoffset and buffoffset == buffsize: - return res - return None - - -LogLevels = ["CRITICAL", "WARNING", "INFO", "DEBUG"] -LogLevelsCount = len(LogLevels) -LogLevelsDict = dict(zip(LogLevels, range(LogLevelsCount))) -LogLevelsDefault = LogLevelsDict["DEBUG"]