targets/typemapping.py
author Sergey Surkov <surkovsv93@gmail.com>
Wed, 14 Dec 2016 13:14:45 +0300
changeset 1606 99a02c6161b6
parent 1571 486f94a8032c
child 1667 cefc9219bb48
permissions -rw-r--r--
add check of new project path in Save As
add dialog window if selected directory is the current directory project, or already contains another project
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
     1
#!/usr/bin/env python
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
1571
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
     3
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
     4
# This file is part of Beremiz, a Integrated Development Environment for
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
     5
# programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
     6
#
1571
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
     7
# Copyright (C) 2011: Edouard TISSERANT and Laurent BESSARD
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
     8
#
1571
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
     9
# See COPYING file for copyrights details.
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    10
#
1571
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
    11
# This program is free software; you can redistribute it and/or
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
    12
# modify it under the terms of the GNU General Public License
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
    13
# as published by the Free Software Foundation; either version 2
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
    14
# of the License, or (at your option) any later version.
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    15
#
1571
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
    16
# This program is distributed in the hope that it will be useful,
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
    17
# but WITHOUT ANY WARRANTY; without even the implied warranty of
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
    18
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
    19
# GNU General Public License for more details.
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    20
#
1571
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
    21
# You should have received a copy of the GNU General Public License
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
    22
# along with this program; if not, write to the Free Software
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1433
diff changeset
    23
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    24
1433
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    25
import ctypes
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    26
ctypes.pythonapi.PyString_AsString.argtypes = (ctypes.c_void_p,)
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    27
ctypes.pythonapi.PyString_AsString.restype = ctypes.POINTER(ctypes.c_char)
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    28
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    29
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    30
from ctypes import *
593
726f58cf97e3 fixed typo in latest debugger changes
edouard
parents: 592
diff changeset
    31
from datetime import timedelta as td
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    32
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    33
class IEC_STRING(Structure):
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    34
    """
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    35
    Must be changed according to changes in iec_types.h
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    36
    """
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    37
    _fields_ = [("len", c_uint8),
1433
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    38
                ("body", c_char * 126)]
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    39
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    40
class IEC_TIME(Structure):
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    41
    """
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    42
    Must be changed according to changes in iec_types.h
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    43
    """
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    44
    _fields_ = [("s", c_long), #tv_sec
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    45
                ("ns", c_long)] #tv_nsec
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    46
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    47
def _t(t, u=lambda x:x.value, p=lambda t,x:t(x)): return  (t, u, p)
1433
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    48
def _ttime(): return (IEC_TIME,
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    49
                      lambda x:td(0, x.s, x.ns/1000),
595
6348c0110e0f Added support for handling ANY_DATE types in debugger type translation
Edouard Tisserant
parents: 594
diff changeset
    50
                      lambda t,x:t(x.days * 24 * 3600 + x.seconds, x.microseconds*1000))
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    51
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    52
SameEndianessTypeTranslator = {
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    53
    "BOOL" :       _t(c_uint8,  lambda x:x.value!=0),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    54
    "STEP" :       _t(c_uint8),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    55
    "TRANSITION" : _t(c_uint8),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    56
    "ACTION" :     _t(c_uint8),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    57
    "SINT" :       _t(c_int8),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    58
    "USINT" :      _t(c_uint8),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    59
    "BYTE" :       _t(c_uint8),
1433
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    60
    "STRING" :     (IEC_STRING,
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    61
                      lambda x:x.body[:x.len],
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    62
                      lambda t,x:t(len(x),x)),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    63
    "INT" :        _t(c_int16),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    64
    "UINT" :       _t(c_uint16),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    65
    "WORD" :       _t(c_uint16),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    66
    "DINT" :       _t(c_int32),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    67
    "UDINT" :      _t(c_uint32),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    68
    "DWORD" :      _t(c_uint32),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    69
    "LINT" :       _t(c_int64),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    70
    "ULINT" :      _t(c_uint64),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    71
    "LWORD" :      _t(c_uint64),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    72
    "REAL" :       _t(c_float),
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    73
    "LREAL" :      _t(c_double),
595
6348c0110e0f Added support for handling ANY_DATE types in debugger type translation
Edouard Tisserant
parents: 594
diff changeset
    74
    "TIME" :       _ttime(),
6348c0110e0f Added support for handling ANY_DATE types in debugger type translation
Edouard Tisserant
parents: 594
diff changeset
    75
    "TOD" :        _ttime(),
6348c0110e0f Added support for handling ANY_DATE types in debugger type translation
Edouard Tisserant
parents: 594
diff changeset
    76
    "DATE" :       _ttime(),
6348c0110e0f Added support for handling ANY_DATE types in debugger type translation
Edouard Tisserant
parents: 594
diff changeset
    77
    "DT" :         _ttime(),
1433
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    78
    }
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    79
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    80
SwapedEndianessTypeTranslator = {
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    81
    #TODO
1433
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    82
    }
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    83
1075
8078c01ae464 Now Debug Buffer Unpacking is a separate function, declared in typemapping.py
Edouard Tisserant
parents: 972
diff changeset
    84
