35 """ |
35 """ |
36 _fields_ = [("s", c_long), #tv_sec |
36 _fields_ = [("s", c_long), #tv_sec |
37 ("ns", c_long)] #tv_nsec |
37 ("ns", c_long)] #tv_nsec |
38 |
38 |
39 def _t(t, u=lambda x:x.value, p=lambda t,x:t(x)): return (t, u, p) |
39 def _t(t, u=lambda x:x.value, p=lambda t,x:t(x)): return (t, u, p) |
|
40 def _ttime(): return (IEC_TIME, |
|
41 lambda x:td(0, x.s, x.ns/1000), |
|
42 lambda t,x:t(x.days * 24 * 3600 + x.seconds, x.microseconds*1000)) |
40 |
43 |
41 SameEndianessTypeTranslator = { |
44 SameEndianessTypeTranslator = { |
42 "BOOL" : _t(c_uint8, lambda x:x.value!=0), |
45 "BOOL" : _t(c_uint8, lambda x:x.value!=0), |
43 "STEP" : _t(c_uint8), |
46 "STEP" : _t(c_uint8), |
44 "TRANSITION" : _t(c_uint8), |
47 "TRANSITION" : _t(c_uint8), |
45 "ACTION" : _t(c_uint8), |
48 "ACTION" : _t(c_uint8), |
46 "SINT" : _t(c_int8), |
49 "SINT" : _t(c_int8), |
47 "USINT" : _t(c_uint8), |
50 "USINT" : _t(c_uint8), |
48 "BYTE" : _t(c_uint8), |
51 "BYTE" : _t(c_uint8), |
49 "STRING" : _t(IEC_STRING, |
52 "STRING" : (IEC_STRING, |
50 lambda x:x.body[:x.len], |
53 lambda x:x.body[:x.len], |
51 lambda t,x:t(len(x),x)), |
54 lambda t,x:t(len(x),x)), |
52 "INT" : _t(c_int16), |
55 "INT" : _t(c_int16), |
53 "UINT" : _t(c_uint16), |
56 "UINT" : _t(c_uint16), |
54 "WORD" : _t(c_uint16), |
57 "WORD" : _t(c_uint16), |
58 "LINT" : _t(c_int64), |
61 "LINT" : _t(c_int64), |
59 "ULINT" : _t(c_uint64), |
62 "ULINT" : _t(c_uint64), |
60 "LWORD" : _t(c_uint64), |
63 "LWORD" : _t(c_uint64), |
61 "REAL" : _t(c_float), |
64 "REAL" : _t(c_float), |
62 "LREAL" : _t(c_double), |
65 "LREAL" : _t(c_double), |
63 "TIME" : _t(IEC_TIME, |
66 "TIME" : _ttime(), |
64 lambda x:td(0, x.s, x.ns/1000), |
67 "TOD" : _ttime(), |
65 lambda t,x:t(x.days * 24 * 3600 + x.seconds, x.microseconds*1000)), |
68 "DATE" : _ttime(), |
|
69 "DT" : _ttime(), |
66 } |
70 } |
67 |
71 |
68 SwapedEndianessTypeTranslator = { |
72 SwapedEndianessTypeTranslator = { |
69 #TODO |
73 #TODO |
70 } |
74 } |