37 if(dsc->type != UNKNOWN_ENUM) |
37 if(dsc->type != UNKNOWN_ENUM) |
38 (*fp)(dsc); |
38 (*fp)(dsc); |
39 } |
39 } |
40 } |
40 } |
41 |
41 |
42 /* TODO : deduplicate that code with plc_debug.c */ |
42 #define __Unpack_desc_type hmi_tree_item_t |
43 |
43 |
44 #define __Unpack_case_t(TYPENAME) \ |
44 %(var_access_code)s |
45 case TYPENAME##_ENUM :\ |
|
46 *flags = ((__IEC_##TYPENAME##_t *)varp)->flags;\ |
|
47 forced_value_p = *real_value_p = &((__IEC_##TYPENAME##_t *)varp)->value;\ |
|
48 break; |
|
49 |
|
50 #define __Unpack_case_p(TYPENAME)\ |
|
51 case TYPENAME##_O_ENUM :\ |
|
52 *flags = __IEC_OUTPUT_FLAG;\ |
|
53 case TYPENAME##_P_ENUM :\ |
|
54 *flags |= ((__IEC_##TYPENAME##_p *)varp)->flags;\ |
|
55 *real_value_p = ((__IEC_##TYPENAME##_p *)varp)->value;\ |
|
56 forced_value_p = &((__IEC_##TYPENAME##_p *)varp)->fvalue;\ |
|
57 break; |
|
58 |
|
59 static void* UnpackVar(hmi_tree_item_t *dsc, void **real_value_p, char *flags) |
|
60 { |
|
61 void *varp = dsc->ptr; |
|
62 void *forced_value_p = NULL; |
|
63 *flags = 0; |
|
64 /* find data to copy*/ |
|
65 switch(dsc->type){ |
|
66 __ANY(__Unpack_case_t) |
|
67 __ANY(__Unpack_case_p) |
|
68 default: |
|
69 break; |
|
70 } |
|
71 if (*flags & __IEC_FORCE_FLAG) |
|
72 return forced_value_p; |
|
73 return *real_value_p; |
|
74 } |
|
75 |
45 |
76 void write_iterator(hmi_tree_item_t *dsc) |
46 void write_iterator(hmi_tree_item_t *dsc) |
77 { |
47 { |
78 void *dest_p = &wbuf[dsc->buf_index]; |
48 void *dest_p = &wbuf[dsc->buf_index]; |
79 void *real_value_p = NULL; |
49 void *real_value_p = NULL; |