21 """ |
21 """ |
22 _fields_ = [("s", c_long), # tv_sec |
22 _fields_ = [("s", c_long), # tv_sec |
23 ("ns", c_long)] # tv_nsec |
23 ("ns", c_long)] # tv_nsec |
24 |
24 |
25 |
25 |
26 def _t(t, u=lambda x: x.contents, p=lambda t, x: t(x)): |
26 def _t(t, u=lambda x: x.value, p=lambda t, x: t(x)): |
27 return (t, u, p) |
27 return (t, u, p) |
28 |
28 |
29 |
29 |
30 def _ttime(): |
30 def _ttime(): |
31 return (IEC_TIME, |
31 return (IEC_TIME, |
32 lambda x: td(0, x.contents.s, x.contents.ns/1000.0), |
32 lambda x: td(0, x.s, x.ns/1000.0), |
33 lambda t, x: t(x.days * 24 * 3600 + x.seconds, x.microseconds*1000)) |
33 lambda t, x: t(x.days * 24 * 3600 + x.seconds, x.microseconds*1000)) |
34 |
34 |
35 |
35 |
36 SameEndianessTypeTranslator = { |
36 SameEndianessTypeTranslator = { |
37 "BOOL": _t(c_uint8, lambda x: bool(x.contents)), |
37 "BOOL": _t(c_uint8, lambda x: bool(x.value)), |
38 "STEP": _t(c_uint8), |
38 "STEP": _t(c_uint8), |
39 "TRANSITION": _t(c_uint8), |
39 "TRANSITION": _t(c_uint8), |
40 "ACTION": _t(c_uint8), |
40 "ACTION": _t(c_uint8), |
41 "SINT": _t(c_int8), |
41 "SINT": _t(c_int8), |
42 "USINT": _t(c_uint8), |
42 "USINT": _t(c_uint8), |
43 "BYTE": _t(c_uint8), |
43 "BYTE": _t(c_uint8), |
44 "STRING": (IEC_STRING, |
44 "STRING": (IEC_STRING, |
45 lambda x: x.contents.body[:x.contents.len], |
45 lambda x: x.body[:x.len], |
46 lambda t, x: t(len(x), x)), |
46 lambda t, x: t(len(x), x)), |
47 "INT": _t(c_int16), |
47 "INT": _t(c_int16), |
48 "UINT": _t(c_uint16), |
48 "UINT": _t(c_uint16), |
49 "WORD": _t(c_uint16), |
49 "WORD": _t(c_uint16), |
50 "DINT": _t(c_int32), |
50 "DINT": _t(c_int32), |