|
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 |