svghmi/svghmi.c
branchsvghmi
changeset 2767 302347f48193
parent 2766 3f3b1b8ccba4
child 2768 31785529a657
equal deleted inserted replaced
2766:3f3b1b8ccba4 2767:302347f48193
    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;