svghmi/svghmi.c
branchsvghmi
changeset 2826 1e5abecc3cde
parent 2822 9101a72a1da0
child 2828 be947a338760
equal deleted inserted replaced
2825:b4b69e85ed53 2826:1e5abecc3cde
   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;