TypeTranslator=SameEndianessTypeTranslator
8078c01ae464 Now Debug Buffer Unpacking is a separate function, declared in typemapping.py
Edouard Tisserant
parents: 972
diff changeset
    85
592
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    86
# Construct debugger natively supported types
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    87
DebugTypesSize =  dict([(key,sizeof(t)) for key,(t,p,u) in SameEndianessTypeTranslator.iteritems() if t is not None])
c6408f92da0a Initial TIME support in debugger
Edouard Tisserant
parents:
diff changeset
    88
1433
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    89
def UnpackDebugBuffer(buff, indexes):
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    90
    res =  []
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    91
    buffoffset = 0
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    92
    buffsize = len(buff)
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    93
    buffptr = cast(ctypes.pythonapi.PyString_AsString(id(buff)),c_void_p).value
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    94
    for iectype in indexes:
1075
8078c01ae464 Now Debug Buffer Unpacking is a separate function, declared in typemapping.py
Edouard Tisserant
parents: 972
diff changeset
    95
        c_type,unpack_func, pack_func = \
8078c01ae464 Now Debug Buffer Unpacking is a separate function, declared in typemapping.py
Edouard Tisserant
parents: 972
diff changeset
    96
            TypeTranslator.get(iectype,
8078c01ae464 Now Debug Buffer Unpacking is a separate function, declared in typemapping.py
Edouard Tisserant
parents: 972
diff changeset
    97
                                    (None,None,None))
1433
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    98
        if c_type is not None and buffoffset < buffsize:
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
    99
            cursor = c_void_p( buffptr + buffoffset)
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
   100
            value = unpack_func( cast(cursor,
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
   101
                         POINTER(c_type)).contents)
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
   102
            buffoffset += sizeof(c_type) if iectype != "STRING" else len(value)+1
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
   103
            res.append(value)
1075
8078c01ae464 Now Debug Buffer Unpacking is a separate function, declared in typemapping.py
Edouard Tisserant
parents: 972
diff changeset
   104
        else:
8078c01ae464 Now Debug Buffer Unpacking is a separate function, declared in typemapping.py
Edouard Tisserant
parents: 972
diff changeset
   105
            break
1433
4a45f6642523 Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents: 1075
diff changeset
   106
    if buffoffset and buffoffset == buffsize:
1075
8078c01ae464 Now Debug Buffer Unpacking is a separate function, declared in typemapping.py
Edouard Tisserant
parents: 972
diff changeset
   107
        return res
8078c01ae464 Now Debug Buffer Unpacking is a separate function, declared in typemapping.py
Edouard Tisserant
parents: 972
diff changeset
   108
    return None
8078c01ae464 Now Debug Buffer Unpacking is a separate function, declared in typemapping.py
Edouard Tisserant
parents: 972
diff changeset
   109
8078c01ae464 Now Debug Buffer Unpacking is a separate function, declared in typemapping.py
Edouard Tisserant
parents: 972
diff changeset
   110
8078c01ae464 Now Debug Buffer Unpacking is a separate function, declared in typemapping.py
Edouard Tisserant
parents: 972
diff changeset
   111
917
401e44bae7c0 Now logging have 4 levels
Edouard Tisserant
parents: 595
diff changeset
   112
LogLevels = ["CRITICAL","WARNING","INFO","DEBUG"]
401e44bae7c0 Now logging have 4 levels
Edouard Tisserant
parents: 595
diff changeset
   113
LogLevelsCount = len(LogLevels)
401e44bae7c0 Now logging have 4 levels
Edouard Tisserant
parents: 595
diff changeset
   114
LogLevelsDict = dict(zip(LogLevels,range(LogLevelsCount)))
401e44bae7c0 Now logging have 4 levels
Edouard Tisserant
parents: 595
diff changeset
   115
LogLevelsDefault = LogLevelsDict["DEBUG"]
972
659198075ce4 Redirect PyEval exceptions to logging
Edouard Tisserant
parents: 917
diff changeset
   116