equal
deleted
inserted
replaced
100 char flags = 0; |
100 char flags = 0; |
101 void *visible_value_p = UnpackVar(dsc, &real_value_p, &flags); |
101 void *visible_value_p = UnpackVar(dsc, &real_value_p, &flags); |
102 |
102 |
103 /* if new value differs from previous one */ |
103 /* if new value differs from previous one */ |
104 USINT sz = __get_type_enum_size(dsc->type); |
104 USINT sz = __get_type_enum_size(dsc->type); |
|
105 if(__Is_a_string(dsc)){ |
|
106 sz = ((STRING*)visible_value_p)->len + 1; |
|
107 } |
105 if(dsc->wstate == buf_new || memcmp(dest_p, visible_value_p, sz) != 0){ |
108 if(dsc->wstate == buf_new || memcmp(dest_p, visible_value_p, sz) != 0){ |
106 /* copy and flag as set */ |
109 /* copy and flag as set */ |
107 memcpy(dest_p, visible_value_p, sz); |
110 memcpy(dest_p, visible_value_p, sz); |
108 if(dsc->wstate == buf_new || dsc->wstate == buf_free) { |
111 if(dsc->wstate == buf_new || dsc->wstate == buf_free) { |
109 if(dsc->wstate == buf_new || ticktime_ms > dsc->refresh_period_ms){ |
112 if(dsc->wstate == buf_new || ticktime_ms > dsc->refresh_period_ms){ |
131 uint32_t sz = __get_type_enum_size(dsc->type); |
134 uint32_t sz = __get_type_enum_size(dsc->type); |
132 if(sbufidx + sizeof(uint32_t) + sz <= sizeof(sbuf)) |
135 if(sbufidx + sizeof(uint32_t) + sz <= sizeof(sbuf)) |
133 { |
136 { |
134 void *src_p = &wbuf[dsc->buf_index]; |
137 void *src_p = &wbuf[dsc->buf_index]; |
135 void *dst_p = &sbuf[sbufidx]; |
138 void *dst_p = &sbuf[sbufidx]; |
|
139 if(__Is_a_string(dsc)){ |
|
140 sz = ((STRING*)src_p)->len + 1; |
|
141 } |
136 /* TODO : force into little endian */ |
142 /* TODO : force into little endian */ |
137 memcpy(dst_p, &index, sizeof(uint32_t)); |
143 memcpy(dst_p, &index, sizeof(uint32_t)); |
138 memcpy(dst_p + sizeof(uint32_t), src_p, sz); |
144 memcpy(dst_p + sizeof(uint32_t), src_p, sz); |
139 dsc->wstate = buf_free; |
145 dsc->wstate = buf_free; |
140 sbufidx += sizeof(uint32_t) /* index */ + sz; |
146 sbufidx += sizeof(uint32_t) /* index */ + sz; |