targets/typemapping.py
changeset 592 c6408f92da0a
child 593 726f58cf97e3
equal deleted inserted replaced
591:3ece9ba72aaf 592:c6408f92da0a
       
     1 #!/usr/bin/env python
       
     2 # -*- coding: utf-8 -*-
       
     3 #
       
     4 #Copyright (C) 2011: Edouard TISSERANT and Laurent BESSARD
       
     5 #
       
     6 #See COPYING file for copyrights details.
       
     7 #
       
     8 #This library is free software; you can redistribute it and/or
       
     9 #modify it under the terms of the GNU General Public
       
    10 #License as published by the Free Software Foundation; either
       
    11 #version 2.1 of the License, or (at your option) any later version.
       
    12 #
       
    13 #This library is distributed in the hope that it will be useful,
       
    14 #but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    15 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    16 #General Public License for more details.
       
    17 #
       
    18 #You should have received a copy of the GNU General Public
       
    19 #License along with this library; if not, write to the Free Software
       
    20 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
       
    21 
       
    22 from ctypes import *
       
    23 
       
    24 class IEC_STRING(Structure):
       
    25     """
       
    26     Must be changed according to changes in iec_types.h
       
    27     """
       
    28     _fields_ = [("len", c_uint8),
       
    29                 ("body", c_char * 126)] 
       
    30 
       
    31 class IEC_TIME(Structure):
       
    32     """
       
    33     Must be changed according to changes in iec_types.h
       
    34     """
       
    35     _fields_ = [("s", c_long), #tv_sec
       
    36                 ("ns", c_long)] #tv_nsec
       
    37 
       
    38 def _t(t, u=lambda x:x.value, p=lambda t,x:t(x)): return  (t, u, p)
       
    39 
       
    40 SameEndianessTypeTranslator = {
       
    41     "BOOL" :       _t(c_uint8,  lambda x:x.value!=0),
       
    42     "STEP" :       _t(c_uint8),
       
    43     "TRANSITION" : _t(c_uint8),
       
    44     "ACTION" :     _t(c_uint8),
       
    45     "SINT" :       _t(c_int8),
       
    46     "USINT" :      _t(c_uint8),
       
    47     "BYTE" :       _t(c_uint8),
       
    48     "STRING" :     _t(IEC_STRING, 
       
    49                       lambda x:x.body[:x.len], 
       
    50                       lambda t,x:t(len(x),x)),
       
    51     "INT" :        _t(c_int16),
       
    52     "UINT" :       _t(c_uint16),
       
    53     "WORD" :       _t(c_uint16),
       
    54     "DINT" :       _t(c_int32),
       
    55     "UDINT" :      _t(c_uint32),
       
    56     "DWORD" :      _t(c_uint32),
       
    57     "LINT" :       _t(c_int64),
       
    58     "ULINT" :      _t(c_uint64),
       
    59     "LWORD" :      _t(c_uint64),
       
    60     "REAL" :       _t(c_float),
       
    61     "LREAL" :      _t(c_double),
       
    62     "TIME" :       _t(IEC_TIME, 
       
    63                       lambda x:td(0, x.s, x.ns/1000), 
       
    64                       lambda t,x:t(x.seconds, x.microseconds*1000)),
       
    65     } 
       
    66 
       
    67 SwapedEndianessTypeTranslator = {
       
    68     #TODO
       
    69     } 
       
    70 
       
    71 # Construct debugger natively supported types
       
    72 DebugTypesSize =  dict([(key,sizeof(t)) for key,(t,p,u) in SameEndianessTypeTranslator.iteritems() if t is not None])
       
    73