diff -r 3ece9ba72aaf -r c6408f92da0a targets/typemapping.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/typemapping.py Thu Mar 31 19:09:49 2011 +0200 @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +#Copyright (C) 2011: Edouard TISSERANT and Laurent BESSARD +# +#See COPYING file for copyrights details. +# +#This library is free software; you can redistribute it and/or +#modify it under the terms of the GNU 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 +#General Public License for more details. +# +#You should have received a copy of the GNU General Public +#License along with this library; if not, write to the Free Software +#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from ctypes import * + +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) + +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" : _t(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" : _t(IEC_TIME, + lambda x:td(0, x.s, x.ns/1000), + lambda t,x:t(x.seconds, x.microseconds*1000)), + } + +SwapedEndianessTypeTranslator = { + #TODO + } + +# Construct debugger natively supported types +DebugTypesSize = dict([(key,sizeof(t)) for key,(t,p,u) in SameEndianessTypeTranslator.iteritems() if t is not None]) +