# HG changeset patch # User Edouard Tisserant # Date 1578996566 -3600 # Node ID 1e5abecc3cdef481a43c47d5de180e34c27ecf05 # Parent b4b69e85ed530a6668c5eb236caac6c9d9f113e6 SVGHMI : support for HMI_STRING and HMI_BOOL diff -r b4b69e85ed53 -r 1e5abecc3cde svghmi/gen_index_xhtml.xslt --- a/svghmi/gen_index_xhtml.xslt Tue Jan 14 11:04:18 2020 +0100 +++ b/svghmi/gen_index_xhtml.xslt Tue Jan 14 11:09:26 2020 +0100 @@ -444,11 +444,27 @@ const dvgetters = { - INT: [DataView.prototype.getInt16, 2], - - BOOL: [DataView.prototype.getInt8, 1] - - /* TODO */ + INT: (dv,offset) => [dv.getInt16(offset, true), 2], + + BOOL: (dv,offset) => [dv.getInt8(offset, true), 1], + + STRING: (dv, offset) => { + + size = dv.getInt8(offset); + + return [ + + String.fromCharCode.apply(null, new Uint8Array( + + dv.buffer, /* original buffer */ + + offset + 1, /* string starts after size*/ + + size /* size of string */ + + )), size + 1]; /* total increment */ + + } }; @@ -492,9 +508,9 @@ if(iectype != undefined){ - let [dvgetter, bytesize] = dvgetters[iectype]; - - let value = dvgetter.call(dv,i,true); + let dvgetter = dvgetters[iectype]; + + let [value, bytesize] = dvgetter(dv,i); dispatch_value(index, value); diff -r b4b69e85ed53 -r 1e5abecc3cde svghmi/svghmi.c --- a/svghmi/svghmi.c Tue Jan 14 11:04:18 2020 +0100 +++ b/svghmi/svghmi.c Tue Jan 14 11:09:26 2020 +0100 @@ -102,6 +102,9 @@ /* if new value differs from previous one */ USINT sz = __get_type_enum_size(dsc->type); + if(__Is_a_string(dsc)){ + sz = ((STRING*)visible_value_p)->len + 1; + } if(dsc->wstate == buf_new || memcmp(dest_p, visible_value_p, sz) != 0){ /* copy and flag as set */ memcpy(dest_p, visible_value_p, sz); @@ -133,6 +136,9 @@ { void *src_p = &wbuf[dsc->buf_index]; void *dst_p = &sbuf[sbufidx]; + if(__Is_a_string(dsc)){ + sz = ((STRING*)src_p)->len + 1; + } /* TODO : force into little endian */ memcpy(dst_p, &index, sizeof(uint32_t)); memcpy(dst_p + sizeof(uint32_t), src_p, sz); diff -r b4b69e85ed53 -r 1e5abecc3cde svghmi/svghmi.js --- a/svghmi/svghmi.js Tue Jan 14 11:04:18 2020 +0100 +++ b/svghmi/svghmi.js Tue Jan 14 11:09:26 2020 +0100 @@ -46,9 +46,17 @@ ws.binaryType = 'arraybuffer'; const dvgetters = { - INT: [DataView.prototype.getInt16, 2], - BOOL: [DataView.prototype.getInt8, 1] - /* TODO */ + INT: (dv,offset) => [dv.getInt16(offset, true), 2], + BOOL: (dv,offset) => [dv.getInt8(offset, true), 1], + STRING: (dv, offset) => { + size = dv.getInt8(offset); + return [ + String.fromCharCode.apply(null, new Uint8Array( + dv.buffer, /* original buffer */ + offset + 1, /* string starts after size*/ + size /* size of string */ + )), size + 1]; /* total increment */ + } }; // Register message reception handler @@ -70,8 +78,8 @@ i += 4; let iectype = hmitree_types[index]; if(iectype != undefined){ - let [dvgetter, bytesize] = dvgetters[iectype]; - let value = dvgetter.call(dv,i,true); + let dvgetter = dvgetters[iectype]; + let [value, bytesize] = dvgetter(dv,i); dispatch_value(index, value); i += bytesize; } else { diff -r b4b69e85ed53 -r 1e5abecc3cde svghmi/svghmi.py --- a/svghmi/svghmi.py Tue Jan 14 11:04:18 2020 +0100 +++ b/svghmi/svghmi.py Tue Jan 14 11:09:26 2020 +0100 @@ -35,7 +35,7 @@ "HMI_NODE":{}, "HMI_STRING":{}, "HMI_INT":{}, - "HMI_REAL":{} + "HMI_BOOL":{} } HMI_TYPES = HMI_TYPES_DESC.keys() diff -r b4b69e85ed53 -r 1e5abecc3cde tests/svghmi/plc.xml --- a/tests/svghmi/plc.xml Tue Jan 14 11:04:18 2020 +0100 +++ b/tests/svghmi/plc.xml Tue Jan 14 11:09:26 2020 +0100 @@ -1,7 +1,7 @@ - + @@ -87,6 +87,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -224,7 +250,7 @@ - + @@ -239,12 +265,234 @@ - + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + strout + + + + + + + TargetPressure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + strin + + + + + + + boolin + + + + + + + + + + + boolout + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pressure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + diff -r b4b69e85ed53 -r 1e5abecc3cde tests/svghmi/svghmi_0@svghmi/svghmi.svg --- a/tests/svghmi/svghmi_0@svghmi/svghmi.svg Tue Jan 14 11:04:18 2020 +0100 +++ b/tests/svghmi/svghmi_0@svghmi/svghmi.svg Tue Jan 14 11:09:26 2020 +0100 @@ -116,14 +116,14 @@ inkscape:current-layer="hmi0" showgrid="false" units="px" - inkscape:zoom="0.8046875" - inkscape:cx="959.69683" - inkscape:cy="656.6094" - inkscape:window-width="1600" - inkscape:window-height="886" + inkscape:zoom="1.2321777" + inkscape:cx="398.68209" + inkscape:cy="328.86048" + inkscape:window-width="1920" + inkscape:window-height="2105" inkscape:window-x="0" inkscape:window-y="27" - inkscape:window-maximized="1" + inkscape:window-maximized="0" showguides="true" inkscape:guide-bbox="true" /> 8888 + 8888 + 8888